BitcoinJ Timestamp Mike Hearn Extended

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:

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