일요일, 12월 16

[KUBL] EIP를 통해 알아본 이더리움 ERC 토큰

0

ERC-20, ERC-721이 무엇일까?

 

ERC-20 기반의 토큰, ERC-721 기반의 토큰…

ICO에 관심이 있는 분은 물론이고 블록체인에 입문하는 사람들도

한 번쯤은 들어봤을만한 이름인데요,

막상 ERC-20, ERC-721 토큰이 무엇인지 물어봤을 때 답하기 좀 어렵다고 생각됩니다.

그래서 이번 아티클에서 ERC-20, ERC-721이 무엇인지 알기 쉽게 설명해 드리겠습니다!

 

우선 한 마디로 요약하면

ERC-20, ERC-721는 자유로운 토큰 규격입니다.

토큰을 만드는데 일종의 가이드라인을 제공하는 셈이죠.

ERC-20에서 ERC란?

 

우선 ERC-20에서 정의하는 규격을 알아보기 전에 ‘ERC’가 무엇인지 알아보겠습니다.

ERC는 Ethereum Request for Comment의 약자입니다.

이더리움은 알겠고 Request for Comment는 좀 생소한 어구인데요,

Wikipedia에서 Request for Comment를 찾아보면 다음과 같이 나옵니다.

 

(출처: 위키피디아)

 

쉽게 말하면 “새로운 아이디어를 내가 제시했으니까 어떤지 평가 좀 해줘!” 라는 글을 작성해서 올린 후에 많은 사람들이 괜찮다고 생각하면 인터넷 표준이 되는 것을 RFC라고 합니다.

 

ERC는 이더리움 RFC니깐 인터넷이 아닌 이더리움의 표준이 될만한 내용들이라는 것이죠.

 

ERC-20 == EIP-20

 

ERC는 EIP의 종류 중 하나입니다.

EIP는 Ethereum Improvement Proposal로 문자 그대로 이더리움 개선안입니다.

EIP는 Standard Track EIP, Informational EIP, Meta EIP로 3가지 종류로 구분되어지는데요, ERC는 Standrad Track EIP에 해당됩니다.

 

위에 있는 사진은 개발자들이 주로 사용하는 Github라는 사이트에 올라온 EIP들입니다,

 

EIP에는 첫 EIP-1 부터 다양한 개선안들이 제시되어 왔으며 순서에 따라 번호를 받게 됩니다.

ERC-20은 20번째 EIP이고, ERC 형태이기 때문에 ERC-20이라는 이름이 붙은 것입니다.

 

EIP문서를 분석하면서 알아보는 ERC-20

 

ERC가 무엇인지 알아봤으니 ERC-20과 ERC-721 중

먼저 등장한 ERC-20이 무엇인지 알아봅시다.

 

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

위 링크로 들어가면 EIP-20에 어떤 내용이 있는지 알 수 있습니다.

 

EIP-20의 Abstract를 보면

‘This standard provides basic functionality to transfer tokens’ 이라고 명시되어 있는데,

ERC 20이 ‘토큰을 전송할 수 있는 기본적인 기능에 대한 규격’임을 알 수 있습니다.

 

그러면 왜 ERC-20 규격을 따라야 할까요?

아쉽게도 답은 정해져 있지 않습니다. “ERC 20을 기반으로 한 토큰이라면 소스코드를 직접 안 봐도 나름 믿을 수 있겠구나!” 라는 안도감을 ERC-20 토큰을 사용하는 사람들에게 줄 수 있기 때문에 따른다고 생각하시면 될 것 같습니다.

 

ERC-20 구현 함수 분석

 

EIP-20 문서에서 OPTIONAL이라고 명시되어있는 함수를 제외하고 그 나머지 함수들을 구현해야만 ERC-20 토큰을 만들 수 있습니다.

 

(출처: Openzepelin)

 

결론적으로 위에 있는 코드를 채워 넣으면 됩니다. Contract명 자리 옆에 Interface라고 되어 있는데, 객체지향 프로그래밍을 해보신 분은 익숙하겠지만 비개발자 대상으로 쉽게 말하면 function이라고 되어있는 부분에 코드를 추가로 작성해야 하는 것입니다.

 

예를들어

function totalSupply() external view returns (uint256);

라고 되어있는데

 

function totalSupply() external view returns (uint256){

           require(msg.sender == creator);

           return totalSupply;

}

이런 식으로 안에 코드를 채워 넣어야 하는 것이죠.

 

해당 함수가 어떤 기능을 하는지 EIP 20을 참고해서 정리해보았습니다.

 

종합하면 토큰의 총 발행량을 보여주는 기능(a), 해당 주소의 토큰 보유량을 보여주는 기능(b), 토큰을 다른 주소에 보낼 수 있는 기능(d)이 있습니다.

좀 특이한 점은 ERC-20에 제3자(spender)가 토큰을 대신 전송하는 기능(c)이 있다는 것입니다. 필수적인 기능으로 보이지 않지만 ERC-20 규격에는 이것을 필수(OPTIONAL 표시가 없음)로 정의하라고 명시되어 있습니다.

 

사실 Abstract에 ‘allow tokens to be approved so they can be spent by on-chain third party’라고 명시되어 있습니다. 이는 ERC-20이 제 3자가 토큰을 소비할 수 있는 기능을 포함한다는 의미입니다.

 

다만 Etherscan에 올라오는 ERC-20 토큰들의 코드를 보면 제3자가 토큰을 대신 전송하는 기능이 구현되지 않은 경우가 종종 있습니다.

 

혹은 Etherscan에 올라와있는 어떤 토큰의 코드처럼 ‘allowance’(c)를 함수로 구현하지 않고 mapping을 사용해서 기능상으로는 동일한 토큰을 만드는 경우도 있네요.

 

맨 처음에 제가 “ERC-20, ERC-721는 자유로운 토큰 규격입니다.” 라고 언급했는데요,

ERC-20 토큰의 규격을 좀 변형해서 구현하거나 심지어 빼는(…) 경우가 있기 때문에 자유롭다고 말한겁니다.

 

여기까지 ERC-20에 대한 전반적인 내용을 알아봤습니다.

궁금한 점이나 문의사항은 zxoihojin@gmail.com으로 연락주시기 바랍니다.

감사합니다.

 

  • 본 분석칼럼은 Tconomy 의 분석 분야 기여파트너인 고려대학교 블록체인학회(KUBL)의 지적재산입니다. 이 분석은 분석파트너의 판단이며 Tconomy 의 편집 방향이나 의견과 일치하지 않습니다.
Share.

Comments are closed.