본문으로 이동

ERC-20

ERC-20은 이더리움에서 대체 가능한 토큰을 위한 표준 인터페이스입니다. 잔액, 전송, 허용량, 승인의 작동 방식과 이 표준이 보장하지 않는 사항을 알아봅니다.

업데이트

교육 목적으로만 제공되며 투자 조언이 아닙니다. 투자로 손실이 발생할 수 있습니다.

직접 답변

ERC-20은 이더리움의 대체 가능한 토큰 컨트랙트를 위한 표준 인터페이스입니다. 지갑, 거래소, 탈중앙화 애플리케이션은 동일한 호출을 사용해 공급량이나 잔액을 조회하고, 토큰을 전송하며, 다른 주소가 정해진 한도까지 지출하도록 허용할 수 있습니다. 대체 가능하다는 것은 같은 토큰의 동일한 수량을 서로 바꿔 쓸 수 있도록 설계되었다는 뜻입니다.

핵심 인터페이스에는 다음 항목이 포함됩니다.

  • 공급량과 계정 잔액을 조회하는 totalSupplybalanceOf.
  • 호출자의 토큰을 보내는 transfer.
  • 지출자의 한도를 설정하고 조회하는 approveallowance.
  • 해당 한도 안에서 소유자의 잔액을 지출하는 transferFrom.
  • 전송과 승인을 기록하는 TransferApproval 이벤트.

이 표준이 정의하는 것은 상호운용성이지 자산의 품질이 아닙니다. ERC-20 준수는 고정 공급량, 공정한 시장 가치, 상환 가능성, 유동성, 안전한 관리, 심지어 구현 간 동일한 동작도 보장하지 않습니다.

작동 방식

ERC-20 잔액은 주소와 연결된 토큰 컨트랙트 상태의 항목입니다. 지갑은 그 상태를 표시할 뿐 별도의 토큰 파일을 보관하지 않습니다. transfer(to, amount)가 성공하면 컨트랙트는 호출자의 잔액을 줄이고 수령자의 잔액을 늘린 뒤 Transfer 이벤트를 발생시킵니다. 사용자는 일반적으로 네트워크 가스비를 ETH로 지불합니다. 실행이 되돌려지면 토큰 상태 변경은 취소되지만, 이미 사용된 가스는 전액 환불되지 않습니다.

위임 지출에는 허용량을 사용합니다. approve(spender, amount)를 호출하면 해당 지출자가 호출자의 잔액에서 사용할 수 있는 금액이 설정됩니다. 이후 지출자는 transferFrom(owner, to, amount)을 호출할 수 있으며, allowance(owner, spender)는 남은 한도를 알려 줍니다. 승인은 한 네트워크의 한 토큰 컨트랙트에서 하나의 소유자-지출자 쌍에 속하며, 지갑의 모든 자산에 대한 권한이 아닙니다.

approve를 다시 호출하면 이전 허용량을 덮어씁니다. EIP-20 명세는 트랜잭션 순서로 인해 지출자가 이전 한도와 새 한도를 모두 사용할 수 있으므로, 사용자 인터페이스가 기존 허용량을 다른 영이 아닌 값으로 설정하기 전에 0으로 만들도록 경고합니다. 허용량을 0으로 설정하면 해당 소유자-지출자-토큰 조합에 대한 향후 transferFrom 호출을 막을 수 있지만, 이미 전송된 토큰을 되찾을 수는 없습니다.

EIP-20에서 name, symbol, decimals는 선택적 메타데이터 메서드입니다. decimals는 표시 단위에 영향을 주지만 컨트랙트의 정수 회계에는 영향을 주지 않습니다. 또한 이 표준은 토큰을 발행하거나 소각하는 방식, 전송을 일시 중지하거나 과세할 수 있는지, 주소를 동결할 수 있는지, 프록시 로직을 업그레이드할 수 있는지를 규정하지 않습니다. 이러한 동작은 배포된 코드, 현재 구현, 관리 권한을 통해 확인해야 합니다.

예시

지갑에 ERC-20 토큰 1,000단위가 있고 사용자가 탈중앙화 거래소 라우터로 100단위를 교환하려 한다고 가정해 보겠습니다. 사용자는 먼저 approve(router, 100)을 제출합니다. 이 호출이 성공하면 라우터는 transferFrom(user, pool, 100)을 호출할 수 있으며, 전액을 지출한 뒤 일반적인 남은 허용량은 0입니다. 승인 트랜잭션과 스왑 트랜잭션은 별개의 온체인 작업이므로 각각 가스가 필요할 수 있고 서로 독립적으로 실패할 수 있습니다.

가능한 최댓값을 승인하면 반복 승인을 피할 수 있지만, 라우터나 그 업그레이드 권한 또는 승인을 받는 데 사용된 인터페이스가 침해될 경우 더 큰 금액이 더 오래 노출됩니다. 제한된 허용량은 이러한 노출을 줄이지만 스마트 컨트랙트, 토큰 가격, 유동성 또는 트랜잭션 위험을 없애지는 않습니다.

위험

  • 잘못된 컨트랙트 또는 네트워크: 이름, 심볼, 아이콘은 복제될 수 있으므로 의도한 네트워크의 컨트랙트 주소를 확인해야 합니다.
  • 과도한 허용량: 악의적이거나 침해된 지출자는 사용하지 않은 허용량을 승인 한도까지 사용할 수 있습니다.
  • 비표준 동작: 널리 쓰이는 일부 토큰은 예상한 방식으로 반환값을 제공하지 않으며, 전송 수수료를 부과하거나 잔액을 리베이스하고 주소를 차단하거나 전송을 일시 중지하는 토큰도 있습니다.
  • 관리자 통제: 발행, 동결, 업그레이드 또는 기타 특권 작업은 사용자가 토큰을 취득한 뒤에도 위험을 바꿀 수 있습니다.
  • 복구 불가능한 전송: 잘못된 주소나 토큰을 처리하지 못하는 컨트랙트로 보내면 복구가 불가능할 수 있습니다.

ERC-20 표준화는 통합 마찰을 줄이지만 컨트랙트, 발행자, 수탁, 시장 또는 운영 위험을 없애지는 않습니다. 서명하기 전에 네트워크, 토큰 컨트랙트, 지출자 주소, 승인 금액, 트랜잭션 호출을 확인해야 합니다.

흔한 오해

오해 1: ERC-20 표시가 있으면 토큰이 정당하다는 뜻이다

누구나 익숙한 이름이나 심볼을 사용한 컨트랙트를 배포할 수 있습니다. 이 표시는 인터페이스에 관한 주장만 나타냅니다. 컨트랙트 주소를 확인한 다음 코드, 권한, 발행자, 유동성, 시장을 각각 평가해야 합니다.

오해 2: 승인하면 승인된 토큰이 즉시 전송된다

approve는 일반적으로 허용량을 변경할 뿐, 그 자체로 토큰을 지출자에게 옮기지는 않습니다. 이후의 transferFrom 호출이 토큰을 이동시킵니다. 그럼에도 사용하지 않은 허용량은 실제 권한이며, 소진되거나 교체되거나 0으로 설정될 때까지 계속 사용될 수 있습니다.

오해 3: 모든 ERC-20 토큰은 똑같이 작동한다

이 표준은 최소한의 공통 인터페이스를 규정합니다. 특정 공급 정책을 요구하지 않으며 수수료, 일시 중지, 블랙리스트, 리베이스, 업그레이드 가능성을 금지하지도 않습니다. 통합 시에는 ERC-20 표시만 믿지 말고 실제 구현을 고려해야 합니다.

관련 주제

출처

탐색

위키 검색...