項目換了新的代幣合約,公告了一個兌換窗口,然後窗口關閉。幾個月後你打開一個舊錢包,那筆舊代幣餘額還在裡面。它還能不能被換掉,不是一個問題一個答案。一次遷移裡會過期的東西有三樣,它們分別在三個不同的地方被執行,其中只有一樣是由代碼執行的。
代幣遷移究竟搬動了甚麼
遷移並不會把你的代幣搬到別處。舊合約仍在它自己的地址上運行,只要鏈還在跑,你的餘額就一直留在它的帳本裡。遷移提供的是一次兌換:你把舊單位交給一個兌換合約或一個平台,它在新的帳本裡給你記上等值的權益。
這次兌換走的是普通的代幣管道。在 ERC-20 標準裡,`approve` 允許某個花費者從你的帳戶裡最多提取一個設定的額度,`transferFrom` 把代幣從一個地址轉到另一個地址;標準把這一對方法描述為一套提取流程,讓合約代表你轉移代幣。兌換合約就是這樣一個花費者,鏈不會給它任何特殊地位。
由此得出兩條。你的舊餘額不會自己衰減或失效,截止日期也從來不是你手上那些代幣的屬性。截止日期屬於兌換另一端那個準備兌付的對手方。所以要問的不是你的代幣有沒有過期,而是對手方那邊出了甚麼事。
會過期的有三樣,而且不是同一回事
在一份遷移公告裡,截止日期這個詞承擔了太多含義。把它拆開,會看到幾個各自獨立的時鐘,每一個都在別處被執行。
第一個是公告裡的那個日期本身,是網誌裡的一行字或應用裡的一條橫幅。鏈上沒有任何東西會去讀它。第二個是寫進兌換合約裡的一道檢查:一旦當前區塊時間戳越過代碼裡定死的那個值,它就拒絕執行。第三個是合約用來兌付的新代幣儲備,出資方在項目認為遷移結束之後可以把它取走。
| 過期的是甚麼 | 由哪裡執行 | 重新打開需要甚麼 |
|---|---|---|
| 公告裡的日期 | 鏈上沒有任何地方 | 甚麼都不需要,因為合約從來沒檢查過它 |
| 兌換合約裡的時間戳檢查 | 合約代碼 | 一條升級路徑,如果當初留了的話 |
| 新代幣儲備 | 鏈上的一個餘額 | 有人把合約重新充值 |
| 平台的遷移人工受理 | 該平台的內部政策 | 該平台的一個決定 |
下面講的都是怎麼判斷你落在哪一行。
在斷定它關閉之前,先把合約讀一遍
前兩行你自己就能免費判定。在區塊鏈瀏覽器上打開兌換合約,讀它已驗證的源碼。如果兌換函數裡沒有任何針對區塊時間戳的比較,代碼裡就沒有截止日期,公告裡的那個日期從頭到尾只是一次通知。這種情況下,晚一年發出的兌換和第一天發出的兌換走的是同一條路徑。
如果確實有一道時間戳檢查,那是另一種結論,而且是硬的。合約代碼只做寫進它裡面的事,一個到點之後就回滾的條件會一直回滾下去。任何工單都改不了這件事,因為這中間沒有可以被說服的人:那次拒絕就是一行代碼在按預期執行。
唯一的限定條件是可升級性。如果兌換合約架在一個邏輯可被替換的代理後面,握有那個權限的人原則上可以把截止日期解除。那是項目方的一個決定,而不是你握著的一項權利,但它區分的是一扇關著的門和一扇焊死的門,而讀合約就是你分辨兩者的辦法。
門開著,儲備卻是空的
一個沒有截止日期的合約,仍然沒法從一個空帳戶裡兌付。新代幣得從兌換地址上持有的一筆儲備裡出,而如果項目方寫了一個在窗口結束後清掃剩餘的函數,它就能把這筆儲備清空。清掃之後,兌換函數可能仍然接收你的舊代幣、仍然失敗,因為兌付那一條腿背後已經沒有東西了。
舉個例子。某個項目按每十枚舊單位換一枚新單位做合併,一個錢包裡有 25,000 枚舊單位,那麼應得的是 2,500 枚新單位。假設窗口期內有 96% 的舊代幣供應完成了遷移;剩下的 4% 才是遲到者要去索取的那一部分,而合約還能不能兌現這些索取,無非就是兌換地址上持有的新代幣餘額。這個餘額是公開的。發出任何東西之前先查它。
這是最懲罰樂觀的一種情形。把舊代幣發進一個沒法回付你的合約,並不會讓你回到原點:舊單位進了一個從來沒被寫成能把它們再交出來的地址,而你甚麼新東西也沒拿到。先讀儲備,如果是空的,就別發。
平台替你做完的那種遷移
有些遷移根本沒碰過你的錢包。如果兌換發生時你把舊代幣放在一個中心化平台上,平台會把它自己的合併餘額換掉,然後改寫你的帳戶記錄,於是這次遷移在你的帳戶裡只表現為一個代碼變了,別的甚麼都沒有。
那條路徑有它自己的時鐘,而且那是政策,不是鏈的規則。平台公告一個轉換窗口,給窗口內到帳的餘額入帳,到某個時點就停止。這個形狀在代幣下架上很熟悉:一份通知、一個窗口,然後關閉存取,之後能不能補救,取決於那家機構是不是還為遲到者保留一套人工流程。
所以這裡其實是兩個問題而不是一個,而且它們的答案不同。平台還會不會給一筆遲到的舊代幣充值入帳,是一個客服問題。鏈上兌換合約還會不會兌付,是一個代碼問題。分開回答,因為其中一個說不,對另一個甚麼都沒說。
鏈上那條路徹底關死之後還剩甚麼
假設代碼關了,儲備清空了,也沒有任何人工受理會處理遲到的索取。舊代幣並沒有停止存在。它是一個仍在運行的合約裡的一筆餘額,它仍然可以被轉移,因此仍然可以賣給任何願意買的人,價格就是一個被棄置帳本的市場最後給出的那個數。
不要靠把舊單位發到某個看著有希望的地方來找變通辦法。把它們發給新代幣合約,或者發給舊合約本身,與把加密資產轉錯地址是同一類錯誤:合約沒有私鑰,除非有人寫了一個把誤入代幣轉出去的函數,否則誰也拿不出來。ERC-223 標準正是圍繞這種失效寫的,它指出用普通的 transfer 發給合約的代幣,會變成這個合約根本不知道的一筆餘額。
對這種情形,誠實的總結是:損失的規模已經定死了,而之後的每一筆交易都只會往上加。把倉位拿著不動不花錢,猜一個救援方案可能會把剩下的也搭進去。
遷移截止日期是冒充者的誘餌
一個即將到期的窗口製造了緊迫感、一批不知所措的持有者,以及一個讓項目方正當地要求人們連接錢包的理由。攻擊者不需要發明這裡的任何一樣,他們只需要一個仿冒站點。這就是冒充的形狀,也是為甚麼搜尋結果是打開遷移頁面的錯誤方式。
假頁面盯上的機制,和真正的兌換用的是同一套。一次真實的遷移會請求一個額度,好讓合約把你的舊代幣拉走,而授予攻擊者的代幣授權會一字不差地做它說的事:讓那個地址拿走你授權的餘額。給一個有限額度而不是無限額度,把合約地址與項目方自己發布的公告核對一遍,並且通過你自己的書籤進入站點。
有一條規則貫穿這整個類別。一次遲到的遷移裡你需要的每一個事實,都能在公開瀏覽器上免費讀到:合約源碼、時間戳檢查、儲備餘額。任何為重新打開一次已關閉的遷移收費的人,或者為此索要助記詞的人,賣給你的是第二次損失,而不是第一次損失的解法。
小結
舊代幣不會過期,過期的是對手方。一個公告日期在鏈上約束不了任何人;兌換合約裡的一道時間戳檢查約束所有人,包括項目方;而一筆被清掃的儲備把門關得一樣死,只是門把手還留在那裡。這三種情形從錢包介面上看一模一樣,底下卻完全不同。
工作順序是固定的。在瀏覽器上讀兌換合約,找時間戳檢查,然後讀那個地址上的儲備餘額,如果涉及平台,再單獨去問平台。如果這些都回來是關閉的,那麼這筆舊餘額仍然是你的、仍然可以轉移,任何緊迫感都不該驅使你把它發到一個沒法把東西發回來的地方。想繼續打好這些基礎,請追蹤 Bitbase(幣貝)學院的更多內容。
相關閱讀
幣貝上與本主題相關的其他文章:
- 如何撤回治理委託
風險披露:本文為 Bitbase(幣貝)學院的科普內容,僅供教育與資訊參考,不構成任何投資、交易、稅務或財務建議。加密資產波動劇烈,請自行評估風險。本文撰寫於 2026 年 9 月,請以官方最新資訊為準。
參考資料
[1] 以太坊改進提案,ERC-20: Token Standard,approve 與 transferFrom 方法(狀態:Final) eips.ethereum.org
[2] 以太坊改進提案,ERC-223: Token with transaction handling model,Motivation 一節(狀態:Final) eips.ethereum.org






