微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

etherscan-api 不输出挂起的交易

如何解决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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?