BitcoinJ Client LunaTKWallet

Bei der Suche nach einem voll funktionsfähigen Bitcoin-Client unter Java bin ich auf das LunaTK-Wallet vom Programmierer TaeGeun Moon gestoßen. Es enthält alle notwendigen Funktionen und ist über eine (vielleicht gewöhnungsbedürftige) Oberfläche gut und intuitiv bedienbar.

Das Wallet kann entweder über das Original GitHub Repository https://github.com/LunaTK/Simple-Bitcoinj-GUI-Wallet oder über das Java-Crypto GitHub-Archiv (https://github.com/java-crypto/BitcoinJ-Clients/tree/master/BitcoinJ%20Client%20LunaTKWallet) heruntergeladen werden, wobei meine Java-Crypto-Variante zwei minimale Überarbeitungen (wegen veralteter Methoden) erfahren hat.

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.

Nach dem Start des Programms erhaltet Ihr auf der rechten Seite eine Übersicht der bisherigen Transaktionen und auf der linken Seite ist ganz oben der Hinweis zu finden, dass das Wallet (bislang) nicht verschlüsselt ist. Dann folgt die eigene (aktuelle) Empfangsadresse als QR-Code, der mit dem Klick auf den Pfeil nach unten auch downloadbar ist (siehe spätere Info). Dann folgt die eigene Empfangsadresse im Klartext und rechts daneben ist die einfache Möglichkeit der Kopie in die Zwischenablage möglich. Unterhalb sind „Buttonfelder“ für das senden und anfordern von Bitcoins sowie der Verschlüsselung des Wallets.

Starten wir mit dem Senden von Bitcoins. Die „Memo“-Zeile wird nicht an den Empfänger übertragen, sondern dient nur der eigenen Übersicht.

Nach dem Sendevorgang erscheint ein Fenster mit dem Hinweis auf die gesendeten Bitcoins. Diese Information erscheint nicht weil das Programm um den Sendevorgang weiß, sondern weil die Blockchain  eine entsprechende Nachricht gesendet hat.

Hier der Auszug aus der Datei „DashboardController.java“, der für diese Benachrichtigungsfunktion sorgt. Zuerst registriert das WalletAppKit einen „Listener“ (Zeilen 8 bis 10) und dann sorgen die beiden „onSent“ und „onReceived“ Methoden für die Ausführung einer Aktion, hier der Anzeige eines Fensters. Diese Funktionalität ist genau der Grund, warum das WalletAppKit so beliebt bei den Programmierern ist – es hat für die wichtigen Lauschfunktionen derartige Listener bereits eingebaut, welche nur noch aktiviert werden müssen.

Zusätzlich erscheint eine Information zu erhaltenen Coins – diese Information stammt vom „onReceived“-Listener und ist unser nicht verbrauchtes Rückgeld unserer Sendetransaktion. Ihr solltet Euch noch einmal die Funktionsweise einer Überweisung verdeutlichen: Es wird stets das gesamte Guthaben verschickt und der zu viel gezahlte Betrag landet auf einer (neu erzeugten) Empfangsadresse im Wallet.

In der Transaktionshistorie wird die Zahlung als „Sending“ angezeigt, was zum Ausdruck bringt, dass die Zahlung noch nicht als bestätigt („confirmed“) gilt:

Die „Anforderung“ von Bitcoins dient der besseren Übersicht, denn so ist der Wallet der Zahlungseingang für die spezielle Zahlung bereits bekannt und kann direkt einem Sender zugeordnet werden (eine Empfangsadresse je Eingangszahlung):

Die Verschlüsselung geht einfach vonstatten: erst ein Warnhinweis und dann die Eingabe eines Passwortes. Beachtet auf jeden Fall die Notwendigkeit einer Verschlüsselung der Datenbank bei einem Echt Einsatz, ansonsten sind Eure Bitcoins verloren.

Das Wallet bekommt dann im oberen Bereich eine „grüne“ Information zum Status der Verschlüsselung:

Nach einiger Zeit wechselt der Status unserer Zahlung von „sending“ naqch „sent“ – nun ist die Überweisung final. Wenn Ihr das Buttonfeld „See in BlockExplorer“ anklickt werden Ihr auf eines Online Bitcoin Testnetz Explorers geführt und Ihr könnt weitere Einzelheiten zur Transaktion einsehen.

Eine Funktionalität fehlt aber in unserem Programm, nämlich die Ausgabe des Seeds bzw. der 12 magischen Wörter („Mnemonic Codes“) zu Sicherungszwecken – hier kann Euch aber das Programm BitcoinJ 02b Dump eines Wallets komplett weiterhelfen.

Alle Quellcodes zu den BitcoinJ Clients findet Ihr zum Download in meinem Github-Repository BitcoinJ Clients, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/BitcoinJ-Clients. 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“: Das Programm steht unter einer eigenen Lizenz, die Ihr bitte beachten solltet. 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: 19.03.2020