Web3js

如何正確閱讀出入金記錄?

  • March 23, 2022

我正在嘗試使用日誌為 EVM 鏈建構索引器來讀取 ERC20“傳輸”

,我有以下問題:

一些交易(tx’s)有多次存款/取款的日誌。

現在,有時所有的存款/取款都轉到tx.from/ 發件人,有時大部分都轉到tx.to或其他方(當然取決於契約)。

我的問題是我是否可以通過某種方式確定存款/取款實際上從日誌中流向了誰?

例如參見以下內容,它有 2 個提款日誌:https ://bscscan.com/tx/0xc880ffcd92b6a150f0a6083a02cdd31c49b6142817b99c4eea6ae32d49517624#eventlog

提前謝謝^_^

如果您只想對某些特定的令牌執行此操作(強烈推薦),您只需要設置偵聽器,它們是最有效的方式,您甚至可以設置過濾器以僅在參數匹配特定內容時進行偵聽。

首先我們創建實例

var yourContractInstance= new web3.eth.Contract(erc20ABI,contractAddressYouWantToMonitor);
yourContractInstance.events.Transfer({
   filter: {myIndexedParam: [20,23], myOtherIndexedParam: '0x123456789...'}, // Using an array means OR: e.g. 20 or 23
   fromBlock: 0
}, function(error, event){ console.log(event); })
.on("connected", function(subscriptionId){
   console.log(subscriptionId);
})
.on('data', function(event){
   console.log(event); // same results as the optional callback above
})
.on('changed', function(event){
   // remove event from local database
})
.on('error', function(error, receipt) { // If the transaction was rejected by the network with a receipt, the second parameter will be the receipt.
   ...
});

// event output example
> {
   returnValues: {
       myIndexedParam: 20,
       myOtherIndexedParam: '0x123456789...',
       myNonIndexParam: 'My String'
   },
   raw: {...}

返回值將按順序包含 from(誰發送令牌)、to(誰接收令牌)和 value(發送的令牌數量)。

現在,如果您想監控所有代幣,請準備好擁有真正強大且昂貴的基礎設施,並記住您儲存的 90% 以上的數據永遠不會被使用,但您可以通過監聽所有人的所有日誌來做到這一點使用訂閱功能的交易

var subscription = web3.eth.subscribe('logs', {
   address: '0x123456..',
   topics: ['0x12345...']
}, function(error, result){
   if (!error)
       console.log(result);
});

// unsubscribes the subscription
subscription.unsubscribe(function(error, success){
   if(success)
       console.log('Successfully unsubscribed!');
});

您可以使用此處的搜尋文件來查找有關片段 https://web3js.readthedocs.io/的範例和更多詳細資訊

您可以使用 bscscan api 確定提取和轉移事件。當智能合約發出事件時,總是生成相同的主題 ID。您可以參考bsc api 文件,它給出了具有給定塊範圍的所有日誌。此 api 僅提供塊範圍的前 1000 個事務,因此根據您的使用,您可以縮小過濾器的範圍。

試試這個:

https://api.bscscan.com/api
  ?module=logs
  &action=getLogs
  &fromBlock=16133491
  &toBlock=16133492
  &address=0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
  &topic0=0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65
  &apikey=YourApiKeyToken

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