Truffle
, 스마트 컨트랙트 개발 시 로컬환경에서 보다 쉽게 컴파일하고 배포 환경을 제공하는 프레임워크이다.
// truffle 설치
$ npm install -g truffle
// truffle 버전 확인
$ truffle version
npm 명령어를 통하여 설치를 진행할 수 있다.
$ mkdir sample
$ cd sample
$ truffle init
truffle-config.js
: truffle 설정 파일을 편집하여 네트워크 설정을 진행한다.
Truffle 테스트 네트워크와 연결하기 위해서는 약간의 수정 작업이 필요했다. (참고 자료)
1️⃣ infura 회원가입 후 프로젝트 생성
2️⃣ HDWalletProvider 설치
$ npm install @truffle-hdwallet-provider
3️⃣ truffle.js 수정
💡 $vi .secret
메타마스크 계정의 private key를 입력해줘야한다.
4️⃣ 확인
ERC-721
이란 요즘 흔히들 알고있는 NFT(Non funcgible Token, 대체불가토큰)을 의미한다. - 이전의 작성한 글 참고
openzeppelin(오픈재플린) - "스마트컨트랙트를 개발을 위해 제공되는 라이브러리" 를 이용하여 쉽고 빠르게 개발을 해볼것이다.
openzeppelin 설치
$ npm install @openzeppelin/contracts
이제 @openzeppelin/contracts
안에 있는 라이브러리를 import
를 통하여 사용할 수 있게 되었다.
//Contract based on [https://docs.openzeppelin.com/contracts/3.x/erc721](https://docs.openzeppelin.com/contracts/3.x/erc721)
// SPDX-License-Identifier: MIT
// contracts/MyNFT.sol
pragma solidity ^0.8.7;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
contract MyNFT is ERC721URIStorage, Ownable {
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
constructor() ERC721("MyNFT", "NFT") {}
function mintNFT(address recipient, string memory tokenURI)
public onlyOwner
returns (uint256)
{
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
_mint(recipient, newItemId);
_setTokenURI(newItemId, tokenURI);
return newItemId;
}
}
// migrations/1_initial_migration.js
const MyNFT = artifacts.require("MyNFT.sol");
module.exports = function (deployer) {
deployer.deploy(MyNFT);
};
$ truffle migrate --compile-all --network rinkeby
truffle(rinkeby)> i.mintNFT(accounts[0], "{URL 주소}")
// 확인 방법
truffle(rinkeby)> i.tokenURI(1)