solidity 적응기 - 2. ipfs에 대해서(개념 아님 실습위주임!)🥫

2022. 8. 26. 17:29NFT

안녕하세요 Russel입니다.

저번 포스트에서 ERC-721 프로토콜이 나온 배경과 어떤 인터페이스 규악이 있는지 간단히 설명드렸었죠!

NFT asset의 원본 파일을 어딘가에 저장을 해놔야하는데 그 어디가 바로 ipfs입니다.

 

 

[프로그래밍 반] solidity 입문기 - 1. smart contract, NFT 민팅, 그리고 ERC-721 프로토콜의 삼각 관계👪

1. 왜 NFT를 발행할 때 smart contract가 필요할까? solidity 적응기 1. 어렵지 않아요 헤치지 않아요.(기초 구조) 대망의 solidity를 처음으로 해봤습니다. 자료형을 쭉 읊어봤자 의미 없는 것 같고 일단 구

dev-russel.tistory.com

 

언제나처럼 약간은 말랑말랑하게 약간의 비약을 넣어서 이해를 도와드릴까 합니다.

 

IPFS(InterPlanetary File System)

 

Web3.0의 드라이브라고 생각해주세요.

꼭 구조가 토렌트나, P2P같지 않나요? 네, 거의 비슷합니다.

모든 컴퓨터를 연결하는 분산 P2P 파일 시스템을 IPFS라고 말합니다.

 

Q. 그냥 클라우드를 쓰면 되지 않나요?

여러 측면에서 http보다 web3 지향적입니다.

 

1. 중앙 서버의 부재

P2P 네트워크를 사용함으로써 특정 플랫폼에 대한 의존도를 줄입니다.

(예를 들어, http 생태계에서는 중앙 서버가 고장나거나, 문제가 생기면 접근을 할 수가 없었죠..)

IPFS 생태계에서는 몇몇 노드들이 끊어지더라도, 문제가 없습니다.

 

2. 대용량 데이터의 분배 측면

텍스트 데이터에서 이미지 데이터로,

이미지 데이터에서 비디오 데이터로,

점점 큰 단위의 데이터를 접근하고 있는 현재 상황에서 http는 꽤나 비효율적입니다.

왜냐면 데이터가 위치한 주소에 접근하여 콘텐츠를 한 번에 가져오는 방식이기 때문입니다.

ipfs는 해시를 통해 모든 노드에 저장된 분할 데이터를 빠르게 가져와서 합쳐서 보여줄 수 있습니다. 결론적으로 훨씬 빠른 속도로 훨씬 많은 데이터를 받아볼 수가 있게 됩니다.


일단 빠르게 한 번 체험해보면 좋을 것 같습니다.

뭔가 ipfs로 파일을 관리하는게 먼 미래의 이야기 같지만 지금도 상용 서비스가 있습니다.

우리는 이번에 pinata 서비스를 써볼겁니다.

가입을 하면 무료로 1GB정도를 사용해볼 수 있습니다!

 

https://www.pinata.cloud/

 

Pinata | Your home for NFT media

Welcome to Pinata - Your home for NFT Media. We power the web3 space distributing content for NFTs across some of the top marketplaces, metaverses, apps and more. Get started today on your web3 journey.

www.pinata.cloud

 

로그인을 해보면 이런 화면이 나옵니다.

저는 이미 전에 올려놓은 적이 있어서 리스트가 나오네요.

 

upload+ 버튼을 눌러서 여러분의 NFT asset을 한 번 올려볼까요?

 

 

적절히 이름을 지어주고 Upload버튼을 눌러주면 바로 올라가지는 걸 확인할 수 있습니다. 

ipfs에선 CID라는 걸 만들어주는데요.

이 CID를 통해서 ipfs 프로토콜로 asset에 접근할 수 있습니다.

간단한 예시를 봐볼까요?

 

https://ipfsbrowser.com/

 

IPFS Browser

Simple IPFS Browser Search, view, access, and download IPFS files quickly and easily right in your web browser from any device!

ipfsbrowser.com

이 사이트를 통해 ipfs 프로토콜을 만족하는 파일을 확인할 수 있습니다.

저 IPFS Hash에 아까 우리가 만든 이미지의 CID를 넣어보고 View File Data 버튼을 눌러봅시다!

 

네 잘 나오네요. Open Raw File 버튼을 눌러보면 새창에서 이미지를 확인해볼 수도 있습니다.

 

그런데 NFT는 이미지만 있는게 아니죠. 프로젝트명이나 설명도 같이 있어야합니다. 예를 들어, 이건 제가 시험삼아 테스트넷에 배포한 NFT입니다.

 

이 NFT의 정보는 이렇게 되네요.

 

이름은 "mouse,"

description은 "codename1. hs is a mouse"

이런 정보는 우리가 메타데이터로 넣어줘야합니다. 메타데이터 역시 ipfs에 넣어줍시다!

 

PS. 약간의 팁이 있는데, 가스비 절감을 위해서 우리가 여러개의 NFT를 민팅할 거라면 폴더로 올려주는게 현명합니다.

각 파일을 따로따로 관리하게 되면 CID가 매번 달라지게 되어서 블록에 각각의 json 파일의 CID를 다 넣어줘야만 합니다.

민팅할 갯수의 파일만큼의 json 파일을 만들어서 업로드하게 되면 CID가 공통이 되면서, 각 nft의 구분자로 훨씬 적은 용량으로 NFT를 민팅할 수 있게 됩니다. 자연스럽게 가스비도 아낄 수 있겠죠!

 

 

metadata.json

{
    "name": "YOUR_NFT_NAME",
    "description": "YOUR_NFT_DESCRIPTION",
    "image": "ipfs://YOUR_IPFS_CID",
}

 

이런 형태의 json을 만들어줍시다.

중요한 점은 image에 CID를 넣어주는데 앞에 ipfs://를 넣어줘야한다는 점입니다.

이 파일을 통해 우리는 저 509KB 크기의 샘플이미지를 단 몇 바이트에 접근 가능합니다.

 

자! 다시 pinata를 켜고 이 json파일을 넣는다면 일단 NFT를 민팅하기 위한 모든 준비는 끝입니다.

이젠 smart contract를 적절히 채워주기만 하면 다 되겠군요!

 

smart contract에서 minting을 하는 방법과

거래소(openSea)에서 권한을 위임할 수 있도록 하는 로직을 간단하게 짜봅시다.

 

물론 다음시간에!