Ethereum 待處理交易解說:Nonce、替換與取消
了解 Ethereum 交易為何需要等候、帳戶 nonce 如何排列交易,以及錢包內的加速或取消操作能做甚麼、不能做甚麼。
本指南內容「待處理」標籤表示交易尚未被納入區塊
簡短摘要
普通外部擁有帳戶(EOA)發出的 Ethereum 交易使用連續遞增的 nonce。只要該帳戶較早的 nonce 尚未被消耗,較後的 nonce 就不能執行。錢包的加速或取消操作通常會建立一筆使用相同 nonce、與原交易競爭的新交易;這不保證交易會被納入區塊,已確認的交易亦無法撤銷。
「待處理」標籤表示交易尚未被納入區塊
簽署 Ethereum 交易後,錢包可以將它傳送給執行用戶端或交易服務。接受該交易的節點可能會將它轉發給對等節點,區塊提議者之後亦可能將它納入區塊。在交易被納入之前,它尚未改變規範鏈的狀態。錢包或區塊瀏覽器顯示「待處理」,通常表示該服務知道這筆交易,但尚未在區塊中觀察到它;這並不代表全網有一個統一的交易佇列。Ethereum.org 交易指南介紹由簽署及廣播到納入區塊的流程。
交易等候的原因可能各不相同。費用上限可能不符合區塊納入條件,同一帳戶較早的一筆交易可能仍未解決,某個節點可能尚未收到交易,或者錢包顯示了過時資訊或特定服務供應商的資料。不同原因需要不同的檢查方式。提高費用無法修正錯誤的網絡選擇;未檢查第一筆交易便再次付款,則可能造成重複付款。
「待處理」亦不同於「已確認」、「已最終確定」或「失敗」。交易收據產生之前,交易雜湊可能已經可見;交易被納入後,才會有收據。其後 Ethereum 區塊還會經過共識狀態的推進。錢包及區塊瀏覽器對這些標籤的用法可能不同,因此請檢查交易雜湊、區塊、收據及目前的鏈狀態,不要只依賴一個簡短的狀態標籤。
Nonce 是帳戶的交易序號
普通 Ethereum 外部擁有帳戶(EOA)有一個用來排列交易的 nonce。Nonce 是計數器,並非費用、時間戳或唯一交易雜湊。對每個帳戶而言,鏈只接受使用該帳戶目前狀態所預期的下一個 nonce 的交易。同一帳戶不能在規範鏈上執行兩筆 nonce 相同的交易。Ethereum.org 帳戶文件將 nonce 描述為帳戶交易計數器及防重播機制。
假設某帳戶下一個未使用的 nonce 是 41。它下一筆有效交易使用 nonce 41;這筆交易被納入及套用後,下一筆交易便使用 nonce 42。Nonce 與發送帳戶相關,而非與目標地址相關。兩個不同帳戶可以同時有編號為 41 的交易,因為它們各自有獨立的序列。
可以使用高於帳戶目前鏈上 nonce 的值簽署交易,但執行時不能跳過序列中的缺號。必須先消耗較早的缺失 nonce。若帳戶已經消耗某個 nonce,使用該 nonce 的交易便已過期,不能作為新交易執行。即使交易在不同時間廣播,或經由不同節點到達,這種排序亦能讓網絡按順序處理每個帳戶的交易。
Nonce 規則適用於 Ethereum 執行層上的普通 EOA 交易,並不能通用描述所有錢包抽象、rollup 排序器或區塊鏈。智能帳戶系統可以加入自己的操作及 nonce 規則,本文稍後會再說明。
「待處理」及「排隊中」是本地交易池標籤
Ethereum 沒有一個所有錢包、節點、區塊瀏覽器及區塊提議者都能以完全相同方式看到的同步等候室。每個執行用戶端都會把自己收到、並根據自身限制及政策認為符合條件的交易,存放在本地交易池。一筆交易可能出現在某個節點的交易池,卻不在另一個節點的交易池。Geth 的 txpool RPC 文件展示該用戶端本地的 pending 及 queued 分組,並指出同一發送者及 nonce 可能對應多筆交易。
在 Geth 的術語中,pending 通常指從帳戶目前狀態開始,可以按 nonce 順序處理的交易;queued 則可能包括等待填補序列缺口的未來 nonce 交易。這些名稱屬於用戶端介面分類,並非所有 Ethereum 軟件都必須顯示的共識層狀態。錢包可能把所有未確認交易都稱為「待處理」,而區塊瀏覽器可能只顯示其資料供應商觀察到的交易。
例如,若一個節點知道 nonce 41 及 nonce 43 的交易,它便不能先執行 43、再執行 42。該節點可能會把 43 留在佇列中,直至收到 42 或帳戶狀態以其他方式前進。另一個從未收到 43 的節點則完全不會顯示它。因此,兩個區塊瀏覽器可能對交易究竟是待處理還是找不到提供不同結果,但任何一個畫面都無法證明所有驗證者看到了甚麼。
有些用戶端亦容許同一發送者及 nonce 對應多個未確認交易候選。它們是競爭同一個序列位置的選項,而不是可以先後執行的兩筆交易。交易池容量、交易保留時間及替換規則屬於實作政策,可能隨軟件版本改變。例如,Geth 可設定的交易池選項包括用戶端專用的價格上調門檻;不能把它當作 Ethereum 通用的費用規則。這些選項的適用範圍見 Geth 命令列參考。
一個未解決的 Nonce 已可令後續交易等候
假設某帳戶下一個鏈上 nonce 是 41。你先廣播 nonce 41 的交易 A,再廣播 nonce 42 的交易 B。如果 A 仍未解決,B 便不能先執行。B 可能留在本地佇列中,只在錢包顯示為待處理,或者因區塊瀏覽器尚未收到它而完全不顯示。重要的是 nonce 的先後關係,而非錢包以甚麼次序建立或顯示兩筆交易。
如果 A 最終被納入區塊,帳戶 nonce 會前進至 42,之後 B 才可能符合條件,同時仍須符合自身的有效性、費用條件及交易池政策。如果 A 被另一筆使用 nonce 41 的有效交易替換,而替代交易被納入,它便會佔據同一個序列位置。如果帳戶另一筆交易已消耗 nonce 41,舊的 41 候選便會過期,不能再執行。
因此,以較高 nonce 發送新交易並非解除卡住交易的通用方法;它只是在缺口後面再加一筆交易。如果 B 本來就是後續交易,取消 B 亦無法解決 A。修改任何內容前,請先找出該帳戶最早的未解決 nonce,並核實其狀態。
缺口可能只是短暫的,亦可能長期存在。較早的交易可能尚未到達你正在查詢的節點、費用設定對目前情況缺乏吸引力或不足,或者已從某個節點的交易池移除。錢包亦可能顯示在另一部裝置建立的排隊交易。單憑畫面無法判斷發生了甚麼;請比較帳戶已確認的 nonce、交易雜湊及多個可靠來源的資料。

