[Blockchain] ERC-20(이론)

공효은·2022년 2월 23일
0

Blockchain

목록 보기
3/10
post-thumbnail

오늘의 목표

  • ERC 가 무엇일까!
  • 그렇다면 ERC-20은 무엇일까?
  • ERC-20 표준에는 어떤것들이 있을까?

ERC(Ethereum Request for Comment)

해시넷에 의하면!
ERC는 Ethereum Request for Comment의 약자이다. 쉽게 말하면 “새로운 아이디어를 내가 제시했으니까 어떤지 평가 좀 해줘!” 라는 글을 작성해서 올린 후에 많은 사람들이 괜찮다고 생각하면 인터넷 표준이 되는 것을 RFC라고 한다. ERC는 "이더리움 RFC"로서, 인터넷이 아닌 이더리움의 표준이 될 만한 내용들이라는 것이다.

ERC-20

ECR-20은 이더리움 개발자인 파비안 보글스텔러에 의해 2015년 11월 19일에 제안되었고, 이더리움에서 토큰을 구현하기위한 스마트계약에 사용되는 기술 표준으로써, 이더리움 토큰이 따라야하는 규칙을 정의했다.

ERC의 20은 요청(제안)에 할당된 번호다. 이더리움 토큰에 대한 공통규칙 목록을 정의하여 개발자가 토큰 간의 상호 작용을 정확하게 예측할 수 있도록 하고, 이 규칙에는 주소간에 토큰을 전송하는 방법과 토큰 내의 데이터에 액세스 하는 방법이 포함되어 있다. 이 개념은 ERC-20 토큰은 개발자들이 작업하기에 상대적으로 쉽기 때문에 많은 암호화폐 프로젝트들의 ICO 표준으로 선택되었다.

해당 규약에 따라 토큰을 발행하면, 그 토큰은 이더리움 블록체인을 활용할 수 있고, 이더와 손쉬운 거래가 가능하다.

토큰 발행의 목적

  1. 이더리움 기반 DAPP 서비스에 사용될 토큰으로 쓰기 위해
    이더리움 블록체인 위에서 작동하는 서비스에 활용하기 위해 토큰을 발행한다.
    스마트 컨트랙트에 코드를 추가함으로써 원하는 비즈니스 모델에 맞추어 토큰을 만들 수 있다. 또한, 이더로 모든 DAPP을 구현하면 너무비싸다.. 토큰을 사용하면 불필요한 수수료를 줄일 수 있다.

  2. ICO를 통한 자금 유치
    어떤 회사나 팀이 어떠한 기똥찬 DAPP을 개발하겠다. 지금 자체 블록체인 네트워크를 구축할 돈이없다! 일단 이더리움 위에서 ERC20 으로 토큰을 발행하여 판매할게 나중에 우리 DAPP이 개발되고 잘되면 토큰을 우리 자체 블록체인 코인으로 바꾸어 주겠어! 라는 방식의 ICO 이다. (ex: EOS)

ERC-20 토큰의 특징

ERC-20 토큰 표준 규칙

ERC-20 토큰 표준은 토큰 발행에 대한 9개의 규칙으로 이루어진다. 그 중 6개는 필수적으로 모든 경우에 적용되어야한다. 나머지 3개는 옵션이긴 하지만 이 중 2개는 주로 사용된다.

🟢 필수 규칙

필수 규칙은 함수 또는 이벤트로 분류된다. 첫 3개의 기능은 계약의 상태를 수정하지 않는다. 그보다는 토큰의 일부 핵심 기능을 정의하고 쿼리시 이미 정의된 정보를 반환 한다.

  1. totalSupply(총 발행량)- 총 발행량은 토큰이 총 몇 개나 있는지 알려준다.
function totalSupply() publick view returns(uint256)
  1. balanceOf(잔액)- 주어진 주소가 얼마나 많은 토큰을 보유하고 있는지알려준다.
function balaneOf(address _owner) public view returns (unint256 balance)

다른 두 개는 모든 암호화폐 사용자에게 익숙한 일반적으로 사용되는 이벤트 이다.

  1. transfer(송금)
    _value 양의 토큰을 _to 주소로 전송한다. 메시지 호출자의 계정 잔액에 사용할 토큰이 충분하지 않은 경우 함수가 throw 되어야 한다.
function transfer(address _to, uint256 _value) public returns (bool success)
  1. Approve(승인)
    _spender가 최대 _value 금액까지 (귀하의 계정..)에서 여러 번 인출할 수 있다. 이 함수가 다시 호출되면 현재 허용량을 _value로 덮어쓴다.

    여기에서 설명하는 것과 같은 공격 벡터를 방지하려면 클라이언트가 동일한 지출자에 대해 다른 값으로 설정하기 전에 먼저 허용치를 0으로 설정하는 방식으로 사용자 인터페이스를 생성해야한다. 이전에 배포된 계약과의 하위 호환성을 허용하기 위해 계약 자체가 이를 시행해서는 안된다....

    으악이거 뭔말이야.....

    어떤 계좌에서 얼마나, 몇번씩 토큰을 인출할 수 있는지 결정!

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

마지막 두 개의 규칙은 실제로 구현하지는 않더라도 ERC-20 표준을 준수하는 토큰의 자격을 받으려면 반드시 포함되어야한다.

  1. Allowance(허용)
    _spender가 _owner로부터 인출할 수 있는 금액을 반환한다.
    어떤 계좌에서 총 인출할 수 있는 토큰을 결정함!
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
  1. Transfer From(유저간 송금)
    사용자는 "송금" 기능을 사용하여 토큰을 다른 사용자에게 송금할 수 있다.
function transferFrom(address _from, address _to, uint256 _value) public return (bool success)

🟡 선택적 규칙

  1. 토큰명 - 예:메이커(Maker). 옵션이긴 하지만 토큰 오너는 사용자들이 본인의 토큰을 식별 할 수 있길 바라기 때문에 거의 사용된다.
function name() publick view returns(string)
  1. 심볼 - 거래소에서 티커를 사용해 토큰 페어를 기제하기 때문에 사용된다.
function symbol() public view returns (string)
  1. 10진법 - 각 ERC-20 토큰은 최대 1분의 1의 분수 단위로 표시 할 수 있다. (예를 들어 어떤 토큰은 18개의 소수점으로 나눌 수 있다. 십진수 값이 0이면 토큰이 분리되지 않는다.)
function decimals() public view returns (uint8)

Event

Transfer
0값 전송을 포함하여 토큰이 전송될 때 트리거해야한다.

새 토큰을 생성하는 토큰 계약은 토큰이 생성될 때 _from 설정된 주소로 Transfer 이벤트를 트리거 해야한다.

event Transfer(address indexed _from, address indexed _to, uint256 _value)

Approval
approve(address _spender, uint256 _value) 에 대한 성공적인 호출에 대해 트리거 해야한다.

event Approval(address indexed _owner, address indexed _spender, uint256 _value)

위와 같은 인터페이스를 기반으로 개발자는 새로운 기능과 로직을 추가하여 토큰을 커스터마이징 하고, 클레이튼 네트워크(나는 클레이튼으로 할 거니까!) 에 배포할 수 있다.

출처:
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=mage7th&logNo=221441833779

https://eips.ethereum.org/EIPS/eip-20

https://steemit.com/coinkorea/@dangdang/erc20

profile
잼나게 코딩하면서 살고 싶어요 ^O^/

0개의 댓글