Ethereum과 기타 EVM 체인에서 토큰 승인을 취소하는 방법
Ethereum과 기타 EVM 체인에서 승인을 단계별로 취소하는 방법, 위험한 승인, 취소 비용, 그리고 취소로 되돌릴 수 없는 것을 알아보세요.
Ethereum이나 다른 EVM 체인에서 토큰 승인을 취소하려면, 신뢰할 수 있는 승인 확인 도구(Revoke.cash나 블록 탐색기의 토큰 승인 도구 등)에 지갑을 연결하고, 네트워크를 선택한 뒤, 어떤 컨트랙트가 내 토큰을 쓸 수 있는지 검토하고, 더 이상 사용하지 않거나 알아보지 못하는 항목에 대해 취소 트랜잭션을 보내면 됩니다. 각 취소는 한도를 0으로 설정하는 온체인 트랜잭션이며 소액의 가스비가 듭니다.
승인은 셀프 커스터디에서 가장 간과되는 위험 중 하나입니다. 탈중앙화 거래소에서 거래하거나 DeFi 앱을 사용할 때마다 아마도 컨트랙트에 내 토큰을 옮길 권한을 주고 있을 것입니다. 이 권한은 무기한 유효합니다. 그 컨트랙트가 나중에 악용되거나 내가 악성 컨트랙트를 승인했다면, 추가 서명 없이도 토큰을 빼앗길 수 있습니다.
토큰 승인의 작동 방식
Ethereum에서 대부분의 토큰이 따르는 표준인 ERC-20 토큰에는 approve 함수가 있습니다. 컨트랙트를 승인하면 한도(allowance), 즉 해당 컨트랙트가 내 주소에서 전송할 수 있는 그 토큰의 최대 금액을 설정하게 됩니다.
많은 앱은 거래할 때마다 다시 승인하지 않아도 되도록 무제한 한도를 요청합니다. 편리하지만, 이는 해당 컨트랙트가 지금이든 미래든 언제든지 그 토큰의 잔액 전체를 옮길 수 있다는 뜻입니다.
NFT도 비슷하게 작동합니다. setApprovalForAll 함수는 운영자에게 내가 보유한 컬렉션의 모든 NFT를 옮길 권한을 주며, 그래서 NFT 드레이너들이 이를 노립니다.
더 새로운 방식도 있습니다. 바로 permit 서명입니다. 일부 토큰과 시스템(Uniswap의 Permit2 포함)은 트랜잭션을 보내는 대신 오프체인 메시지에 서명하는 것으로 한도를 부여할 수 있게 합니다. 이런 서명은 무해해 보이지만 전송을 승인할 수 있습니다. 이 위험은 아이스 피싱과 permit 서명에 관한 글에서 다룹니다.
단계별 가이드: 승인 취소 방법
- 1신뢰할 수 있는 도구를 직접 여세요. 주소를 직접 입력하거나 북마크를 사용하세요. 잘 알려진 선택지로는 Revoke.cash와 Etherscan 및 기타 탐색기의 토큰 승인 확인 도구가 있습니다. 가짜 'revoke' 사이트가 존재하므로 DM이나 광고의 링크는 절대 따라가지 마세요.
- 2지갑을 연결하거나 주소를 붙여 넣으세요. 주소를 붙여 넣으면 연결하지 않고도 승인 내역을 볼 수 있습니다. 연결은 취소 트랜잭션을 보낼 때만 필요합니다.
- 3네트워크를 선택하세요. 승인은 체인별로 존재합니다. Ethereum을 확인한 다음 Arbitrum, Optimism, Base, Polygon, BNB Smart Chain 등 사용하는 네트워크를 하나씩 확인하세요.
- 4목록을 검토하세요. 각 승인마다 토큰, 지출 권한을 가진 컨트랙트, 한도 금액, 그리고 대개 승인된 시점이 표시됩니다.
- 5취소할 항목을 가려내세요. 무제한 한도, 알아보지 못하는 지출자, 더 이상 쓰지 않는 앱, 알려진 공격에 연루된 컨트랙트를 우선하세요.
- 6취소를 누르고 지갑에서 확인하세요. 지갑 요청 내용을 읽으세요. 한도를 0으로 설정하는
approve호출(NFT의 경우 false로 설정하는setApprovalForAll호출)이어야 합니다. - 7네트워크마다 반복하세요. 그런 다음 새로고침해 승인이 사라졌는지 확인하세요.
먼저 취소해야 할 승인
| 승인 유형 | 위험 수준 | 조치 |
|---|---|---|
| 알 수 없는 컨트랙트에 대한 무제한 한도 | 높음 | 즉시 취소 |
가치 있는 NFT 컬렉션에 대한 setApprovalForAll | 높음 | 판매 등록 중이 아니라면 취소 |
| 더 이상 쓰지 않는 앱에 대한 무제한 한도 | 중간 | 취소 |
| 자주 쓰는 평판 좋은 앱에 대한 제한된 한도 | 낮음 | 유지하거나 줄이기 |
| 공격에 연루된 컨트랙트에 대한 승인 | 높음 | 즉시 취소 |
취소로 할 수 없는 것
취소는 예방책이지 치료책이 아닙니다. 다음은 할 수 없습니다.
- 이미 전송된 토큰을 돌려받는 것.
- 시드 문구나 개인 키가 도난당한 경우 나를 보호하는 것. 이 경우 공격자는 무엇이든 서명할 수 있으니, 지갑이 해킹당했을 때 즉시 해야 할 일에 설명된 대로 남은 자산을 새 지갑으로 옮기세요.
- 이미 제공한 오프체인 permit 서명을 확실하게 무효화하는 것. 이런 서명은 자체 만료 및 nonce 규칙을 따르므로, 의심스러운 permit에 서명했다면 해당 토큰을 새 지갑으로 옮기는 것이 가장 안전합니다.
앞으로 승인 위험 줄이기
- 사용자 지정 한도를 설정하세요. 많은 지갑에서 승인 요청 화면의 금액을 수정할 수 있습니다. 쓸 계획인 만큼만 승인하세요.
- 실험용 지갑을 따로 쓰세요. 새 앱, 민팅, 에어드롭에는 버너 지갑을 쓰고, 장기 보유 자금은 낯선 사이트에 절대 연결하지 않는 지갑에 보관하세요.
- 모든 서명 요청을 읽으세요. 사이트가 이해할 수 없는 메시지에 서명하라고 하면 멈추세요.
- 승인을 정기적으로 검토하세요. 몇 달마다, 그리고 새 앱을 써 본 뒤에 검토하세요.
- 연결된 사이트도 확인하세요. 연결과 승인은 다릅니다. 지갑 권한과 연결된 사이트를 참고하세요.
흔한 실수
- 검색 광고나 소셜 미디어 답글로 찾은 가짜 취소 도구를 사용하는 것.
- Ethereum에서는 취소했지만 레이어 2 네트워크의 같은 지갑은 잊어버리는 것.
- 지갑에서 사이트 연결을 해제하면 승인도 제거된다고 생각하는 것. 그렇지 않습니다.
- 소액 토큰을 무시하는 것. 공격자는 가져갈 수 있는 것은 모두 쓸어 가는 경우가 많습니다.
결론
토큰 승인은 부여한 순간이 지나도 계속 남아 있는 상시 권한입니다. 확인은 무료이고 취소는 저렴하며, 이를 정기적으로 하면 드레이너가 사용하는 가장 흔한 경로 중 하나를 막을 수 있습니다. 습관으로 만들고, 필요한 만큼만 승인하며, 주요 자산은 거의 서명하지 않는 지갑에 보관하세요.
자주 묻는 질문
토큰 승인이란 무엇인가요?
토큰 승인은 스마트 컨트랙트가 특정 토큰을 정해진 금액까지 내 지갑에서 옮길 수 있도록 허용하는 권한입니다. 탈중앙화 거래소와 기타 DeFi 앱이 작동하려면 승인이 필요합니다. 이 권한은 그 앱을 다시 방문하지 않더라도 내가 취소하거나 한도가 모두 소진될 때까지 계속 유효합니다.
승인을 취소하는 데 가스비가 드나요?
네. 취소는 한도를 0으로 설정하는 온체인 트랜잭션이므로 일반적인 네트워크 수수료를 냅니다. Ethereum 메인넷에서는 부담이 될 수 있지만 레이어 2 네트워크에서는 보통 저렴합니다. 승인 내역을 확인하는 것은 무료입니다.
승인을 취소하면 도난당한 토큰을 돌려받을 수 있나요?
아니요. 취소는 해당 컨트랙트의 향후 전송만 막습니다. 이미 빼앗긴 토큰은 취소로 되찾을 수 없습니다. 시드 문구나 개인 키가 노출되었다면 취소만으로는 충분하지 않으니, 남은 자금을 새 지갑으로 옮기세요.
토큰 승인은 얼마나 자주 확인해야 하나요?
몇 달마다, 그리고 새롭거나 낯선 앱을 사용한 뒤에는 매번 검토하는 습관이 좋습니다. 악성 서명을 했다고 의심된다면 즉시 확인하세요.
