调用web3.eth.getTransactionFromBlock获取交易无输出该如何调试?
问题排查步骤
- 第一步先验证区块是否包含交易
先打印web3.eth.getBlock(blocknumber)返回结果中的transactions字段,确认该数组长度是否大于0。以太坊等公链存在大量无交易的空块,尤其是最新生成的区块,若transactions长度为0,调整索引也无法获取交易数据。 - 第二步检查API调用参数与版本兼容性
部分web3.js版本的getTransactionFromBlock方法存在兼容缺陷,甚至已被标记为废弃。可换用如下方式查询交易:
同时确认调用时传入的交易索引值小于try { const block = await web3.eth.getBlock(blocknumber); if (block.transactions.length > 0) { const tx = await web3.eth.getTransaction(block.transactions[0]); console.log(tx); } } catch (e) { console.log('查询错误:', e); }transactions数组的总长度。 - 第三步检查RPC节点状态
若确认区块存在交易仍无法查询,先检查所连接的RPC节点是否正常同步完成,部分未完全同步的节点仅返回区块头数据,不会返回交易内容;如果使用第三方RPC服务,确认该服务未限制交易查询权限,也没有触发频率限流规则。 - 第四步更换历史区块测试
可以尝试查询更早的区块(比如将查询的块高设置为blocknumber - 20),排除当前查询的区块刚好为空块的偶发情况。
内容的提问来源于stack exchange,提问作者Mircea Golgu
相关产品推荐
相关产品推荐

