ERC-20 토큰과는 다르게 대체 불가능한 토큰(Non-Fungible Token) ERC-721로 발행되는 토큰은 모두 각각의 가치를 가지고 있다.
브라우저에서 Solidity 개발을 위한 IDE(통합 개발 환경)
이더리움 기반 디앱을 쉽게 개발할 수 있도록 도와주는 블록체인 프레임워크
ERC-721을 개발
Truffle을 이용한 배포
eth-lightwallet 모듈에 내장되어 있는 함수를 사용하여 개발
Postman을 사용하여 결과 확인
fs 모듈을 이용한 키스토어 로컬 저장
폴더 만들기
mkdir newErc721 //폴더생성 cd newErc721 //폴더 진입 truffle init //트러플 초기화 npm init //npm초기화
모듈 설치
npm init npm install -g truffle npm install -g ganache-cli npm install @openzeppelin/contracts npm i --save truffle-hdwallet-provider npm i dotenv
- package.json 초기화
- 트러플설치
- 가나슈설치
- 오픈제플린 설치
- HDWalletProvider 설치
- dotenv 설치
//상단에 적어주세요
// truffle-config.js
var HDWalletProvider = require("truffle-hdwallet-provider");
require('dotenv').config()
const mnemonic = process.env.MNEMONIC
const infuraEndpoint = process.env.INFURA_ENDPOINT
// ropsten 주석 풀고
networks: {
ropsten: {
provider: function() {
return new HDWalletProvider(mnemonic, infuraEndpoint)
},
network_id: '*',
gas: 30000000
}
//Contract based on [https://docs.openzeppelin.com/contracts/3.x/erc721](https://docs.openzeppelin.com/contracts/3.x/erc721)
// SPDX-License-Identifier: MIT
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 MyNFTs is ERC721URIStorage, Ownable {
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
constructor() public ERC721("JHNFTs", "JNFT") {}
function mintNFT(string memory tokenURI)
public onlyOwner
returns (uint256)
{
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
_mint(msg.sender, newItemId);
_setTokenURI(newItemId, tokenURI);
return newItemId;
}
}
openZeppelin 패키지 설치
npm i @openzeppelin/contracts
Migrations.sol 파일 수정
const Migrations = artifacts.require('Migrations');
const MyNFTs = artifacts.require('MyNFTs.sol'); // MyNFTs.sol 파일 추가
module.exports = function (deployer) {
deployer.deploy(Migrations);
deployer.deploy(MyNFTs); // MyNFTs를 배포에 추가
};
truffle migrate --compile-all --network truffle
Truffle console을 통해 ropsten에 진입
truffle console --network ropsten
작성한 solidity 파일에서 입력한 NFT설정과 일치하는지 확인
truffle(ropsten)> instance = await MyNFT.deployed()
undefined
truffle(ropsten)> instance.name()
'JHNFT'
truffle(ropsten)> instance.symbol()
'JNFT'
https://ropsten.etherscan.io/tx/0x2aff985cd7057f5a95254acfa8a62526665c5485423d650d3af489ccb19ab9ae
컨트랙트 해시 0x4e3f4a1234a16ad2adf7dcfa4b473a31160a686ca29563f31bbf0a46ac2606c9
배포가 안 되서 죽을번함
출처
https://eips.ethereum.org/EIPS/eip-721
https://docs.openzeppelin.com/contracts/3.x/api/token/erc721