etherscan-api 不输出挂起的交易

etherscan-api does not output pending transactions

我在这里使用的是 etherscan-api:(https://sebs.github.io/etherscan-api/#txlist) to get the list of transactions for a user (given public key), and I am getting the list of cleared transactions only, even though on etherscan.io I can see all pending transactions as well, so the information is "there". Digging into the source 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))
        })

Etherscan 不在其 API.

中提供未决交易

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


如果您的 web3 提供商允许 websocket 连接和订阅,您可以 subscribe 参加 pendingTransactions 活动。

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

因为事件只包含 tx 哈希,总是对 tx 详细信息执行新查询不是很有效,但它在其他一些情况下很有用,例如当你事先知道 tx 哈希并且你只想知道播出成功后。


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