如何通过地址获取以太坊交易列表

19
我正在寻找一种获取给定地址的交易列表的方法。如果交易太多,我希望能够分页显示结果。最好的情况是,我可以将最新处理的交易作为参数传递,这样我就可以从指定点获取最新的交易。

类似于这样:

var page = 1;
txList = getTransactionList("0x323432432...", page, lastProcessedTx);
4个回答

16

据我目前的研究,没有办法获取某个地址的交易列表。您应该检查给定地址在区块链中的所有交易或将相关地址与交易哈希关联到数据库中。请参阅此线程,确认所需API的缺失:https://github.com/ethereum/go-ethereum/issues/1897

另一种选择是使用Etherscan API:https://etherscan.io/apis,但这取决于第三方服务器。


1
Etherscan API仅限10000条记录。 - TangMonk
@TangMonk 他们有一个分页功能,所以我想我们可以检索地址的所有交易。 - ozgrozer
使用Etherscan的API生成的列表是不完整的,如在此处讨论的:https://tjayrush.medium.com/how-accurate-is-etherscan-83dab12eeedd。注意:我编写了TrueBlocks,该博文中进行了比较。 - Thomas Jay Rush

7

从2023年3月1日起,他们将限制免费用户每月使用不超过100,000个API信用点数。请参阅此处 - bonnopc
Covalent的API生成一个不完整的列表,如此处讨论。https://medium.com/coinmonks/trueblocks-covalent-comparison-7b42f3d1e6f7。注意:我编写了TrueBlocks,在这篇博文中进行了比较。 - Thomas Jay Rush

5
已知的以太坊节点缺乏获取ETH地址(账户)交易列表的功能。
为了解决这个问题,有一个免费且开源的第三方解决方案——以太坊交易索引器:https://github.com/Adamant-im/ETH-transactions-storage 该索引器允许通过以太坊地址探索交易,并在一步之内获取任何用户或钱包的历史记录,就像Etherscan一样。索引器使用Python编写,作为后台服务运行:
- 连接以太坊节点(与geth或parity兼容) - 将所有交易存储在Postgres数据库中(包括智能合约交易) - 提供API数据以获取地址的交易
索引器连接以太坊节点并使用JSON RPC获取交易,创建Postgres数据库中的交易索引。首次创建索引时,索引器将从指定的区块开始存储交易。之后,它将每20秒检查新的区块并更新索引。您可以更改间隔时间。
以太坊交易索引器的API由Postgrest工具发布。如果需要提供公共API,请使用任何Web服务器(如nginx),并在配置中设置代理到Postgrest端口。
在创建索引后,您可以使用以下请求:
curl -k -X GET "http://localhost:3000/?and=(contract_to.eq.,or(txfrom.eq.0x6b924750e56a674a2ad01fbf09c7c9012f16f094,txto.eq.0x6b924750e56a674a2ad01fbf09c7c9012f16f094))&order=time.desc&limit=25"

或者

https://yourserver.com/ethtxs?and=(contract_to.eq.,or(txfrom.eq.0x6b924750e56a674a2ad01fbf09c7c9012f16f094,txto.eq.0x6b924750e56a674a2ad01fbf09c7c9012f16f094))&order=time.desc&limit=25

该请求将显示以时间戳排序的以太坊地址0x6b924750e56a674a2ad01fbf09c7c9012f16f094的最近25笔交易记录。

-5

幸运的是,Geth EVM 有新的工具来完成这项任务。可以使用 RPC API 中的 debug_traceTransaction。

在 NodeJS 中:

var web3 = require('web3').web3;
web3.currentProvider.sendAsync({
    method: "debug_traceTransaction",
    params: ['0x3fac854179691e377fc1aa180b71a4033b6bb3bde2a7ef00bc8e78f849ad356e', {}],
    jsonrpc: "2.0",
    id: "2"
}, function (err, result) {
    ...
});

然后,您需要创建'CREATE','CALL','CALLCODE'和'DELEGATECALL'操作码,并跟踪堆栈。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接