OpenZeppelin을 이용한 NFT(ERC-721) 생성 방법

소개



현재 블록체인은 매우 유행하고 있으며 많은 사람들이 NFT를 판매하고 생성하여 수익을 올리고 있습니다. 나만의 NFT 컬렉션을 만들고 싶다면. 따라서 이 기사에서는 NFT(Non-Fungible-Token)를 만들고 공개 테스트넷에 배포합니다.

NFT 란 무엇입니까?



NFT는 Non Fungible 토큰의 약자로 무언가 또는 누군가를 고유한 방식으로 식별하는 데 사용됩니다. NFT는 고유한 항목의 소유권을 나타내는 데 사용할 수 있는 토큰입니다. NFTS를 통해 우리는 예술, 수집품, 심지어 모든 부동산과 같은 것을 토큰화할 수 있습니다. 그들은 한 번에 한 명의 소유자만 가질 수 있으며 이더리움 블록체인에 의해 보호됩니다. 소유자만이 NFT의 소유권을 이전할 수 있습니다.

NFT 규격(ERC-721)



ERC-721은 가장 일반적인 NFT 표준입니다. 스마트 계약이 특정 표준화된 API 방법을 구현하는 경우 ERC-721 대체 불가능한 토큰 계약이라고 할 수 있습니다.

이러한 메서드는 EIP-721 에 지정되어 있습니다. OpenZeppelin과 같은 오픈 소스 프로젝트는 가장 일반적인 ERC 표준을 재사용 가능한 라이브러리로 구현하여 개발 프로세스를 단순화했습니다.
다음은 testnet(Ropsten)에 배포할 NFT의 최종 계약 코드입니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

contract ZPunks is ERC721, ERC721URIStorage, Ownable {
    using Counters for Counters.Counter;

    Counters.Counter private _tokenIdCounter;

    constructor() ERC721("ZPunks", "ZPK") {}

    function _baseURI() internal pure override returns (string memory) {
        return "https://ipfs.infura.io:5001/api/v0/cat?arg=";
    }

    function safeMint(address to, string memory uri) public onlyOwner {
        uint256 tokenId = _tokenIdCounter.current();
        _tokenIdCounter.increment();
        _safeMint(to, tokenId);
        _setTokenURI(tokenId, uri);
    }

    // The following functions are overrides required by Solidity.

    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }

    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    {
        return super.tokenURI(tokenId);
    }
}


모든 기능 목적을 이해하기 위해 그것을 깰 수 있습니다.

pragma solidity ^0.8.2;


우선, 우리는 이 계약에 대한 솔리디티 버전을 설정하고 있습니다. 이 계약에서 나는 버전 0.8.2 또는 0.8.7과 같은 최신 마이너 또는 패치 버전을 설치하는 것을 의미하는 ^0.8.2를 설정하고 있습니다.
그 후 openzeppelin 라이브러리에서 필요한 모든 파일을 가져옵니다. 그런 다음 주요 계약에서 상속합니다.

using Counters for Counters.Counter;
Counters.Counter private _tokenIdCounter;


여기서 우리는 계약에서 NFT ID를 저장하기 위해 openzeppelin의 카운터 라이브러리를 사용하고 있습니다.

constructor() ERC721("ZPunks", "ZPK") {}
function _baseURI() internal pure override returns (string memory) {
    return "https://ipfs.infura.io:5001/api/v0/cat?arg=";
}


그런 다음 생성자에서 NFT 이름과 기호를 설정합니다. NFT 이름을 설정한 후 NFT 데이터의 기본 URI를 설정합니다. IPFS uri를 설정하면 자신의 API uri도 설정할 수 있습니다.

function safeMint(address to, string memory uri) public onlyOwner {
    uint256 tokenId = _tokenIdCounter.current();
    _tokenIdCounter.increment();
    _safeMint(to, tokenId);
    _setTokenURI(tokenId, uri);
}


그런 다음 nft를 생성하는 기능이 있습니다. 이 함수에는 두 개의 매개변수가 있습니다. 첫 번째는 nft 소유자의 주소이고 두 번째는 저장한 데이터의 해시입니다. 이 함수에서 onlyOwner 수정자가 사용되는데, 이는 이 함수가 이 계약의 소유자만 호출할 수 있음을 의미합니다.

function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) {
    return super.tokenURI(tokenId);
}


그런 다음 마지막에는 NFT에 저장된 uri 메타데이터를 검색하는 데 사용할 tokenUri 함수가 있습니다.

계약 배포



이제 NFT 계약을 배포해 보겠습니다. Polygon Mumbai 테스트넷에 계약을 배포합니다. 배포할 테스트넷을 선택할 수 있습니다. Polygon Mumbai tesnet에 배포하려는 경우 다음 구성을 사용하여 메타마스크에 네트워크를 추가할 수 있습니다.

네트워크 이름: 폴리곤 테스트넷

체인 ID: 80001

RPC URL: https://rpc-mumbai.maticvigil.com/

통화 기호: MATIC

블록 탐색기 URL: https://mumbai.polygonscan.com/

remix IDE 을 사용하여 계약을 배포합니다. 이제 리믹스 IDE를 엽니다. 그리고 새 파일을 만들고 이름을 MyNFT.sol로 지정합니다.

새 파일을 생성한 후 이제 위의 계약 코드를 복사하여 새로 생성된 파일에 붙여넣고 저장합니다.

이제 컴파일 섹션으로 이동하여 계약을 컴파일합니다. 여기서 우리는 솔리디티 버전을 선택할 수 있는 상단의 컴파일러를 볼 수 있습니다. 나는 v0.8.7을 사용하고 있습니다. 사용하려는 것을 사용하고 컴파일 버튼을 누릅니다.

이제 배포 섹션으로 이동하여 Polygon Mumbai 테스트넷에 계약을 배포합니다. 여기에서 맨 위에 있는 ENVIRONMENT가 이것을 Injected Web3로 변경하고 계약을 파일에 있는 계약 이름으로 변경하는 것을 볼 수 있습니다.

그런 다음 배포 버튼을 클릭하고 잠시 후 거래를 승인하면 계약이 블록체인에 배포되고 계약과 상호 작용하고 NFT를 발행할 수 있습니다.

여기에서 계약 파일의 모든 기능을 볼 수 있습니다. safeMint라는 함수를 사용하여 첫 번째 nft를 만들 수 있습니다. 두 매개변수가 필요합니다. 하나는 IPFS에 이미지를 업로드한 후 얻을 수 있는 nft의 주소와 IPFS 해시입니다.
축하합니다! NFT 계약 생성 시.

이 기사가 도움이 되었기를 바랍니다. 도움이 필요하면 댓글 섹션에 알려주십시오. 커피 사줄래요, 할 수 있어요 Here

와 에 연결해 보겠습니다.

👋 읽어주셔서 감사합니다 다음에 또 만나요

좋은 웹페이지 즐겨찾기