kkamagi's story

IT, 정보보안, 포렌식, 일상 공유

Blockchain & CryptoCurrencies

ERC-20 토큰이란?

까마기 2022. 2. 14. 21:38
반응형

이더리움과 ERC20 배경
- 2014년 비탈릭 부테린이 이더리움을 만들었으며, 이는 탈중앙화 애플리케이션(DApps) 출시를 위한 오픈 소스 플랫폼으로 자리매김하고 있습니다. 비트코인 프로토콜의 확장성 부족은 부테린이 새로운 블록체인을 만들고자 한 주된 동기였습니다.
출시 이후, 이더리움 블록체인은 개발자, 기업, 사업가를 매료시켰으며, 사용자가 출시하는 스마트 콘트랙트 및 분산화된 애플리케이션 산업 성장을 주도하고 있습니다.
이번 아티클에서는 토큰을 생성하는 중요한 프레임워크인 ERC-20 표준을 살펴볼 것입니다. 이는 이더리움 네트워크에 특화된 것이지만, 해당 프레임워크는 바이낸스 체인 BEP-2와 같은 다른 블록체인 표준에도 영감을 주었습니다.

 

ERC-20은 무엇을 상징하나요?
이더리움에서 ERC는 Ethereum Request for Comments(이더리움 논평 요청서)를 의미합니다. 이는 이더리움상의 프로그래밍 표준을 개괄적으로 설명하는 기술 문서입니다. 비트코인 개선 제안서(BIP)처럼 프로토콜 개선을 제안하는 이더리움 개선 제안서(EIP, Ethereum Improvement Proposals)와 이를 혼동해서는 안 됩니다. ERC는 애플리케이션과 콘트랙트가 보다 쉽게 상호작용하는 규약을 만드는 것을 목표로 합니다.

 

비탈릭 부테린과 파비안 보겔스텔러가 2015년에 제시한 ERC-20은 비교적 간단한 이더리움 기반 토큰을 제안하고 있습니다. 개발자들은 전반적인 사항을 따르면 되며, 복잡한 시스템을 개발하지 않아도 됩니다. 이들은 업계 전반에서 이미 사용되고 있는 기반 위에서 개발을 진행할 수 있습니다.
ERC-20 토큰이 생성되면, 이는 ERC-20 표준을 지원하는 서비스 및 소프트웨어(소프트웨어 지갑, 하드웨어 지갑, 거래소 등)와 자동으로 호환됩니다.

 한 가지 알아둘 것은 ERC-20 표준이 하나의 EIP로 발전했다는 것입니다(보다 구체적으로는, EIP-20). 이는 기존 제안이 제시된 몇 년 후, 해당 제안이 널리 사용되며 일어난 일입니다. 그러나 수년이 지나도, “ERC-20”이라는 명칭을 고수하고 있습니다.

 

* 이더리움 토큰 간단 설명
이더리움 자체 암호화폐인 이더(ETH)와 달리, ERC-20 토큰은 계정에 보관되지 않습니다. 토큰은 콘트랙트 내부에만 존재하며, 이는 독립적인 데이터베이스와 같습니다. 이는 토큰 규칙(예를 들면, 이름, 심볼, 가분성)들을 구체적으로 명시하며, 사용자 계정에 상응하는 목록을 이더리움 주소에 보관합니다.
토큰을 이동하려면 사용자는 자신의 잔고 일부를 다른 곳으로 전달 요청하는 트랜잭션을 콘트랙트에 전송해야만 합니다. 예를 들어 앨리스가 5천 BinanceAcademy 토큰을 밥에게 전송하고자 할 경우, 해당 토큰 내부의 스마트 콘트랙트 기능을 호출하여 이를 요청합니다.


 앨리스의 요청은 해당 토큰 콘트랙트에 0 ETH를 지불하는 일반적인 이더리움 트랜잭션처럼 보이는 것 내부에 포함됩니다. 해당 요청은 트랜잭션의 부가적인 영역에 포함되며, 이 경우에는 앨리스가 밥에게 토큰을 전송하고 싶다는 것을 구체적으로 명시합니다.

 

 앨리스가 자신의 이더를 전송하지 않음에도, 여전히 블록에 트랜잭션을 포함되게 하기 위해서는 소정의 명시된 수수료를 지불해야만 합니다. 앨리스가 이더를 보유하고 있지 않을 경우, 토큰을 전송하기 전 이를 확보해야만 합니다.
