체인의정석

smart contract에서 동일한 함수 이름이나 예약어가 있을 경우 본문

블록체인/퍼블릭 블록체인

smart contract에서 동일한 함수 이름이나 예약어가 있을 경우

체인의정석 2024. 9. 30. 14:22
728x90
반응형

account abstraction의 기본 예제에서는 getAddress라는 컨트렉트 함수가 있어 ethers.js의 getAddress가 대신 호출되어 오류가 난다. 또한 erc721 기본 예제에서도 함수이름은 동일하나 파라미터 개수만 다른 safeTransferFrom과 같은 함수가 존재한다.

이러한 함수들을 그냥 호출하려고 하면
"TypeError: ambiguous function description (i.e. matches "safeTransferFrom(address,address,uint256)", "safeTransferFrom(address,address,uint256,bytes)") (argument="key", value="safeTransferFrom", code=INVALID_ARGUMENT, version=6.13.2)"

이런 오류가 발생하게 된다.

이러한 경우 직접적으로 해당 ABI를 지정해서 호출해 주면 해결이 된다.

      await expect(NFT["safeTransferFrom(address,address,uint256)"](account1.address, account2.address, 1)).to.be.reverted;
      await expect(NFT["safeTransferFrom(address,address,uint256,bytes)"](account1.address, account2.address, 1, "0x")).to.be.reverted;

이런식으로 NFT라는 contractFactory에 원래는 NFT.safeTranferFrom()을 써서 함수를 호출했다면 해당 케이스에서는 함수명과 변수명을 같이 지정하여 호출해주면 해결 가능하다.

728x90
반응형
Comments