ERC-721개발에 앞서!!
웹 기반의 솔리디티 개발을 위한 IDE
[그림: remix.ethereum.org]
스마트 컨트랙트를 개발하려면 솔리디티 언어를 사용해야 하는데 흔히 사용하는 IDE 에서는 자체적으로 솔리디티 코드를 디버깅, 컴파일 등을 하는 기능이 없다.
그래서 우리는 솔리디티 코드를 컴파일, 배포, 디버깅 등을 해주는 Truffle과 로컬 환경에서 테스트넷을 사용할 수 있게 해주는 Ganache를 함께 사용해야함.
스마트 컨트랙트 개발시 개발, 배포, 테스트 환경을 제공해주는 프레임워크
특징) 테스트 자동 실행, node.js 에서 동작, npm으로 설치 가능
이더리움 가상머신(EVM)을 사용하여 디앱 개발하기위해 만들어짐.
npm install -g truffle
truffle init
을 실행하면 트러플 프로젝트 초기화됨.
프로젝트 안에는
이렇게 초기화 되어 있음.
EIP-721 이라고해서 이더리움 개선 제안의 721번째 토론에서 채택된 각각 구분 가능한 토큰.
EIP 링크 : EIP docs
토론이 이뤄지는데 EIP에서 721 번째에 나온 하나의 토큰으로 식별 가능한 토큰(NFT)
개발한 스마트 컨트랙트를 로컬에서 테스트 할 수 있게 해주는 것.
솔리디티 기반의 스마트 컨트랙트를 개발하는데 도움을 주는 프레임워크
가장 큰 차이점은 대체 가능, 대체 불가능이라고 생각함.
FT - 대체가능한 토큰
NFT - 재발행이 불가능한 토큰
ERC-20 - FT를 발행할 수 있다.
ERC-721 - NFT를 발행할 수 있다.
SFT와 ERC-1155는 추후에..
이번 실습에서는 리믹스(Remix) 대신 트러플(Truffle)을 이용해 ERC-721을 개발할 것.
오픈제플린 프레임워크(@openzeppelin/contracts)를 이용.
가상에서 테스트를 위해 가나슈(Ganache-cli) 사용.
소스코드는 깃허브 참고.
npm init
// package.json 초기화
npm install -g truffle
// 트러플 설치
npm install -g ganache-cli
// 가나슈 설치 (추후 gui 설치도 블로깅 할 것!)
npm install @openzeppelin/contracts
// 우린 오픈제플린을 이용할 것.
networks: {
ganache: {
host: '127.0.0.1', // 로컬
port: 8545,
network_id: '*',
},
},
다른 네트워크에 배포할 때에는 여기다 네트워크 정보를 추가하고, Truffle 명령어 중 옵션 --network 와 함께 네트워크의 정보를 담고있는 키를 입력하면 된다고 함.
아마 가나슈 gui 환경에서는 port가 7545 였었던거 같다.
그리고
compilers: {
solc: {
version: '0.8.7',
evmVersion: 'london',
},
},
컴파일 버전을 작성할 솔리디티 코드와 맞춰줌.
contract MyNFTs is ERC721URIStorage, Ownable {}
함수 mintNFT() 선언
migrations 폴더 안에 있는 1_initial_migration.js 파일 수정.
앞에서 작성한 MyNFTs.sol 코드를 배포할 것.
이제 다른 터미널 창(가나슈)을 하나 더 열어서 가나슈와 트러플을 사용할 것.
먼저, 새로연 터미널 창에서
ganache-cli
명령어로 가나슈를 열고
truffle migrate --compile-all --network ganache
명령어를 입력하여 가나슈(키) 네트워크(로컬)에 연결하고, 모든 컨트랙트 배포.
배포하고 나서 트러플 콘솔을 열어 컨트랙트를 조작할 수 있음.
truffle console --network ganache
그럼 터미널창이 truffle(ganache)> 로 바뀜.
truffle console에서 배포한 컨트랙트의 인스턴스를 받아옴.
배포한 컨트랙트 확인.
컨트랙트 확인 후, 작성한 함수가 잘 동작하는지 확인.
함수의 마지막 파라미터로 실행할 지갑 주소를 함께 전달해야함.
로컬의 ganache-cli의 첫번째 지갑주소 사용.
가나슈를 이용해서 컨트랙트를 배포할 때는 첫번째 지갑의 주소에서 컨트랙트를 배포.
발행된 NFT로부터 tokenURI를 확인.
tokenURI에는 예시로 'google.com'을 넣었다.
NFT를 생성할 때 파라미터로 tokenURI를 전달하는데, NFT에 적용할 정보를 담고있는 json객체의 엔드포인트임.
예시로 OpenSea에서 메타데이터 JSON 볼 수 있음.
tokenURI에는 IPFS나 https 등 토큰으로 발행할 데이터 링크를 넣음.
이렇게 해서, Truffle, ganache-cli로 ERC-721 컨트랙트를 배포해봤다. 🧐
ERC-721이 왜 NFT인지, Truffle과 ganache의 자유로운 활용, Remix로 연습하던 배포를 로컬에서 해보기
메인넷에 배포하기전 테스트를 해보는 연습을 하며 한 번 배포한 컨트랙트는 수정이 불가능하다는 점을 더욱 상기시킴.
오픈제플린 프레임워크를 사용해보며 ERC-721 솔리디티 코드를 분석하며 유니크한 값으로 카운트하기에 NFT.
아직 다양한 함수들을 많이 다뤄보진 못함
명확하지 않은 명령어들과 함수들 : 생소함 -> 적응으로 바꿔야한다.
erc-20, erc-721 구현 및 활용한 개발 프로젝트를 하겠다.
docs를 많이 읽어보고 ERC20, ERC721 안의 많은 함수들을 사용해봐야겠다.
많은 연습이 필요하다.