여기 이더스캔상에서의 실제 예시가 있습니다. 누군가 BUSD 콘트랙트에 요청을 하고 있습니다. 여러분은 Value 창에 0 ETH가 표시됨에도 불구하고, 토큰이 전송되고, 수수료가 전송된 것을 볼 수 있습니다.
이상으로 설명을 마치고, 일반적인 ERC-20 콘트랙트 구조를 보다 잘 이해하기 위해 내부 구조를 살펴보도록 하겠습니다.
ERC-20 토큰은 어떻게 생성하나요?

* ERC-20을 준수하려면 콘트랙트에 다음 여섯 가지 기능이 필수적으로 포함되어야 합니다. 이는 전체 공급량(totalSupply), 잔고(balanceOf), 전송(transfer), ~에서 전송(transferFrom), 승인(approve), 허용(allowance)입니다. 또한, 이름(name), 심볼(symbol), 소수점(decimal)과 같은 부가적인 기능을 설정할 수도 있습니다. 해당 명칭을 통해 이것이 어떠한 기능을 하는지 분명히 알 수도 있을 것입니다. 그렇지 않아도, 걱정하지 않으셔도 됩니다. 우리는 이에 대해 자세히 살펴볼 것입니다. 

 

다음은 이더리움을 위해 특별히 제작된 솔리디티(Solidity) 언어에서 찾아볼 수 있는 기능들입니다.
totalSupply
function totalSupply() public view returns (uint256)
사용자가 이를 호출하면, 해당 함수는 콘트랙트가 보유하고 있는 토큰의 전체 공급량을 전달합니다.
balanceOf 
function balanceOf(address _owner) public view returns (uint256 balance)
totalSupply와 달리 balanceOf는 매개 변수(주소)를 취합니다. 함수가 호출되면, 해당 주소가 보유하고 있는 토큰의 잔고가 출력됩니다. 이더리움 네트워크의 계정은 공개적이므로, 주소를 알면 모든 사용자의 잔고를 요청할 수 있다는 걸 기억하시기 바랍니다.
transfer
function transfer(address _to, uint256 _value) public returns (bool success)
transfer는 다른 사용자에게 토큰을 전송하는 것입니다. 여러분은 전송하고자 하는 주소와 금액을 제공해야 합니다.
함수가 호출되면 transfer는 이벤트(여기서는 event transfer)를 호출하며, 이는 기본적으로 블록체인이 참조를 포함하도록 지시합니다.
transferFrom
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
transferFrom 함수는 transfer를 간소화한 것으로, 이를 통해 탈중앙화 애플리케이션에서 조금 더 프로그래밍이 가능합니다. transfer와 마찬가지로, 이는 토큰을 전송하는 데 사용하지만 해당 토큰이 반드시 콘트랙트를 호출하는 이의 소유일 필요는 없습니다. 
즉, 여러분은 다른 누군가 또는 다른 콘트랙트에서 여러분을 대신하여 자금을 전송하도록 허락할 수 있습니다. 매일/매주/매월 수동으로 결제해야 하는 구독 기반 서비스 결제에 이를 사용할 수 있습니다. 프로그램을 통해 이를 자동으로 처리할 수 있습니다.
해당 함수는 transfer와 동일한 이벤트를 호출합니다.
approve
function approve(address _spender, uint256 _value) public returns (bool success)
approve는 프로그래밍 관점에서 또 다른 유용한 함수입니다. 이 함수를 사용해 스마트 콘트랙트가 여러분의 잔고에서 인출할 수 있는 토큰 수량을 제한할 수 있습니다. 이 함수가 없다면 함수 오작동(또는 부정한 이용)과 자금 탈취의 위험이 있습니다. 
다시 한 번 구독 모델을 예시로 살펴보도록 하겠습니다. 여러분이 상당한 수량의 BinanceAcademy 토큰을 보유하고 있으며, 매주 스트리밍 디앱(DApp)에 결제를 원한다고 해보겠습니다. 여러분은 밤낮으로 바이낸스 아카데미 콘텐츠를 읽느라 정신이 없으므로, 매주 수동으로 결제를 처리하지 않고자 합니다.
여러분은 엄청나게 많은 BinanceAcademy 토큰을 보유하고 있으며, 이는 구독료보다 훨씬 큰 금액입니다. 디앱에서 여러분의 토큰을 모두 사용하지 못하게 하기 위해, 승인(approve) 한도를 설정할 수 있습니다. 여러분의 구독료가 매주 1 BinanceAcademy 토큰이라 해보겠습니다. 여러분은 승인 한도를 20 토큰으로 제한할 수 있으며, 이를 통해 다섯 달 구독료를 자동으로 지불할 수 있습니다.
최악의 경우, 디앱이 여러분의 자금을 모두 출금하려 하거나, 버그가 발견된다 하더라도 20 토큰만을 잃게 됩니다. 이는 바람직한 상황은 아닐 수 있지만, 여러분의 자금을 모두 잃는 것보다는 분명 더 나은 일입니다.
함수가 호출되면 approve는 approval 이벤트를 호출합니다. transfer 이벤트처럼, 이는 블록체인에 데이터를 기록합니다.
allowance 
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
allowance는 approve와 함께 사용할 수 있습니다. 여러분이 특정 콘트랙트에 토큰 관리 기능을 부여했다면, 이를 통해 얼마나 많은 토큰을 여전히 인출할 수 있는지 확인하는 데 사용할 수 있습니다. 예를 들어, 여러분의 구독료에 승인된 20개의 토큰 중 12개를 사용했다면, allowance 함수를 호출하면 8개의 토큰을 사용할 수 있다는 메시지가 출력될 것입니다.
부가적인 함수
앞서 논의한 함수들은 필수적인 것들이었습니다. 반면, name, symbol, decimal은 반드시 포함하지 않아도 되지만, 이를 추가할 경우 조금 더 좋은 ERC-20 콘트랙트가 됩니다. 이를 통해 사람이 읽을 수 있는 이름을 추가하고, 심볼(예를 들면, ETH, BTC, BNB)을 설정하고, 소수점 몇 자리까지 토큰이 분할될 수 있는지 지정할 수 있습니다. 예를 들어, 통화로 사용되는 토큰은 소유권을 나타내는 토큰보다 더 많이 분할되는 게 좋을 것입니다.

