BitcoinJ 06 Erzeuge eine Transaktion

In allen vorigen Beispielen zur Bibliothek BitcoinJ haben wir uns mehr oder weniger mit der Abfrage von Daten aus dem Wallet beschäftigt. Jetzt möchten wir zum ersten Mal etwas mit unserem Guthaben im Wallet machen und eine richtige Transaktion, d.h. eine Überweisung, von Bitcoins auslösen.

Hierzu ist es notwendig, das Ihr Euch ein eigenes Wallet erzeugt und dieses Wallet mit (Testnetz-) Bitcoins füllt. Am einfachsten geht das mit einem Bitcoin Faucet und die Anleitung dazu findet Ihr im Artikel Bitcoin Anforderung von Testbitcoins. Die Sendeadresse (aus Sicht des Faucets) bzw. die Empfangsadresse (Eures Wallets) entnehmt Ihr z.B. aus der Ausgabe des Programms BitcoinJ 03 Daten aus einem Wallet auslesen (hier die Adresse aus der Zeile „Adresse für Zahlungseingänge“ kopieren). Kleiner Hinweis: bitte NICHT die unten stehende Adresse kopieren sonst erhalte ich bzw. mein Wallet die Bitcoins :-).

Wenn Euer Wallet nun ein Guthaben aufweist, seid Ihr bereit für eine Transaktion. Bitte beachtet aber, dass ein Guthaben erst nach der ersten Bestätigung für eine Transaktion zur Verfügung steht (eventuell kontrolliert Ihr den Status der Anforderungstransaktion mit einem Bitcoin Explorer).

Das nachfolgende Programm überweist den Betrag von 2.001 BTC (fest kodiert in Zeile 108) an eine ebenso feste Empfangsadresse (Zeile 104). Diese solltet Ihr ebenfalls auf eine eigene Adresse ändern, wie Ihr sie z.B. beim Online-Wallet vom Anbieter „block.io“ oder einem eigenen Electrum-Wallet erhaltet (Details hierzu in den jeweiligen Artikeln), sonst gehen auch diese Bitcoins an mein Wallet. Da dieser Überweisungsbetrag in der Regel zu hoch für das vorhandene Guthaben ist wird eine Fehlermeldung geben. Ändert Ihr nun den Betrag auf z.B. 0.001 BTC ab (abhängig von Eurem Guthaben und bitte auch an die Gebühren denken) wird die Transaktion ausgeführt.

Bei der Ausführung des Programms und Beobachtung einer Transaktion entstehen an 2 Stellen Pausen: zum einen aktualisiert das Programm beim Start des Wallet App Kits das Wallet und zum anderen fragt das Programm nach dem Absenden der Transaktion den aktuellen Status ab, bitte also nicht ungeduldig werden.

Ich habe dieses Programm mit einem zusätzlichen Service ausgestattet: Das Programm schreibt die Konsolenausgaben in eigene Fenster, und zwar eins für die Programmausgaben und ein zweites Fenster für die Ausgaben der Logfunktionen. Beide Fenster speichern parallel die Zeilen in eigene Dateien ab (Dateinamen: BitcoinJ06Transaction_Output_xxx.txt und BitcoinJ06Transaction_Logfile_xxx.txt, wobei „xxx“ für das aktuelle Datum und die Uhrzeit steht); so könnt Ihr die Ausgaben später ganz in Ruhe studieren.

Zur Nutzung benötigt Ihr diverse Bibliotheken zur Nutzung von BitcoinJ – ladet Euch diese aus dem separaten Github-Archiv (https://github.com/java-crypto/BitcoinJ_Libraries) herunter und bindet Sie über Eure Entwicklungsumgebung ein.

Es könnte auch noch ein anderer Codezeilen-Block Eure Aufmerksamkeit bekommen, nämlich die Zeilen 51 bis 73 und Zeilen 88 bis 90. Ich lege hier schon die Grundlage für die spätere Arbeit im „Regressions-Testnetzwerk“ (kurz „RegTest“ genannt) von Bitcoin. In weiteren Artikeln werde ich mehr dazu schreiben, hier nur eine kurze Vorabinformation. Sobald Ihr mit Transaktionen und den dazugehörenden Nachrichten und Folgeaktionen arbeitet werdet Ihr schnell merken, das Euch die Test-Bitcoins ganz schnell ausgehen werden. Das RegTest wird auf Eurem Rechner, also völlig lokal, erstellt und darin könnt Ihr Euch nach Belieben die Bitcoins zusenden und eigene Blöcke in der Blockchain generieren. Ebenso hört darin auch das Warten auf ein „Mining“ der Vergangenheit an, denn Ihr bestimmt den Zeitpunkt des Mining.

Hier nun der Sourcecode des Programms, der RedirectFrame-Klasse (am Artikelende) und die Programmausgabe im Konsolenfenster:

Ich habe zwei kleine Hilfsprogramme erstellt, die Eure Transaktionen aus dem Wallet auslesen und anzeigen: BitcoinJ 07 Zeige Transaktionen und BitcoinJ Zeige Transaktionen Tab.

Alle Quellcodes zum Bitcoin findet Ihr zum Download in meinem Github-Repository BitcoinJ, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/BitcoinJ. Alle Programme sind unter Java 11 lauffähig (vermutlich auch unter Java 8) und wurden mit intelliJ IDEA entwickelt, welches für dieses Programm aber nicht notwendig ist.

Noch ein Wort zum Thema „Lizenz“: Die von mir erstellten Beispiele selber stehen unter der „Unlicense“-Lizenz, allerdings werden zur Laufzeit diverse Bibliotheken eingebunden, welche zum Teil ganz eigene Lizenzen mitbringen. Darauf kann ich in meinen Lizenzhinweisen nicht hinweisen.

Letzte Bearbeitung: 21.03.2020