[Mastering Ethereum] 10. Tokens -(1)토큰이란?

Woojin Jeong
6 min readFeb 19, 2022

--

이 글은 Mastering Ethereum, by Andreas M. Antonopoulos, Gavin Wood를 참고 및 재구성하여 작성하였습니다.

Overview

10장에서는 토큰의 다양한 용도와 토큰 생성 방법을 살펴보고 토큰의 대체 가능성, 고유성과 같은 속성에 대해 논의합니다. 또한, 이더리움 토큰 표준에 대해 알아보고, 토큰 표준 인터페이스의 확장된 기능들에 대해서도 알아보고자 합니다.

토큰? 코인?

코인이 존재하기 위해서는 ‘메인넷’이 있어야 합니다. 메인넷은 독자적인 구조와 시스템을 갖춘 블록체인 네트워크로, 비트코인과 이더리움이 대표적인 메인넷입니다. 이러한 메인넷에서 사용되는 대표적인 가상자산을 ‘코인’이라고 부릅니다. 토큰과 코인의 가장 큰 차이는 ‘플랫폼의 유무’입니다. 메인넷을 독자적으로 가지고 있는 코인에 반해, 토큰은 다른 블록체인 네트워크를 기반으로 사용합니다. 예를 들어, 이더리움의 기본 코인은 Ether이지만 이더리움 플랫폼 상에서는 BAT 및 Loopring 등의 다양한 토큰들이 구현되고 있습니다.

유틸리티 토큰

특정 플랫폼 블록체인 상의 스마트 컨트랙트로 생성, 관리되는 토큰을 ‘유틸리티 토큰’이라 합니다. 일반적으로 말하는 토큰은 이 유틸리티 토큰을 의미하는 것이고, 현재 존재하는 대부분 토큰들은 이더리움 스마트 컨트랙트를 활용하여 생성되었습니다.

토큰 관련 이슈들

  1. 토큰과 대체성
    특정 토큰을 값이나 기능의 차이 없이 다른 토큰으로 대체할 수 있는 경우 대체가능한 토큰(fungible token, FT)이라 합니다. 그러나, 토큰의 과거 출처를 지속적으로 추적 관리할 수 있다면 그러한 토큰은 대체 가능하지 않은 것이고, 이러한 토큰을 NFT(non-fungible token)라 합니다.
  2. 거래상대방 위험
    거래상대방 위험이란 트랜잭션에서 상대방이 자신의 의무를 이행하지 못할 위험을 의미합니다. 토큰의 경우, 판매자와 수탁자, 구매자가 관련되어 있기 때문에 서로를 신뢰할 수 있는지에 대한 문제가 발생할 수 있습니다.
  3. 내재성
    그러나 블록체인 기반의 토큰은 외재적 자산을 내재적 자산으로 변환하기 때문에 거래상대방 위험이 없습니다. ‘내재성’이란 토큰 내에 자산을 포함하고 있음을 의미합니다. 예를 들어 금괴는 그 자체가 자산이 될 수 있어 내재 가치를 가지지만, 부동산 등기 문서의 경우 내재성이 없는, 외재적 자산입니다.

이더리움 토큰

앞서 설명했듯이, 토큰과 이더(코인)는 다른 개념입니다. 이더를 전송하는 행위는 플랫폼 상의 행위일 뿐, 토큰을 보내거나 소유하는 것이 아닙니다. 이더리움 계정 상의 이더 잔액은 프로토콜 수준에서 처리되는 반면, 토큰 잔액은 스마트 컨트랙트 수준에서 처리됩니다. 즉, 토큰은 소유권 이전 및 접근 권한 등을 포함하는 스마트 컨트랙트에 의해 생성됩니다.

ERC20

사람들이 토큰을 생성하는 목적이 제각기 다르기 때문에 이더리움에서는 토큰 표준을 만들고자 하였습니다. 참고로 이더리움 플랫폼에서 표준을 제안하기 위해 개발자는 EIP (Ethereum Improvement Proposal, 이더리움 개선 제안서)를 제출해야 합니다. 그리고 이것이 승인을 받게 되면 ERC(Ethereum Request for Comments)가 됩니다. ERC20은 2015년 11월 처음 발표되어, 대체 가능한 토큰(FT) 제작의 가이드라인 역할을 하고 있습니다.