해당 요소들이 실제 콘트랙트에서 어떻게 사용되는지 살펴보려면 깃허브의 예시를 확인해보시기 바랍니다.
ERC-20 토큰으로 무엇을 할 수 있나요?




위의 모든 기능을 한데 모으면 ERC-20 콘트랙트가 됩니다. 우리는 전체 공급량 요청, 잔고 확인, 자금 전송, 토큰 관리를 위한 다른 디앱에 권한 부여 등을 진행할 수 있습니다.
ERC-20 토큰의 큰 장점은 유연성입니다. 해당 규약은 개발을 제한하지 않으며, 따라서 당사자들은 자신에게 적합한 부가적인 기능을 구현하고, 특정한 변수를 설정할 수 있습니다.
스테이블코인
스테이블코인(명목화폐에 페깅된 토큰)은 보통 ERC-20 토큰 표준을 사용합니다. 앞서 우리가 참조했던 BUSD 콘트랙트에 대한 트랜잭션이 하나의 예시이며, 대부분의 스테이블코인을 이러한 형식에서 사용할 수 있습니다.
일반적인 법정화폐 기반 스테이블코인의 경우, 발행자는 유로, 달러 등의 준비금을 보유하고 있습니다. 따라서 모든 보유금에 대해 토큰을 발행합니다. 이는 금고에 1만 달러가 보관되어 있는 경우, 각 1달러로 교환할 수 있는 1만 개의 토큰을 발행할 수 있다는 의미입니다.
기술적인 측면에서, 이는 이더리움에서 무척 쉽게 구현할 수 있는 것입니다. 발행자는 1만 토큰과 함께 특정 콘트랙트를 간단히 출시할 수 있습니다. 이후, 해당 토큰에 비례하는 금액의 법정화폐를 교환할 수 있다고 약속하며 사용자에게 이를 분배할 수 있습니다.
사용자는 토큰을 사용해 상품과 서비스를 구매하고, 디앱에 사용하는 등 다양한 일을 할 수 있습니다. 또는 발행자에게 즉시 교환을 요청할 수도 있습니다. 그러한 경우, 발행자는 반환된 토큰을 소각(이용할 수 없게 만듦)하고, 준비금에서 해당 금액을 인출합니다.
앞서 언급했듯, 이러한 시스템을 운영하는 콘트랙트는 상대적으로 간단한 것입니다. 그러나 스테이블코인을 출시하는 데는 실행 계획, 규제 준수 등 고려해야 할 외부적 요소가 상당히 많습니다.
증권형 토큰
증권형 토큰은 스테이블코인과 유사합니다. 이들은 동일한 방식으로 기능하기 때문에 콘트랙트 수준에서는 똑같아 보일 수 있습니다. 그러나 발행자 수준에서는 차이점이 존재합니다. 증권형 토큰은 주식, 채권, 실물 자산과 같은 증권을 나타냅니다. 이들은 보통(언제나 그런 것은 아니지만), 비즈니스 또는 상품에 보유자가 지분을 동결할 수 있게 합니다.
유틸리티 토큰
유틸리티 토큰은 아마도 오늘날 가장 일반적인 토큰 유형일 것입니다. 스테이블코인 및 증권형 토큰과 달리, 유틸리티 토큰은 무엇에 의해서도 가치가 보장되지 않습니다. 자산 기반 토큰이 항공사의 주식과 같은 것이라면, 유틸리티 토큰은 마일리지 서비스 같은 것으로 특정 기능이 존재하지만, 외부적인 가치는 없습니다. 유틸리티 토큰은 게임 내 통화, 탈중앙 애플리케이션의 연료, 로열티 포인트 등 무수히 많은 곳에 활용할 수 있습니다.

