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일
1

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으로 작성했어서 발생한 오류였고 이를 통일시켜주니 문제없이 작동하였다 ㅎㅎ

0개의 댓글