Web3js

有沒有辦法獲得特定區塊號的所有代幣轉移?

  • February 12, 2019

我正在尋找一種僅通過指定塊號來獲取所有 erc20 令牌傳輸的方法。

對於 ETH,這裡已經存在一種方法。

我做了一些搜尋,發現這種方法可以找到特定地址的轉移。

https://api.etherscan.io/api?module=account&action=tokentx&sort=desc&address=SOME_ADDRESS&startblock=BLOCK_NUMBER

有沒有辦法通過以任何方式提供塊號作為參數來列出特定塊的所有令牌傳輸?

您可以使用 Web3 API 輕鬆做到這一點。

你只需要知道 ERC20 標準有一個固定的 ABI,因此會有一個固定的“方法 id”

Function: transfer(address _to, uint256 _value) 
MethodID: 0xa9059cbb

任何發生在一個區塊中的 ERC20 轉賬都應該開始,0xa9059cbb因為這決定了在合約中呼叫哪個函式。

有了這些資訊,您只需要:

  • 獲取塊
  • 獲取所有交易雜湊
  • 獲取所有交易
  • 檢查前 10 個字元是否匹配

像這樣:

window.web3 = new Web3(new Web3.providers.HttpProvider("https://mainnet.infura.io/<APIKEY>"));

async function getERC20Transfers(blockNumber) {
 let block = await web3.eth.getBlock(blockNumber);
 for (var transactionIndex in block.transactions) {
   let transactionHash = block.transactions[transactionIndex];
   let transaction = await web3.eth.getTransaction(transactionHash);
   if (transaction.input.substr(0,10) == "0xa9059cbb") {
       console.log(transaction)
   }
 }
}

getERC20Transfers(7210415);

您可以在此處找到列印到瀏覽器控制台的工作範例:https ://jsfiddle.net/4sujyx5g/2/

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