Nonce 太高,以及錢包報錯的其他幾種

2026-09-03

Nonce 太高,以及錢包報錯的其他幾種

錢包不肯把交易發出去,通常不是它壞了。它顯示的報錯幾乎都能追到三樣東西之一:一個叫 nonce 的計數器、錢包連著的那個節點介面,以及你自己設的費用上限。分清是哪一個在抱怨,修起來往往很短——而且多數情況下不花錢。

Nonce 太高,以及錢包報錯的其他幾種: 要點一覽圖

帳戶 nonce 到底是什麼

在帳戶模型的鏈上,你用來發交易的每個帳戶都帶著一個計數:它已經發出過多少筆交易。這個計數就是 nonce,從 0 開始。你的第一筆交易用 nonce 0,第二筆用 nonce 1,依次往下,中間不許留缺口。

這條規則嚴得有道理。它固定了你那幾筆交易的執行先後,也讓每一筆都無法被重放:nonce 4 一旦確認,之後任何再聲稱自己是 nonce 4 的交易都會被直接拒絕。

這跟挖礦裡的那個 nonce是兩回事——後者是礦工不斷變換、用來找出合法區塊的一個數。同一個詞,做的事完全不同。錢包衝你抱怨的是帳戶上那個計數。

nonce 太高,nonce 太低

錢包並不是每次你按發送時都去問網絡要一個 nonce。它自己記著這個數,並把已經廣播出去、還沒看到確認的那幾筆也算進去。這個本地計數會跟鏈上真正記下的那個數走偏,而這兩條報錯就是走偏的兩個方向。

nonce 太低的意思是你給出的這個號已經用過了,鏈已經走過它。常見的情形是:你以為失敗了的那筆交易,其實確認了。

nonce 太高的意思是你留下了缺口。網絡在等 nonce 7,而你的錢包給的是 9,於是這筆交易還不能執行——它排在隊裡,等 7 和 8 到位。排隊期間不會花掉什麼,但也不會發生任何事,直到缺口被補上;而且節點只會把排隊的交易留一陣子,缺口拖久了,它可能被丟棄而不是被執行。常見的成因,一是某筆交易在錢包已經把它算進去之後從內存池裡掉了,二是錢包快取的歷史已經跟鏈對不上。

補缺口的辦法是補上它,或者忘掉它。把缺的那個 nonce 發出去,排在後面的就全放行了。清掉錢包快取的交易歷史——多數錢包把這個功能叫作重置帳戶——它會重新從網絡讀一遍這個數,從真實的號重新開始。兩種做法都不碰你的私鑰和餘額:nonce 記在鏈上,不在錢包裡。

與其乾等,不如替換掉

待處理的交易可以被替換掉,而不是取消。你用同一個 nonce 再發一筆、並給更高的費用,哪一版先確認,另一版就作廢。給自己轉零金額,是最常見的取消辦法;照原樣重發,則是最常見的加速辦法。

麻煩在於節點不接受隨便加一點點。各家客戶端各有各的下限——go-ethereum 的預設值是替換方至少要比被替換的那筆高出 10%;沒到,節點就留著手裡那筆,回你一句替換交易費率過低。把費用加夠——不是象徵性地加一點——替換才站得住。

比特幣解決同一個問題的路子不同,走的是手續費替換,作用在輸入上而不是帳戶計數上。想法一樣,機制不一樣,所以別把一邊的步驟照搬到另一邊。

錢包為費用報警的時候

現在帳戶模型鏈上的費用分兩部分:網絡設定並銷毀的基礎費,以及付給把你打包進去的那一方的優先費。你發送時,錢包會替你承諾一個每單位 gas 願意付的最高值。費用類的報警都是從這個上限來的。

上限設得低於當前基礎費,這筆交易就根本進不去,要等基礎費掉下來跟它碰頭。上限設得遠高於必要值,錢包可能提醒你:最壞情況的開銷遠超這筆轉帳本身的價值——你多半不會真付到上限,但你確實授權了它。兩種情況下,報警說的都是你選的那個上限,不是你實際大概會付的數。gas 費的機制值得讀一遍,因為這些報警全都是它的下游。

RPC 介面壞掉的時候,壞的是什麼

你的錢包並不存著一份鏈。它通過 RPC 介面去問一個節點,而你看到的一切——餘額、歷史、某筆交易到底成沒成——都是從那條連接過來的。

所以介面宕了、把你限流了、或者落後於鏈的最新高度時,錢包與其說是錯了,不如說是不知情。餘額看著是舊的。已確認的交易顯示成待處理。廣播報一個連接錯誤,而你的帳戶其實一點問題都沒有。

換一個介面通常就好了。這裡有一個真正的風險值得知道:介面能看到你發出的每一個請求,而一個心懷惡意的介面可以給你看它想給你看的任何東西。只從你願意把這些交給它的來源添加介面,並核對鏈 ID 與你以為自己在的那條網絡一致。

你看到的 它的意思 該怎麼辦
nonce 太低 這個號已經用掉了 讓錢包重新讀一遍計數;沒有東西卡住
nonce 太高 你在序列裡留了缺口 把缺的那個 nonce 補上,或重置帳戶的快取歷史
替換交易費率過低 加價太小,頂不掉待處理的那筆 用同一個 nonce、明顯更高的費用重發
最高費用低於基礎費 你的上限低於網絡當前的收費 抬高上限,或等基礎費落下來
介面無響應 你問的那個節點宕了或在限流 換一個介面,並核對鏈 ID

導入錢包之後交易不見了

在新裝置上恢復錢包,有時會看到一片空白的歷史,嚇人,但幾乎從來不是它看上去的那個意思。你的資金記在鏈上、掛在一個地址名下;錢包裡裝的只是那句助記詞,地址是從它派生出來的。

空白歷史多數由三件事解釋。錢包可能派生出了跟你當初用的不同的那個地址,因為派生路徑或帳戶序號不一樣。網絡選擇器可能指向了別處。或者歷史只是還沒載入出來——你看的那個列表來自一個索引服務,而不是鏈本身。

要判定,比對地址,不是比對餘額。把它貼進區塊瀏覽器。如果瀏覽器上你的交易都在,那就什麼都沒丟,問題出在錢包顯示的那一層——關於這一層,怎麼讀一筆失敗或找不到的交易值得一讀。

小結

三個活動部件解釋了錢包交易報錯裡的絕大多數:一個必須保持連號的計數器、一條會變舊的連接,以及一個你自己設的費用上限。它們都不牽涉你的私鑰,也都不是靠把同一筆交易更用力地再發一次就能解決的。

動手之前先把那句話讀完。它已經點明是三者裡的哪一個在抱怨,而那就是答案的大半。想繼續打好這些基礎,請追蹤 Bitbase(幣貝)學院的更多內容。

相關閱讀

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

- 什麼是加密貨幣 QR code?

- 加密貨幣交易費用詳解:你真正付出的成本

- 什麼是加密貨幣交易手續費?

- 加密貨幣入金通道與出金通道:兩者有何區別?

- ETF NAV、折溢價與追蹤誤差

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

參考資料

[1] ethereum.org, "Transactions" ethereum.org

[2] EIP-1559: Fee market change eips.ethereum.org

[3] go-ethereum, core/txpool/legacypool/legacypool.go github.com

[4] ethereum.org, "Nodes and clients" ethereum.org

相關推薦

更多推薦