- EIP중 20번째로 제안한 proposal
- A standard interface for tokens
- 토큰이라는 개념이 가장 유명하게 사용된 사례
ERC-20은 토큰이라는 개념의 표준화 작업을 통해 유저들과 어플리케이션간에 쉽고 원활한 소통을 제공하고자 시작되었다. ERC-20은 토큰의 가장 대표적인 사례이지만 두 개념이 동일한 것은 아니다. ERC-1155도 토큰을 발행할 수 있으며, ERC-20으로 토큰 외 다른 서비스를 제공할 수도 있다.
- ERC-20은 코드가 공개되어 있어 누구나 쉽게 배포 가능함
- 가장 표준적이고 안정적인 구현체 : Openzepplin, Consensys
🔎 Openzepplin ERC-20 (ERC20_openzeppelin)
: openzeppelin의 ERC20 코드는 필수적인 요소 외에도 사용하기 편한 기능들이 많이 포함되어 있다.
CODE 구성
구성 요소 function name, symbol, decimals, totalSupply, balanceOf, transfer, allowance, approve, transferFrom event Transfer, Approval mapping _balances, _allowances ERC20으로 인식되기 위한 기본 함수와 event다. 표에 명시된 function, event, mapping값은 사람들이 보편적으로 사용하는 부분이며, 이외 부분들은 자유롭게 필요에 따라 기능을 추가 및 수정할 수 있다.
🔎 Function / Event / Mapping
- name (ex : ethereum)
- symbol (ex : ETH)
- decimals (ex : 18)
▪ 1 ether = wei
▪ 1 A = a
심볼 A를 이루는 기본 단위 a가 존재하고, decimals로 설정할 수 있음
즉, a가 A로 도달할때 필요한 제곱수를 의미- totalSupply : 총 발행량
- _balances : key-주소 / value-잔고인 mapping
- balanceof : 해당 account의 잔고
- transfer : to에게 amount만큼의 돈을 전송
approve → allowance 확인 → transferFrom
: 다른 사람에게 내 돈을 쓸 수 있도록 허락해주는 과정
- _allowances : 이중 매핑 구조로 내가 CA에게 허락해준 돈의 양
mapping(address => mapping(address => uint256)) private _allowances
첫번째 address는 나의 주소(owner),
두번째 address는 CA의 주소(spender),
uint256은 허락한 돈의 양(amount)- approve (_approve) : owner가 spender에게 amount만큼을 허용해주는 함수
- allowance : CA에게 얼마나 허락한지
- transferFrom : from에서 to로 amount만큼 전송
transfer vs transferFrom
- transfer는 EOA가 transferFrom은 CA가 작동시킴
- transfer은 내가 직접 전송함
- transferfrom은 허락한 범위 내에서 컨트랙트가 나 대신 전송해줌
- transferFrom을 사용하는 상황
ex ) 게임을 하기전에 CA가 A토큰 10개를 전송할 수 있는 권한을 넘겨줌