➟암호화폐 거래를 생각 중이신가요? 바이낸스에서 이더를 구매하세요!
ERC-20 토큰을 마이닝할 수 있나요?
여러분은 이더(ETH)는 마이닝할 수 있지만, 토큰은 마이닝할 수 없습니다. 우리는 새로운 토큰이 생성되었을 때, 주조되었다(minted)고 말합니다. 콘트랙트가 실행될 때, 개발자는 자신들의 계획과 로드맵에 따라 물량을 분배합니다.
이는 일반적으로 초기 코인 공급(ICO)과 초기 거래소 공급(IEO) 또는 증권형 토큰 공급(STO)을 통해 진행됩니다. 여러분은 다양한 명칭으로 이를 접하게 될 것이지만, 개념들은 상당히 유사합니다. 투자자는 콘트랙트 주소에 이더를 전송하고, 그 대가로 새로운 토큰을 수령합니다. 모금된 자금은 향후 프로젝트 개발에 사용됩니다. 사용자는 자신의 토큰을 사용하거나(즉시 또는 차후에), 프로젝트 개발에 따라 이를 재판매 하여 이익을 얻을 것이라 기대할 수 있습니다.
토큰 분배가 자동으로 이뤄져야만 하는 것은 아닙니다. 사용자는 다수의 크라우드펀딩에서 다양한 디지털 통화(BNB, BTC, ETH, USDT와 같은)로 지불할 수 있습니다. 이후 사용자가 제시한 주소로 상응하는 토큰이 분배됩니다.
ERC-20 토큰의 장점과 단점ERC-20 토큰의 장점대체 가능성
ERC-20 토큰은 대체 가능하며, 각 단위는 상호 호환됩니다. 여러분이 BinanceAcademy 토큰을 보유하고 있다면, 구체적으로 어떠한 토큰을 보유하고 있는지는 문제되지 않습니다. 여러분은 다른 누군가의 것과 이를 교환할 수 있으며, 이는 현금 및 금과 마찬가지로 여전히 동일하게 기능합니다.
이는 여러분의 토큰이 일종의 통화를 지향할 때 이상적입니다. 여러분은 개별적인 단위들이 분간될 수 있는 특징을 갖게 되어 대체되지 않는 것을 원하지 않을 것입니다. 이는 일부 토큰이 다른 토큰에 비해 더 높거나 낮은 가치를 갖게 되어 토큰의 목적이 훼손될 수 있습니다.
유연성
앞서 살펴본 것처럼, ERC-20 토큰은 무척이나 자유로운 설정들이 가능하며, 다양한 애플리케이션을 위해 맞춤 제작할 수 있습니다. 예를 들면, 이는 게임 내 통화로 사용될 수 있으며, 로열티 포인트 프로그램, 디지털 수집물, 또는 예술 작품이나 부동산 소유권을 나타내는 데 사용할 수도 있습니다.
대중성
ERC-20은 암호화폐 업계에서 대중적이며, 이는 ERC-20을 청사진으로 사용할 매우 설득력 있는 이유입니다. 새롭게 출시된 토큰과 호환되는 수 많은 거래소, 지갑, 스마트 콘트랙트가 이미 존재합니다. 뿐만 아니라, 개발자 지원과 문서 또한 풍부합니다.
ERC-20 토큰의 단점확장성
다수의 암호화폐 네트워크와 마찬가지로, 이더리움에도 성장통이 존재합니다. 현 상태에서는 확장이 쉽지 않으며, 피크 타임에 트랜잭션을 전송하려 한다면 높은 수수료와 지연이 발생할 수 있습니다. 여러분이 ERC-20 토큰을 출시했는데 네트워크가 혼잡해질 경우, 토큰 사용성이 영향을 받을 수 있습니다.
이는 이더리움만의 문제는 아닙니다. 그보다는 분산화된 시스템에서 보안을 위한 일종의 대가입니다. 커뮤니티는 이더리움2.0으로의 통합을 통해 이러한 문제를 해결하려고 하며, 이는 이더리움 플라스마와 이더리움 캐스퍼와 같은 업그레이드를 구현할 것입니다.
확장성 문제에 대한 보다 자세한 설명은 블록체인 확장성 - 사이드체인과 지불 채널을 살펴보시기 바랍니다.
스캠
기술 자체에는 문제가 없지만, 토큰을 쉽게 발행할 수 있다는 사실은 한편으론 단점으로 간주될 수 있습니다. 간단한 ERC-20 토큰을 생성하는 데는 별다른 노력이 필요하지 않으며, 즉, 누구나 토큰을 생성할 수 있습니다. 좋은 목적으로든, 나쁘 목적으로든 말입니다.
따라서 여러분은 투자하고 있는 토큰에 주의를 기울여야 합니다. 블록체인 프로젝트인 것처럼 가장하는 수 많은 피라미드와 폰지 사기들이 있습니다. 특정한 기회가 적절한 것인지 하는 투자 결정을 내리기 전에 자신만의 리서치를 수행해야 합니다.
 ERC-20, ERC-1155, ERC-223, ERC-721 – 차이점은 무엇인가요?
