참고> 공식 klaytn github repository
npm install -g truffle@5.1.23
mkdir <project_name>
cd <project_name>
truffle init
npm install @klaytn/contracts
주의) 위 명령어를 실행하면 klaytn-contracts 파일들이 다 받아져야 하나 업데이트를 안한건지 ownership/Ownable.sol 파일이 존재하지 않는다. 맨 위에 올려둔 공식 klaytn github repository의 contract 코드로 통째로 교체함. (ownership/Ownable.sol 만 추가 할 경우 다른 코드에 적용 되어 있는 부분까지 찾아서 바꿔줘야함)
contract 폴더 안에 작성
pragma solidity 0.5.6;
import "@klaytn/contracts/token/KIP17/KIP17Full.sol";
import "@klaytn/contracts/drafts/Counters.sol";
import "@klaytn/contracts/ownership/Ownable.sol";
contract MyNFTs is KIP17Full, Ownable {
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
constructor() public KIP17Full("MyNFTs", "MNFT") {}
function mintNFT(string memory tokenURI)
public onlyOwner
returns (uint256)
{
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
_mint(msg.sender, newItemId);
_setTokenURI(newItemId, tokenURI);
return newItemId;
}
}
const MyNFTs = artifacts.require('MyNFTs.sol'); // MyNFTs.sol 파일 추가
module.exports = function(deployer) {
deployer.deploy(MyNFTs); // MyNFTs를 배포에 추가
};
ganache 의 default port는 7545
ganache-cli 의 default port는 8545
- klaytn은 이더리움 기반이기에 ganache 사용 가능(코인표시는 ETH로 표현됨)
networks: {
ganache: { // 이름은 구별하기 쉽게 작성
host: "127.0.0.1",
port: 7545, // ganache-cli 에 연결한다면 8545
network_id: "*", // Any network (default: none)
},
},
// Configure your compilers
compilers: {
solc: {
version: "0.5.6",
settings: {
evmVersion: "constantinople",
},
},
},
truffle migrate --compile-all --network ganache
truffle console --network ganache
MyNFTs.deployed() 함수를 통해 MyNFTs 컨트랙트에 접근할 수 있다
truffle 이 배포한 MyNFTs 를 알 수 있는 방법 (log로 가지고 있다) (참고)
mintNFT 에 준비된 링크를 전달 (일반적으로 NFT는 그림파일의 경로를 담은 metadata의 경로를 넣어준다)
참고>OpenSea Metadata 구조
instance.mintNFT("https://velog.io/@repedore")
instance.tokenURI(1)
필수>Truffle과 Klaytn TestNet 연결하기 (feat. baobab)
truffle console --network baobab
instance = await MyNFTs.deployed()
instance.name() // 잘 불러왔나 확인
instance.mintNFT('https://opensea-creatures-api.herokuapp.com/api/creature/3')
OpenSea 확인
baobab - Contract 주소(위와 동일)
baobab - TX 주소
Klaytn 이 Ethereum 기반이라 많은 부분이 비슷하여 진행을 수월하게 했다.
klaytn 부분을 정리하면서 Ethereum 방식으로 반복하다보니 truffle 에 더 익숙해진것 같다.
사실 다 하고 나서 생각해보면 비슷한게 아니라 모든게 같았다.
근데 난 이렇게 블로깅으로 정리 하기 전까지 완벽하게 같은 방식으로 할 수 있을거라고 생각을 못했다.
아마 경험이랑 개념이 부족해서 그런것 같다.
그래도 작은 기준을 세웠으니 이걸 바탕으로 더 많은 확장을 이뤄내보자.
PS)아.. klaytn contract code verify 는 구글 폼으로 받는것 같은데....... 왜이렇게 하는건지는 잘 모르겠지만... 그래도 하는방법을 알아봐야 할 것 같다.