在記憶體池中找不到擁塞交易
我有一個奇偶校驗節點正在執行,並且正在觀察 txpool 是否有傳入 tx 到特定地址。我需要在記憶體池中擷取 tx。該節點位於法國,並且 tx 是從愛爾蘭發送的。一切都按預期工作,直到出現擁堵。
問題
一旦 Gas 價格
eth-netstats
上升到 10 Gwei,即使在不到 1 分鐘內得到確認,也找不到 tx。在我上次的測試中,它是 20Gwei,我發送了 tx,它在 30 秒內得到確認,但不在我節點的記憶體池中。堆
節點上有 36 個對等點,記憶體大小為 20GB 記憶體。以下是奇偶校驗標誌:
--base-path /home/parity/.local/share/io.parity.ethereum/ --cache-size 20480 --jsonrpc-interface all --jsonrpc-hosts all --jsonrpc-cors '*' --ws-interface all --ws-apis web3,eth,pubsub,net,parity,parity_pubsub,private,traces,rpc,shh,shh_pubsub --ws-origins all --ws-hosts all
解決方案
以下是我的一些想法。我假設在擁塞情況下,當我的節點及其對等方的記憶體池已滿時,tx 會發送到範圍之外,例如中國的記憶體池,在那裡得到確認,添加到塊中,從而跳過我和對等方的記憶體池。但也可能是記憶體問題、記憶體池大小限制、奇偶校驗配置等。
- 增加對等列表
- 剝離節點上的一些標誌以增加記憶體
- 西歐及周邊地區同行靜態列表
- 放棄吧(eth 2.0 可能會很順利,但從來沒有成功過)
我建議首先探索
tx-queue
相關的配置選項。從奇偶校驗文件:–tx-queue-mem-limit=
$$ MB $$ 事務隊列可以使用的最大記憶體量。將此參數設置為 0 將禁用限制。(預設:4)
–tx-隊列大小=
$$ LIMIT $$ 隊列中的最大交易量(等待包含在下一個塊中)。(預設:8192)
–tx-queue-per-sender=
$$ LIMIT $$ 隊列中每個發件人的最大事務數。預設情況下,它是整個隊列的 1%,但不少於 16。
–tx-隊列策略=
$$ S $$ 用於對隊列中的事務進行排序的優先級策略。S 可能是:gas_price - 優先考慮天然氣價格高的交易(預設值:gas_price)
如果您沒有增加預設隊列大小,那麼您的本地記憶體池將在您遇到限制之前很久就達到最大值,因此您需要優化節點的配置或執行它的硬體。
至於將對等點限制在西歐:您沒有指定您希望監控的交易是通過愛爾蘭的節點進入記憶體池還是只是從愛爾蘭廣播。如果是後者,很有可能它們首先被發送到您正在觀看的區域之外的節點。無論如何,大多數節點都沒有執行基於地理的對等點列表,因此除非交易直接廣播給礦工,否則全球的對等點會很快看到它。
更有效的是由單個控制器擁有的節點集群,該控制器監控它們的對等列表並防止任何 2 個節點共享對等。這應該確保您擁有更大的記憶體池樣本,從而更有可能在這些交易仍處於待處理狀態時發現它們。但是,建構這樣的設置需要一些工作並且執行起來可能很昂貴。
還有一些關於 tweeking peer 計數的資訊:Optimizing Parity Peer Count