상세 컨텐츠

본문 제목

나만의 동적 NFT를 만들고 배포하고 팔기

Blockchain/NFT

by Yongari 2023. 4. 4. 09:32

본문

대체 불가능한 토큰(NFT)은 블록체인 공간 밖에서는 찾아볼 수 없는 도구로, 다양한 활용과 가능성을 열어줍니다. 동적이고 무작위적인 NFT를 구축하는 것은 수집품, 독립 토큰, 티켓, 게임 애플리케이션 또는 ERC721 토큰 표준이 허용하는 모든 것을 구축하고자 하는 분들에게 좋은 출발점이 될 수 있습니다. 하지만 이제 이 토큰으로 무엇을 할 수 있을까요? 새로 발행된 무작위 또는 동적 캐릭터를 자랑하고 싶지 않으신가요?

저희도 그렇게 생각합니다. 이번 튜토리얼에서는 오픈시 마켓플레이스에 나만의 동적 또는 랜덤화된 NFT를 배포하는 모든 단계를 안내해드리겠습니다. 마지막에 어떤 모습일지 예시를 보여드리겠습니다.

 

 

 

 

 

Quick NFT Refresher

ERC721(대체 불가능한 토큰이라고도 함)은 서로 고유하고 다른 토큰을 만들기 위한 프레임워크를 정의하며(따라서 대체 불가능이라는 용어를 사용함), 널리 사용되는 ERC20 표준은 토큰이 모두 상호 교환 가능하고 동일한 가치를 지니도록 보장하는 "대체 가능한" 토큰을 정의합니다. 앞으로 이러한 토큰을 구축하는 방법과 커뮤니티가 여러 플랫폼에서 토큰을 표현하는 방법에 대해 좀 더 자세히 살펴보도록 하겠습니다. 자세한 내용은 오픈시 NFT 바이블에서도 확인하실 수 있습니다.

NFT에서 난수를 얻는 방법에 대한 지난 글을 아직 확인하지 않으셨다면, 그곳으로 돌아가서 읽어보시기 바랍니다! 개발자 탭에는 다양한 스마트 콘트랙트 및 블록체인 엔지니어링에 대한 튜토리얼, 가이드, 방법론이 가득합니다.

 

 

 

What Is Metadata? 

지난 블로그에서는 무작위 대체 불가능한 토큰을 만드는 방법을 알아보았습니다. 이제 ERC721 표준의 또 다른 중요한 부분인 메타데이터를 사용해 한 단계 더 발전시켜 보겠습니다.

모든 NFT에는 메타데이터라는 것이 있습니다. 이에 대한 자세한 내용은 ERC/EIP 721 제안서 원본에서 확인하실 수 있습니다. 기본적으로 커뮤니티가 알아낸 것은 이더리움에서 이미지를 저장하는 것이 매우 부담스럽고 비용이 많이 든다는 것이었습니다. 8 x 8 사진을 저장하려는 경우 이 정도의 데이터를 저장하는 것은 매우 저렴하지만, 괜찮은 해상도의 사진을 원한다면 훨씬 더 많은 비용을 지출해야 합니다.

데이터 저장 비용은 데이터 1KB당 약 64만 가스입니다. 현재 가스 가격이 약 50G웨이 또는 0.000000050 이더리움이고 1 이더리움은 다음과 같습니다. 600 presently you'll be spending 20 

 

 

20달러를 지불하면 블록체인에 추가할 수 있습니다. 이는 NFT 제작자들을 흥분시키지 못했습니다.

저희는 이더리움 2.0이 이러한 많은 확장 문제를 해결할 것이라는 점을 알고 있지만(성공적인 출시를 위해 이더리움 2.0에 축하를 보냅니다), 현재로서는 커뮤니티에 이를 도울 수 있는 표준이 필요했습니다. 메타데이터가 바로 이 표준입니다.

메타데이터는 오프체인에 저장된 토큰아이디에 대한 설명 정보를 제공합니다. 이는 오프체인 UI가 토큰에 대한 모든 정보를 수집하기 위해 호출하는 간단한 API입니다. 각 토큰아이디에는 이 API 호출을 정의하는 특정 tokenURI가 있으며, 이는 다음과 같은 JSON 객체를 반환합니다:

{
    "name": "You NFT token name",
    "description": "Something Cool here",
    "image": "https://ipfs.io/ipfs/QmTgqnhFBMkfT9s8PHKcdXBn1f5bG3Q5hmBaR4U6hoTvb1?filename=Chainlink_Elf.png",
    "attributes": [. . .]
}

 

 

메타데이터에 네 개의 고유한 키가 있음을 알 수 있습니다.

