Die ETH Kurse bez. Gas Preise können leicht per Java Rest-API erzeugt werden. Auch der Kontostand einer Adresse kann abgefragt werden (default BUY_ME_A_COFFEE). So überwache ich z.B. dauernd die
BUY_ME_A_COFFEE = 0x829F9e57c29ab683E964c76160B7B0BaB2727dD2
via Kommandozeile (und NodeRed) und warte bis jemand da was für Kaffee und Kuchen überweist. Der aktuelle Wert reicht noch nicht ganz für zwei Personen in Hannover 😉 Wer also mal testen will …
Wenn man sich auf etherscan.io angemeldet hat und einen Token hier hinzugefügt hat, kann man leicht die Abfrage machen. Es sind maximal 5 Abfragen pro Sekunde kostenlos möglich:
-k Api-Token
Ausgabe:
1 2 3 4 5 |
[INFO ] 2021-08-14 18:09:44,225 Etherscan.main() - Start Etherscan abfrage ... [INFO ] 2021-08-14 18:09:45,166 Ausgabe.printGasPrice() - Letzter Block Nr.: 13024280 [INFO ] 2021-08-14 18:09:45,167 Ausgabe.printGasPrice() - Gas Preis: 39 Gwei, Propose Gas Preis: 41 Gwei, Fast Gas Preis: 52 Gwei [INFO ] 2021-08-14 18:09:45,720 Ausgabe.printETHPreis() - Kurs für 1 ETH: 3264.33 Dollar [INFO ] 2021-08-14 18:09:46,275 Ausgabe.printAdressBetrag() - Stand: 0.00451771 Ether auf Adresse: 0x829F9e57c29ab683E964c76160B7B0BaB2727dD2 |
Der ganze Beispiel-Code liegt auf GitLab unter TWEtherScan.
Hier der Beispiel Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
@Command(name = "TWEtherscan", mixinStandardHelpOptions = true, version = "TWEtherscan 1.0", description = "Abfrage von EtherScan Api.", showDefaultValues = true, footer = { "@|fg(green) Thomas Wenzlaff|@", "@|fg(red),bold http://www.wenzlaff.info|@" }) public class Etherscan implements Callable<Integer> { /** * Eine echte ETH Adresse von mir, für Trinkgeld ;-) */ private final static String BUY_ME_A_COFFEE = "0x829F9e57c29ab683E964c76160B7B0BaB2727dD2"; private static final Logger LOG = LogManager.getLogger(Etherscan.class); @Option(names = { "-k", "--apikey" }, description = "der Etherscan Api Token", required = true) private String etherscanApiToken; @Option(names = { "-a", "--adresse" }, description = "die Ether (ETH) Adresse", defaultValue = BUY_ME_A_COFFEE) private String etherAdresse; @Option(names = { "-g", "--gas" }, description = "Gibt den Gas Preis aus", defaultValue = "true") private static boolean isGas; @Option(names = { "-p", "--preis" }, description = "Gibt den Kurs aus", defaultValue = "true") private static boolean isPreis; @Option(names = { "-b", "--betrag" }, description = "Gibt Betrag zu einer Adresse aus", defaultValue = "true") private static boolean isAdress; public static void main(String[] args) throws Exception { LOG.info("Start Etherscan abfrage ... "); new CommandLine(new Etherscan()).execute(args); } @Override public Integer call() throws Exception { if (isGas) Ausgabe.printGasPrice(etherscanApiToken); if (isPreis) Ausgabe.printETHPreis(etherscanApiToken); if (isAdress) Ausgabe.printAdressBetrag(etherscanApiToken, etherAdresse); return 0; } } |
Hier alle möglichen Parameter:
1 2 3 4 5 6 7 8 9 10 11 12 |
Usage: TWEtherscan [-bghpV] [-a=<etherAdresse>] -k=<etherscanApiToken> Abfrage von EtherScan Api. -a, --adresse=<etherAdresse> die Ether (ETH) Adresse Default: 0x829F9e57c29ab683E964c76160B7B0BaB2727dD2 -b, --betrag Gibt Betrag zu einer Adresse aus -g, --gas Gibt den Gas Preis aus -h, --help Show this help message and exit. -k, --apikey=<etherscanApiToken> der Etherscan Api Token -p, --preis Gibt den Kurs aus -V, --version Print version information and exit. |
Übrigens ist ETH pre-mined (danke Dr.Kleinhirn.eu).
Der eigentliche Rest-Code liegt in der Klasse Rest.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
public class Rest { private final static String ETHERSCANN_BALANCE_URL = "https://api.etherscan.io/api?module=account&action=balance&address="; private final static String ETHERSCANN_GAS_PRICE_URL = "https://api.etherscan.io/api?module=gastracker&action=gasoracle&apikey="; private final static String ETHERSCANN_ETH_PRICE_URL = "https://api.etherscan.io/api?module=stats&action=ethprice&apikey="; public static String getAdressInfo(String apiToken, String ethAdresse) { return ETHERSCANN_BALANCE_URL + ethAdresse + "&tag=latest&apikey=" + apiToken; } public static String getGasPrice(String apiToken) { // Returns the current price per gas in wei, // https://etherscan.io/apis#proxy return ETHERSCANN_GAS_PRICE_URL + apiToken; } public static String getEthPrice(String apiToken) { // Get ETHER Last Price, // https://etherscan.io/apis#stats return ETHERSCANN_ETH_PRICE_URL + apiToken; } public static HttpResponse<String> getRequest(String url) throws IOException, InterruptedException { HttpRequest request = HttpRequest.newBuilder().uri(URI.create(url)) .method("GET", HttpRequest.BodyPublishers.noBody()).build(); HttpResponse<String> response = HttpClient.newHttpClient() .send(request, HttpResponse.BodyHandlers.ofString()); return response; } } |
Wie immer, Erweiterungen und Vorschläge gern als Merge-Request.