ETH-Kontostand via Web3j und Infura mit Java in 5 Schritten abfragen

Am 11. November letzten Jahres fürte der Ausfall von Infura dazu, dass viele zentrale Börsen die Abhebung von ETH und ERC20-Token gestoppt hatten. Zudem ließen sich Metamask, Uniswap und auch andere Anwendungen auf Ethereum nicht mehr nutzen. Infura scheint ein beliebter Dienstleister für Ethereum Nodes zu sein, auf den sich nicht nur kleinere Unternehmen und Projekte verlassen, sondern auch milliardenschwere Börsen wie Binance.

Für dieses Projekt soll dennoch mal die Infura-API verwendet werden, um den Kontostand einer ETH-Adresse zu ermitteln. Mit dem web3j Framework ist das auch in Java realisierbar. Hier der Architektur Aufbau:

Wir starten (wie immer) mit einem JUnit 5 Test:

Wir verwenden dazu meine „Buy my a coffee Ethereum (ETH)“ Adresse 0x829F9e57c29ab683E964c76160B7B0BaB2727dD2 und meine ProjektID von Infura: eaa4f4c6b7ce453cba56b73b5d558bdc um schnelle Ergebnisse zu erhalten.

Wir erwarten keine Fehler, nur eine Log-Ausgabe in der Form (im CSV Format: Ether, Kommentar, ETH-Adresse, Kommentar, Netz):

Was müssen wir tun?
1. die web3j Abhängigkeit in der pom.xml eintragen

2. die URL zusammenstellen aus dem Netzwerkname und Projekt ID.

final String ethUrl = „https://“ + netzwerkName + „.infura.io/v3/“ + projektId;

3. eine web3j Instanz erstellen mit der erstellten ethUrl

Web3j web3jClient = Web3j.build(new HttpService(ethUrl));

4. eine asyncrone Abfrage an Infura senden, mit Timeout von 10 Sekunden und der Adresse

EthGetBalance kontoAntwort = web3jClient.ethGetBalance(ethAdresse, DefaultBlockParameterName.LATEST).sendAsync().get(10, TimeUnit.SECONDS);

5. das Ergebnis auswerten

BigDecimal skalierterStand = new BigDecimal(kontoAntwort.getBalance()).divide(new BigDecimal(1000000000000000000L), 18, RoundingMode.HALF_UP);

Das ist schon alles. Hier die ganze Klasse, mit Auswertung der Kommandozeilen Parameter mit Picoli:

Das ganze Projekt gibt es auf GitLab. Mal sehen ob sich der Kontostand auf 0x829F9e57c29ab683E964c76160B7B0BaB2727dD2 verändert. Freue mich über jede Veränderung 😉