Permit2를 쓰려면 사용자가 먼저 각 ERC-20 토큰에서 Permit2 계약을 spender로 승인합니다. 그 위에서 Permit2 서명은 특정 애플리케이션 spender, 수량, 만료, nonce를 정해 권한을 부여하거나 일회성 전송을 허용합니다. 앱 연결을 끊거나 Permit2 서명 만료가 지나도 아래층의 ERC-20→Permit2 승인은 남을 수 있으므로 두 권한을 별도로 조회·취소해야 합니다.
Permit2 앞에는 기존 ERC-20 승인이 먼저 있다
Permit2는 여러 애플리케이션이 공통 승인 계약을 통해 토큰 이동 권한을 관리하게 하는 시스템입니다. 사용자는 토큰 계약의 approve에서 Permit2 계약 주소를 spender로 지정해야 합니다. 이 기초 allowance가 없으면 Permit2 서명만으로 토큰 계약에서 자산을 가져올 수 없습니다.
그 다음 사용자는 Permit2 typed data에 서명해 실제 디앱의 spender와 범위를 정합니다. 한 번의 토큰 승인을 바탕으로 앱마다 별도 서명 권한을 만들 수 있지만 Permit2 계약이 큰 기초 allowance를 보유하는 구조입니다. 공식 Permit2 주소와 체인 배포를 반드시 확인합니다.
| 층 | 저장 위치 | 주요 확인값 |
|---|---|---|
| 토큰→Permit2 | 각 ERC-20 allowance | token·owner·Permit2·amount |
| Permit2→앱 | Permit2 allowance 또는 서명 | spender·amount·expiration·nonce |
| SignatureTransfer | Permit2 nonce bitmap | permitted amount·deadline·witness |
| 지갑 연결 | 지갑 세션 | 도메인·요청 권한 |
AllowanceTransfer는 수량과 만료를 저장한다
Uniswap 문서는 AllowanceTransfer를 기간이 정해진 토큰 allowance를 관리하는 인터페이스로 설명합니다. 서명에는 token, amount, expiration, nonce와 spender가 들어가며 Permit2 계약이 이 상태를 저장합니다. 앱은 허용 수량과 기간 안에서 transferFrom을 호출할 수 있습니다.
expiration이 지나면 Permit2의 앱별 권한은 사용할 수 없지만 토큰 계약이 Permit2에 준 기초 승인이 자동 취소되는 것은 아닙니다. amount를 줄이거나 앱 권한을 취소하는 동작과 토큰 approve를 0으로 만드는 동작을 구분합니다. 화면에는 두 층을 함께 표시해야 합니다.
서명 만료와 토큰 승인의 종료는 서로 다른 상태 변화다.
JOBCOIN 해설
SignatureTransfer는 전송 단위 서명을 쓴다
SignatureTransfer는 지속 allowance를 저장하는 대신 사용자의 서명으로 특정 전송을 허용합니다. permitted 토큰과 최대 수량, nonce, deadline을 검증하고 서명을 소비해 재사용을 막습니다. 앱이 실제 요청 수량을 제출하므로 서명 허용량과 실행 수량의 관계를 확인해야 합니다.
permitWitnessTransferFrom은 애플리케이션별 추가 데이터를 witness로 서명에 결합할 수 있습니다. 주문 조건이나 수취 정보가 서명에 묶일 수 있지만 사용자가 지갑 화면에서 구조를 해석하지 못하면 위험을 읽기 어렵습니다. type string과 witness 내용, spender, 수취 경로를 공식 인터페이스와 대조합니다.
- 토큰이 승인한 Permit2 계약 주소를 확인한다.
- 앱 spender와 token·amount·expiration을 읽는다.
- sigDeadline과 allowance expiration을 구분한다.
- nonce 또는 unordered nonce가 재사용되지 않았는지 확인한다.
nonce 방식은 권한 유형에 따라 다르다
AllowanceTransfer는 저장된 allowance 항목의 nonce를 사용해 오래된 서명이 새 상태를 덮어쓰지 못하게 합니다. SignatureTransfer는 unordered nonce bitmap을 사용해 특정 nonce를 소비하면서 다른 독립 주문을 순서와 무관하게 처리할 수 있습니다. 숫자 하나가 작다고 최신 서명이라는 단순 순서 가정은 맞지 않을 수 있습니다.
batch 서명은 여러 토큰이나 권한을 한 번에 포함할 수 있습니다. 한 항목만 보고 승인하면 다른 배열 항목이 함께 유효해질 수 있습니다. 서명 디코더에서 모든 token·amount·spender를 펼쳐 보고, 사용하지 않는 nonce는 invalidate 함수로 무효화 가능한지 확인합니다.
취소는 어느 층을 닫을지 결정해야 한다
특정 디앱만 더 이상 쓰지 않는다면 Permit2 안의 해당 spender allowance를 취소하거나 만료시키는 방법이 적합할 수 있습니다. Permit2를 전혀 쓰지 않으려면 각 토큰 계약에서 Permit2에 준 allowance도 0으로 바꿔야 합니다. 후자는 토큰마다 온체인 거래와 수수료가 필요합니다.
지갑 연결 해제는 어느 승인층도 자동 변경하지 않습니다. 승인 관리 도구가 일반 ERC-20 allowance만 보여 주면 Permit2 내부 앱 권한을 놓칠 수 있고, Permit2 앱 권한만 보여 주면 기초 승인이 남습니다. 체인별로 두 조회 결과를 함께 기록합니다.
서명 화면과 공식 배포 주소를 우선 확인한다
Permit2를 흉내 낸 악성 계약에 무제한 approve를 하면 표준 기능과 무관하게 위험합니다. 앱 링크에서 제시한 주소만 믿지 말고 Uniswap 공식 저장소와 배포 정보를 통해 verifyingContract를 대조합니다. chain ID와 토큰 계약 주소도 확인합니다.
서명 뒤에는 Permit2 allowance와 nonce 상태, 실제 Token Transfer를 확인합니다. 기대한 swap이나 deposit이 실패했더라도 권한 설정만 성공했을 수 있습니다. 애플리케이션을 다시 사용할 계획이 없다면 실패 원인을 해결하기 전에 남은 권한부터 평가합니다.
자주 묻는 질문
Permit2 서명이 만료되면 토큰 approve도 사라지나요?
아닙니다. 앱별 Permit2 권한과 토큰 계약이 Permit2에 준 기초 allowance는 별도이므로 각각 확인해야 합니다.
SignatureTransfer는 무제한 승인이 아닌가요?
전송 단위 서명으로 설계됐지만 permitted amount, deadline, spender와 기초 ERC-20 승인의 범위를 정확히 읽어야 합니다.
디앱 연결을 끊으면 Permit2 권한이 취소되나요?
연결 세션만 종료됩니다. Permit2 내부 권한과 토큰→Permit2 allowance는 온체인 상태로 남을 수 있습니다.



