ERC 721
ERC-721
ERC-721은 EIP-721에서 제안된 “증서로도 알려져 있는 대체 불가능한 토큰을 위한 표준 인터페이스”로, 여기서 대체 불가능한 토큰은 NFT(Non-Fungible Token)이다.
NFT를 통해 디지털 혹은 물리적 자산에 대한 소유권을 나타낼 수 있으며, 각각의 토큰 하나하나가 고유하고 식별할 수 있다.
ERC-721 vs ERC-20
ERC-721은 ERC-20을 기반으로 생성되었다. 그러나 ERC-20과 비교했을 때 “대체 가능 여부”에 따라 비교할 수 있다.
ERC-20은 NFT와 비교했을 때 FT(Fungible Token)라고도 불린다. 즉, ERC-20은 ERC-721과 비교했을 때 “대체 가능한” 토큰이다. 따라서 ERC-20은 화폐처럼 완전히 같은 가치를 가지며, 하나의 토큰이 다른 토큰을 대체할 수 있는 반면, ERC-721은 각 토큰이 가지는 성질은 고유하며, 서로 다른 토큰이 갖는 가치가 다르다는 점에서 차이가 있다.
ERC-721 코드 분석(OpenZeppelin - ERC721.sol)
ERC721 - OpenZeppelin with Truffle
IPFS와 NFT
IPFS는 모든 컴퓨터를 연결하고자하는 분산된 P2P 파일 시스템이다.
IPFS 특징
- 중앙화된 서버 없이 P2P 통신으로 실현한 더 빠르고 안전하고 열린 네트워크이다.
- 고용량 파일을 빠르고 효율적으로 전달할 수 있으며(BitSwap), 파일들의 중복을 알 수 있기 때문에 저장소 또한 효율적으로 사용가능하다(Merkle DAG, contents-addressed).
- IPFS 상에 업로드된 파일은 영원히 기록되며, 파일을 원하는 만큼 지켜낼 수 있다. 또한 파일 버전 관리도 가능하다.
- 인터넷에 원활하게 접속할 수 없는 상황이라도 IPFS 생태계는 유지된다.
IPFS 동작 원리
- 각각의 파일은 여러 개의 블록으로 이루어져 있으며, 각각의 블록은 해시로 표현된 고유의 이름이 있다.
- IPFS는 모든 파일의 이름을 데이터베이스 속에 저장하며, 동일 파일의 중복을 배제하며, 각 파일의 버전 정보를 트래킹한다.
- 각 노드는 본인이 관심 있는 파일만 저장소에 보관하며, 인덱싱 정보를 통해 누가 어떤 파일을 저장하고 있는지 알 수 있다.
- 네트워크에서 파일을 찾기 위해, 파일명을 조회하고 해당 파일을 가진 노드를 물어노는 형식이다.
- IPNS를 통해 모든 파일명은 인간이 읽기 쉬운 형태로 변환 가능하다.
NFT with IPFS
- IPFS에 파일을 업로드시, 획득한 파일의 고유한 해시값을 NFT에서 tokenURI로 사용함으로써 온체인 NFT를 구현할 수 있다.
- IPFS에 파일을 업로드시, 파일을 수정할 수 없다.
- 제공하려는 NFT의 특징에 따라 IPFS를 선택할 수도, s3버킷과 같은 클라우드 컴퓨팅을 사용할 수 있다.
Opensea를 활용한 NFT 발행 확인(Goeril Testnet, IPFS)
위와 같이 간단한 발행 코드를 배포한다.
배포가 완료되면 mintNFT 함수를 통해 NFT를 발행할 수 있는데,
- Recipient : goeril 주소
- tokenURI : “111”
로 Minting을 테스트한다.
해당 트랜잭션이 정상적으로 완료되면 컨트랙 주소를 통해 해당 컨트랙의 NFT를 https://testnets.opensea.io/ 에서 확인할 수 있다.
그러나 위와 같이 토큰은 아무런 정보도 없는데, 이는 발행 시, NFT에 고유성을 부여하는 정보를 담고 있는 tokenURI를 111로 의미없는 정보로 지정했기 때문이다.
TokenURI은 JSON 형식으로
{
"name" : "Test minting", // 토큰 이름
"description" : "opensea minting test with IPFS", // 토큰 설명
"image": "https://ipfs.io/ipfs/QmYtZ5mPAXFjq6ka5H9ygr9LKHnJkaoX5tpubEj8wYo1qb?filename=dog.jpg", // 이미지 URI
"attributes": [ // NFT에 고유성을 부여하는 특성
{
"dog": "dog"
}
]
}
위와 같이 구성된다. 따라서 minting시 해당 JSON 파일의 링크를 tokenURI로 발행한다면 유효한 정보를 가지고 있는 NFT를 opensea에서 확인할 수 있다.
따라서 링크를 얻는 방법은 클라우드 s3, IPFS등이 있지만 여기서는 IPFS를 활용하여 이미지URI, tokenURI Json 파일의 URI를 획득하여 minting함으로써 opensea에서 확인해본다.
먼저 사용할 이미지를 IPFS에 업로드한다.(IPFS Desktop 설치)
이후 해당 이미지 URI를 tokenURI에 적용하기 위해 이미지 링크를 복사한다.
이후 위의 tokenURI 형식에 맞춰 tokenURI JSON 파일을 생성 및 작성한다.
위와 같이 작성이 완료되면, 작성된 JSON 파일을 tokenURI에 넣기 위해, IPFS에 업로드하고 이미지 링크 획득 과정과 같이 링크를 획득한다.
마지막으로 mintNFT 함수에서
- Recipient : goeril 주소
- tokenURI : 획득한 tokenURI 주소
를 입력하고 NFT 발행을 진행한다.
위와 같이 minting이 완료되면 opensea에서 해당 컨트랙을 조회한 후, 유효한 정보를 가진 NFT가 발행됨을 확인할 수 있다.
본 포스팅은 코드스테이츠 BEB 과정을 수강하며 작성한 글입니다.