Transactions

如何獲取交易量超過 200k 的地址的錢包餘額?

  • October 27, 2022

截至 2022 年 8 月 31 日,我正在嘗試獲取此地址 0x389044F3ac7472060A0618116e3624A5f0f20F28 的錢包餘額。過去,我可以通過獲取交易歷史記錄並從傳入的交易中減去標記為已發送的交易來做到這一點。這是一個挑戰,因為我只能訪問最後 100,000 筆交易。我知道必須有一種更有效的方法來做到這一點。

有沒有我可以用來檢索整個交易歷史的 API(考慮到它的大容量)?或者更好的是,任何人都知道如何通過檢索交易歷史記錄然後創建腳本來在 2022 年 8 月 31 日之前添加/減去餘額來自動化整個過程?

希望能對此提供一些幫助。被困了 3 天,如果我找不到解決此問題的方法,我將在工作中被咀嚼。

您可以使用Forge框架將主網分叉到某個區塊高度(檢查 8 月 31 日左右的區塊高度)。

這樣你就可以在主網歷史上上下移動,並查看該地址在每個特定區塊的餘額。

它看起來像這樣:

pragma solidity ^0.8.0;

import "forge-std/Test.sol";

contract getAddressBalanceTest is Test {
function getAddressBalance() public {
       vm.createSelectFork(vm.envString("ETH_RPC_URL"), YOUR_BLOCK_HEIGHT);
       address target = 0x389044F3ac7472060A0618116e3624A5f0f20F28;
       console.log("Target balance: ", target.balance);

希望這可以幫助!

您需要存檔節點。每個提供者都有存檔節點的選項,通常需要額外付費。但是您可以使用 geth 或erigon啟動您的節點

./erigon --datadir D:/Erigon --chain mainnet --private.api.addr=127.0.0.1:9090 --prune=hrtc --prune.h.older=400000 --prune.r.older=400000 --prune.t.older=400000 --prune.c.older=400000

然後您可以在任何區塊查詢區塊鏈數據。當您呼叫balanceOf方法時,這實際上會查詢節點latest塊,但您可以指定過去的任何塊號。這是RPC方法,所有客戶端都應該支持。如果您使用 Node.js,則有以下庫:web3js#methods-mymethod-call

或者帶有0xweb庫的 TypeScript 範例,它包裝了 web3js 並添加了其他工具,例如按日期獲取塊號

npm i 0xweb -g
0xweb init
import { Config } from '@dequanto/Config';
import { ERC20 } from '@dequanto-contracts/openzeppelin/ERC20';
import { BlockDateResolver } from '@dequanto/blocks/BlockDateResolver';
import { EthWeb3Client } from '@dequanto/clients/EthWeb3Client';

async function example () {
   await Config.fetch();

   let client = new EthWeb3Client();
   let dateResolver = new BlockDateResolver(client);
   let blockNumber = await dateResolver.getBlockNumberFor(new Date('2022-10-27T00:00:00Z'));

   let erc20 = new ERC20('0x<TOKEN>', client);
   let balanceOf = erc20.forBlock(blockNumber).balanceOf('0x<USER>');
   console.log('Balance on the date:', balanceOf);
}
example();

引用自:https://ethereum.stackexchange.com/questions/138280