Infura

如何通過地址獲取新交易?

  • January 15, 2022

我的伺服器上有一組需要跟踪的地址。我應該使用什麼方法通過 websockets 做到這一點?我對 eth 和加密貨幣完全不熟悉,我不明白“blocks”、“gas price”的含義:(

我希望某些方法會返回類似的數據{from: "", to: "", amount: ""},但暫時找不到

Geth具有未記錄的 API 函式getModifiedAccounts,該函式返回其狀態(餘額是地址狀態的一部分)在兩個給定塊之間被修改的地址列表。您可以使用該功能查詢每個新區塊(或幾個後續區塊)的修改地址列表,然後過濾返回的列表丟棄地址不在您的數組中,然後逐個獲取地址的餘額。

但是,此方法可能在Infura上不可用,因此您必須執行自己的 Geth 節點才能完成此操作。

部署以下合約(您只需執行一次):

contract BalanceChecker {
 function checkBalances (address [] memory addresses, uint [] memory previousBalances)
 public view
 returns (address [] memory changedAddresses, uint [] memory currentBalances) {
   uint count = addresses.length;
   require (previousBalances.length == count);

   address [] memory tempAddresses = new address [] (count);
   uint [] memory tempBalances = new uint [] (count);

   uint changedCount = 0;
   for (uint i = 0; i < count; i++) {
     address a = addresses [i];
     uint pb = previousBalances [i];
     uint cb = a.balance;
     if (cb != pb) {
       tempAddresses [changedCount] = a;
       tempBalances [changedCount] = cb;
       changedCount += 1;
     }
   }

   changedAddresses = new address [] (changedCount);
   currentBalances = new uint [] (changedCount);

   for (uint i = 0; i < changedCount; i++) {
     changedAddresses [i] = tempAddresses [i];
     currentBalances [i] = tempBalances [i];
   }
 }
}

在每個區塊之後,呼叫checkBalances合約上的函式,傳遞地址數組和這些地址先前觀察到的餘額數組(數組必須具有相同的大小)。該函式將為您返回餘額已更改的地址數組以及這些地址的新余額數組。該呼叫將在鏈下執行,因此不會花費您任何氣體。

這種方法應該適用於 Infura。如果您的地址數組太大而 Infura 會抱怨這一點,只需將數組分成幾個塊。

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