Web3js

web3.eth.getBlock(‘pending’) 返回最新塊,而不是待處理塊,這是預期的嗎?

  • July 4, 2019

我正在嘗試使用 web3 或 JSON-RPC 來獲取待處理事務的列表。

web3 API 文件說呼叫web3.eth.getBlock('pending')將返回一個顯示塊的結構number並且hash為空。這個問題的答案同意並表示block.transactions將有待處理的交易。number但我看到與塊匹配的和hash欄位的非空值以及latest包含在該塊中的交易列表。其實web3.eth.getBlock('pending')web3.eth.getBlock('latest')返回結果一樣。例如,執行本地奇偶校驗節點時(Parity/v1.4.7-beta-f2058bd-20161227):

> let Web3 = require('web3');
> let web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
> blockL = web3.eth.getBlock('latest');
> blockP = web3.eth.getBlock('pending');
> [blockL.number, blockL.hash]
[ 2971275, '0x2187511e60d49a5ed081ccc31ee4f76365727254e9001f4b563c47cee457ed3f' ]
> [blockP.number, blockP.hash]
[ 2971275, '0x2187511e60d49a5ed081ccc31ee4f76365727254e9001f4b563c47cee457ed3f' ]

我嘗試直接進行 JSON-RPC 呼叫,也得到了最新的塊,而不是關於待處理的塊的資訊:

$ curl -s -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["pending",false],"id":0}' localhost:8545
 { "result" : {
      ... ,
      "number" : "0x2d4c56", 
      ...
      "hash" : "0xb0d47255dbeae836384321b1141ae221254fa7ee4ded07f3d49afb875f05a44e"
      ... }
 }

我還嘗試使用 Infura RPC 節點並得到了類似的結果。

我誤解了pending應該是什麼意思嗎?是否有另一種方法我應該使用 web3 或 JSON-RPC 來獲取待處理事務的列表?

(當我使用時,web3.eth.filter('pending')我確實看到待處理的交易到達我的節點,但這與請求目前待處理的集合不同。)

這個答案向我表明,web3.eth.getBlock('pending')只有當你在挖礦時才有意義。你是?

如果不是,那麼是的.. 返回目前開采的區塊似乎是預期的行為。

只有當miningsealing( --force-sealing) 模式之一打開時,您的 Parity 節點才會返回不同的待處理塊。這會強制節點建構待處理的塊並在 API 呼叫中尊重 em。

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