Wenn ich an das manuell kodierte Beispiel Bitcoin Erzeugung eigener Schlüssel und Adressen zurückdenke, stelle ich fest: mit einer Bibliothek kann das Leben deutlich einfacher sein.
Das erste Beispiel zeigt die Erstellung einer Bitcoin-Adresse im Bitcoin Testnetzwerk mit gerade einmal 3 Zeilen Programmcode:
- Festlegung des Netzwerkes (Zeile 42)
- Erzeugung eines Schlüsselpaares (Zeile 45)
- Umwandlung des öffentlichen Schlüssels in die öffentliche Adresse (Zeile 52).
Mit den ausgegebenen Daten könntet Ihr Euch ein Papierbasiertes Wallet erstellen und Bitcoins auf die erstellte Adresse übertragen. Die spätere (Weiter-) Zahlung wird dann mit dem privaten Schlüssel freigegeben („unterschrieben“).
Solltet Ihr diese Daten später noch nutzen wollen, ist es notwendig, den öffentlichen und privaten Schlüssel sicher zu speichern, ansonst führt der Verlust des privaten Schlüssels unweigerlich zum Verlust der Bitcoins der Adresse.
Weiterhin 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.
Nachfolgend findet Ihr den Quellcode und die Ausgabe auf der Konsole:
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 53 54 |
/* * Herkunft/Origin: http://javacrypto.bplaced.net/ * Programmierer/Programmer: Michael Fehr * Copyright/Copyright: Michael Fehr & andere/others * Lizenttext/Licence: verschiedene Lizenzen / several licenses * getestet mit/tested with: Java Runtime Environment 11.0.5 x64 * verwendete IDE/used IDE: intelliJ IDEA 2019.3.1 * Datum/Date (dd.mm.jjjj): 11.03.2020 * Funktion: 01 Erzeugt eine Bitcoin-Adresse aus einem öffentlichen Schlüssel * Function: 01 creates a bitcoin address out of a public key * * Sicherheitshinweis/Security notice * Die Programmroutinen dienen nur der Darstellung und haben keinen Anspruch auf eine korrekte Funktion, * insbesondere mit Blick auf die Sicherheit ! * Prüfen Sie die Sicherheit bevor das Programm in der echten Welt eingesetzt wird. * The program routines just show the function but please be aware of the security part - * check yourself before using in the real world ! * * Sie benötigen diverse Bibliotheken (alle im Github-Archiv im Unterordner "libs") * You need a lot of libraries (see my Github-repository in subfolder "libs") * verwendete BitcoinJ-Bibliothek / used BitcoinJ Library: bitcoinj-core-0.15.6.jar * my Github-Repository: https://github.com/java-crypto/BitcoinJ * libs in my Github-Repo: https://github.com/java-crypto/BitcoinJ/tree/master/libs * */ import org.bitcoinj.core.Address; import org.bitcoinj.core.ECKey; import org.bitcoinj.core.NetworkParameters; import org.bitcoinj.params.MainNetParams; import org.bitcoinj.params.TestNet3Params; import org.bitcoinj.script.Script; public class BitcoinJ01CreateAddress { public static void main(String[] args) throws Exception { System.out.println("BitcoinJ 01 Erzeugung einer Bitcoin Adresse aus einem Public Key"); System.out.println("\nWir benutzen für unsere Versuche das Bitcoin Testnetz und nicht das Mainnetz"); NetworkParameters netParams = TestNet3Params.get(); //NetworkParameters netParams = MainNetParams.get(); System.out.println("\nErzeugung eines Schlüsselpaares mit ECKey von bitcoinj"); ECKey ecKey = new ECKey(); System.out.println("Das ist unser neues Schlüsselpaar:"); System.out.println("Privater Schlüssel WIF:" + ecKey.getPrivateKeyAsWiF(netParams)); System.out.println("Öffentlicher Schlüssel:" + ecKey); System.out.println("\nDer öffentliche Schlüssel im WIF-Format ist die Adresse im Bitcoin (Test-) Netz");// get valid Bitcoin address from public key Address addressFromKey = Address.fromKey(netParams, ecKey, Script.ScriptType.P2PKH); System.out.println("Die Adresse lautet:" + addressFromKey); } } |
Die Ausgabe auf der Konsole:
1 2 3 4 5 6 7 8 9 10 11 |
BitcoinJ 01 Erzeugung einer Bitcoin Adresse aus einem Public Key Wir benutzen für unsere Versuche das Bitcoin Testnetz und nicht das Mainnetz Erzeugung eines Schlüsselpaares mit ECKey von bitcoinj Das ist unser neues Schlüsselpaar: Privater Schlüssel WIF:cSY66D4zR9w6J5oRkMGXRZxqCEDG6cK3CCcFNrimVXJhAGMCnBxa Öffentlicher Schlüssel:ECKey{pub HEX=035b57f839c8f94f3395b0495038572abfb6fb7790ff32bf796331de8b4f98938c, creationTimeSeconds=1582894732, isEncrypted=false, isPubKeyOnly=false} Der öffentliche Schlüssel im WIF-Format ist die Adresse im Bitcoin (Test-) Netz Die Adresse lautet:n4DKJCG7qyXJkFNvrQp3pUdN5axjJBuecf |
Weiter geht es mit BitcoinJ 02 Wallet Erzeugung.
Alle Quellcodes zu BitcoinJ findet Ihr zum Download in meinem Github-Repository, 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: 12.03.2020