Go-Ethereum
Infura getFilterLogs api 返回空數組
我正在嘗試使用 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