ERC-20은 첫 이더리움 토큰 표준이었습니다(그리고 오늘날까지도 가장 인기 있는 것입니다). 그러나 ERC-20만이 유일한 것은 아닙니다. 수 년에 걸쳐 다른 많은 것들이 등장했으며, 이는 ERC-20 개선을 제안하는 것이거나, 전적으로 다른 목적을 달성하기 위한 것입니다.
상대적으로 일반적이지 않은 표준 중 일부는 NFT(대체 불가능한 토큰)에 사용됩니다. 때로는 다른 속성을 가진 고유한 토큰을 사용하는 데서 이점을 얻을 수 있습니다. 여러분이 예술 작품의 한 부분이나, 게임 내 자산 등을 토큰화하고자 할 경우, 이러한 콘트랙트 유형 중 하나가 더 적합할 수 있습니다.
예를 들어, ERC-721 표준은 무척이나 인기 있는 크립토키티 디앱에서 사용됐습니다. 이러한 콘트랙트는 사용자에게 API를 제공하여, 자신만의 대체 불가능한 토큰을 주조하고 메타 데이터(이미지, 설명 등)를 표현할 수 있게 했습니다. 
ERC-1155 표준은 ERC-721과 ERC-20 모두를 개선한 것으로 볼 수 있습니다. 간략히 말해 이는 대체 가능한 토큰과 대체 불가능한 토큰을 동일한 콘트랙트 내에서 모두 지원하는 표준입니다.
ERC-223 또는 ERC-621처럼 사용성을 개선하고자 하는 다른 선택지도 있습니다. ERC-223은 토큰 전송 사고를 방지하기 위한 안전 장치를 사용합니다. ERC-621은 토큰 공급량 증가와 감소를 위한 부가적인 기능을 제공합니다.
NFT와 관련한 보다 자세한 설명은, 암호화폐 수집물과 대체 불가능한 토큰(NFT) 설명을 확인해 보시기 바랍니다.
마치며
ERC-20 표준은 수 년간 암호화폐 자산 영역에서 가장 많이 사용되어 왔으며, 우리는 그 이유를 어렵지 않게 알 수 있습니다. 다양한 활용 예시(유틸리티 토큰, 스테이블코인 등)에 적합하게 누구나 간단한 콘트랙트를 비교적 쉽게 배포할 수 있습니다. 그럼에도 불구하고, ERC-20에는 다른 표준에는 있는 기능들이 결여되어 있기도 합니다. ERC-20 이후의 콘트랙트 유형들이 이를 대체할 것인지는 시간을 갖고 지켜봐야 할 것입니다.

반응형