일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 컨트렉트 동일한 함수이름 호출
- 프록시배포구조
- 러스트 기초 학습
- ethers
- 체인의정석
- 머신러닝기초
- 러스트 기초
- Vue.js
- git rebase
- 컨트렉트 배포 자동화
- 스마트컨트렉트프록시
- multicall
- ethers typescript
- chainlink 설명
- 스마트컨트렉트 함수이름 중복 호출
- Vue
- 러스트기초
- ethers v6
- nest.js설명
- vue기초
- 스마트컨트렉트 예약어 함수이름 중복
- ethers websocket
- 스마트 컨트렉트 함수이름 중복
- ethers type
- 깃허브명령어
- SBT표준
- 스마트컨트렉트테스트
- ambiguous function description
- nestjs 튜토리얼
- rust 기초
- Today
- Total
체인의정석
ethers를 사용하여 이미 배포된 컨트렉트에 연결하여 트랜잭션 보내기 본문
인터넷을 찾아보니 예시가 모두 컨트렉트 팩토리를 써서 배포부터 트랜잭션을 보내는 예제만 있었다.
근데 실제로 프로덕트를 만드려면 당연히 배포된 컨트렉트에 상호작용을 해야하는데
contractFactory.attach("CA주소") 이런식으로 써도.
배포된 상황에서만 붙지 그냥은 되지 않았다.
https://ethereum.stackexchange.com/questions/95023/hardhat-how-to-interact-with-a-deployed-contract
위 글에 있는걸 모두 시도하고 실패한 후에
그냥 web3 했을 때처럼 해보자 하고 공식문서를 다시 찾아봤다.
https://docs.ethers.io/v5/migration/web3/
내가 원했던건 web3에서 migration 하는법에 있었다.
이것도 하나의 교훈이 되었는데, 원래 쓰던 모듈을 새로운 모듈로 구현할때는 그냥 마이그레이션 문서를 보는게 더 나을수도 있겠다 싶엇다. 블록체인쪽은 역시 공식문서만이 답인것 같다.
아무튼 그래서 이미 배포된 컨트렉트에 트랜잭션을 보내는 법은 다음과 같다.
//토큰 mint
const erc721 = new ethers.Contract(
'0xD353C3C596BeDb8CeC41c79BfCB9449049654d61', //erc721 주소
ExampleERC721Abi,
ethersProvider.getSigner(),
);
const tx = await bridge.mint(
'0x18c450C2D05651459686e25B4a903133ab8deDDC', //to 주소
5, //토큰 Id 한개씩 늘려가면서 민트가능
);
// wait for the transaction to be mined
const receipt = await tx.wait();
console.log('receipt >>', receipt);
일반적인 NFT의 민팅이다.
위의 코드처럼 컨트렉트 객체를 만들어주고 tx 변수에 await를 걸어준 후 리십트를 받아오면 되는데 web3보다 훨씬 간결한것 같다.
// We must specify the network as 'any' for ethers to allow network changes
ethersProvider = new ethers.providers.Web3Provider(window.ethereum, 'any');
위에 ethersProvider.getSinger()를 하는 것은 위에 있는 메타마스크에서 사인을 받아오는 것이다.
위의 방식에 대한 정리를 하자면 아래와 같이 정리가 된다.
new. ethers.Contract( “컨트렉트 주소“, abi, signer) => 컨트렉트 객체생성
컨트렉트 객체에 넣은 abi에 해당하는 함수 중 하나 지정하여 호출 가능 (approve, mint, deposit, withdraw)
해당 함수가 처리될때까지 대기 (tx 변수로 두고 await)
처리가되어 나온 응답값이 receipt
위의 순서대로 진행하면 정상적으로 이미 배포된 컨트렉트와 상호작용이 가능하다.
'블록체인 > Ethers & web3' 카테고리의 다른 글
hardhat에서 스마트컨트렉트 console 찍기 (0) | 2022.02.22 |
---|---|
ether.js에서 0으로 들어가는 주소 및 값 테스트 하기 (0) | 2022.02.21 |
스마트컨트렉트 배포 시 hardhat etherscan verify 로직 추가 (0) | 2022.02.15 |
hardhat 트랜잭션 테스트 코드 (0) | 2022.02.15 |
ether.js에서 abi encode 하기 (0) | 2022.02.14 |