費用設定會影響納入區塊,但不會改變 Nonce 次序
Nonce 次序及費用資格是兩項不同限制。即使交易使用正確的下一個 nonce,如果費用參數不符合區塊條件,它仍可能等候。Nonce 較高的交易不能單靠提供較高小費插隊。提高 nonce 42 的費用不會令 nonce 41 消失。
對標準 EIP-1559 交易而言,最高費用必須足以支付納入該交易之區塊的基本費用,優先費用則可能影響區塊提議者的選擇。交易等候期間,基本費用及可用區塊空間都可能改變。最高費用是上限;提高上限不保證在某個指定時間確認。Ethereum Gas 費用指南說明這些欄位及有效費用的計算方式。
節點或錢包可能會套用額外的轉發或替換規則。這些政策決定特定服務願意接受或轉發甚麼,並非全部都是共識規則。例如,Geth 允許設定替換其自身交易池內待處理交易所需的價格上調門檻。其他用戶端、供應商、錢包或軟件版本可能有不同表現。不要把記得的百分比或固定等候時間視作全網保證。
如果交易因較低 nonce 尚未解決而等候,請先找出使用該 nonce 的交易。如果它因最高費用無法涵蓋目前基本費用條件而等候,請先了解費用欄位再作更改。Ethereum 費用指南適合了解費用計算;本文則集中講解另一個問題:交易排序。
加速會提交一個使用相同 Nonce 的替換候選
錢包的「加速」功能通常會從同一帳戶建立新交易,沿用相同 nonce 並調整費用參數。兩個候選互相衝突,因為帳戶對該 nonce 只能執行一筆交易。如果相關交易池接受替換候選並把它納入區塊,新候選便可能佔據該 nonce 的位置;原交易不能再與它同時在規範鏈執行。MetaMask 的待處理交易指南將其加速流程描述為使用相同 nonce 及較高費用重新提交。
替換交易可能保留原本的收款人及操作,只改變費用欄位;但請查看簽署畫面,不要自行假設。不同錢包的實作可能顯示其他欄位,或使用不同功能名稱。簽署替換交易之前,請確認發送帳戶、nonce、目標地址、金額及合約資料。如果替換交易改變了實際操作,它便不只是無害的費用調整。
替換交易不保證會在所有地方被接受,亦不保證很快納入區塊。原交易可能已經被納入;節點可能根據自身政策拒絕替換交易;新候選對區塊提議者而言仍可能缺乏吸引力;服務亦可能沒有把它轉發至你正在查看的節點。如果原交易已確認,再用已消耗的 nonce 發送另一筆交易無法撤銷它,而且通常會因 nonce 已過期而被拒絕。
本文所說的「替換」,是指來自同一帳戶並使用同一 nonce 的競爭交易。不要把 Bitcoin 的 RBF 或 CPFP 操作搬到 Ethereum。Bitcoin 使用不同的交易模型,其提升費用的方法並非 Ethereum 帳戶的操作指引。
取消是嘗試競逐同一個 Nonce 位置
已簽署的 Ethereum 交易廣播後,沒有任何協議層級的復原命令可以從所有節點撤回它。有些錢包會在交易尚未確認時提供取消功能。該功能通常會嘗試從同一帳戶發布另一筆使用相同 nonce 的交易;一種常見的錢包做法是向發送者自己的地址發送零金額交易。如果取消候選被接受,並比原交易先納入區塊,它便會消耗該 nonce,令原候選其後無法執行。具體建立方式及功能是否可用取決於錢包。
原交易與取消候選可能互相競逐。如果原交易先被納入區塊,之後才發出的取消便不能撤銷其影響。如果兩個候選都未被接受或納入區塊,nonce 可能仍未解決。按下錢包按鈕或看見成功通知,並不能證明取消候選勝出。請檢查新交易雜湊及規範鏈狀態。MetaMask 指示明確把取消嘗試限於仍在待處理的交易,並說明已確認交易不能取消。
簽署取消交易前,請確認它與你想取代的交易使用同一帳戶及 nonce,並檢查錢包顯示的所有欄位。如果取消交易被納入區塊,可能要再付一次網絡費用。取消候選本身亦可能繼續等候,或因相關交易池政策而未能替換原交易。錢包顯示「已取消」並不代表協議已復原交易;只有確認究竟是哪筆交易消耗了 nonce,才能判斷結果。
如果交易已執行代幣授權、合約呼叫或轉帳,取消之後的交易不能撤銷已完成的狀態變更。部分合約操作可能有另外的後續方法,但有沒有及其後果取決於合約。不要只因介面稱之為取消,就簽署不熟悉的交易。
已納入、已回退、已移除及找不到,是不同的觀察結果
已納入區塊的交易會有區塊資料及收據。如果執行成功,預期的狀態變更可能已套用。如果 EVM 執行 revert,該次執行的狀態變更會回退,但交易仍會消耗帳戶 nonce,而且可能仍須支付 Gas。請查閱交易收據及執行狀態,不要從錢包通知推斷結果。Ethereum.org 交易指南及 Gas 指南說明納入區塊與執行結果的分別。
「已移除」或「找不到」標籤通常只代表一個錢包、區塊瀏覽器、RPC 供應商或本地交易池的回報。單憑標籤不能證明協議已取消交易,亦不能證明 nonce 已空出。其他節點可能仍然知道這筆交易;錢包可能重新廣播已簽署交易;之後的區塊亦可能顯示帳戶 nonce 已前進。相反,即使你查閱的畫面都沒有舊交易,帳戶已確認的 nonce 也可能沒有改變。
如果找不到交易雜湊,請確認你選擇了建立該交易時使用的同一條鏈及同一帳戶。比較帳戶最新的鏈上 nonce 與交易 nonce,並查看該發送者的近期交易。nonce too low 回應表示該端點的觀點可能是 nonce 已經消耗;這不是反覆重試同一請求的理由。請核實是哪筆交易使用了該 nonce,以及相關區塊是否仍屬規範鏈。
在鏈穩定之前,短暫的鏈重組亦可能影響已納入區塊的交易。錢包及區塊瀏覽器可能按其觀察結果改變而更新標籤。對重要轉帳,請遵從收款服務的確認政策,並在適用時等待更強的共識最終性。「在一個區塊中看見」與「在任何情況下都不可逆」並非同一回事。
採取行動前,先找出最早尚未解決的 Nonce
先確認鏈、發送帳戶及交易雜湊均正確。在對應網絡的可靠區塊瀏覽器查找該雜湊。檢查是否有收據、使用哪個 nonce、執行是否成功,以及帳戶之後有沒有發出其他交易。不要為查詢交易而公開或輸入助記詞;在公有鏈查詢資料只需要公開地址及交易雜湊。
如果看不到雜湊,請比較帳戶最新已確認的 nonce 與錢包顯示的 nonce。開發人員或節點營運者可以使用 latest 及 pending 區塊標籤查詢 eth_getTransactionCount。Ethereum.org JSON-RPC 參考將 latest 定義為最新區塊狀態,pending 則指待處理狀態。Pending 結果仍只反映該 RPC 端點的觀點;向兩個供應商查詢可能得到不同數值。大部分使用者毋須執行命令,也可從錢包帳戶活動及可靠區塊瀏覽器取得相同的初步線索。
接著從尚未消耗的最低 nonce 開始處理。如果原交易仍可見,而且錢包支援替換,請在簽署前細看替換交易的實際欄位及費用設定。如果看不到原交易,請向錢包或 RPC 供應商查詢其如何處理重新廣播及替換,不要自行假設交易已從網絡消失。如果 nonce 已消耗,請先找出被納入區塊的交易再做其他事情。避免不斷發送較後 nonce 的新交易;這可能令佇列變長,卻沒有解決最前面的缺口。
這些步驟適用於標準 Ethereum 外部擁有帳戶交易。帳戶抽象系統可以透過 bundler 提交 UserOperation,而智能帳戶可能使用多個 nonce 鍵及序列,不只是單一計數器。EIP-4337為這些操作定義 nonce 結構,所以使用帳戶抽象的錢包可能與本文的 EOA 範例不同。至於目標網絡、地址及轉帳狀態,請繼續參閱加密貨幣轉帳檢查清單。
常見問題
Q1Ethereum 交易確認後還可以取消嗎?
不可以。交易尚未確認時,錢包可以嘗試用相同 nonce 的交易替換它,但無法撤銷已納入區塊並執行的交易。採取行動前請核實交易雜湊及鏈狀態。
Q2為甚麼我的下一筆 Ethereum 交易也在等候?
普通 EOA 交易按 nonce 順序執行。若較早的 nonce 尚未解決,較後的 nonce 就不能先執行,即使它顯示在錢包中或提出較高費用也一樣。
Q3「已移除」是否表示我的交易已取消?
不一定。某個錢包、區塊瀏覽器或節點可能已看不到該交易。把 nonce 視為空出之前,請在正確網絡核實交易雜湊及帳戶最新的 nonce。
資料來源與延伸閱讀
回報問題
我們會準備一封包含本文連結的電郵。寄出後,Mark 才會收到你的回報
快速檢查
讀完指南後,用 3 道題檢查一下
問題 01
某帳戶有一筆尚未解決的 nonce 41 交易,另有一筆 nonce 42 交易。第二筆交易會怎樣?
選擇答案即可查看解釋