ERC20 interface

ERC20은 솔리디티 상에서 컨트랙트로 정의됩니다. 이 컨트랙트가 포함하고 있는 필수 함수들과 이벤트 목록은 아래와 같습니다. 토큰을 만들 때에는 이 ERC20 컨트랙트를 상속받는 형식으로 코드를 작성해야 합니다.

ERC20 workflow: 전송 & 승인 및 전송

ERC20 토큰 표준의 전송 기능에는 두 가지(1.전송, 2.승인 및 전송)가 있습니다. 1.전송(transfer)은 지갑에서 다른 지갑으로 토큰을 보내는데 사용되는 간단한 방식입니다. 예를 들어, 앨리스가 밥에게 10개의 토큰을 보내고 싶다면 앨리스의 잔액(-10), 밥의 잔액(+10)을 조정하고 전송 이벤트를 발행하는 토큰 컨트랙트를 만들면 됩니다. 2.승인 및 전송은 승인 후 전송(transferFrom)하는 두 과정으로 이루어져 있습니다. 회사가 ICO용 토큰을 판매하는 경우 주로 사용하는 방식이며, 토큰 컨트랙트의 소유자 잔액에서 토큰 구매자 잔액으로 일정량의 토큰을 양도할 수 있습니다.

ERC20 토큰 만들어보기

책에서는 “Mastering Ethereum Token”의 준말인 MET 토큰을 직접 구현해 보았습니다. 이 부분에 대한 자세한 내용은 후속 글에서 다루도록 하겠습니다.

토큰 표준 확장

Openzeppelin에서는 ERC20을 컨트랙트에 쉽게 적용할 수 있도록 도와주고, 블록체인 상에서 토큰을 제작할 때 필요한 기능을 지원하기 위해 토큰 인터페이스의 확장된 구현을 만들었습니다. 확장된 기능들은 다음과 같습니다.

  1. 소유자 제어(owner control) : 특정 주소(집합), 블랙리스트, 허용 목록 작성, 복구 등과 같은 특수 기능 제공하는 기능
  2. 소각(burning): 토큰을 고의로 파괴할 수 있는 주소로 전송하거나 잔액 지우고 공급 줄임으로써 의도적으로 토큰 파괴하는 기능
  3. 발행(minting): 예측 가능한 비율 또는 토큰 생성자의 승인을 통해 토큰 총 공급량을 추가하는 기능
  4. 크라우드 펀딩(crowd funding): 경매, 시장판매, 역경매 등을 통해 판매용 토큰을 제공할 수 있는 기능
  5. 캡 (caps): minting의 반대 개념, 총 공급량에 대해 미리 정의된 불변의 제한을 설정할 수 있는 기능
  6. 복구 백도어(recovery backdoors): 자금 복구, 지정된 주소(집합)에 의해 활성화될 수 있는 토큰을 소거하는 기능
  7. 화이트리스트: 토큰 전송 등의 작업을 특정 주소로 제한할 수 있는 기능
  8. 블랙리스트: 특정 주소 허용하지 않아 토큰 전송을 제한할 수 있는 기능

ERC20의 한계

ERC20 토큰의 가장 큰 문제는 “토큰의 유실 가능성”입니다. 토큰의 전송이 토큰을 받는 주소와 무관하게 이루어지기 때문에 유실 가능성이 있습니다. 이더의 경우, 이더를 사용하지 않는 컨트랙트로 잘못 전송하게 되면 트랜잭션이 되돌려집니다. 그러나 ERC20 토큰은 토큰을 받는 주소에 관계없이 토큰을 전송할 수 있습니다. 만약, 수신자의 주소에 ERC20을 다룰 수 있는 인터페이스가 없다면 토큰은 그대로 잠기게(유실) 되는 것입니다. 이러한 문제들을 해결하기 위해 ERC223, ERC777, ERC721 등의 다양한 토큰 표준들이 제안되었으며, 각각에 대한 세부적인 내용은 책을 참고하시기 바랍니다.

Reference

https://github.com/ethereumbook/ethereumbook/blob/develop/10tokens.asciidoc

--

--