‘마스터링 이더리움’ 세미나 8 – 10장. 토큰

이번 세미나에서는 ’10장. 토큰’을 다룹니다. 이더리움 개발에 입문하시게 되면 자주 작성하는게 토큰 컨트랙트입니다. 그 중 ERC20 토큰은 기본 중에 기본 입니다. 본문 인용은 반말체로 제 의견이 들어가 있는 부분은 존댓말체로 정리합니다.

토큰 – 사용과 소유에 대한 제한이 없어지면 ‘사소한 가치’에 머물러 있어야 할 이유가 더는 없어진다.

 

저는 블록체인의 존재이유를 ‘가치의 이동’으로 보기 때문에 토큰을 ‘가치에 대한 구체화된 표현’으로 정의합니다. 가치의 이동이 가능하려면 먼저 대상(추상적 이든 물리적 이든)을 구체적인 가치로 표현할 수 있어야 합니다. 

이동을 이야기할 수 있으려면 소유가 전제되어야 합니다. 토큰의 모든 기능은 소유권을 기반으로 합니다.

 

아래 인용한  토큰 사용처들을 ‘가치의 이동’, ‘대상을 구체적인 가치로 표현’에 초점을 맞춰서 깊이 생각해 보도록 합니다. 토큰 – 화폐, 자원, 자산, 접근, 지분, 투표, 수집, 신원, 증명, 유틸리티

  • Currency
    • A token can serve as a form of currency, with a value determined through private trade.
  • Resource
    • A token can represent a resource earned or produced in a sharing economy or resource-sharing environment; for example, a storage or CPU token representing resources that can be shared over a network.
  • Asset
    • A token can represent ownership of an intrinsic or extrinsic, tangible or intangible asset; for example, gold, real estate, a car, oil, energy, MMOG items, etc.
  • Access
    • A token can represent access rights and grant access to a digital or physical property, such as a discussion forum, an exclusive website, a hotel room, or a rental car.
  • Equity
    • A token can represent shareholder equity in a digital organization (e.g., a DAO) or legal entity (e.g., a corporation).
  • Voting
    • A token can represent voting rights in a digital or legal system.
  • Collectible
    • A token can represent a digital collectible (e.g., CryptoPunks) or physical collectible (e.g., a painting).
  • Identity
    • A token can represent a digital identity (e.g., avatar) or legal identity (e.g., national ID).
  • Attestation
    • A token can represent a certification or attestation of fact by some authority or by a decentralized reputation system (e.g., marriage record, birth certificate, college degree).
  • Utility
    • A token can be used to access or pay for a service.

토큰은 대체 가능한 것(fungible)과 대체 불가한 것(non fungible)한 것으로 구분할 수 있습니다. 다른 것으로 대체할 수 있는 토큰이 있고 다른 것으로 대체할 수 없는 토큰이 있다는 것입니다. 원화 대 원화와 같이 하나의 토큰 컨트랙트는 한 유형의 토큰을 다룹니다. 따라서 ‘다른 것으로’는 같은 유형의 토큰들 중 다른 것으로라는 의미 입니다. 김길동이 가지고 있는 A 토큰들을 박길동이 가지고 있는 A 토큰들로 대체할 수 있다는 것입니다. 대체할 수있기 때문에 다른 고려 없이 단순 수량으로만으로 교환할 수 있게 됩니다.

fungible의 의미가 와 닿을 때까지 아래 인용한 본문 내용을 여러 번 읽습니다. non fungible에 대해서는 어떤 이유로 대체 불가한 것일까를 고민해 봅니다.

Tokens are fungible when we can substitute any single unit of the token for another without any difference in its value or function. Non-fungible tokens are tokens that each represent a unique tangible or intangible item and therefore are not interchangeable.

 

자산을 토큰화할 때는 거래 상대방 위험을 고려해야 합니다. 토큰이 표상하는 자산을 누가 수탁하고 있는가와 그 자산에 어떤 규칙이 적용되는지를 이해해야 합니다. 거래상대방 위험은 거래와 관련된 처리의 일부가 오프체인(블록체인 밖)에서 일어나기 때문에 제 3자를 신뢰해야 하는 문제 때문에 발생합니다.

자산에 대한 증서로 토큰을 사용하려는 시도가 성공하려면 거래상대방 위험을 온체인에서 해결해야 합니다. 개인적으로 아직까지 이러한 시도가 성공적인 경우를 본적은 없습니다.

 

