-
ERC-721 살펴보기BlockChain Tech 2019. 3. 31. 18:28
ERC-721
- Non-Fungible Token(대체 불가능한 토큰) 이다.
대체 불가능하다는 것은 무엇일까? 기존 ERC20과 비교해서 생각해보면 쉬울 것 같다.
ERC721 의 경우 mapping 타입의 변수[토큰 아이디] = 주소 를 대입한다.
ERC20 의 경우 mapping 타입의 변수[주소] = 양 을 대입한다.
ERC20의 경우 토큰의 성질이 없기 때문에 아래의 공식이 성립한다.
류짱의 지갑 류쨩토큰(ERC20) 10개 = 당신의 지갑 류쨩토큰(ERC20) 10개
ERC721의 경우 토큰의 성질이 존재 하기 때문에 위의 공식은 성립되지 않는다.
성질이라는 표현이 엄청나 보이는 것 같지만, 사실 [토큰 아이디] 하나 뿐이다.
실제 CryptoKitty의 경우, [토큰 아이디] 와 Kitty 구조체와 매칭이 되어있다.
TokenID 1인 고양이는 이런이런 속성을 들고 있어!
이런 방식으로 1번 고양이는 1번 고양이 만의 특징을 들고 있고, 어떤 TokenID 고양이와도 대체 될 수 없는 유니크함을 갖게 된다.
아! 물론, 엄청난 확률을 뚫고 모든 속성이 같을 수는 있겠지만 TokenID 만큼은 겹칠 수가 없다.
(개발자가 실수 하지 않는 한.. 혹은 DApp 의 컨셉이 겹칠 수 있다거나..?)
예제를 통해 조금 더 공감해보자.
최근에 '김씨일가 세습을 끊어버릴 신념으로 결집된 국내외 조직' 자유조선에서 G-Visa라는 ERC-721을 판매하기 시작했다.
(아 물론.. 스캠일 수도 있지만, 난 샀다!)
ERC-721을 공부하던 도중 만난 프로젝트여서 그런지 흥미를 갖고 봤지만, 소스코드는 공개되어있지 않았다. 그래도 위에서 말한 TokenID 의 특징은 살펴 볼 수가 있었다.
Token_id는 추후 자유조선이 되면 여권 번호에 적혀질 번호이다. 본인의 여권 번호는 109번이다.
그 누구도 이더리움 위에 있는 0x9044~로 시작 되는 GVISA Contract에서 109번 번호를 갖는 토큰은 소유할 수 없다.
이것이 대체 불가능한 속성이다.
대체 불가능 하면 어쩔껀데!
사실 많은 사람들이 NFT(Non-Fungible Token)에 공감 하지 못한다.
나도 17년 크리스마스에 접한 크립토키티의 소식에 알송달송했었다.
"기념화폐를 수집하거나, 우표를 수집하잖아! 그것 처럼 고양이를 수집하는거야"
- 그건 실물이 있잖아.
NFT를 이야기하면 가장 많이 나오는 이야기가 '실물'에 대한 이야기이다. 하지만, 그 실물에 대해서 우리는 다시 한번 생각해볼 필요가 있을 것 같다. 유니크함이란 꼭, 실물에서 나오는 것일까?
단순한 고양이 특성이라도 그 고양이가 이더리움 위에 존재하는 SmartContract에 기록된다고 하면,
기혁이 집 데스크탑 C드라이브에 메모장에 존재하는 데이터 보다는 값어치가 있을 것 같다.
수집에 대한 욕구는 '실물'로 인하여 이루어지지 않는다. 게임에서 어떤 칭호를 얻기 위해 노력하거나, NPC와의 호감도를 높이기 위해서 유저가 어떠한 행동을 하는 것은 게임에서 존재하는 나의 캐릭터에 대한 유니크함을 부여하고 싶어서 일 것이다.
아무튼 아직은 호불호가 강한 이야기이지만, NFT에 대한 글이 아니기 때문에 여기까지!
ERC-721 Interface
인터페이스만 본다면 굉장히 간단?해 보이지만, 사실 ERC20과 달리 코드양이 꽤 많다.
(기본적인 기능만 추려보았는데 450줄이 거뜬히 넘어갔다.)
기본 기능들은 위와 같다. ERC20에서 보이는 Transfer 함수가 없다.
하지만, TransferFrom이 나름 Transfer의 상위호환이기 때문에 필요가 없을 것 같다.
이것이 표준 인터페이스이고, 이것 이외에 Mint / Burn 등 여러가지 코드들이 추가된다.
ERC20과 달리 명확한 소스코드가 없어서 처음엔 조금 답답했는데.
여러가지 721 Contract 소스들에서 각자의 특징 (키티의 경우 거래소 Contract)들을 삭제하면서 보니, 그래도 통일되는 것들이 있었다.
류RC-721 : https://github.com/JohnsonRyu/CustomERC/blob/master/%EB%A5%98RC721.sol
(
- 그대로 사용하기에는 무리가 있고, Owner 관련 부분 조금만 손보면 가능 합니다.
- mintUniqueTokenTo / mintWithTokenURI 같은 기능을 하고 있습니다. mintWithTokenURI의 경우 Owner 설정이 되어있지 않습니다.
- 추후 Base Code 작업을 하게 되면, 업데이트 해놓겠습니다.
)
'BlockChain Tech' 카테고리의 다른 글
[Klaytn] 대(신)납(부) 기능 (feat. Fee Delegated) (2) 2019.04.06 ERC-165 살펴보기 (0) 2019.03.29 블록체인 Oracle Problem (0) 2019.01.02