僅供教育用途,不構成投資建議。數位資產交易和簽名可能造成不可逆的損失。
直接答案
只有在解碼後的訊息與您預定的委託完全一致,且治理合約實施了充分的重放保護時,治理委託簽名才是安全的。在典型的投票代幣設計中,委託改變的是誰可以行使簽名者的投票權;它不會轉移代幣餘額,也不會授予代幣支出權限。不過,簽名究竟會產生什麼效果,最終以已部署的合約為準。
離線簽名可以由中繼者提交,因此簽名者即使不支付 Gas,也仍然授權了鏈上狀態變更。應將簽名視為一條可執行指令,而不是登入操作或無害的錢包連線請求。
運作方式
常見的 delegateBySig 流程分為四個步驟:
- 應用程式準備 EIP-712 型別化資料,其中包含受託人地址、Nonce 和到期時間。
- 錢包對綁定了型別化訊息和 EIP-712 網域的摘要進行簽名。
- 任何帳戶都可以將該簽名中繼到代幣或治理合約。
- 合約恢復或驗證簽名者身分,檢查 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 處理和到期時間檢查。不要假設另一個合約中名稱相似的函式具備相同保護。
範例
Mira 打算把 10,000 票委託給地址 0xAB...1234。她的錢包顯示 primaryType: Delegation、已經核驗的投票代幣合約、目前鏈 ID、delegatee: 0xAB...1234、目前 Nonce,以及 20 分鐘後到期的期限。她透過第二個可信來源核對地址後簽名;中繼者提交訊息,合約發出委託事件。她的代幣餘額仍在自己的錢包中,而代表則按照該協議的規則取得相關投票權。
現在更改一個細節:頁面請求的是 primaryType: Permit 並指定了代幣支出者,或者 verifyingContract 是一個無關合約。這就不是同一條委託指令。即使頁面將按鈕標為「委託」,且簽名者不需支付 Gas,它也可能授權代幣支出。Mira 應當拒絕簽名。
風險與控制措施
- 受託人錯誤:地址投毒、私訊和複製的顯示名稱可能會將
delegatee替換為攻擊者控制的地址。請透過官方提案或代表資料核驗完整地址。 - 操作錯誤:惡意介面可能請求另一種 EIP-712 型別,例如 Permit。應閱讀
primaryType、每個欄位和驗證合約;按鈕標籤沒有任何安全意義。 - 重放:Nonce 檢查薄弱或缺失可能使簽名被重複使用。網域如果沒有綁定預期的鏈或合約,也可能使簽名在非預期情境中被使用。請核驗實際驗證程式碼,因為僅靠 EIP-712 並不能防止重放。
- 長期有效的簽名:未使用的已簽名訊息在到期或 Nonce 失效前可能一直可執行。優先選擇較短的到期時間,不要公開簽名;如需取消,只使用協議記錄在文件中的失效方法。
- 誤導性的錢包顯示:欄位被截斷、網域未知或盲簽都會妨礙有效知情同意。請取消操作,並使用能顯示完整訊息的錢包或解碼器檢查型別化資料請求。
- 合約帳戶差異:智慧合約錢包可能透過 ERC-1271 驗證簽名,此時簽名有效性可能取決於錢包狀態和授權政策。應確認錢包和治理合約均提供支援,不要想當然地套用 EOA 式恢復。
- 治理後果:委託可能集中投票權,也可能讓不可信的受託人作出違背您利益的投票。請審查其身分、投票歷史、利益衝突以及協議的重新委託流程。
提交後,請在正確的鏈上核驗交易:檢查目標合約、解碼後的函式、事件恢復或報告的簽名者、新受託人以及 Nonce。中繼交易成功只能證明合約接受了呼叫,並不能證明簽名意圖是安全的。
如果您已簽名但尚未看到提交,請停止分享該簽名,並查閱協議記錄在文件中的取消或 Nonce 失效途徑。如果不需要的委託已經執行,請透過官方合約重新委託,並核驗新狀態。單純的委託通常不會建立代幣額度,因此不要把重新委託與撤銷授權混為一談。如果您還簽署了 Permit,或洩漏了助記詞或私鑰,應將其視為另一起嚴重程度更高的錢包安全事件。
常見誤解
- 「不付 Gas 就沒有授權。」 中繼者可以支付 Gas,而簽名則提供簽名者的授權。
- 「EIP-712 能讓每個簽名都安全。」 它規範了型別化資料雜湊和網域分離,但該標準不包含重放保護,也無法驗證使用者是否確實打算執行所顯示的操作。
- 「委託會轉移我的代幣。」 常規投票委託轉移或分配的是投票權,而不是代幣所有權;但實際效果只能由已部署的合約和解碼後的訊息確定。
- 「我隨時都能撤銷離線簽名。」 不存在通用的簽名撤銷交易。到期時間、Nonce 的消耗或失效,以及重新委託,都是因合約而異的機制。
- 「更換受託人會抹去之前的投票。」 重新委託會按照協議規則改變未來或目前的投票權,但不一定能撤銷已經投出的票或改變歷史快照。
相關主題
來源
- EIP-712:型別化結構資料的雜湊與簽名 - Ethereum Improvement Proposals(存取日期:2026-08-20)
- Comp.sol - Compound Finance(存取日期:2026-08-20)
- 治理 API - OpenZeppelin(存取日期:2026-08-20)
- ERC-1271:合約的標準簽名驗證方法 - Ethereum Improvement Proposals(存取日期:2026-08-20)