지갑과 보안

토큰 승인(Token Approval, 허용량)

다른 이름: 토큰 어프루브 · Approve · allowance · 승인 권한

정의

토큰 승인은 스마트 컨트랙트가 내 지갑의 특정 토큰을 정해진 한도만큼 대신 옮길 수 있도록 허락하는 서명으로, 한 번 주면 취소하기 전까지 유지됩니다.

토큰 승인의 작동 방식

DEX에서 USDT를 팔거나 디파이에 예치하려면 먼저 그 컨트랙트에 USDT 사용 권한을 줘야 합니다. 이것이 Approve 거래이며, 승인한 금액을 allowance(허용량)라고 부릅니다. 많은 디앱은 편의를 위해 무제한 승인을 기본값으로 요청합니다.

문제는 승인이 남아 있는 동안 해당 컨트랙트가 언제든 토큰을 가져갈 수 있다는 점입니다. 피싱 사이트 컨트랙트에 승인했거나, 정상 프로젝트라도 나중에 해킹되면 지갑의 토큰이 빠져나갈 수 있습니다.

그래서 필요한 금액만 승인하고, 쓰지 않는 승인은 정기적으로 취소하는 것이 좋습니다. 블록 익스플로러나 Revoke 같은 승인 관리 도구에서 현재 승인 목록을 확인할 수 있으며, 취소에도 가스비가 듭니다.

예시

지갑에 6,000 USDC가 있고 DEX에서 500 USDC만 스왑하려 한다고 가정합니다. 승인 창에서 무제한 대신 500을 입력하면 컨트랙트는 최대 500 USDC까지만 옮길 수 있습니다. 나중에 그 컨트랙트가 해킹돼도 노출 금액은 남은 승인 한도인 0에서 500 USDC 사이로 제한됩니다. 무제한 승인을 했다면 6,000 USDC 전부가 위험에 노출됩니다.

자주 하는 실수

  • 무제한 승인이 기본으로 설정된 줄 모르고 그대로 서명합니다.
  • 한 번 쓴 디앱의 승인을 몇 년 동안 그대로 남겨 둡니다.
  • 송금 버튼만 누르지 않으면 자산이 안전하다고 생각합니다.

배우고 실습하기

자주 묻는 질문

토큰 승인은 어떻게 취소하나요?

블록 익스플로러의 승인 확인 메뉴나 승인 관리 도구에서 지갑을 연결해 해당 승인을 0으로 바꾸는 거래를 보내면 됩니다. 이 거래에도 가스비가 듭니다.

무제한 승인은 꼭 피해야 하나요?

자주 쓰는 신뢰할 만한 프로토콜이라면 편의상 쓰기도 하지만, 그만큼 위험 노출이 커집니다. 처음 쓰는 디앱이라면 필요한 금액만 승인하는 편이 안전합니다.