체인의정석

hardhat 트랜잭션 테스트 코드 본문

블록체인/Ethers & web3

hardhat 트랜잭션 테스트 코드

체인의정석 2022. 2. 15. 13:38
728x90
반응형

만약 로컬테스트에서는 통과를 했는데 메인넷 테스트에서 실패를 한다면?

함수를 실행하고 조회하기까지 어느정도의 시간을 넣어주어야 에러가 안 나는 경우도 있다.

  await bridge.setCustody(erc721Custody.address,tokenType721);
  await delay(15000);
  console.log("getCustody address",await bridge.typeToCustody(tokenType721));
  
  function delay(ms: number) {
  return new Promise( resolve => setTimeout(resolve, ms) );
}

위와 같이

setCustody 함수를 실행하자마자 바로 그 결과값을 확인한다면 결과 값이 반영이 되기 전이라 조회가 잘못 될 수도 있다.

따라서 블록의 확정 시간을 고려하여서 시간을 잠깐 두고 나서 조회를 해야 한다.

 

함수가 쓰는 행위의 경우 동기화가 되면 차례대로 진행되지만

실제 네트워크에서 쓰자마자 값을 확인하는 행위를  체크하기 위해서는 위와 같이 어느정도의 장부에 반영되는 시간을 마련해 두는것도 필요한 것같다. 하지만 위와 같이 timeout을 주는것 대신 동기화를 해주어야 제대로 된 코드이다.

  const setCustodyTx = await bridge.setCustody(erc721Custody.address,tokenType721);
  await setCustodyTx.wait();
  console.log("getCustody address",await bridge.typeToCustody(tokenType721));

다음과 같이 custody를 tx로 정의한 후 동기화를 시켜주면 깔끔하게 해결이 된다.

728x90
반응형
Comments