﻿---
title: "Permit2 簽章風險"
description: "Permit2 將可重複使用的額度與一次性簽章轉帳分開；安全簽署要求精確查核部署、網域、支出者、收款方、金額、交易序號、截止時間、見證資料和執行呼叫資料。"
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Permit2 簽章風險

> 僅供教育用途，不構成投資建議。投資可能導致損失。

<a id="answer"></a>

## 直接答案

Permit2 結合兩套不同的授權系統。`AllowanceTransfer` 儲存可重複使用的所有者-代幣-支出者額度，包括金額、到期時間和有序交易序號。`SignatureTransfer` 使用無序位元圖交易序號，耗用一次性簽章上限，不會建立持續存在的下游額度。兩者仍依賴 ERC-20 代幣從所有者至 Permit2 的額度。

無燃料費簽章仍可能在支出者或中繼者支付執行費用時轉移資產。必須查核正確的鏈、已部署 Permit2 程式碼、EIP-712 網域、模組、代幣、支出者、簽章上限、收款呼叫資料、交易序號和時限。合法的 Permit2 合約並不會讓惡意的支出者、收款方、路由器或見證資料變得安全。

<a id="mechanism"></a>

## 運作機制

1. 鎖定 `chainId`、網路、Permit2 `verifyingContract`、已部署的執行階段程式碼、代幣位址及小數位、所有者錢包類型和預期應用。應使用官方部署記錄；熟悉的位址或標籤並不足夠。
2. 讀取上游 ERC-20 所有者至 Permit2 的額度和餘額。識別有限或無限核准以及代幣特有的轉帳行為；這套帳本不會因 Permit2 簽章或已儲存下游額度到期而消失。
3. 識別正確路徑和已簽署的主要類型：AllowanceTransfer 的 `PermitSingle` 或 `PermitBatch`，或 SignatureTransfer 的 `PermitTransferFrom` 及其批次和見證資料變體。不得將 `transferFrom` 當成簽章類型。
4. 解碼 EIP-712 網域和每筆訊息。對 AllowanceTransfer，查核代幣、`uint160 amount`、`expiration`、有序交易序號、支出者和 `sigDeadline`。對 SignatureTransfer，查核獲准代幣及金額、無序交易序號、截止時間，以及從呼叫者情境綁定的支出者。
5. 分別解碼執行呼叫資料。在基本 SignatureTransfer 中，`SignatureTransferDetails.to` 和 `requestedAmount` 是執行參數，而不是基本簽章許可中的欄位；請求金額只須不超過簽章上限。查核每個批次索引，以及任何正確的見證雜湊和類型字串。
6. 查詢目前有序額度交易序號，或無序位元圖的字與位元，再模擬正確的呼叫者、呼叫資料、鏈和狀態。核對收款方、路由器操作、代幣特性、餘額及兩套額度帳本；模擬結果可能隨狀態、排序或重組而改變。
7. 盡量縮小金額和有效期間。發現可疑情況時，保存類型化資料，並透過可信路徑送出正確的上游核准撤銷、下游額度撤銷或交易序號失效操作；應將其視為記憶體池競態，等待確認後再核對轉帳、餘額、額度和位元圖位元。

AllowanceTransfer 的 `sigDeadline` 限制簽章許可建立或更新已儲存權限的最晚時間；`expiration` 限制該權限可被使用的期間。SignatureTransfer 的截止時間限制一次性執行。EIP-712 提供類型化雜湊和網域分隔，而不提供重放保護或意圖安全；Permit2 的交易序號和截止時間規則才劃定這些邊界。

對合約錢包而言，ERC-1271 的有效性取決於錢包目前的 `isValidSignature` 政策、模組、門檻和程式碼。錢包標籤、硬體錢包被截斷的畫面顯示和成功的模擬只是證據輸入，並非保證。中斷前端連線不會撤銷任何核准或簽章。

<a id="example"></a>

## 範例

