this contract may be abstract not implement an abstract parent's methods completely or not invoke an inherited contract's constructor correctly

오동재·2022년 6월 11일

error

KIP17 스마트컨트랙트를 수정하고 deploy하려고 했는데 다음과 같은 에러가 떴다.
이유는 생각보다 간단했는데 KIP17Metadata에서 메타데이터의 각 요소를 호출하는 함수의 이름이 IKIP17Metadata에서 정의된 함수의 이름과 같지 않아서 발생한 오류였다.

KIP17Metadata와 IKIP17Metadata의 함수이름을 통일시켜줌으로써 해결했다.

예를 들어 IKIP17Metadata이 아래와 같다면

contract IKIP17Metadata is IKIP17 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function ticketName(uint256 tokenId) external view returns (string memory);
}

KIP17Metadata는 아래와 같아야 한다.

contract KIP17Metadata is KIP13, KIP17, IKIP17Metadata {

	    mapping(uint256 => string) private _ticketNames;
        
        function ticketName(uint256 tokenId) external view returns (string memory) {
          require(
              _exists(tokenId),
              "KIP17Metadata: URI query for nonexistent token"
          );
          return _ticketNames[tokenId];
    }
}

나같은 경우는 ticketName을 getTicketName으로 작성했어서 발생한 오류였고 이를 통일시켜주니 문제없이 작동하였다 ㅎㅎ

profile
https://donggni0712.tistory.com 로 이사했습니다~

0개의 댓글