Back to Blog
·
10분 읽기

ERC-20 Token Approval 완벽 가이드

토큰 승인의 작동 원리부터 무제한 승인의 위험성, 안전한 관리 방법까지

ERC-20 토큰 승인(Token Approval)은 DeFi 생태계의 핵심 메커니즘입니다. 사용자가 스마트 컨트랙트에 토큰 사용 권한을 부여하는 이 과정은 편리함과 위험성을 동시에 가지고 있습니다. 이 가이드에서는 토큰 승인의 모든 것을 이해하고, 안전하게 관리하는 방법을 배웁니다.

Token Approval의 작동 원리

ERC-20 표준과 Approve 함수

ERC-20 표준은 이더리움에서 토큰을 구현하기 위한 표준 인터페이스입니다. 이 표준에는 `approve(address spender, uint256 amount)` 함수가 포함되어 있으며, 이를 통해 토큰 소유자는 다른 주소(일반적으로 스마트 컨트랙트)가 자신의 토큰을 일정량까지 사용할 수 있도록 허용합니다.

실제 사용 예시: Uniswap에서의 토큰 교환

Uniswap에서 토큰 A를 토큰 B로 교환하려면 다음 단계를 거칩니다:

  1. 1단계 - Approval: 토큰 A의 approve 함수를 호출하여 Uniswap Router 컨트랙트가 토큰 A를 사용할 수 있도록 승인합니다.
  2. 2단계 - Swap: Uniswap Router의 swap 함수를 호출합니다. 이 함수는 내부적으로 `transferFrom`을 사용하여 승인받은 토큰 A를 가져가고, 토큰 B를 사용자에게 전송합니다.

TransferFrom과 Allowance의 관계

`approve`를 통해 설정된 승인량은 `allowance(address owner, address spender)` 함수로 조회할 수 있습니다. 스마트 컨트랙트가 `transferFrom`을 호출하면, 현재 allowance를 확인하고 이를 차감하면서 토큰을 이동시킵니다. 만약 요청한 양이 allowance보다 크면 트랜잭션은 실패합니다.

무제한 승인의 위험성

왜 dApp들은 무제한 승인을 요청할까?

많은 dApp들이 `2^256 - 1` (거의 무한대)의 승인을 요청합니다. 이는 사용자 경험을 개선하기 위함입니다. 매번 거래할 때마다 승인 트랜잭션을 보내는 것은 번거롭고 가스비도 추가로 듭니다. 무제한 승인을 하면 한 번의 승인으로 이후 모든 거래가 가능합니다.

무제한 승인의 실제 위험

  • 컨트랙트 해킹: 승인한 컨트랙트가 해킹당하면, 공격자는 승인된 모든 토큰을 즉시 탈취할 수 있습니다.
  • 악의적인 업데이트: 업그레이드 가능한 컨트랙트의 경우, 소유자가 악의적으로 코드를 변경하여 자산을 탈취할 수 있습니다.
  • 피싱 사이트: 가짜 dApp 사이트에서 승인을 받으면, 즉시 자산이 도난당할 수 있습니다.
  • 영구적 위험: 승인은 명시적으로 취소하지 않는 한 영구적으로 유효합니다. 1년 전 승인한 프로토콜이 오늘 해킹당해도 여전히 위험합니다.

실제 피해 사례

2023년 Euler Finance 해킹에서는 무제한 승인을 한 사용자들이 $197M의 피해를 입었습니다. 컨트랙트 취약점이 발견되자마자 승인된 모든 자산이 탈취되었습니다.

안전한 승인 관리 방법

1. 최소 승인 원칙

무제한 승인 대신 필요한 만큼만 승인하세요. 예를 들어 100 USDC를 교환하려면 정확히 100 USDC만 승인합니다. 가스비는 조금 더 들지만, 보안은 크게 향상됩니다.

2. 정기적인 승인 검토 (월 1회 권장)

이 도구나 Revoke.cash 같은 서비스를 사용하여 정기적으로 승인을 검토하세요. 다음 항목들을 확인해야 합니다:

  • 더 이상 사용하지 않는 프로토콜의 승인
  • 무제한 승인 상태인 토큰
  • 최근 보안 이슈가 보고된 프로토콜의 승인
  • 알 수 없는 컨트랙트에 대한 승인

3. 신뢰할 수 있는 프로토콜만 사용

승인하기 전에 프로토콜을 검증하세요:

  • 감사 리포트: Trail of Bits, CertiK 등 신뢰할 수 있는 감사 기관의 리포트 확인
  • TVL과 운영 기간: 높은 TVL과 긴 운영 기간은 상대적으로 높은 신뢰성을 나타냅니다
  • 커뮤니티 평판: Discord, Twitter 등에서 커뮤니티 피드백 확인

4. 하드웨어 지갑 사용

고액 자산은 하드웨어 지갑에 보관하고, DeFi 활동은 별도의 핫 월렛에서 하세요. 하드웨어 지갑을 사용할 때는 디바이스 화면에 표시되는 승인 내용(컨트랙트 주소, 토큰 종류, 승인 금액)을 반드시 확인하세요.

5. 트랜잭션 시뮬레이션 도구 활용

Tenderly, Blowfish 같은 트랜잭션 시뮬레이션 도구를 사용하면 승인 트랜잭션의 실제 효과를 미리 확인할 수 있습니다. 예상치 못한 자산 이동이 있는지 확인하세요.

승인 취소 방법

방법 1: WalletGuard 사용 (권장)

이 사이트에서 지갑을 스캔하면 모든 승인 내역을 확인하고, 클릭 한 번으로 취소할 수 있습니다. 사용자 친화적인 인터페이스와 명확한 위험도 표시가 특징입니다.

방법 2: Revoke.cash 사용

Revoke.cash는 가장 인기 있는 승인 관리 도구입니다. 여러 체인을 지원하며, 승인을 0으로 설정하여 취소할 수 있습니다.

방법 3: Etherscan에서 직접 취소

Etherscan에서 토큰 컨트랙트에 접속하여 `approve` 함수를 직접 호출하고 amount를 0으로 설정할 수 있습니다. 기술적 지식이 필요하지만 가장 직접적인 방법입니다.

핵심 요약

  • 토큰 승인은 DeFi 사용에 필수적이지만, 신중하게 관리해야 합니다
  • 무제한 승인은 편리하지만 큰 보안 위험을 동반합니다
  • 필요한 만큼만 승인하고, 정기적으로 검토 및 취소하세요
  • 신뢰할 수 있는 프로토콜만 사용하고, 감사 리포트를 확인하세요
  • 하드웨어 지갑과 트랜잭션 시뮬레이션 도구를 활용하세요