Import "@klaytn/contracts/token/KIP7/KIP7Token.sol"; Not found 에러

@klaytn/contracts”: “^0.9.0”, 의존성을 가진 토큰 컨트렉트를 불러오려고 합니다.

IDE에서 코드를 불러오니

import “@klaytn/contracts/token/KIP7/KIP7Token.sol”; 부분에서 Error: Not found를 리턴합니다.

포럼에 해당 이슈에 대해 컨트렉트 디렉터리가 변경됐다, 다른 곳을 찾아보라는 내용이 몇 개 있어서 시도해봤지만 제대로 작동하지 못하는 것 같습니다. 어떤 식으로 변경하면 될지 문의드립니다.

안녕하세요 아래 레포 참고하셔서 수정하시면 될 것 같습니다.

pragma solidity ^0.8.0;

import "@klaytn/contracts/KIP/token/KIP17/KIP17.sol";

contract MyCollectible is KIP17 {
    constructor() KIP17("MyCollectible", "MCO") {
    }
}

답변 감사합니다.

링크를 확인해서 코드를 조금 수정해봤는데도 정확히 해결이 되지 않아 그런데 어떤 식으로 해결이 될 수 있는지 문의드려도 될까요? 코드를 그대로 유지하면서 이미 배포된 컨트렉트에 접근해야 버그가 발생하지 않을 것 같은데 위와 같이 컨스트럭트를 붙이거나 하면 작동이 될까 의문입니다.

안녕하세요, 다음 path로 설정해보시겠어요?

import "@klaytn/contracts/KIP/token/KIP7/KIP7.sol";

만약 새로 KIP7 토큰을 배포하는 것이 아닌, 이미 배포되어있는 KIP7 토큰의 인터페이스를 사용하고 싶으시다면 (approve, transferFrom 등), IKIP7.sol을 import하셔서 사용하시면 될 것 같습니다.

예시

`import "@klaytn/contracts/KIP/token/KIP7/IKIP7.sol";`

contract myContract {

  IKIP7 public token;

  constructor(address _tokenAddress) {
    token = IKIP7(_tokenAddress);
  }

  function checkBalance(address _user) public view returns (uint256) {
    return token.balanceOf(_user);
  }
}

다음과 같이 해보시고 안되시는 부분 있으시면 말씀부탁드립니다.

감사합니다.

답변 감사합니다. 위에 알려주신 방향으로 진행해보니 버전 차이가 있어서 작동이 안되는 것 같습니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.5.4;

를 사용하고 있는데 해당 코드로 수정했을 때 다음의 에러가 리턴됩니다.

@klaytn/contracts/KIP/token/KIP7/IKIP7.sol:6:1: ParserError: Source file requires different compiler version (current compiler is 0.5.17+commit.d19bba13.Emscripten.clang - note that nightly builds are considered to be strictly less than the released version
pragma solidity ^0.8.0;
^---------------------^

pragma solidity ^0.8.0; 코드를 적용하면 이미 작성된 컨트렉트의 다른 코드와 충돌하게 됩니다.
어떻게 해결이 가능할까요?

안녕하세요, solidity 0.5.4 버전을 반드시 사용해야 할 이유가 없다면, 개발 중이신 컨트랙트의 solidity 버전 업데이트를 하시는 것을 추천드립니다.

만약 버전 업데이트를 하기가 어려우시다면, 직접 0.5.X 버전의 KIP contract를 로컬로 가져오신 후 import하시기 바랍니다.

File structure example:

/contracts
    /KIPContract
        /IKIP7.sol // IKIP7 solidity file with 0.5.X
    /MyContract
        /SampleContract.sol
// in SampleContract.sol
import "../KIPContract/IKIP7.sol"

...

위 예시처럼 로컬에서 IKIP7 인터페이스를 사용하실 수 있습니다. (버전 다운은 직접 진행하셔야 합니다. 아마 IKIP7의 일부 함수 input의 memory → calldata 수정이 필요할 것 같습니다.)

다만 위에서 말씀드렸듯 0.5.x 버전을 반드시 사용해야하는 것이 아니라면, 전체적으로 코드 업데이트를 진행하시길 추천드립니다.

감사합니다.