체인의정석

ether.js에서 0으로 들어가는 주소 및 값 테스트 하기 본문

블록체인/Ethers & web3

ether.js에서 0으로 들어가는 주소 및 값 테스트 하기

체인의정석 2022. 2. 21. 15:00
728x90
반응형

테스트 코드에서는 잘못된 값을 넣었을 때 실패를 반환하는지를 체크해서 알려주어야 한다.

ethers.constants.AddressZero //0x0000 형태의 주소

일단 위와 같은 제로 address의 경우 스마트컨트렉트 오딧을 받게 되면 항상 막아야 한다고 나오게 된다.

제로 address를 막는 이유는 빈값이 들어왔을 때 이를 막기 위함이 아닐까 싶다. 

아무튼 주소값이 입력값으로 들어오는 경우면 위의 Addresszero를 사용하여 해당 값을 넣었을 때 false 값을 반환하는지에 대한 여부를 항상 체크해 주어야 한다.

 

이 외에도 bytes32형태로 값을 넣는 경우가 종종 있다. 이벤트 구독형 기능을 사용하거나 하나의 컨트렉트에 여러 세부 모듈을 다룰 때 이를 많이 사용하는데

  const zero32byte = ethers.utils.hexZeroPad("0x0", 32)

위와 같이 0x00으로 zeroPad를 사용하여 32자리수를 모두 0x00으로 만들어 버릴 수 있다.

 

이러한 값을 사용하여 예외처리를 하는 테스트코드는 아래와 같다.

        it("[Ethereum]Should revert if originToken address is zero", async () => {
          await expect(bridge.mapToken(ethers.constants.AddressZero,werc721Luni.address,tokenType721)).to.be.revertedWith(
            "Bridge: mapToken from the zero address"
          );
        })
        it("[Ethereum]Should revert if wrappedToken address is zero", async () => {
          await expect(bridge.mapToken(exampleERC721.address,ethers.constants.AddressZero,tokenType721)).to.be.revertedWith(
            "Bridge: mapToken to the zero address"
          );
        })

위와 같이 0x000에 대한 주소처리를 체크하는 부분의 테스트코드를 작성하면 된다.

 

스마트컨트렉트는 너무나도 중요하기 때문에 이런식으로 테스트코드는 최대한 자세히 작성해야 하고 하나씩 추가될 때마다 오류를 고쳐가며 테스트 코드를 하나씩 완성시켜나가야한다.

728x90
반응형
Comments