토큰은 그 자체로 가치가 있는 것과 단지 가치 있는 자산을 나타내는 것으로 구분할 수도 있습니다. 전자를 가치가 내재화된 토큰이라 하고, 후자를 가치가 외재화된 토큰이라고 합니다. 내재적 가치를 갖는 토큰은 그 자체로 가치를 갖고 있기 때문에 거래상대방 위험이 없습니다.

  • 외재적 자산은 수탁자가 보유하거나, 외부 레지스트리에 기록되거나, 블록체인의 외부의 법률 및 정책에 의해 통제되므로 추가적인 거래상대방 위험이 있다.  블록체인 기반 토큰의 가장 중요한 파급 효과 중 하나는 외재적 자산을 내재적 자산으로 변환하여 거래 상대방 위험을 제거하는 능력이다. 좋은 예는 회사의 지분(외재적)을 DAO 또는 유사한 (내재적) 조직의 지분 또는 투표 토큰으로 전환하는 것이다.
    • 가치가 외재화된 토큰을 발행하면서 마치 블록체인을 적용하면 가치가 자동적으로 내재화되는 것처럼 오해해서는 안 됩니다. 가치를 갖는 자산을 단순하게 표현하는 토큰이 아니라 블록체인을 적용했을 때 내재화된 토큰이 되도록 해야 한다는 것입니다.

 

토큰은 유틸리티 토큰과 증권형 토큰으로 구분할 수도 있습니다. 유틸리티 토큰은 서비스를 사용하는데 사용하는 토큰이고, 증권형 토큰은 주식과 같이 소유권에 대한 지분을 나타내는데 사용합니다.

  • 스타트업의 경우, 각각의 혁신은 그 스타트업의 실패 가능성을 증가시키는 리스크를 불러온다. 만약 여러분이 이미 위험한 창업 아이디어를 가진 유틸리티 토큰을 추가한다면 기반이 되는 플랫폼(이더리움), 광범위한 경제(거래소, 유동성), 규제 환경(지분/상품 규제 당국) 및 기술(스마트 컨트랙트, 토큰 표준)의 모든 위험을 더하는 것이다. 그것은 스타트업에 많은 위험을 안겨준다.
  • 올바른 근거를 가지고 결정하라. 토큰을 사용하지 않으면 애플리케이션이 작동하지 않으므로 토큰을 사용하라. 토큰이 근본적인 시장 장벽이나 접근 권한 문제를 해결한다면 토큰을 채택하라. 만일 유틸리티 토큰을 도입하는 유일한 이유가 자금을 빨리 조성할 수 있고 그것이 주식공모가 아닌 것처럼 위장하기 위한 것이라면 그런 토큰은 도입하지 마라. 

 

유틸리티성 토큰으로 ICO한 대부분의 프로젝트들은 위와 같은 권고를 따르지 않았습니다. 블록체인 필요 없는 서비스들에 말도 안 되는 토큰 이코노미를 들고 나와서 자금 조달의 수단으로 토큰을 사용했습니다. 대부분의 프로젝트는 2년도 버티지 못하고 유명무실하거나 흔적도 없이 사라졌습니다.

디파이(탈중앙 금융) 프로젝트들은 새로운 희망을 줍니다. 탈중앙화와 토큰화에 대한 이해가 어느 정도 갖춰진 시점에서 등장했고, 탈중앙화가 절실히 필요한 분야이기 때문에 억지스러움이 덜 합니다. 아직은 미비하지만 블록체인의 특성과 자연스러운 요구에 의해 등장했고, 다양한 혁신적 도전들이 계속되고 있기 때문에 ICO 프로젝트들 처럼 거품으로 사라지지는 않을 것 같습니다.

이더리움 토큰

이더리움 계정의 이더 잔액은 프로토콜 수준에서 처리되는 반면, 토큰 잔액은 스마트 컨트랙트 수준에서 처리됩니다. 이더는 토큰과 구분하기 위해 코인이라고 부릅니다. 자산(asset)이라는 관점으로 보면 이더와 토큰은 “이더리움 자산”으로 일반화 할 수 있습니다.

 

ERC20 토큰 표준

ERC20은 fungible 토큰을 다루기 위한 컨트랙트 작성을 표준화한 것입니다. fungible 하기 때문에 고유한 특성이 없고 상호 교환이 가능합니다. 고유한 특성이 없기 때문에 계정 잔고로만 소유권이 관리되면 됩니다. 전송이 소유권 이동에 대한 표현임으로 전송은 계정 잔고의 변화로 표현될 수 있습니다.

ERC20 토큰을 가지고 무엇을 할 수 있는지는 ERC20 인터페이스 정의를 보면 됩니다.

