체인의정석

ethers에서 함수를 못찾을 때 , 오버로딩 문제 체크해 보기 본문

블록체인/Ethers & web3

ethers에서 함수를 못찾을 때 , 오버로딩 문제 체크해 보기

체인의정석 2023. 5. 23. 11:08
728x90
반응형

TypeError: 컨트렉트이름.함수 is not a function

위와 같은 에러가 난다면?

 

위에처럼 ethers에서 함수를 못 찾을 때는 일단 abi 부터 체크해 보아야 한다.

먼저 컨트렉트와 상호작용한 변수를 만들어 주면

    const exampleContract = await ethers.getContractAt("exampleContract", exampleContractAddress);

이런식으로 변수를 만들어 준 후에

 console.log(exampleContract.functions);

해당 변수에 담겨있는 함수들 리스트를 가져와서 내가 사용하려는 함수가 있는지 확인해 본다.

근데 만약 다시 컴파일도 하고 함수이름까지 있는데 인식이 안된다면?

 

이건 오버로딩 문제일 수도 있다.

ethers에서 소통하는 컨트렉트가 인자값이 1개인 함수, 2개인 함수가 있다고 했을 때

두 함수 중 어떤 걸 사용해 주어야 할지 명시해야 한다.

const tokenPrice = await tokenContract["examplefunction(address)"](input);
const tokenPriceV2 = await tokenContract["examplefunction(address,string)"](input,"input2");

이런식으로 examplefuntion이 같은 이름으로 2개가 정의가 되어 있고 입력 값의 개수만 다를 경우

오버로딩이 된 상황인데

이러한 경우 일반적인 호출을 하게 되면 함수를 인식하지 못하게 된다.

따라서 오버로딩 된 함수들 중 어떤 함수를 사용할 지 위와 같이 지정해서 사용해 주어야 한다.

728x90
반응형
Comments