ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ERC-721 살펴보기
    BlockChain Tech 2019. 3. 31. 18:28

    https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md

     

    ERC-721

    Non-Fungible Token(대체 불가능한 토큰) 이다.

     

    대체 불가능하다는 것은 무엇일까? 기존 ERC20과 비교해서 생각해보면 쉬울 것 같다.

     

    침착하고 천천히 살펴보자.

     

    ERC721 의 경우 mapping 타입의 변수[토큰 아이디] = 주소 를 대입한다.

    ERC20 의 경우 mapping 타입의 변수[주소] = 양 을 대입한다.

     

    ERC20의 경우 토큰의 성질이 없기 때문에 아래의 공식이 성립한다.

    류짱의 지갑 류쨩토큰(ERC20) 10개 = 당신의 지갑 류쨩토큰(ERC20) 10개

     

    ERC721의 경우 토큰의 성질이 존재 하기 때문에 위의 공식은 성립되지 않는다.

    성질이라는 표현이 엄청나 보이는 것 같지만, 사실 [토큰 아이디] 하나 뿐이다.

     

    CryptoKitty SmartContract에 있는 Kitty 구조체

    실제 CryptoKitty의 경우, [토큰 아이디] 와 Kitty 구조체와 매칭이 되어있다.

    TokenID 1인 고양이는 이런이런 속성을 들고 있어!

     

    이런 방식으로 1번 고양이는 1번 고양이 만의 특징을 들고 있고, 어떤 TokenID 고양이와도 대체 될 수 없는 유니크함을 갖게 된다.

    아! 물론, 엄청난 확률을 뚫고 모든 속성이 같을 수는 있겠지만 TokenID 만큼은 겹칠 수가 없다.

    (개발자가 실수 하지 않는 한.. 혹은 DApp 의 컨셉이 겹칠 수 있다거나..?)

    예제를 통해 조금 더 공감해보자.

    https://visa.cheollimacivildefense.org/

     

     최근에 '김씨일가 세습을 끊어버릴 신념으로 결집된 국내외 조직' 자유조선에서 G-Visa라는 ERC-721을 판매하기 시작했다.

    (아 물론.. 스캠일 수도 있지만, 난 샀다!)

    ERC-721을 공부하던 도중 만난 프로젝트여서 그런지 흥미를 갖고 봤지만, 소스코드는 공개되어있지 않았다. 그래도 위에서 말한 TokenID 의 특징은 살펴 볼 수가 있었다.

     

    Token_id로 NFT 속성을 갖게 되었다.

    Token_id는 추후 자유조선이 되면 여권 번호에 적혀질 번호이다. 본인의 여권 번호는 109번이다.

    그 누구도 이더리움 위에 있는 0x9044~로 시작 되는 GVISA Contract에서 109번 번호를 갖는 토큰은 소유할 수 없다.

    이것이 대체 불가능한 속성이다.

    대체 불가능 하면 어쩔껀데!

     사실 많은 사람들이 NFT(Non-Fungible Token)에 공감 하지 못한다.

    나도 17년 크리스마스에 접한 크립토키티의 소식에 알송달송했었다.

     

    히읽 이 친구가 17만 달러(약 1억 9천 만원)에 팔렸다능.

    "기념화폐를 수집하거나, 우표를 수집하잖아! 그것 처럼 고양이를 수집하는거야"

    - 그건 실물이 있잖아.

     

    NFT를 이야기하면 가장 많이 나오는 이야기가 '실물'에 대한 이야기이다. 하지만, 그 실물에 대해서 우리는 다시 한번 생각해볼 필요가 있을 것 같다. 유니크함이란 꼭, 실물에서 나오는 것일까?

     

    단순한 고양이 특성이라도 그 고양이가 이더리움 위에 존재하는 SmartContract에 기록된다고 하면,

    기혁이 집 데스크탑 C드라이브에 메모장에 존재하는 데이터 보다는 값어치가 있을 것 같다.

     

    수집에 대한 욕구는 '실물'로 인하여 이루어지지 않는다. 게임에서 어떤 칭호를 얻기 위해 노력하거나, NPC와의 호감도를 높이기 위해서 유저가 어떠한 행동을 하는 것은 게임에서 존재하는 나의 캐릭터에 대한 유니크함을 부여하고 싶어서 일 것이다.

     

    아무튼 아직은 호불호가 강한 이야기이지만, NFT에 대한 글이 아니기 때문에 여기까지!

    ERC-721 Interface

    ERC721 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

    댓글

Developer RyuK