Go-Ethereum

Infura getFilterLogs api 返回空數組

  • July 5, 2020

我正在嘗試使用 node.js 過濾傳輸事件以獲取一系列塊之間的合約地址。我正在嘗試過濾可以在 etherscan here中顯示的最新 7 筆交易。我的程式碼如下:

const Web3 = require('web3');
const fetch = require('node-fetch');

let infura_url = "https://mainnet.infura.io/v3/853346f695b740fe8bd7d8f583bcf55f"
let web3 = new Web3(new Web3.providers.HttpProvider(infura_url))

let fromBlock = web3.utils.toHex(10394853);
let toBlock = web3.utils.toHex(10399444);
let address = "0x683f6e80c378e57fea188d53f4440600e87abc46";
let blockHash = "0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35"
let topic = ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"];

let body = {
   "jsonrpc": "2.0",
   "method": "eth_getLogs",
   "params": [{
       "toBlock": fromBlock,
       "fromBlock": toBlock,
       "address": address,
       //"blockHash" : blockHash
       "topic": topic
   }],
   "id": 1
};

fetch(infura_url, {
   method: 'post',
   headers: {
       'Content-Type': 'application/json'
   },
   body: JSON.stringify(body)
}).then(result => result.json())
   .then(response => {
       console.log(response);
   }).catch(err => res.json({ error: err.message }));

但是它返回一個空數組作為結果:

{ jsonrpc: '2.0', id: 1, result: [] }

另外,我想了解如何傳遞 fromBlock 和 toBlock。文件說blockFrom可以是一個整數,但是當我用整數寫它時,它說該值應該是十六進制“0x”。地址過濾器中沒有地址在工作。我能得到的唯一結果是使用 blockHAsh。請幫助我解決問題。程式碼中提到了合約地址、toBlock、fromBlock 和 topic。

不確定您的問題到底出在哪裡,但是您可以直接使用 web3 完成整個操作(而不是 HTTP 請求):

const params = {
   address  : "0x683f6e80c378e57fea188d53f4440600e87abc46",
   topics   : ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"],
   fromBlock: 10394853,
   toBlock  : 10399444
};
web3.eth.getPastLogs(params).then(response => ...

更新 - 我也知道你的問題出在哪裡:

您正在使用轉移事件中涉及的一方的地址(即,from在某些情況下和to其他情況下),而您應該使用所涉及的特定令牌的地址,例如,您可以在此處看到:

  • 地址 0xdceaf1652a131f32a821468dc03a92df0edd86ea
  • 地址 0x67cbbb366a51fff9ad869d027e496ba49f5f6d55

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