簡體   English   中英

如何通過地址獲取以太坊交易列表

[英]How to get Ethereum transaction list by address

我正在尋找一種方法來獲取給定地址的交易列表。 如果交易太多,我希望能夠對結果進行分頁。 如果我可以將最新處理的交易作為參數給出,這樣我就可以從給定點獲取最新交易,那就更好了。

像這樣的東西:

var page = 1;
txList = getTransactionList("0x323432432...", page, lastProcessedTx);

從我目前的研究來看,沒有辦法獲得一個地址的交易列表。 您應該檢查給定地址的區塊鏈中的所有交易,或者將地址與數據庫中的交易哈希相關聯。 請參閱此線程,確認缺少所需的 API: https : //github.com/ethereum/go-ethereum/issues/1897

另一種方法是使用 Etherscan API: https ://etherscan.io/apis 但它依賴於第三方服務器。

已知的以太坊節點缺乏獲取 ETH 地址(帳戶)交易列表的功能。

為了解決這個問題,有免費開源的第三方解決方案——以太坊交易索引器: https : //github.com/Adamant-im/ETH-transactions-storage

Indexer 允許通過以太坊地址探索交易,並像 Etherscan 一樣,只需移動即可獲取任何用戶|錢包的歷史記錄。 索引器是用 Python 編寫的。 它在后台作為服務工作:

  • 連接到以太坊節點(適用於 geth 或 parity,其他未測試)
  • 將所有交易存儲在 Postgres 數據庫中(包括智能合約交易)
  • 為 API 提供數據以按地址獲取交易

Indexer 連接到 Ethereum 節點並使用 JSON RPC 獲取交易,在 Postgres 數據庫中創建交易索引。 First Indexer 將存儲從您指定的區塊開始的交易。 之后,它將每 20 秒檢查一次新塊並更新索引。 您可以更改間隔。

以太坊交易索引器的 API 由 Postgrest 工具發布。 如果您需要提供公共 API,請使用任何網絡服務器(如 nginx)並在 config 中設置代理到 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 筆交易,按時間戳排序。

您可以使用 etherscan.io API: https ://etherscan.io/apis#accounts 示例

可能你現在最好的選擇是使用https://www.covalenthq.com/docs/api/

據我所知,它可以免費使用,沒有速率限制。 在您的示例 API 請求中,如下所示:

curl -X GET "https://api.covalenthq.com/v1/1/address/0x5a6d3b6bf795a3160dc7c139dee9f60ce0f00cae/transactions_v2/?&key=[YOUR_API_KEY]" \
 -H "Accept: application/json"

https://www.covalenthq.com/docs/api/#get-/v1/{chain_id}/address/{address}/transfers_v2/

幸運的是,Geth EVM 有新工具來完成這項工作。 可以將 debug_traceTransaction 與 RPC API 一起使用。

在 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' 操作碼並跟蹤堆棧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM