Das Beispielprogramm BitcoinJ Timestamp Mike Hearn Original arbeitet grundsätzlich wie gewünscht, hat aber noch zwei Schwachstellen: Erstens müssen wir recht lange auf den Timestamp warten und das Programm muss die ganze Zeit aktiv bleiben (kann schon mal eine Stunde dauern bis die drei Bestätigungen eingegangen sind). Zweitens kann der Timestamp nur im Rahmen und mit unserem Wallet geprüft werden, d.h. ich müsste ggfls. meine Walletdatei mit meinen „echten“ Bitcoins einem Dritten aushändigen, was wir doch unbedingt vermeiden wollen!
Ich habe daher das Programm ein wenig verändert, um diese beiden „Hick ups“ abzufedern. Um das Programm ein wenig schneller zu machen habe ich in der Datei „MainController.java“ die „Tiefe der Bestätigungen“ („proof.depth“) von drei auf eins verkleinert – sprich er wartet nicht mehr drei Bestätigungen ab, bis das Programm die Timestamp Datei erzeugt.
Zum Anderen erzeugt das Programm nun direkt nach dem Start des Timestamping-Prozesses eine zusätzliche Textdatei (Dateiendung „.timestamp.txt“), in welcher in der ersten Zeile die Nummer der Transaktion genannt wird, in welcher sich die Timestamp-Daten befinden. Damit könnt Ihr mit einem beliebigen Bitcoin (Testnetz-) Explorer in die Blockchain schauen und den Hashwert überprüfen.
Schauen wir uns kurz die Bedienung an. Nach dem Start klicke ich auf „Timestamp“ und wähle dann die gewünschte Datei aus:
Es wird eine Textdatei mit dem Originaldateinamen und der Endung „.timestamp.txt“ erzeugt:
Das ist der Inhalt der Timestamp-Datei – in Zeile 1 findet sich die Transaktions-Id:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
72e5ec12ae490f3f5d950edcfce02a3cdc093e9e84431359c1fa718e38a98847 3e383e47ec7a5434c918eceef3c1443931d5ed85061629378d3299710e649941 C:\Users\admi\Documents\java-crypto_bplaced_net_mh_ext.pdf 61455 04.04.2020 16:34:45 ********************************************************************************** ******* do not edit above lines | bitte die oberen Zeilen nicht veraendern ******* ********************************************************************************** This Timestamp was created with / Dieser Zeitstempel wurde generiert mit http://java-crypto.bplaced.net/bitcoinj-timestamp-mike-hearn-extended/ Sourcecode : https://github.com/java-crypto/BitcoinJTimestamp/tree/master/BitcoinJ%20Timestamp%20Mike%20Hearn%20Extended Dateiname : C:\Users\admi\Documents\java-crypto_bplaced_net_mh_ext.pdf Dateigroesse : 61455 (Bytes) Dateidatum/Zeit : 21.03.2020 12:07:09.981 (zuletzt modifiziert) Timestamp-Datei : C:\Users\admi\Documents\java-crypto_bplaced_net_mh_ext.pdf.timestamp.txt Hashwert SHA256 : 3e383e47ec7a5434c918eceef3c1443931d5ed85061629378d3299710e649941 Datum Timestamp : 04.04.2020 16:34:45 TransaktionsId : 72e5ec12ae490f3f5d950edcfce02a3cdc093e9e84431359c1fa718e38a98847 Network-ID : org.bitcoin.test |
Der Bitcoin-Explorer (Direktlink: https://tbtc.bitaps.com/72e5ec12ae490f3f5d950edcfce02a3cdc093e9e84431359c1fa718e38a98847) zeigt dieses Bild mit dem eingebetteten Hashwert unserer Datei (der ebenfalls in der Timestamp-Datei gespeichert ist) an:
Nach deutlich kürzerer Wartezeit ist der „Proof“ erzeugt und befindet sich neben der Originaldatei:
Hier die insgesamt 3 Dateien im gewählten Verzeichnis:
Mit einem Klick auf „Verify“ bestätigt Ihr die Gültigkeit des Timestamps und erhaltet auch die Information, seit wann dieses Dokument bestanden hat (was dem Erzeugungsdatum des Blockchain-Blocks entspricht):
Bitte beachtet noch den folgenden Hinweis: wenn ich von „ewiglicher“ Speicherung des Timestamps in der Blockchain spreche meine ich das Main-Netzwerk und nicht das hier hauptsächlich genutzte Testnetz. Das Testnetz kann jederzeit zurückgesetzt werden und alle bis dahin gespeicherten Daten können verschwinden – speichert bitte keine wichtigen Timestamps alleine im Bitcoin Testnetzwerk!
Alle Quellcodes zu BitcoinJ Timestamps & OP_RETURN findet Ihr zum Download in meinem GitHub-Repository BitcoinJTimestamp, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/BitcoinJTimestamp. 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.
Zur Nutzung der Programme benötigt Ihr diverse Bibliotheken – ladet Euch diese aus dem separaten GitHub-Archiv (https://github.com/java-crypto/BitcoinJ_Libraries) herunter und bindet Sie über Eure Entwicklungsumgebung ein.
Noch ein Wort zum Thema „Lizenz“: Das Programm steht unter unterschiedlichen Lizenzen, 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: 05.04.2020