Erc-20
Etherscan API - 獲取所有代幣餘額
有沒有辦法通過 Etherscan API 獲取特定地址的所有 erc20 代幣餘額?
如此處所述,您可以通過其 Web UI(令牌跟踪器下拉菜單)查看令牌餘額。他們的 API 是否提供等效的功能?
據我所知,您只能查詢您已經擁有地址的特定令牌。我需要與 Ethplorer 的 API 端點等效的功能
getAddressInfo/{address}
。
如前所述,使用 etherscan 似乎是不可能的。但是可以使用(免費的)ethexplorer.io API。
格式為:
http://api.ethplorer.io/getAddressInfo/$$ YOUR_ADDRESS $$?apiKey=freekey
例如:
http://api.ethplorer.io/getAddressInfo/0x32Be343B94f860124dC4fEe278FDCBD38C102D88?apiKey=freekey
API 文件在這裡:
https://github.com/EverexIO/Ethplorer/wiki/Ethplorer-API
網站:
這在他們目前的 API 中是不可能的。
根據您的項目,解決方法可能是網路抓取。這是一個使用 Lua 和 xpath 的範例:
獲取給定 ETH 地址持有代幣的所有合約地址:
function requestContractAddressesForEthAddress(ethAddress) -- No API method for this (as of Mar 11, 2018), therefore using web scraping local connection = Connection() local html = HTML(connection:get("https://etherscan.io/address/" .. ethAddress)) local elements = html:xpath("//ul[@id='balancelist']/li/a") local addresses = {} elements:each(function (index, element) local href = element:attr('href') local address = string.match(href, "^%/token%/(0x[0-9a-fA-F]+)") table.insert(addresses, address) end) return addresses end
獲取給定合約地址的代幣資訊(名稱、美元價格、計算正確金額的除數):
function requestTokenInfo(contractAddress) -- No API method for this (as of Mar 11, 2018), therefore using web scraping local connection = Connection() local html = HTML(connection:get("https://etherscan.io/token/" .. contractAddress)) local name = html:xpath("//*[@id='address']"):text() local summary = html:xpath("//*[@id='ContentPlaceHolder1_divSummary']"):text() local decimals = tonumber(string.match(summary, "Token Decimals:%s+([%d,]+)")) return { name = name, price = tonumber(string.match(summary, "Value per Token:%s+$([%d%.,]+)")), divisor = math.pow(10, decimals) } end
請注意,網路抓取被認為是不好的做法。這可能會在沒有通知的情況下中斷,因為它顯然依賴於前端的呈現方式。
我已於 2018 年 3 月 12 日聯繫了 Etherscan.io 支持,以了解這些 API 呼叫是否在他們的路線圖上。答案是提供付費定制 API 服務並不是他們的短期重點。