﻿---
title: "治理委託簽名安全嗎？"
description: "了解治理委託簽名授權的內容、EIP-712 網域分離、Nonce 與到期時間如何降低重放風險，以及簽名前需要核驗的事項。"
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.

# 治理委託簽名安全嗎？

> 僅供教育用途，不構成投資建議。數位資產交易和簽名可能造成不可逆的損失。

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

## 直接答案

只有在解碼後的訊息與您預定的委託完全一致，且治理合約實施了充分的重放保護時，治理委託簽名才是安全的。在典型的投票代幣設計中，委託改變的是誰可以行使簽名者的投票權；它**不會**轉移代幣餘額，也不會授予代幣支出權限。不過，簽名究竟會產生什麼效果，最終以已部署的合約為準。

離線簽名可以由中繼者提交，因此簽名者即使不支付 Gas，也仍然授權了鏈上狀態變更。應將簽名視為一條可執行指令，而不是登入操作或無害的錢包連線請求。

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

## 運作方式

常見的 `delegateBySig` 流程分為四個步驟：

1. 應用程式準備 EIP-712 型別化資料，其中包含受託人地址、Nonce 和到期時間。
2. 錢包對綁定了型別化訊息和 EIP-712 網域的摘要進行簽名。
3. 任何帳戶都可以將該簽名中繼到代幣或治理合約。
4. 合約恢復或驗證簽名者身分，檢查 Nonce 和到期時間，並記錄新的受託人。

EIP-712 網域可以包含 `name`、`version`、`chainId` 和 `verifyingContract`。這些欄位可將應用程式、版本、網路或合約不同但內容相同的訊息彼此隔離。EIP-712 本身明確**不**提供重放保護；合約必須消耗 Nonce 或以其他方式確保每次授權只能使用一次，而到期時間只有在合約實際檢查它時才能限制可執行的時間窗口。

簽名前，請對照官方治理介面、文件或獨立核驗過的合約資料，檢查以下所有事項：

- `primaryType` 和欄位名稱描述的是委託，而不是 Permit、代幣轉帳、訂單或帳戶管理授權。
- `verifyingContract` 是目前 `chainId` 上預期的代幣或治理合約。
- `delegatee` 是您選擇的代表地址；應核對完整地址，而不是顯示名稱。
- `nonce` 與合約為簽名者記錄的目前 Nonce 一致，且 `expiry` 對預定流程而言足夠短。
- 錢包顯示完整的型別化資料。若提示盲簽，或只顯示您無法獨立還原其含義的原始雜湊，請拒絕簽名。

不同實作有所差異。例如，Compound 的 COMP 合約會對受託人、Nonce 和到期時間進行雜湊，要求 Nonce 等於簽名者儲存的 Nonce，隨後遞增該 Nonce，並拒絕已過期的簽名。OpenZeppelin 的 `Votes` 介面也公開了 `delegateBySig`、Nonce 處理和到期時間檢查。不要假設另一個合約中名稱相似的函式具備相同保護。

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

## 範例

Mira 打算把 10,000 票委託給地址 `0xAB...1234`。她的錢包顯示 `primaryType: Delegation`、已經核驗的投票代幣合約、目前鏈 ID、`delegatee: 0xAB...1234`、目前 Nonce，以及 20 分鐘後到期的期限。她透過第二個可信來源核對地址後簽名；中繼者提交訊息，合約發出委託事件。她的代幣餘額仍在自己的錢包中，而代表則按照該協議的規則取得相關投票權。

現在更改一個細節：頁面請求的是 `primaryType: Permit` 並指定了代幣支出者，或者 `verifyingContract` 是一個無關合約。這就不是同一條委託指令。即使頁面將按鈕標為「委託」，且簽名者不需支付 Gas，它也可能授權代幣支出。Mira 應當拒絕簽名。

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

## 風險與控制措施