- **兩套額度帳本。** 代幣對 Permit2 的有限額度初始為 `1,000 USDC`；一個 `PermitSingle` 為支出者 S 儲存 `600 USDC`。S 轉移 `225 USDC` 後，已儲存金額為 `600 - 225 = 375 USDC`，而標準有限上游代幣額度變為 `1,000 - 225 = 775 USDC`。讓 375 到期或將其撤銷，並不會自動清除 775；非標準代幣可能有所不同。
- **一次性收款方和金額。** SignatureTransfer 簽署的上限為 `250 USDC`；呼叫資料請求向商家轉移 `180 USDC`。在餘額和上游額度充足時，可以執行 180 的轉移。交易序號隨後被耗用，因此未使用的 `70 USDC` 不可重複使用。如果呼叫資料將攻擊者指定為收款方，基本許可本身無法阻止已綁定支出者進行這種重新導向。
- **無序交易序號位元圖。** 對交易序號 `513`，`wordPos = 513 >> 8 = 2`、`bitPos = 513 & 255 = 1`，且 `mask = 1 << 1 = 2`。執行會設定第 2 個字的第 1 位元；重放 513 將失敗，而位於第 0 位元的交易序號 `512` 保持獨立。
- **撤銷競態。** 已儲存額度為 `400 USDC`。所有者廣播歸零撤銷，但一筆 `300 USDC` 轉帳先執行，剩餘 `100 USDC`；之後的撤銷再將餘額設為 `0`。最終額度為零並不會撤銷已實現的 `300 USDC` 損失，因此必須核對交易排序和餘額。

<a id="risks"></a>

## 風險

- 鏈 ID、部署或執行階段程式碼錯誤
- 假冒或非預期的驗證合約
- 混淆 AllowanceTransfer 與 SignatureTransfer
- 惡意或錯誤的支出者和呼叫者
- 透過執行呼叫資料選擇收款方
- 請求金額接近簽章上限
- 代幣位址、符號、小數位或原始單位錯誤
- 持續或無限的上游 ERC-20 核准
- 下游金額或到期時間過大
- 混淆截止時間、簽章截止時間與額度到期時間
- 有序交易序號陳舊或發生競態
- 重複使用位元圖位元或失效遮罩範圍過大
- 見證雜湊或正確類型字串不符
- 批次項目被隱藏、重複或索引錯誤
- 前端顯示或呼叫資料與意圖不同
- 撤銷在記憶體池或 MEV 競態中失敗
- ERC-1271 模組、簽署者、門檻或升級發生變化
- 收費轉帳、變基、暫停、封鎖或帶回呼的代幣
- 模擬狀態漂移、失敗或發生重組
- 將硬體錢包確認或中斷連線誤認為安全

<a id="misconceptions"></a>

## 常見誤解

- **沒有燃料費提示的簽章無法轉移代幣。** 其他參與者可以支付執行燃料費。
- **官方 Permit2 位址能證明支出者和收款方安全。** Permit2 也可能忠實執行惡意權限。
- **SignatureTransfer 和 AllowanceTransfer 建立相同的持續權限。** 前者僅使用一次；後者儲存可重複使用的額度。
- **中斷連線或撤銷一層會取消所有路徑和待執行簽章。** 上游、下游和交易序號狀態彼此獨立，競態仍然存在。
- **EIP-712、硬體錢包或成功模擬能證明意圖和最終性。** 它們改善可見性或測試，卻不能取代欄位、呼叫資料和已確認狀態的查核。

<a id="related"></a>

## 相關主題

- [EIP-712 類型化簽章](/zh-tw/crypto/eip712-typed-signature/)
- [錢包授權](/zh-tw/crypto/wallet-approval/)
- [錢包簽章](/zh-tw/crypto/wallet-signature/)

<a id="sources"></a>

## 來源

- [Overview](https://developers.uniswap.org/docs/protocols/permit2/overview) - Uniswap Developers（查閱日期：2026-08-13）
- [Allowance Transfer](https://developers.uniswap.org/docs/protocols/permit2/concepts/allowance-transfer) - Uniswap Developers（查閱日期：2026-08-13）
- [Signature Transfer](https://developers.uniswap.org/docs/protocols/permit2/concepts/signature-transfer) - Uniswap Developers（查閱日期：2026-08-13）
- [Deployments](https://developers.uniswap.org/deployments) - Uniswap Developers（查閱日期：2026-08-13）
- [PermitHash.sol](https://github.com/Uniswap/permit2/blob/main/src/libraries/PermitHash.sol) - Uniswap Permit2（查閱日期：2026-08-13）
- [EIP-712: Typed structured data hashing and signing](https://eips.ethereum.org/EIPS/eip-712) - Ethereum Improvement Proposals（查閱日期：2026-08-13）
- [ERC-1271: Standard Signature Validation Method for Contracts](https://eips.ethereum.org/EIPS/eip-1271) - Ethereum Improvement Proposals（查閱日期：2026-08-13）
- [ERC-20: Token Standard](https://eips.ethereum.org/EIPS/eip-20) - Ethereum Improvement Proposals（查閱日期：2026-08-13）

Source: https://wiki.fcontext.com/zh-tw/crypto/permit2-signature-risk/index.mdx
