如何撤回治理委託

2026-09-03

如何撤回治理委託

你曾經把投票權委託了出去,現在想把它拿回來。合約裡沒有一條單獨的「撤回」指令,也不需要有——委託只是一個欄位,你把它覆蓋掉就行。你做不到的,是讓它追溯生效。

如何撤回治理委託: 要點一覽圖

一次委託到底移動了什麼

持有治理代幣與持有投票權不是一回事。OpenZeppelin 的治理文檔寫得很明確:承載投票權的是受託人——想參與的持有者,可以把一個自己信任的代表設為受託人,也可以透過自我委託讓自己成為受託人。Compound 的文檔描述的是同一個動作:代幣持有者把投票權委託給自己,或者委託給一個自己選定的地址。

那一刻並沒有任何東西離開你的錢包。Compound 把真正被移動的量寫得很直白:加進受託人票數裡的票數,等於該用戶帳戶裡持有的餘額。你的代幣還在原處,它們旁邊被記下了一個去向,而另一個地址上的票數按你的餘額漲了上去。

這樣設計的理由是成本。OpenZeppelin 指出,代幣餘額預設並不計入投票權,這讓轉帳更便宜;而這個選擇的代價,是它要求用戶先把票委託給自己,才能把追蹤啟動起來。投票權是掛在餘額旁邊的一套可選機制,而不是餘額本身的屬性。

所以你要撤回的是一個指向,不是一筆轉帳。問題不在於怎麼把代幣拿回來,因為它們從來沒有去過別處。問題在於那個指向接下來該寫成什麼。

撤回是再委託一次,不是刪掉一條記錄

Compound 的文檔寫明:投票權從當前區塊起向後生效,直到發送方再次委託、或把代幣轉走為止。把這句話倒過來讀,就是撤回的做法:你再委託一次。

這個欄位只放得下一個去向,所以沒有一個「空檔」可以回到,也沒有第二條指令要發。寫進一個新去向,就在同一個動作裡把舊的覆蓋掉了。因此,一個給你撤回按鈕的介面和一個只給你委託按鈕的介面,底下做的是同一件事,而錢包讓你簽的那條提示,兩種情況下寫的都是委託。

由此有兩個後果。撤回要花一筆交易和一筆手續費,跟當初那次委託一樣。撤回也是公開的:新的去向被寫在鏈上,任何人讀受託人名冊都能看見。

你動手之後,權重去了哪裡

撤回一次委託,是在選一個去向,而不同去向留給你的位置並不一樣。

你做了什麼 原受託人的票數 你自己的投票權
委託給自己 按你的餘額減少 等於你的餘額
委託給另一個地址 按你的餘額減少 仍然是零,現在由別人承載
把代幣轉走 按你轉走的餘額減少 隨代幣一起沒了
什麼都不做 不變

只有第一行讓你成為投票者。第二行是換了個代表,不是退出這套體系。第三行確實有效,但它是個糟糕的路徑,因為它為了調一個欄位而處置掉了資產。第四行值得單獨點出來:一個不再信任受託人、然後什麼都不做的持有者,並沒有表達異議——他的權重還在被人代為投出。

為什麼一個已經開著的提案不會跟著動

撤回給人一種失靈的感覺,正是在這裡,而它並沒有失靈。OpenZeppelin 的治理擴展會保留歷史餘額,使投票權取自過去的快照而不是當前餘額,它的文檔把這稱為一項防止重複投票的重要保護。Compound 讀取權重的方式是一樣的:能提交投票的,是在提案開始時持有投票權的那些地址。

因此,一次撤回在它被打包的那個區塊生效,並從那裡向後適用。如果一個提案的快照區塊已經過去了,這個提案的計票讀的就是當時那份名冊——即便你已經把委託收了回來,原受託人仍然可以在它上面投出你的權重。

真正管用的規則是一個截止時間,不是一個按鈕。要讓受託人不能在某個具體提案上投出你的權重,撤回必須記錄在那個提案的快照之前。在一次有爭議的投票開始之後第二天才發出的撤回,本身沒有錯、對之後的一切都及時,但對你正在反應的那次投票一文不值。

撤回做不到的事