- **受託人錯誤：**地址投毒、私訊和複製的顯示名稱可能會將 `delegatee` 替換為攻擊者控制的地址。請透過官方提案或代表資料核驗完整地址。
- **操作錯誤：**惡意介面可能請求另一種 EIP-712 型別，例如 Permit。應閱讀 `primaryType`、每個欄位和驗證合約；按鈕標籤沒有任何安全意義。
- **重放：**Nonce 檢查薄弱或缺失可能使簽名被重複使用。網域如果沒有綁定預期的鏈或合約，也可能使簽名在非預期情境中被使用。請核驗實際驗證程式碼，因為僅靠 EIP-712 並不能防止重放。
- **長期有效的簽名：**未使用的已簽名訊息在到期或 Nonce 失效前可能一直可執行。優先選擇較短的到期時間，不要公開簽名；如需取消，只使用協議記錄在文件中的失效方法。
- **誤導性的錢包顯示：**欄位被截斷、網域未知或盲簽都會妨礙有效知情同意。請取消操作，並使用能顯示完整訊息的錢包或解碼器檢查型別化資料請求。
- **合約帳戶差異：**智慧合約錢包可能透過 ERC-1271 驗證簽名，此時簽名有效性可能取決於錢包狀態和授權政策。應確認錢包和治理合約均提供支援，不要想當然地套用 EOA 式恢復。
- **治理後果：**委託可能集中投票權，也可能讓不可信的受託人作出違背您利益的投票。請審查其身分、投票歷史、利益衝突以及協議的重新委託流程。

提交後，請在正確的鏈上核驗交易：檢查目標合約、解碼後的函式、事件恢復或報告的簽名者、新受託人以及 Nonce。中繼交易成功只能證明合約接受了呼叫，並不能證明簽名意圖是安全的。

如果您已簽名但尚未看到提交，請停止分享該簽名，並查閱協議記錄在文件中的取消或 Nonce 失效途徑。如果不需要的委託已經執行，請透過官方合約重新委託，並核驗新狀態。單純的委託通常不會建立代幣額度，因此不要把重新委託與撤銷授權混為一談。如果您還簽署了 Permit，或洩漏了助記詞或私鑰，應將其視為另一起嚴重程度更高的錢包安全事件。

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

## 常見誤解

- **「不付 Gas 就沒有授權。」** 中繼者可以支付 Gas，而簽名則提供簽名者的授權。
- **「EIP-712 能讓每個簽名都安全。」** 它規範了型別化資料雜湊和網域分離，但該標準不包含重放保護，也無法驗證使用者是否確實打算執行所顯示的操作。
- **「委託會轉移我的代幣。」** 常規投票委託轉移或分配的是投票權，而不是代幣所有權；但實際效果只能由已部署的合約和解碼後的訊息確定。
- **「我隨時都能撤銷離線簽名。」** 不存在通用的簽名撤銷交易。到期時間、Nonce 的消耗或失效，以及重新委託，都是因合約而異的機制。
- **「更換受託人會抹去之前的投票。」** 重新委託會按照協議規則改變未來或目前的投票權，但不一定能撤銷已經投出的票或改變歷史快照。

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

## 相關主題

- [EIP-712 結構化簽名](/zh-tw/crypto/eip712-typed-signature/)
- [DAO](/zh-tw/crypto/dao/)
- [治理攻擊](/zh-tw/crypto/governance-attack/)
- [錢包授權](/zh-tw/crypto/wallet-approval/)
- [錢包簽名](/zh-tw/crypto/wallet-signature/)

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

## 來源

- [EIP-712：型別化結構資料的雜湊與簽名](https://eips.ethereum.org/EIPS/eip-712) - Ethereum Improvement Proposals（存取日期：2026-08-20）
- [Comp.sol](https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/Comp.sol) - Compound Finance（存取日期：2026-08-20）
- [治理 API](https://docs.openzeppelin.com/contracts/5.x/api/governance) - OpenZeppelin（存取日期：2026-08-20）
- [ERC-1271：合約的標準簽名驗證方法](https://eips.ethereum.org/EIPS/eip-1271) - Ethereum Improvement Proposals（存取日期：2026-08-20）

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