이번 개발에서는 Truffle을 이용해 실제로 NFT개발을 진행하였다.
먼저 정의부터 알고 진행하였다.
Rimix란?
: 브라우저에서 솔리디티 프로그래밍언어를 사용하여 스마트계약 구축을 지원하는 IDE(통합개발환경)이다.
Truffle이란?
:스마트 컨트랙트 개발시 개발, 배포, 테스트 환경을 제공해주는 프레임워크이다.
Openzepplin이란?
: 스마트계약시 개발하는데 도움을 주는 프레임워크이다. ex) erc20, erc721 등 깃헙에서 참고
Ganache이란?
테스트 목적으로 PC에 설치해서 사용할 수 있는 일종의 간이 이더리움 구성이다.
EIP-721, EIP 721번째 토론에서 단 하나의 토큰으로 하나의 토큰으로 추적할 수 있는 토큰 NFT(Non-Fungible Token)라고 한다. (ERC는표준!!)
ERC721은 옵션 확장이 여러 개 있는 ERC20보다 더 복잡한 표준이며 여러 계약으로 분할됩니다. OpenZeppelin 계약은 사용자 정의 유용한 확장과 함께 결합 방법에 대한 유연성을 제공합니다.
npm init
npm install -g truffle
npm install -g ganache-cli
npm install @openzeppelin/contracts
주의사항) 1. node 최신 버전이 아닌 12.16.1로 Truffle과 ganache 설치를 해야 연동이 가능했음.
2. 포트 중복됬을 시에, lsof -PiTCP -sTCP:LISTEN로 port를 확인후 kill -9로 삭제 후 다시 실행
mintNFT 이용
compilers: {
solc: {
version: "0.8.7", // Fetch exact version from solc-bin (default: truffle's version)
evmVersion: "london",
// docker: true, // Use "0.5.1" you've installed locally with docker (default: false)
// settings: { // See the solidity docs for advice about optimization and evmVersion
// optimizer: {
// enabled: false,
// runs: 200
// },
// evmVersion: "byzantium"
// }
},
},
truffle을 이용하기 위한 컨트렉트 양식에 맞게 compilers를 수정하였음
networks: {
ganache: {
host: "127.0.0.1", // 로컬
port: 8545,
network_id: "*",
},
가나슈 버전에 맞게 네트워크 host, port를 설정하고, network id는 모든 id에 권한을 허락하였음
migrations는 배포를 위한 파일로 그안에 migrations/1_initital_migration.js에 개발한 컨트렉트 배포를 설정해야함
const Migrations = artifacts.require("Migrations");
const MyNFTs = artifacts.require("MyNFTs.sol");
module.exports = function (deployer) {
deployer.deploy(Migrations);
deployer.deploy(MyNFTs);
};
⇒ MyNFTs를 deploy하는 코드 확인
ganache-cli
터미널에 입력
2.truffle migrate --compile-all --network ganache
입력 후 배포, 가나슈 네트워크연결
트러플 콘솔 창으로 들어간후 배포한 컨트랙트 인스턴스를 받아온 후 name과 symbol을확인.
instance.mintNFT("https://urclass-images.s3.ap-northeast-2.amazonaws.com/beb/section4/unit4/test.json", { from: accounts[0] })
# Tx Information
instance.tokenURI(1)
# "https://urclass-images.s3.ap-northeast-2.amazonaws.com/beb/section4/unit4/test.json"
가나쉬에 첫번째 지갑 배포후 발행된 NFT로부터 tokenURI
를 확인하였음
⇒ 정상적으로 tokenURI와 네트워크 연결을 트러플 콘솔로 확인하였다.
깃헙에서 확인가능 (퍼블릭)
https://github.com/HYOSEUNGAN/Truffle_ERC721
네트워크와 배포를 직접해보면서 좀 더 깊숙한 이해를 할 수 있었고 nft에 대한 개념을 코드를 수정해보면서 정의할 수 있었다.
테스트넷에 유용성을 알 수 있었다. 블록체인, 스마트컨트렉트는 읽을 수 있지만 배포를 한 후에는 변경이 불가능함을 경험해보고 많은 오류와 수정을 반복하면서 경험해보았고 앞으로 메인넷 배포 전에 계속 쓸 수 있다는 장점이 있었다.
코드에 대한 깊숙한 이해를 하기에 부족함을 느꼈다. 비록 프레임워크를 사용하지만 Java, Javascript, node, npm, C언어 등 여러 프로그래밍 언어가 섞인 느낌을 받아서인지 기본에 중요성을 알 수 있었다.
실제 직접 작성도 해보고 많은 오류를 겪어보면서 ERC에 대한 이해와 네트워크, 블록체인과 더 친해지고 프로젝트에도 참여해본다면 큰 도움이 될거같다.