- name - 사람이 읽을 수 있는 토큰아이디의 이름을 정의합니다.
- 설명 - 토큰에 대한 배경 정보를 제공합니다.
- 이미지에 대한 또 다른 URI인 image
- 토큰의 통계를 표시할 수 있는 속성

 

NFT가 다른 NFT와 상호작용할 때 토큰URI의 속성이 NFT 스마트 컨트랙트의 속성과 일치하는지 확인하는 것이 중요합니다. 그렇지 않으면 전투나 상호작용이 예상대로 진행되지 않을 때 혼란을 겪을 수 있습니다!

토큰URI에 토큰아이디를 할당하고 나면, NFT 마켓플레이스에서 여러분의 토큰을 표시할 수 있으므로 여러분의 창의성을 뽐낼 수 있습니다. 업데이트된 던전앤드래곤 랜덤 NFT 리포를 사용하여 만든 것을 링크비 테스트넷의 오픈시 마켓플레이스에서 확인할 수 있습니다. 이러한 마켓플레이스는 민테이블, 레어블, 오픈씨 등 여러 곳이 있습니다.

 

 

On-Chain and Off-Chain Metadata

모든 메타데이터를 온체인에 저장할 수 있지만(실제로 토큰이 상호 작용할 수 있는 유일한 방법입니다), 많은 NFT 마켓플레이스는 아직 온체인 메타데이터를 읽을 수 있는 방법을 모릅니다. 따라서 당분간은 오프체인 메타데이터를 사용해 토큰을 시각화하고, 모든 온체인 메타데이터를 보유하는 것이 토큰이 서로 상호작용할 수 있는 이상적인 방법입니다.

이름, 설명, 속성은 온체인에 저장하기 쉽지만 이미지가 어려운 부분입니다. 또한, 토큰URI를 위한 API를 어디에 저장해야 할까요? 많은 사람들이 정보를 호스팅하기 위해 서버를 실행하는 것을 선택하는데, 이는 훌륭하지만 토큰을 시각화하기 위한 중앙화된 장소입니다. 이미지가 다운되거나 해킹당하지 않도록 온체인에 저장할 수 있다면 더 좋을 것입니다. 위의 예시에서 이미지가 IPFS를 가리키는 URL을 사용하고 있는 것을 볼 수 있는데, 이는 이미지를 저장하는 데 널리 사용되는 방식입니다.

IPFS는 행성 간 파일 시스템의 약자로, 웹을 더 빠르고 안전하며 개방적으로 만들기 위해 고안된 P2P 하이퍼미디어 프로토콜입니다. 누구나 파일을 업로드할 수 있으며, 파일이 변경되면 해시도 함께 변경되도록 해시되어 있습니다. 이는 이미지가 업데이트될 때마다 온체인 해시/토큰URI도 변경되어야 한다는 것을 의미하므로 메타데이터의 이력을 기록할 수 있기 때문에 이미지 저장에 이상적입니다. 또한 IPFS에 이미지를 추가하는 것은 매우 쉬우며 서버를 실행할 필요가 없습니다!

이제 무엇을 하려는지 알았으니 빌드하고 배포해 봅시다! NFT 토큰과 마켓플레이스를 배포하면 토큰은 다음과 같은 모양이 될 것입니다:

 

 

The levels section is where you’ll see your token’s randomized statistics!

How to Deploy Your Dynamic NFT Marketplace

다시 한번 말씀드리지만, 저희는 업데이트된 버전의 던전앤드래곤 저장소를 사용하게 되며, 이 저장소에는 사용 설명서가 포함되어 있습니다.

변경되는 내용은 다음과 같습니다:

1. 체인링크 VRF를 사용하여 검증 가능한 무작위 D&D 캐릭터를 빌드합니다.
2. IPFS를 사용하여 tokenURI 추가
3. 오픈시 마켓플레이스에 무작위 NFT 추가하기

 

 

동적 NFT에 대해 작동하도록 저장소를 변경할 수 있다는 점을 기억하세요. VRF를 체인링크 가격 피드 또는 체인링크 API로 쉽게 교체할 수 있습니다.

현재 이 리포는 린케비에서만 작동하므로 린케비로 이동하시기 바랍니다! 이번 글에서는 처음부터 다시 설명할 예정이니 지난 글을 읽지 않으셨더라도 걱정하지 마세요.

계속 진행하시려면 지갑에 린케비 테스트넷 이더리움과 린케비 테스트넷 링크가 있어야 합니다.

환경 변수 설정
엠네모닉과 링크비 RINKEBY_RPC_URL 환경 변수가 필요합니다. 니모닉은 지갑의 시드 문구입니다. RINKEBY_RPC_URL은 Infura와 같은 노드 공급자 서비스에서 찾을 수 있습니다.

그런 다음 bash_profile 파일에 설정하거나 터미널에 다음과 같이 내보내세요:

 

