etherscan-api 不输出待处理交易

chi*_*ro2 4 javascript ethereum web3js metamask etherscan

我在这里使用 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', 1, 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))
        })
Run Code Online (Sandbox Code Playgroud)

Pet*_*jda 6

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

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


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

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

由于事件仅包含 tx 哈希,因此始终对 tx 详细信息执行新查询效率不高,但在其他一些情况下很有用,例如当您事先知道 tx 哈希并且只想知道何时成功时广播。


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