안녕하세요, KIP17 컨트랙트를 이용해 NFT 관련 프로젝트를 진행하는 도중 이슈가 있어서 질문 드립니다.
현재 제가 작성한 스마트 컨트랙트 두 개의 주요 내용은 다음과 같습니다.
contract NFTManager{
NFTToken public minter;
NFTToken [] public minters;
address owner;
mapping (address => NFTToken ) public nftManager;
constructor() public {
owner = msg.sender;
}
function mintNewToken(string memory _name, string memory _symbol) public returns (address){
minter = new NFTToken(owner, nameNFT, symbolNFT);
minters.push(minter);
nftManager[msg.sender] = minter;
}
function mint(uint _tokenNum, address payable minterAddress) public payable {
nftManager[minterAddress].mint.value(msg.value)(_tokenNum, minterAddress);
}
위 컨트랙트에서 KIP17을 상속받는 NFT 발행용 컨트랙트(NFTToken)를 아래와 같이 생성합니다.
pragma solidity ^0.5.6;
import "@klaytn/contracts/token/KIP17/KIP17Metadata.sol";
import "@klaytn/contracts/token/KIP17/KIP17.sol";
contract NFTToken is KIP17, KIP17Metadata{
address owner;
string public name;
string public symbol;
//생성자가 KIP17Metadata를 생성하는 부분은 KIP17Full을 참고하여 넣었습니다.
constructor(address _owner, string memory _name, string memory _symbol) KIP17Metadata(_name, _symbol) public {
owner = _owner;
}
function mint(uint _tokenNum, address payable minteAddress) public payable {
_mint(msg.sender, _tokenNum);
_setTokenURI(_tokenNum, tokenUriStore[_tokenNum]);
}
위와 같이 작성하면 deploy까지 문제없이 되지만, 웹에서 kaikas를 통해 mint함수를 호출하면 revert가 납니다.
원래 KIP17Full을 상속받아 구현하려고 했습니다만, KIP17Full이나 KIP17Token으로 아래와 같이 스마트컨트랙트를 작성하면 아래와 같이 에러가 뜹니다.
pragma solidity ^0.5.6;
import "@klaytn/contracts/token/KIP17/KIP17Full.sol";
contract NFTToken is KIP17Full{
address owner;
string public name;
string public symbol;
constructor(address _owner, string memory _name, string memory _symbol) KIP17Full(_name, _symbol) public {
owner = _owner;
}
function mint(uint _tokenNum, address payable minteAddress) public payable {
_mint(msg.sender, _tokenNum);
_setTokenURI(_tokenNum, tokenUriStore[_tokenNum]);
}
_setTokenURI()가 KIP17Metadata에, _mint()가 KIP17에 존재하고, KIP17Full이 두 컨트랙트를 상속받아 만들어져있기 때문에 그대로 사용하면 되겠다싶어서 사용했습니다만, 저 에러가 도저히 해결이 안되서 KIP17과 KIP17Metadata를 KIP17Full처럼 상속받아 만들었습니다만, _mint()만 호출이 되지 않는 상황입니다.
지난 번에 비슷한 질문을 올렸습니다만, 당시에 올려주신 예제는 KIP17Token을 사용하는 방법이었는데 KIP17Token의 경우에도 같은 revert가 발생합니다.
해결 방법이 있을까요?