BitcoinJ Timestamp Mike Hearn Original

Das nachfolgende Programm stammt nicht von mir, sondern wurde vom ehemaligen Bitcoin (Mit-) Entwickler Mike Hearn geschrieben und auf der Entwicklerkonferenz „DevCore 2015“ von ihm vorgestellt. Auf den BitcoinJ-Seiten ist die Anleitung dafür zu finden (Link: https://bitcoinj.github.io/document-timestamp-app) sowie das Original Github-Archiv wird genannt (Link: https://github.com/mikehearn/devcoretalk), leider ist das Original-Erklärvideo dort nicht mehr vorhanden. Zum Glück konnte ich das Video noch im Netz finden, hier ist der Link: https://www.youtube.com/watch?v=V_H41AgPZW8).

Ich habe das Programm behutsam verändert und an die aktuelle BitcoinJ Bibliothek angepasst (weil z.B. einige Methoden „deprecated“ oder entfallen sind). Als Basis für die Timestamper-Anwendung hat Mike Hearn das bekannte Wallet Template verwendet. Den geänderten Sourcecode findet Ihr in meinem Github-Archiv https://github.com/java-crypto/BitcoinJTimestamp – wegen der Vielzahl an Dateien für die JavaFx-Anwendung zeige ich ihn nicht hier.

Nach dem Start aktualisiert das Programm als Erstes das Wallet durch den Zugriff auf die Blockchain:

Dann wählen wir über den Button „Timestamp“ eine Datei aus, für die wir einen Timestamp erzeugen möchten:

Unmittelbar nach der Dateiauswahl sendet das Programm den Hashwert in die Blockchain und wir müssen „ein wenig“ warten – nämlich bis in der Blockchain 3 Bestätigungen (sprich 3 Blöcke gemined wurden) vorliegen – das kann schon einmal eine Stunde dauern. Ganz wichtig: das Programm muss die gesamte Zeit laufen und darf NICHT beendet werden, ansonsten ist der Timestamp-Vorgang nicht komplett.

Wer einen Blick in die Konsole wirft, findet dort jede Menge Informationen und auch die Transaktionsnummer. Ein Blick in einen Bitcoin (Testnet-) Explorer zeigt uns den aktuellen Stand an:

Ein kleiner Fortschrittsbalken zeigt uns den aktuellen Stand an:

Irgendwann ist es aber so weit und die geforderten drei Bestätigungen liegen vor:

Das Programm hat in das Verzeichnis der Originaldatei eine zusätzliche Datei mit der Endung „.timestamp“ geschrieben, welche für die Überprüfung notwendig ist:

Mit einem Klick auf den „Verify“ Button wählen wir diese Datei aus uns erhalten die Bestätigung, das der Timestamp korrekt ist und die Originaldatei am Montag, dem 30. März 2020 um 11:19:44 Uhr existiert hat:

Wie Ihr vielleicht bemerkt habt, ist dieses Programm nicht perfekt und hat 2 entscheidende Nachteile: Erstens müssen wir recht lange auf den Timestamp warten und das Programm muss die ganze Zeit aktiv bleiben. 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!

Um diese „Hickups“ zu umgehen habe ich das Programm noch ein wenig angepasst – hier der Link zur verbesserten Ausführung: http://java-crypto.bplaced.net/bitcoinj-timestamp-mike-hearn-extended/.

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