ERC-721 컨트랙트 컴파일
ⓐ Remix IDE를 실행합니다.
ⓑ 새로운 프로젝트를 실행하고 contracts 폴더에 testNFT.sol 파일을 생성합니다.
ⓒ openzeppelin에서 제공하는 라이브러리를 사용해 ERC-721 컨트랙트 코드를 다음과 같이 작성합니다. NFT를 민팅하기 위해서는 NFT Mint 함수를 작성해줘야 합니다.
//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 TestNFTs is ERC721URIStorage, Ownable {
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
constructor() public ERC721("TestNFT", "NFT"){}
function mintNFT(string memory tokenURI) public onlyOwner returns(uint256){
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
_mint(msg.sender, newItemId);
_setTokenURI(newItemId, tokenURI);
return newItemId;
}
}
ERC721URIStorage
NFT는 대체 불가능 토큰입니다. ERC721URIStorage는 tokenURI를 관리하는 컨트랙트입니다. NFT의 고유한 특성이 될 수 있는 이미지 주소등을 저장하는 JSON 객체를 tokenURI로 관리합니다.
Ownable
컨트랙트의 소유권을 관리하는 컨트랙트입니다. NFT를 민팅하는 경우 컨트랙트를 소유한 계정만 발행해야 하므로 Ownable 컨트랙트를 사용합니다. 소유주만 접근하도록 하기 위해 onlyOwner Modifier를 함수에 사용합니다.
ⓓ 작성된 컨트랙트를 컴파일 합니다. Ctrl+S를 누르면 컴파일이 진행됩니다. 좌측 메뉴바에서 컴파일 탭으로 넘어가 직접 컴파일 할수도 있습니다. 컴파일 전 컴파일러의 버전을 pragma solidity와 맞춰줘야 합니다.
ERC-721 배포
컴파일된 컨트랙트를 암호화폐 지갑과 연동해 배포할 수 있습니다. Remix 좌측에서 4번째 탭은 배포와 트랜잭션을 실행하는 화면입니다. 배포 환경은 Remix VM(London)이 아니라 Injected Provider Metamas를 선택합니다.
테스트넷에 배포할것이므로 메타마스크 지갑을 오픈하고, Ropsten 테스트넷에 연결된 것을 확인합니다. 만약 Remix IDE와 지갑이 연결되지 않은 경우 연결해줘야 합니다.
지갑이 연결되면 Remix IDE에서 자동으로 계정정보와 환경정보를 가져옵니다.
컴파일된 TestNFT 컨트랙트를 선택후 Deploy 합니다.
메타마스크 확장 프로그램이 실행되고 계약 배포 확인 창이 팝업됩니다. 가스비가 일정 수준 발생합니다. 배포 트랜잭션을 보낸 후 한 30초 후 컨트랙트가 블록체인에 올라갑니다.
컨트랙트가 배포되고 난 후 컨트랙트에 포함되었던 함수들을 사용할 수 있습니다.
tokenURL로는 블로그 주소 https://about-tech.tistory.com 을 넣어 NFT를 민팅합니다.
tokenID 1번으로 NFT가 생성되었습니다.
tokenID 1번 NFT는 NFT를 발행한 계정에 소유권이 있습니다.
이더스캔 Ropsten 넷에서 신규 발행된 ERC-721 Token을 확인할 수 있습니다.
다른 계정으로 발행한 NFT를 보낼 수 있습니다.
NFT를 전송하기 위해서 safeTransferFrom 함수를 사용합니다.
해당 token의 소유주가 변경되었습니다.
'Blockchain' 카테고리의 다른 글
[Blockchain] Local 환경에서 NFT 민팅하는 방법 (0) | 2022.07.21 |
---|---|
[Blockchain] OpenSea NFT 민팅 하는 방법 (0) | 2022.07.21 |
[Blockchain] ERC-721 구조? (1) | 2022.07.20 |
[Blockchain] ERC-721 vs ERC-20 차이점 (NFT vs FT) (0) | 2022.07.19 |
[Blockchain] KIP-7 vs ERC-20 차이점? (0) | 2022.07.18 |
댓글