그래서 NFT는 뭐가 다를까?
해당 글은 Wang, Qin, et al. “Non-fungible token (NFT): Overview, evaluation, opportunities and challenges.”를 참고하여 작성하였습니다.
서론
NFT 시장은 가파르게 몸집을 키워나가고 있다. 투자나 암호자산에 관심이 없는 사람도 뉴스나 인터넷에서 쉽게 NFT에 대한 내용을 접할 수 있을 만큼 최근 NFT에 대한 관심은 어느때보다 뜨겁다.
본 글의 목적은 NFT의 기술적 기반에 대해 이해할 수 있도록 돕는 것이다. NFT의 정의부터, ERC-20과 ERC-721, 그리고 ERC-1155의 차이점을 바탕으로, NFT가 기존 FT들에 비해 어떤 차이점이 있는지를 알아보고자 한다.
1. NFT란 무엇인가
NFT는 EIP-721에서 처음 제안된 개념으로, Non-Fungible Token 의 약자이다. ‘대체 불가능한 토큰’이라는 뜻인데, 이는 초심자가 이해하기 어려울 수도 있는 두가지 내용을 담고 있다. 대체 불가능하다는 것은 어떤 의미이며, 토큰은 또 무엇인가?
토큰이란 무엇인가? 토큰은 코인이랑 다른가? 사실 많은 경우 혼용되지만, 명확한 차이가 있다고 하기도 한다. 코인은 독립된 블록체인 네트워크(메인넷)을 소유한 것들을 말한다. 비트코인(BTC), 이더리움(ETH)이 대표적인 예이다. 반면 토큰은 자체 메인넷을 가지고 있지 않으며, 다른 코인 플랫폼을 기반으로 DAPP (Decentralized Application)에서 사용 가능하게끔 개발된 것들을 일컫는다. 토큰에서 코인으로 전환하는 경우도 있고, 다른 코인 플랫폼으로 이전하거나 전환하는 경우도 있다.
위와 같이 토큰의 의미를 코인과 구분하여 분류 하기도 하지만, 기술적으로 말하자면 우리가 코인이라고 부르는 것들도 토큰이다. 앞으로 본 글에서 등장하는 토큰의 의미는 이에 해당하며, 쉽게 디지털 세계의 증거(혹은 가치)를 담는 그릇 정도로 이해해도 좋다. 10만원짜리 수표는 현금 10만원의 가치를 담고 있고, 운전면허증이 이 사람이 운전을 할 수 있는 기준에 부합한다는 의미를 담고 있으며, 호텔 키는 이 사람이 해당 객실에 대한 이용 권리를 가지고 있다는 의미를 담고 있다. 디지털 세계에서 토큰은 어떤 특정 가치나 의결권, 지분 등 다양한 것을 담는 그릇이 된다. 경제적으로만 이야기 하자면, 법정 화폐의 면모를 띄고 있으면서도, 주식의 면모를 띄고 있기도 하다고 할 수 있다.
토큰의 역할은 그 생태계와 기능에 따라 다양하다. 토큰은 특정 역할에 국한되지 않으며, 블록체인 생태계 내에서 광범위한 기능을 처리할 수 있다. 기능의 몇가지 예시는 다음과 같다.
- 토큰은 블록체인 어플리케이션의 게이트웨이 역할을 하기도 한다. DAPP에 접근하기 위해서는 토큰이 필요하다.
- 토큰은 특정 투표권(의결권)을 보유하기 위한 개인의 자격을 나타낼 수 있다. EOS의 경우, 해당 토큰을 사용하면 개인이 블록 생성자를 투표할 수 있다.
- 토큰은 보유자의 사용자 경험을 풍부하게 하는 엔티티 역할을 하기도 한다. 몇몇 토큰을 소유하면, 특정 서비스를 더 원할하게 쓸 수 있다는 말이다.
- 화폐로 활용되기도 한다. 스테이블 코인이나 CBDC는 물론, 일반 토큰들도 지불 수단으로 활용될 수 있다.
- 토큰 가치 교환에 사용된다. 즐록체인 생태계에서 가치 교환을 위해 토큰이 사용되어왔으며, 토큰은 응용 프로그램에서 내부 경제 시스템을 개발하는데 도움을 준기도 한다.
- 소유권을 나타내는 지표로서 사용되기도 한다. 특정 사용자에게 고유한 소유권을 나타낼 수 있다.
2. 프로토콜
NFT가 존재하기 위해서는 분산 장부와 P2P 네트워크에서 교환 가능한 트랜잭션이 필요하다. “Non-fungible token (NFT): Overview, evaluation, opportunities and challenges.”에서는 분산 장부를 NFT 데이터를 저장하기 위한 데이터베이스로 설명하고 있다. 이와 같은 토대 위에, 해당 글에서는 NFT 패러다임의 두가지 디자인 패턴을 소개하고 있다.
그 중 첫 번째는 프로토콜을 top to bottom이라 소개하고 있는데, 이는 NFT를 만들고 구매자에게 판매하는 간단하지만 전통적인 방식이다. 두 번째 방식은 bottom to top으로, NFT 템플릿을 만들고, 모든 사람들이 그 위에 NFT를 만들 수 있게 하는 방식이다. 두 가지 방식 모두 블록체인 시스템에 실행되기 위해서는 비슷한 워크플로우를 가지는데, 이는 다른 디자인 방식이 운영 메카니즘을 바꾸지는 않는다는 말이다.
Top to Bottom
이 방식을 따르는 대표적인 예로는 CryptoPunks 가 있다.
- NFT 디지털화 : NFT를 만들고자 하는 사람은 파일, 이름, 설명 등을 확인하고, 해당 raw 데이터를 올바른 형식으로 디지털화 한다.
- NFT 저장 : NFT 소유자는 해당 데이터를 블록체인 외부 데이터베이스나, 블록체인 위에 저장한다. 블록체인 위에 저장할 경우, 가스비가 요구된다.
- NFT 서명 : NFT 소유자가 NFT 데이터의 해시를 포함한 트랜잭션에 서명을 하고, 이를 스마트 컨트랜트로 전송한다.
- NFT 민팅: 스마트컨트랙트가 해당 트랜잭션을 확인하면, 민팅이 시작되고, 거래할 수 있게 된다.
- NFT 확정 : 트랜잭션이 확정되면, 미팅이 완료된다. 이 방식을 따르면, NFT는 고유한 블록체인 주소를 가지게 된다.
Bottom to Top
이 방식에는 NFT 생성자와 NFT 구매자라는 두 가지 행위자가 등장한다. 대부분의 경우에는 NFT 상품이 구매자가 입찰에 참여한 랜덤 시드에 기반하여 생성되기 때문에 NFT 구매자도 NFT 생성에 참여한다고 볼 수 있다.
- 템플릿 생성 : 프로젝트 운영자는 스마트컨트랙트를 통해 몇 가지 기본 규칙들을 만든다. (예를 들면 게임의 요소들 : 캐릭터 스타일, 무기, 악세사리 등…)
- NFT 랜덤화 : 구매자가 입찰에 참여한 특정 NFT 상품에 변형을 가한다. 이런 추가적인 요소들은 미리 만들어진 데이터베이스에서 랜덤으로 선택된다.
- NFT 민팅 : 민팅과 거래가 시작된다.
- NFT 확정 : 모든 과정은 스마트컨트랙트를 통한다. 합의 과정이 끝나면 생성된 NFT는 온체인에 저장된다.
블록체인 시스템의 각 블록은 한정된 용량을 가진다. 한 블록의 용량이 가득 차면, 남은 트랜잭션들은 해당 블록과 연결된 다음 블록에 저장된다. NFT는 블록체인에 기반한 애플리케이션이다. NFT가 민팅되거나 거래되면, 새로운 트랜잭션이 발생하는데, 해당 트랜잭션이 확정되면 NFT의 메타데이터와 소유권에 관한 정보는 새로운 블록에 추가된다. NFT가 거래되더라도, 거래 내역은 모두 그대로 남아있으면서 소유권만 이전되는 것이다.
3. 토큰 표준
이더리움 토큰 표준으로는 대표적으로 앞서 언급했듯 ERC-20, ERC-721, ERC-1155가 있다.
대부분의 토큰 표준은 ERC-20에 기반을 두고 있다. ERC-20은 이더리움 네트워크 상에서 발행될 수 있는 대체 가능한 토큰이 따라야할 요구사항을 명시하고 있다.
- name : 토큰의 이름
- symbol : 토큰의 심볼
- deciamls : 소수점 규칙
- totalSupply : 토큰의 전체 공급량
- balanceOf : 해당 계좌가 보유하는 토큰의 잔고
- transfer : 다른 사용자에게 토큰 전송
- transferFrom : 다른 사용자가 해당 주소의 토큰을 전송
- approve : 스마트 컨트랙트가 인출할 수 있는 토큰 수량의 한도 승인
- allowance : 관리 기능을 부여한 콘트랙트가 인출할 수 있는 한도 확인
반면 ERC-721은 NFT의 표준인데, 말 그대로 이더리움 네트워크 상에서 발행될 수 있는 대체 가능한 토큰이 따라야할 요구사항을 명시하고 있다. ERC-721을 따르는 콘트랙트는 사용자에게 API를 제공하여, 자신만의 대체 불가능한 토큰을 주조하고 메타데이터(이미지, 설명 등..)를 표현할 수 있게 하였다.
- balanceOf : 해당 주소가 보유하고 있는 NFT 토큰의 개수
- ownerOf : 해당 NFT 토큰을 소유하고 있는 주소
- safeTransferFrom : 전송받을 주소가 토큰을 받을 수 있는지 확인 후 전송
- transferFrom : NFT 토큰을 다른 주소로 전송
- approve : 해당 주소에 NFT 토큰 전송 권한을 부여
- setApprovalForAll : 해당 주소에 모든 NFT에 대한 전송 권한 부여 (해제)
- getApproved : 해당 토큰의 전송 권한을 가진 주소
- isApprovedForAll : 6의 권한이 있는지 확인 (T/F)
ERC-1155는 ERC-20과 ERC721 토큰의 혼합 거래를 가능하게 하기 위해 2018년 엔진코인의 CTO Witek Radomski가 개발했다. 이로 인해 아토믹 스왑(서로 다른 코인을 교환하는 행위)시 여러개의 아이템을 거래하는 경우에도 단 두 단계만의 트랜잭션으로 처리할 수 있게 되었다. 또한 하나의 트랜잭션으로 한 명의 수신자에게 원하는 만큼의 아이템을 보낼 수 있는 멀티 전송을 구현하고 있다. ERC-1155 토큰은 ERC-20 토큰 및ERC-721 토큰과 같은 기능을 하거나, 동시에 할 수 있게 하여 효율적이다. 아래 그림을 보면, ERC-20 및 ERC-721의 그것과의 차이점을 확인할 수 있다.
ERC-1155의 경우, FT와 NFT를 교환하거나, NFT를 서로 교환 가능한 여러 토큰(맞는 표현인지 모르겠다)으로 발행하는 것을 가능하게 하는 토큰 표준이다. 또한 ERC-20을 이용한 트랜잭션에서 발생하는 수수료 대비 약 60%의 수수료로 처리 가능하여 네트워크 병목현상 새선 및 효율성이 향상된 ERC-721를 대체할 프로토콜이다.
- Batch Transfer : 다양한 자산을 한번에 전송
- Batch Balance : 다양한 자산의 잔고를 한번에 확인
- Batch Approval : 모든 토큰에 대해 approve
- Hooks : 토큰 훅 수령
- NFT support : 공급이 1이면 NFT로 취급
- Safe Transfer Rules : secure transfer의 규칙들
모든 NFT는 tokenId 라는 uint256형의 변수를 가지는데, 이 변수가 모든 토큰을 유일하고 대체 불가능하게 만든다. 몇몇 NFT들은 이 고유한 tokenId 를 input으로 고유한 이미지를 만들어 NFT화 시키기도 한다. 실제로 ERC-20 토큰과 ERC-721 토큰 사이의 핵심 차이는 바로 이것이다.
4. 결론
앞에서 살펴본 것과 같이, FT(Fungible Token; 대체 가능한 토큰)와 NFT의 가장 큰 차이점은 각 토큰이 서로를 대체할 수 있는 지의 여부이다. FT는 모든 토큰이 같은 가치를 가지기 때문에 이를 교환해도 아무런 의미가 없지만, NFT는 서로 다른 가치를 가지고 있다.
ERC-20 표준과 ERC-721표준에는 큰 기술적 차이가 있을 것으로 예상했으나, 실질적인 차이는 미비한 것으로 보인다. 핵심은 FT와 NFT가 어떤 가치를 담고 있느냐에 달렸을 것이며, 그 가치를 담고 있는 그릇의 특성 (대체 가능한지의 여부) 정도의 차이가 전부인 것 같다.
4. 참조
- Wang, Qin, et al. “Non-fungible token (NFT): Overview, evaluation, opportunities and challenges.” arXiv preprint arXiv:2105.07447 (2021).
- https://101blockchains.com/fungible-vs-non-fungible-tokens/
- https://academy.binance.com/ko/articles/an-introduction-to-erc-20-tokens
- https://brunch.co.kr/@curg/20
- https://ethereum.org/en/developers/docs/standards/tokens/erc-20/
- https://ethereum.org/en/developers/docs/standards/tokens/erc-721/
- https://ethereum.org/en/developers/docs/standards/tokens/erc-1155/\
- http://wiki.hash.kr/index.php/ERC-1155