etherscan-api 不输出挂起的交易

问题描述

在这里使用 etherscan-api: (https://sebs.github.io/etherscan-api/#txlist) 来获取用户的交易列表(给定公钥),并且我只获取已清除交易的列表,即使在 etherscan 上也是如此。 io 我也可以看到所有待处理的交易,所以信息就在“那里”。深入研究源 https://github.com/sebs/etherscan-api/blob/master/lib/account.js#L122,我没有发现可以在哪里查找待处理事务的迹象。代码如下:

const etherscan = require('etherscan-api').init(ETHERSCAN_TOKEN,'ropsten','3000');

    etherscan.account
        .txlist(public_key,1,'latest',100,'asc')
        .then(res => {
            console.log("tx_list: ",res.result)
        })


    // get num of transactions
    etherscan.proxy
        .eth_getTransactionCount(public_key,'latest')
        .then(res => {
            let count = res.result
            console.log("eth_getTransactionCount: ",parseInt(count))
        })

解决方法

Etherscan 不在其 API 中提供待处理的交易。

这可能是因为待处理交易的收集和显示方式的性质。所有待处理的交易都集中在以太坊内存池中。我的猜测是 Etherscan 将内存池中的每个条目添加到某种可快速搜索的数据库(例如 ElasticSearch)中,并在事务从内存池中取出时删除数据库条目。地址详细信息页面然后在 ES 中执行一个简单的搜索,只过滤来自/到这个特定地址的交易。


如果您的 web3 提供商允许 websocket 连接和订阅,您可以subscribependingTransactions 事件。

每次将新交易添加到内存池时,它都会触发一个事件。该事件仅包含交易哈希(没有发送方和接收方等附加数据)。

因为 event 只包含 tx hash,所以总是对 tx details 执行新的查询不是很有效,但它在其他一些情况下很有用,比如当你事先知道 tx hash 并且你只想知道它什么时候已成功播出。


还有 BlockCypher REST API,它有一个有限的免费计划(和有限的付费计划),它返回所有待处理的交易,包括 tx 详细信息,以便您可以对结果执行自己的搜索。如果这适合您的用例,请查看他们的 docs

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...