Etherscan API - Holen Sie sich alle Token-Guthaben

Gibt es eine Möglichkeit, mit der Etherscan-API alle erc20-Token-Guthaben für eine bestimmte Adresse abzurufen?

Wie hier erklärt , können Sie Token-Salden mit ihrer Web-Benutzeroberfläche (dem Token-Tracker-Dropdown) sehen. Bietet ihre API eine gleichwertige Funktionalität?

Soweit ich das beurteilen kann, können Sie nur nach einem bestimmten Token fragen, dessen Adresse Sie bereits haben. Ich benötige eine Funktionalität, die dem API-Endpunkt von Ethplorer entspricht getAddressInfo/{address}.

hast du einen weg gefunden?
Ich hatte das gleiche Problem und habe es mit Web Scraping gelöst. Sie finden meinen Code hier: github.com/aaronk6/ERC20-MoneyMoney Außerdem habe ich den Etherscan-Support kontaktiert, um herauszufinden, ob sie planen, diese Routen zu ihrer API hinzuzufügen. Mal sehen.
Ab Juli 2021 ist es immer noch nicht möglich, dies mit der Etherscan-API zu tun. Eine Alternative ist die Verwendung der Moralis web3-Plattform: docs.moralis.io/transactions-and-balances/token-balances

Antworten (4)

Wie bereits erwähnt, scheint es mit Etherscan nicht möglich zu sein. Aber es ist möglich, die (kostenlose) ethexplorer.io API zu verwenden.

Das Format ist:

https://api.ethplorer.io/getAddressInfo/[YOUR_ADDRESS]?apiKey=freekey

Zum Beispiel:

https://api.ethplorer.io/getAddressInfo/0x32Be343B94f860124dC4fEe278FDCBD38C102D88?apiKey=freekey

(Hinweis: Muss HTTPS sein, HTTP gibt einen 404-Fehler mit einem Link zu Dokumenten zurück, ohne genau anzugeben, was falsch ist.)

API-Dokumentation ist hier:

https://github.com/EverexIO/Ethplorer/wiki/Ethplorer-API

Webseite:

https://ethplorer.io

ethplorer hat große Verspätung.. leider

Dies ist mit ihrer aktuellen API nicht möglich.

Abhängig von Ihrem Projekt könnte eine Problemumgehung Web Scraping sein. Hier ist ein Beispiel mit Lua und xpath:

Holen Sie sich alle Vertragsadressen, für die die angegebene ETH-Adresse Token enthält:

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

Erhalten Sie Informationen zu einem Token (Name, USD-Preis, Divisor zur Berechnung des korrekten Betrags) für eine bestimmte Vertragsadresse:

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

Bitte beachten Sie, dass Web Scraping als schlechte Praxis angesehen wird. Dies kann ohne Vorankündigung brechen, da es offensichtlich darauf angewiesen ist, wie das Frontend gerendert wird.

Ich habe den Support von Etherscan.io am 12. März 2018 kontaktiert, um herauszufinden, ob diese API-Aufrufe auf ihrer Roadmap stehen. Die Antwort war, dass die Bereitstellung kostenpflichtiger benutzerdefinierter API-Dienste nicht ihr kurzfristiger Fokus ist.

Sie können dies mit jedem Knoten tun, ohne dass eine externe API erforderlich ist, mit Hilfe eines intelligenten Vertrags. Ich habe erst kürzlich einen Smart Contract und eine Bibliothek dafür geschrieben und in ein NPM-Paket gepackt. Sie können es hier überprüfen: https://www.npmjs.com/package/eth-balance-checker

Der Aufruf sieht so aus:

import Web3 from 'web3';
import { getAddressBalances } from 'eth-balance-checker/lib/web3';

const web3 = new Web3(...);
const address = '0x123...';
const tokens = ['0x0', '0x456...'];
getAddressBalances(web3, address, tokens).then(balances => {
  console.log(balances); // { "0x0": "100", "0x456...": "200" }
});

Ich habe die defilama free api verwendet, um alle Token-Adressen zu erhalten. Dann habe ich sie mit der kostenlosen Etherscan-API durchlaufen.