export MNEMONIC='cat dog frog....'

export RINKEBY_RPC_URL='www.infura.io/asdfadsfafdadf'

 

그런다음 시작할 수 있습니다. 

Clone the Repo and Migrate

git clone https://github.com/PatrickAlphaC/dungeons-and-dragons-nft

cd dungeons-and-dragons-nft

npm install

truffle migrate --reset --network rinkeby

그러면 D&D NFT가 배포됩니다!

캐릭터 생성
이제 사용해 보실 수 있습니다:

 

truffle exec scripts/fund-contract.js --network rinkeby

truffle exec scripts/generate-character.js --network rinkeby

truffle exec scripts/get-character.js --network rinkeby

이렇게 하면 무작위 능력치를 가진 새로운 캐릭터가 생성됩니다!

배포 빈도에 따라 get-character.js의 dnd.getCharacterOverView(1) 명령을 변경하여 0을 원하는 캐릭터의 토큰아이디로 바꾸면 어떤 캐릭터를 선택할지 선택할 수 있습니다.

이렇게 하면 NFT의 개요를 확인할 수 있습니다. 호출이 큰 숫자를 반환하므로 BN을 볼 수 있으며, 이를 정수로 변환하여 그 숫자가 무엇인지 확인할 수 있습니다. 또는 한 단계 더 나아가서...

이더스캔에서 확인하기
이더스캔 API 키를 무료로 받아 온체인에서 NFT와 상호작용할 수 있습니다. 그런 다음 ETHERSCAN_API_KEY를 환경 변수로 설정하세요.

 

 

npm install truffle-plugin-verify

truffle run verify DungeonsAndDragonsCharacter --network rinkeby --license MIT

이렇게 하면 계약이 확인되고 게시되며, 이더스캔에서 제공하는 계약 읽기 섹션으로 이동할 수 있습니다.

그렇지 않은 경우, 원클릭댑을 사용하여 컨트랙트 주소와 ABI를 추가할 수 있습니다. ABI는 빌드/컨트랙트 폴더에서 찾을 수 있습니다. 파일 전체가 ABI가 아니라 ABI라고 표시된 섹션만 ABI라는 것을 기억하세요.

OpenSea에 배포
NFT를 생성했으면 토큰URI를 부여해야 합니다. 토큰URI는 NFT의 데이터를 세상에 보여주기 위한 표준입니다. 이렇게 하면 온체인에 추가하기 위해 가스를 낭비할 필요가 없으므로 이미지와 같은 것을 더 쉽게 저장할 수 있습니다.

토큰URI는 URL 또는 기타 고유 식별자를 나타내며, 몇 가지 파라미터가 포함된 .json 파일입니다.

 

{

    "name": "Name for it ",

    "description": "Anything you want",

    "image": "https://ipfs.io/ipfs/HASH_HERE?file.png",

    "attributes": [...]

}

IPFS 및 IPFS 컴패니언 다운로드
이제 이러한 이미지와 메타 데이터를 IPFS에 저장하겠습니다. 다음이 필요합니다:

1. IPFS
2. IPFS 컴패니언
3. Pinata

IPFS 컴패니언을 사용하면 Brave나 Chrome과 같은 브라우저에서 기본적으로 IPFS 데이터를 볼 수 있습니다. 그리고 피나타를 사용하면 노드가 다운되더라도 IPFS 파일을 계속 유지할 수 있습니다(지금은 걱정하지 마세요). 브라우저에서 이 링크를 클릭하면 IPFS 컴패니언이 작동 중인지 확인할 수 있습니다: https://ipfs.io/ipfs/QmTgqnhFBMkfT9s8PHKcdXBn1f5bG3Q5hmBaR4U6hoTvb1?filename=Chainlink_Elf.png. 

IPFS에 이미지 추가
IPFS 노드가 가동되면, 파일을 추가하기 시작할 수 있습니다. 먼저 NFT의 이미지를 업로드하고 싶습니다. IPFS 설치의 "파일" 섹션으로 이동합니다.

 

 

 

 

 

이 D&D 캐릭터는 어떻게 생겼나요? IPFS 노드에 추가한 다음 "고정"하세요. 지금은 빈 이미지나 우스꽝스러운 이미지를 자유롭게 고정하세요.

IPFS에 메타데이터 파일 추가
그런 다음 메타데이터 JSON 객체를 IPFS에 추가해야 합니다. 배포한 토큰에서 이름과 속성을 가져와야 합니다. 저희는 create-metadata.js 스크립트에서 일부 작업을 수행했습니다. 그냥 실행하세요.

 

truffle exec scripts/create-metadata.js --network rinkeby 

 

 

 

출처 : https://blog.chain.link/build-deploy-and-sell-your-own-dynamic-nft/

 

관련글 더보기