跳至主要內容
本頁面使用機器翻譯自英語,可能包含錯誤或不清楚的語言。如需最準確的信息,請參閱英文原文。由於更新頻繁,部分內容可能與英文原文有出入。請加入我們在 Crowdin 上的努力,幫助我們改進本頁面的翻譯。 (Crowdin translation page, Contributing guide)

如何管理 Nonces 以進行可靠的交易

在 Kaia 或任何 EVM 相容的區塊鏈上建立時,nonce 管理是其中一個細節,可以讓您的 dApp 順利執行,也可以導致交易卡住或失敗。本指南說明什麼是 nonces、為什麼它們很重要,以及在傳送大量或連續交易時如何有效地處理它們。

什麼是 Nonce?​

nonce(使用一次的數字)是帳戶 (EOA) 的交易計數器。第一筆交易使用 nonce 0;之後的每筆交易都以 1 為單位遞增。交易必須嚴格按照順序處理 (0、1、2、 …)。這種排序方式可防止重播,並確保預期的執行順序。錢包通常會為終端使用者管理,但高吞吐量系統或授權收費流程通常需要明確的控制。

常見的 Nonce 問題​

當交易以不正確的 nonce 值傳送時,可能會發生幾個問題:

nonce 序列中的缺口​

之後的交易就會卡住,等待缺失的 nonce 被填補。舉例來說,如果您傳送的交易有 nonces 0、1 和 3 (跳過 2),則交易 3 及以後的交易要等到 nonce 2 遞交後才會處理。

重複的 nonce​

具有相同 nonce 的兩個交易會互相競爭。誰先得到確認,誰就勝出。另一個則被丟棄。

大量交易碰撞​

在沒有仔細追蹤 nonce 的情況下快速傳送多個交易時,有些交易可能會因為 nonce 衝突而失敗或停滯。

管理大量交易的 Nonces​

發送許多交易時(批量作業、NFT 造幣機、套利機器人),您不能單靠錢包自動化。您需要一個有系統的方法。

1. 維護離鏈 Nonce 儲存庫​

使用資料庫 (Redis、Postgres 或內存映射) 追蹤每個帳號的下一個 nonce。啟動會話時,使用 eth_getTransactionCount 與區塊鏈同步。傳送每筆交易後,請立即遞增您的本機 nonce 計數器。

此方法可讓您精確控制 nonce 指派,並防止在快速連續傳送交易時發生衝突。

2. 使用 Web3 自動化程式庫​

ethers.js和web3.js等程式庫會自動處理連續交易的 nonce 指派。對於大量或平行交易,請從您的 nonce 儲存中手動覆寫 nonce。

3. 並行處理多個帳戶的交易​

如果交易是獨立的,請將它們分佈在多個 EOA 中。例如,使用 10 個帳戶,每個帳戶傳送 10 個交易,而不是一個帳戶傳送 100 個交易 (造成 nonce 瓶頸)。這可大幅提升您的吞吐量。

4. 實施健全的錯誤處理​

偵測掉線或卡住的交易 (通常是由於低瓦斯造成)。換上同樣的不當手段,再加上更高的瓦斯價格。此程序稱為「加速」,可確保您的交易佇列持續前進。

重試邏輯在生產環境中至關重要。建立處理暫時故障的機制,並在需要時重新提交交易。

5. 與區塊鏈探索者一起監控​

使用 KaiaScan、OKX Explorer 或自訂索引器等工具來驗證 nonce 進程。這有助於在交易無法傳播或卡在意外狀態時進行除錯。

6. 可擴充設計​

對於高吞吐量系統(交易機器人、批量造幣機),設計可動態分配新 EOA 的工作流程,使用 nonce queues 確保排序,並透過在多個帳戶中分配交易進行水平擴展。

7. 進階使用者手動調整​

在交易卡住時,提供手動設定 nonces 的選項。大多數的錢包 (如 MetaMask) 都已經為需要精細控制的強大使用者提供支援。

範例流程:大量交易管理​

以下是典型的 nonce 管理系統如何處理大量交易:

  1. 擷取目前的 nonce:查詢您的 nonce 管理員 (例如 Redis) 以取得寄件者位址最後使用的 nonce
  2. ** 增加並指定**:在本地遞增 nonce 並將其分配給下一個交易
  3. ** 傳送交易**:將交易提交至網路
  4. ** 更新儲存**:根據寄件者位址立即更新資料存放區(Redis、資料庫)中的 nonce
  5. ** 處理失敗**:如果交易失敗 (例如 Tx(1)),在繼續進行 Tx(2) 之前,使用相同的 nonce 實作具有較高 gas fee 的重試邏輯

關鍵在於維護一個集中式的 nonce 管理器,以追蹤每個位址最後使用的 nonce。每個交易都會遞增此值 (Tx(0) 使用 nonce 0,Tx(1) 使用 nonce 1,如此類推) 並原子式地更新儲存。這可以防止在快速連續傳送交易時發生 nonce 碰撞。

關於估算瓦斯限額和價格(包括重試時選擇較高費用),請參閱 如何估算 Kaia Wallet 和 MetaMask 上的瓦斯限額和價格。

總結​

可靠的 nonce 管理對於交易繁重的系統來說非常重要。使用非鏈上的 nonce 儲存、適當的錯誤處理 (相同的 nonce、更高的費用)、監控和水平擴充,以保持高吞吐量並避免停滯。相同的 nonce 規則適用於費用授權交易。

讓這個頁面變得更好