Web3js
web3.eth.getBlock(‘pending’) 返回最新塊,而不是待處理塊,這是預期的嗎?
我正在嘗試使用 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')
只有當你在挖礦時才有意義。你是?如果不是,那麼是的.. 返回目前開采的區塊似乎是預期的行為。
只有當
mining
或sealing
(--force-sealing
) 模式之一打開時,您的 Parity 節點才會返回不同的待處理塊。這會強制節點建構待處理的塊並在 API 呼叫中尊重 em。