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
와 에 연결해 보겠습니다.
👋 읽어주셔서 감사합니다 다음에 또 만나요
Reference
이 문제에 관하여(OpenZeppelin을 이용한 NFT(ERC-721) 생성 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/abdulmaajid/how-to-create-an-nfterc-721-using-openzeppelin-3778텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)