跳至主要內容
本頁面使用機器翻譯自英語,可能包含錯誤或不清楚的語言。如需最準確的信息,請參閱英文原文。由於更新頻繁,部分內容可能與英文原文有出入。請加入我們在 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 儲存庫

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

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

2. 使用 Web3 自動化程式庫

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

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

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

4. 實施健全的錯誤處理

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

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

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

使用 KaiaScanOKX 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 規則適用於費用授權交易。

讓這個頁面變得更好