撤回一次委託,與撤銷一次代幣授權不是同一個操作,而共用的那個動詞把一處真實差別藏了起來。授權是給某個合約的長期許可,讓它可以動你的代幣。委託不給這種許可:受託人可以投出你的權重,卻碰不到你的餘額。把錢包上所有授權都清掉,你的委託原封不動;把委託撤回,你的每一條授權也原封不動。

它不會撤銷受託人已經做過的事。已經投出的票仍然算數,已經落定的提案仍然落定,你的權重被怎麼用過的記錄,不會因為這次撤回被改寫。

它也不會釋放被另一個合約鎖著的代幣。如果你的餘額被鎖倉、被質押、或被包進一個投票託管部位裡,附在那個部位上的委託聽的是那個合約的規則,你發給代幣合約的撤回夠不到它。

鏈下委託要到別處去撤

不是每一次投票都在鏈上結算,而一個把投票放在鏈下進行的 DAO,它的委託名冊就不在代幣合約裡。Snapshot 的文檔列出了三條委託路徑:一條是受託人註冊表,用於那些設置了自訂委託合約的空間;一條是 Snapshot 自己的委託頁面,文檔把它稱作向一個已知地址委託的最快辦法;還有一條是直接與合約交互。

這種多路並存,正是你在認為事情辦完之前該核的東西。Snapshot 的文檔還指出,向某個選定空間的直接委託,優先級高於面向全部空間的委託,所以同一個持有者可以同時在不止一處處於已委託狀態,而它們之間有確定的先後。

要核的清單說起來很簡單:把你的地址作為委託方出現過的每一份名冊列出來,鏈上的和鏈下的,逐一清掉。代幣合約裡的一次撤回,對另一套系統讀的那條註冊表記錄什麼都沒說。

一個算例

假設你持有 10,000 枚代幣,把它們委託給了一個合計承載 250,000 投票權的地址,於是你這份餘額佔該受託人可投權重的 4%。提案 A 開始了,它的快照區塊過去了。然後你把票委託給了自己。

從那個區塊起,兩句話同時成立。在提案 A 上,原受託人仍然承載 250,000,因為那份計票讀的是快照,不是此刻的名冊。在下一個提案上,同一個受託人承載 240,000,而你自己承載可以親手投出的 10,000。

第二句話也正是報表變化的地方。你的權重從一個受託人挪到了一個持有者手上,這會把投票集中度讀數往下拉、把參與者人數往上抬;而以已委託權重為分母的投票率,只有在你隨後真的投了票時才會變好。把權重拿回來卻從不使用,與把它留給一個棄權的受託人,落到的是同一個位置。

小結

委託是一個欄位、裡面放著一個去向,所以撤回它意味著寫進一個新去向,而不是刪掉一個舊的。委託給自己,你就成了投票者;委託給別處,你只是換了代表;什麼都不做,你的權重就繼續在沒有你的情況下被投出去。

真正絆住人的是時間。投票權讀自過去的快照,所以一次撤回約束的是快照晚於它的每一個提案,而不約束任何一個已經開著的提案。在你在意的那次投票之前去核受託人名冊,而不是之後;並且把你的組織實際用到的每一份名冊都核一遍。想繼續打好這些基礎,請追蹤 Bitbase(幣貝)學院的更多內容。

相關閱讀

幣貝上與本主題相關的其他文章:

- 代幣遷移為什麼要你在錢包裡授權

- 代幣遷移已完成,但新代幣沒有出現在錢包裡

- 如何計算代幣項目的金庫續航

- NVT 比率詳解:網絡價值與鏈上交易額

- 空投騙局與領取前安全核對清單

風險披露:本文為 Bitbase(幣貝)學院的科普內容,僅供教育與資訊參考,不構成任何投資、交易、稅務或財務建議。加密資產波動劇烈,請自行評估風險。本文撰寫於 2026 年 9 月,請以官方最新資訊為準。

參考資料

[1] OpenZeppelin Contracts 文檔 5.x,Governance docs.openzeppelin.com

[2] OpenZeppelin Contracts 文檔 5.x,API,ERC20(ERC20Votes) docs.openzeppelin.com

[3] Compound 文檔,Governance(Compound v2) docs.compound.finance

[4] Snapshot 文檔,用戶指南,Delegation docs.snapshot.box

相關推薦

更多推薦