etherscan-api 不输出挂起的交易
Posted
技术标签:
【中文标题】etherscan-api 不输出挂起的交易【英文标题】:etherscan-api does not output pending transactions 【发布时间】:2021-06-25 03:20:48 【问题描述】:我在这里使用 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))
)
【问题讨论】:
【参考方案1】:Etherscan 不在其 API 中提供待处理事务。
这可能是因为收集和显示待处理交易的方式的性质。所有待处理的交易都收集在以太坊内存池中。我的猜测是,Etherscan 将内存池中的每个条目添加到某种可快速搜索的数据库(例如 ElasticSearch)中,并在事务从内存池中取出时删除数据库条目。然后,地址详细信息页面在 ES 中执行简单搜索,仅过滤来自/到该特定地址的交易。
如果你的 web3 提供者允许 websocket 连接和订阅,你可以subscribependingTransactions
事件。
每次向内存池添加新交易时,它都会触发一个事件。该事件仅包含交易哈希(不包含发送方和接收方等其他数据)。
由于事件仅包含 tx 哈希,因此始终对 tx 详细信息执行新查询并不是很有效,但在某些其他情况下很有用,例如当您事先知道 tx 哈希并且您只想知道它何时已成功播出。
还有一个 BlockCypher REST API,它有一个有限的免费计划(以及有限的付费计划),它返回所有待处理的交易,包括 tx 详细信息,以便您可以对结果执行自己的搜索。如果这适合您的用例,请查看他们的 docs。
【讨论】:
以上是关于etherscan-api 不输出挂起的交易的主要内容,如果未能解决你的问题,请参考以下文章