Nodes

儘管已完全同步,Geth 輕節點仍返回 0 個待處理/排隊的事務。無法合理訪問 tx-pool 數據

  • July 1, 2021

以下兩個命令被輸入到 Javascript 實時控制台,但從 HTTP 請求返回相同的結果(其方法看起來略有不同)。

該節點已完全同步,如以下結果所示,並且塊計數與預期的同步節點保持一致。

> eth.syncing
false

然而,交易池仍然是空的(這意味著該txpool.content命令是無用的)。

> txpool.status
{
 pending: 0,
 queued: 0
}

這是我用來啟動節點的咒語。

~geth --config ./config.toml --datadir ./node/ --cache 18000 --txlookuplimit 0 --syncmode light --rpcapi txpool_content --txpool.globalslots=2500 --txpool.globalqueue=250 --http --http.api eth,net,web3,txpool console

奇怪的是,在控制台中,我可以使用以下咒語來查看待處理的交易。

eth.getTransaction(eth.getBlock("pending").transactions[0])

但這並不能幫助我從控制台外部訪問 tx-pool,也不清楚如何訪問整個資料結構,而不是從控制台內部訪問單個索引。嘗試顯示整個結構(省略索引)會得到以下結果:

> eth.getTransaction(eth.getBlock("pending").transactions)
Error: invalid argument 0: json: cannot unmarshal non-string into Go value of type common.Hash
       at web3.js:6405:37(47)
       at web3.js:5115:62(37)
       at <eval>:1:19(9)

我的印像是txpool.status全域的——如果txpool命名空間僅用於本地事務,如何查看全域 txpool 和/或從控制台外部訪問它?

謝謝。

如果我的來源仍然適用,輕節點cannot maintain a pool of pending transactions(除了它自己的交易)。

輕客戶端只維護自己的事務。它無法維護待處理交易池,因為它無法檢查這些交易的有效性(沒有狀態,從網路中提取每筆交易的成本很高)。

編輯:

另外,去年已經在這裡問過了。所以它似乎仍然是正確的。

引用自:https://ethereum.stackexchange.com/questions/102409