대부분의 프로토콜에서 거래하거나 스테이킹하려면 먼저 컨트랙트가 토큰을 대신 옮길 수 있게 approve해야 한다. 이건 정상이고 필요한 절차다. 문제는 기본값이다: 많은 앱이 만료 없는 무제한 approval을 요청해서, 다 쓰고 난 뒤에도 컨트랙트는 그 토큰을 옮길 권한을 계속 쥔다.
그 컨트랙트가 나중에 익스플로잇당하거나 처음부터 악성이었다면, 남아 있는 approval이 바로 공격자가 걸어 들어오는 문이다. 시드 구문은 필요 없다. 당신이 이미 서명한 권한만으로 승인된 토큰을 빼갈 수 있다. 직접 피싱당한 적도 없는 지갑이 돈을 잃는 가장 흔한 경로 중 하나다.
해법은 공포가 아니라 위생이다. 앱이 지원하면 필요한 수량만 approve하고, 더는 쓰지 않는 approval은 revoke하라. 주소의 approval 표면을 훑어보면 어느 컨트랙트가 아직 권한을 쥐고 있는지 보이고, 자리값을 못 하는 것들을 닫을 수 있다.