External-Api
通過 API 下載 Etherscan 輸入數據
我無法找到正確的 API 呼叫格式來從每個事務的事件日誌中下載輸入數據欄位 - 有沒有辦法使用 API 密鑰來下載此資訊?
您可以使用Etherscan Event Log API,它為給定範圍的塊獲取最多 1000 個事件(如果給定範圍內的事件超過 1000 個,則僅獲取前 1000 個事件)。
對於每個事件,它返回以下對象:
{ address : ..., topics : [ ... ], data : ..., blockNumber : ..., timeStamp : ..., gasPrice : ..., gasUsed : ..., logIndex : ..., transactionHash : ..., transactionIndex: ... }
欄位的值
inputData
可以在topics
和data
欄位中找到。更準確地說,該
topics
欄位是一個數組,由事件簽名雜湊(第一項)和每個事件的索引參數值(第二項以後)組成,而該data
欄位是一個字元串,由事件的未索引參數的串聯組成價值觀。這是一個編碼範例:
const request = require("request"); const CONTRACT_ADDRESS = "..."; const ETHERSCAN_API_KEY = "..."; const ETHERSCAN_API_URL = "http://api.etherscan.io/api?module=logs&action=getLogs&address=" + CONTRACT_ADDRESS + "&apikey=" + ETHERSCAN_API_KEY; const MAX_TIMEOUT = 10000; const MAX_RESULTS = 1000; function scan(fromBlock, toBlock) { request(`${ETHERSCAN_API_URL}&fromBlock=${fromBlock}&toBlock=${toBlock}`, {timeout: MAX_TIMEOUT}, function(error, response, body) { const parsed = parse(body); if (parsed.result) { if (parsed.result.length < MAX_RESULTS) { for (const event of parsed.result) console.log(event.topics.slice(1), event.data); } else { console.log("warning: too many events"); for (const event of parsed.result) console.log(event.topics.slice(1), event.data); } } else { console.log("error:", error); } }); } function parse(str) { try { return JSON.parse(str); } catch (error) { return {}; } } scan(0,9000000);
假設您正在嘗試從特定地址查找交易的輸入,那麼使用account API可能會更好地為您服務。
https://api.etherscan.com/api ?module=account &action=txlist &address=0x16e7352bb889c5fa3adf59d34c1b4e401e63c223 &startblock=0 &endblock=99999999 &sort=asc &apikey="your API key"