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 key 和序列,而不只是單一計數器。EIP-4337定義了這類操作的 nonce 結構,因此使用帳戶抽象的錢包可能和本文的 EOA 範例不同。關於目標網路、地址和轉帳狀態,請接著參閱加密貨幣轉帳檢查清單。
常見問題
Q1Ethereum 交易確認後還能取消嗎?
不能。交易尚未確認時,錢包可以嘗試用相同 nonce 的交易替換它,但無法撤銷已納入區塊並執行的交易。採取行動前請確認交易雜湊和鏈狀態。
Q2為什麼我的下一筆 Ethereum 交易也在等?
一般 EOA 交易依照 nonce 順序執行。如果較早的 nonce 尚未解決,較晚的 nonce 就不能先執行,即使它顯示在錢包中或提出較高費用也一樣。
Q3「已移除」表示我的交易已取消嗎?
不一定。某個錢包、區塊瀏覽器或節點可能已經看不到該交易。在把 nonce 當成空出之前,請在正確網路上確認交易雜湊和帳戶最新的 nonce。
資料來源與延伸閱讀
回報問題
我們會準備一封包含本文連結的電子郵件。寄出後,Mark 才會收到你的回報
快速檢查
讀完指南後,用 3 道題檢查一下
問題 01
某帳戶有一筆 nonce 41 尚未解決的交易,另有一筆 nonce 42 的交易。第二筆交易會怎樣?
選擇答案即可查看解釋