체인의정석

ethers를 사용하여 이미 배포된 컨트렉트에 연결하여 트랜잭션 보내기 본문

블록체인/Ethers & web3

ethers를 사용하여 이미 배포된 컨트렉트에 연결하여 트랜잭션 보내기

체인의정석 2022. 2. 18. 22:01
728x90
반응형

인터넷을 찾아보니 예시가 모두 컨트렉트 팩토리를 써서 배포부터 트랜잭션을 보내는 예제만 있었다.

 

근데 실제로 프로덕트를 만드려면 당연히 배포된 컨트렉트에 상호작용을 해야하는데

 

contractFactory.attach("CA주소") 이런식으로 써도.

배포된 상황에서만 붙지 그냥은 되지 않았다.

 

https://ethereum.stackexchange.com/questions/95023/hardhat-how-to-interact-with-a-deployed-contract

 

Hardhat - How to interact with a deployed contract?

I can deploy a contract using ethers and Hardhat with the following: const myContract = await hre.ethers.getContractFactory("SomeContract"); const deployedContract = await myContract.depl...

ethereum.stackexchange.com

위 글에 있는걸 모두 시도하고 실패한 후에 

 

그냥 web3 했을 때처럼 해보자 하고 공식문서를 다시 찾아봤다.

https://docs.ethers.io/v5/migration/web3/

 

Migration: From Web3.js

Documentation for ethers, a complete, tiny and simple Ethereum library.

docs.ethers.io

내가 원했던건 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

위의 순서대로 진행하면 정상적으로 이미 배포된 컨트렉트와 상호작용이 가능하다.

728x90
반응형
Comments