토큰은 총 발행량이 있어야하고, 주소 별로 잔액이 관리되어야 합니다. 다른 주소로 토큰을 전송할 수 있어야 합니다. 자신의 토큰을 다른 주소에서 전송할 수 있도록 위임도 가능해야 합니다. 토큰 식별을 위해 토큰 이름, 토큰 심볼이 있어야 하고, fungible 토큰은 분할할 수 있기 때문에 하나보다 작은 단위 즉 소수점을 표현할 수도 있어야 합니다.

 

transfer와 transferFrom을 구분해서 설명해 봅니다. 예로는 그림 10.1을 사용합니다.

 

ERC20 토큰을 구현하는 것은 연습할 때는 직접 작성하지만, 실무에서는 직접 구현하지 말고 오픈 제플린의 ERC20 표준 구현을 사용하도록 합니다.

자체 ERC20 토큰 출시

본문 내용에 따라 꼭 실습합니다. 책이 출판된지 좀 되었기 때문에 변화된 내용들이 있습니다. 실습 하면서 문제가 있는 부분은 인터넷 검색을 통해 해결해 나갑니다.

 

ERC20 토큰 문제

아래 요약한 내용을 다시 한 번 읽어 봅니다.

  • 토큰은 이더와 같은 방식으로 동작하지 않는다.
    • 이더를 보내면 계정 상태가 변경되지만, 토큰을 전송하면 토큰 컨트랙트 상태만 변경된다.
    • 이더는 send 함수에 의해 보내지며 컨트랙트의 payable 함수 또는 외부 소유 주소에 의해 수신된다. ERC20 토큰은 컨트랙트의 transfer 또는 transferFrom을 사용하여 전송된다.

ERC721: 대체 불가능한 토큰(증서) 표준

ERC721은 non fungible 토큰을 작성할 수 있도록 하는 표준입니다.

대체 불가능하다는 것은 고유하다는 것을 의미합니다. 고유하다는 점을 활용하면 증서(deed)의 역할을 할 수도 있고, 디지털 수집품으로 활용할 수도 있습니다. 증서가 되던 수집품이 되던 대상이 있다는 것이니 대상에 대한 정보과 관리되는 것은 당연한 일입니다. 대상의 정보를 메타데이터라고 합니다.

ERC721 인터페이스를 살펴봄으로 ERC721이 하고자 하는 바를 알 수 있습니다.

ERC20에다 고유해야 함이 반영되면 됩니다.

고유해야 하기 때문에 식별자가 필요합니다. 식별자로 검색 가능하도록 식별자는 인덱싱 되어야 합니다.

전송은 고유하게 식별되는 어떤 토큰을 전송하는 것입니다. 토큰 소유자가 누구인지 알 수 있어야 합니다. 메타데이터 중 이미지와 같은 것들은 별도 uri에서 관리할 수도 있어야 합니다.

ERC721도 실무에서는 오픈제플린의 ERC721 표준 구현을 사용하도록 합니다.

토큰 인터페이스 표준 확장

토큰을 처리하다보면 추가적으로 필요한 기능들이 있기 때문에 표준 인터페이스를 확장할 필요가 있습니다.

아래 인용한 본문 내용을 통해 대표적인 확장 기능들에 어떤 것들이 있는지 살펴봅니다.

  • Owner control
    • The ability to give specific addresses, or sets of addresses (i.e., multisignature schemes), special capabilities, such as blacklisting, whitelisting, minting, recovery, etc.
  • Burning
    • The ability to deliberately destroy (“burn”) tokens by transferring them to an unspendable address or by erasing a balance and reducing the supply.
  • Minting
    • The ability to add to the total supply of tokens, at a predictable rate or by “fiat” of the creator of the token.
  • Crowdfunding
    • The ability to offer tokens for sale, for example through an auction, market sale, reverse auction, etc.
  • Caps
    • The ability to set predefined and immutable limits on the total supply (the opposite of the “minting” feature).
  • Recovery backdoors
    • Functions to recover funds, reverse transfers, or dismantle the token that can be activated by a designated address or set of addresses.
  • Whitelisting
    • The ability to restrict actions (such as token transfers) to specific addresses. Most commonly used to offer tokens to “accredited investors” after vetting by the rules of different jurisdictions. There is usually a mechanism for updating the whitelist.
  • Blacklisting
    • The ability to restrict token transfers by disallowing specific addresses. There is usually a function for updating the blacklist.

 

About the Author
(주)뉴테크프라임 대표 김현남입니다. 저에 대해 좀 더 알기를 원하시는 분은 아래 링크를 참조하세요. http://www.umlcert.com/kimhn/

Leave a Reply

*