solidity

21.07.27 ERC-20 Token Contract

슈팅스타제제 2021. 7. 28. 10:36

토큰의 종류 

1. 스테이블 코인

달러나 유로 같은 명목 화폐의 가치에 대응하는 디지털 자산

가격 변동성이 안정적으로 유지되는 상황에서 자금 전송 가능

스테이블 코인은 담보 유형에 따라 다음과 같은 세가지 유형으로 나뉜다.

 

✔ 명목화폐 담보 스테이블 코인 

달러나 원화 같은 화폐와 1:1의 비율로 발행하는 토큰

사용자는 발행자가 금액을 보유하고 있는지 확신할 수 없기 때문에 발행자에 대한 신뢰가 보장되어야 한다. 

ex) USD 테더(USDT), 트루 USD(TUSD), 팍소스 스탠다드 (PAX), USD코인(USDC), 바이낸스 USD(BUSD)

 

✔ 암호화폐 기반 스테이블 코인 

암호화폐와 1:1의 비율로 발행하는 토큰

자신의 암호화폐를 컨트랙트에 예치함으로써 스테이블 코인 보유 가능

ex) 비트쉐어 USD, DAI

 

✔ 알고리즘 기반 스테이블 코인 

알고리즘과 스마트 컨트랙트에 전적으로 의존한다.

인플레이션이 발생하지 않도록 토큰의 발행량을 조절한다. 그 시스템은 중앙 은행이 국가 통화를 관리하는 것과 유사하다.

 무담보 스테이블 코인일 수도 있지만 블랙 스완*이 있을 수도 있어서 이에 대비하여 담보 풀을 갖고 있을 수도 있다. 

ex) Carbon 

 

*black swan event : 검은 백조는 존재하지 않는다고 생각했기 때문에 이렇게 이름 붙였다. 통계학자이자 무역상인 Taleb이 설명한 Black swan 이론에 따르면 일반적이지 않고 극단적인 수치를 말하며 예측할 수 없고 막대한 영향을 미치는 사건을 말한다. 

 

2. 증권형 토큰 

기업 또는 자산의 지분을 대표하여 가치를 보유하고 있는 금융 상품으로 교환할 수 있는 토큰

자산이 조각조각의 가치를 가지는 토큰으로 나눠져서 보다 세분화된 수준의 투자가 가능하다.

 

*업타임 : 주식시장과는 다르게 24시간 연중무휴이다. 

 

3. 유틸리티 토큰 

기능이 존재하지만 가치가 보장되어 있지 않다. 

게임 내 화폐, 디앱의 내부 화폐, 로열티 포인트 등에 활용 가능하다. 

 

✔ 증권형 토큰과 유틸리티 토큰의 유사점

스마트 컨트랙트를 통해 관리되며 블록체인 주소를 통해 전송되고 트랜잭션 발생시키는 작동 방식이 동일하다. 

 

✔ 증권형 토큰과 유틸리티 토큰의 차이점

항공사의 주식 : 증권형 토큰 

항공사 마일리지 : 유틸리티 토큰 

 

유틸리티 토큰은 초기코인공개 ICOs  / 초기 거래소 공개 IEOs

유틸리티 토큰은 서비스를 이용하는데 사용할 수 있을 뿐, 증권형 토큰처럼 사업 상의 지분을 분배받을 권리는 없다. 

 

증권형 토큰은 초기 기업 공개 (IPO)

분배하는 과정을 증권형 토큰 공개(STO, Security Token Offering)

투자자를 보호하고 사기 행위를 방지하기 위해 많은 규제가 있다. 

 

ERC-20 토큰의 표준 Ethereum Request for Comments 아래 6가지 기능 준수

1. Total Supply

컨트랙트가 보유하고 있는 토큰의 전체 공급량을 반환한다. 

function totalSupply() public view returns (uint256)

2. Balance of

인자로 들어온 주소가 보유하고 있는 토큰의 잔고를 반환한다. public일 때, 주소만 알면 모든 사용자의 잔고를 요청할 수 있다. 

function balanceOf(address _owner) public view returns (uint256 balance)

3. Transfer

다른 사용자에게 토큰을 전송한다. 함수의 인자로 받는 주소와 전송할 금액이 필요하다. 함수가 호출되면 이벤트(event transfer)를 호출한다. => 블록체인 상에 데이터 기록

function transfer(address _to, uint256 _value) public returns (bool success)

4. Transfer from

토큰을 전송하는데에 사용하지만 해당 토큰이 반드시 컨트랙트를 호출하는 주소의 소유일 필요는 없다. 다른 컨트랙트에서 토큰 소유자를 대신하여 자금을 전송하도록 허락할 수 있다. 이 기능은 정기 구독 서비스 결제에 사용할 수 있다. 이벤트는 transfer과 마찬가지로 event transfer 호출! => 블록체인 상에 데이터 기록

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)

5. Approve

컨트랙트가 소유자의 잔고에서 인출할 수 있는 토큰의 수량을 제한할 수 있다. (승인 한도 제한 설정 가능)이 함수를 통해 함수 오작동, 자금 탈취를 방지할 수 있다. approval 이벤트 호출 => 블록체인 상에 데이터 기록

function approve(address _spender, uint256 _value) public returns (bool success)

6. Allowance

approve와 함께 사용 가능하다. 얼만큼의 토큰을 인출할 수 있는지 확인 가능한 함수이다. 

function allowance(address _owner, address _spender) public view returns (uint256 remaining)

 

참고 문서 : https://academy.binance.com/ko/articles/an-introduction-to-erc-20-tokens

'solidity' 카테고리의 다른 글

22.08.29 락업이란?  (0) 2022.08.29
21.07.28 diamond problem  (0) 2021.07.28
21.07.23 Token Role  (0) 2021.07.26
21.07.22 Mint & Burn Token  (2) 2021.07.24
21.07.15 import, inheritance, storage, memory  (0) 2021.07.16