BitcoinJ Erzeuge einen Timestamp

Ich stelle Euch hier eine einfache Lösung zur Erzeugung eines Timestamps vor, welche mit intelliJ IDEA erstellt worden ist (benötigt Ihr dann auch zum Nachbau, sonst bekommt Ihr die Oberfläche nicht bearbeitet).

Das Programm arbeitet mit dem BitcoinJ WalletAppKit, welches uns viel Programmierarbeit abnimmt. Standardmäßig läuft das Programm im Bitcoin-Testnetz und zur Nutzung benötigt Ihr ein paar (Test-) Bitcoins von einem Faucet (siehe Bitcoin Linksammlung). Das Programm ist auch dafür vorbereitet, mit einem lokalen Bitcoin Regressionsnetzwerk Daten auszutauschen (siehe eigene Artikelreihe, die bereits in Vorbereitung ist). Bitte benutzt als Basis die BitcoinJ-Bibliothek mit der Versionsnummer 0.15.6 -damit klappt das Programm auf jeden Fall (Links zu allen Bibliotheken siehe unten).

Nach der Online-Aktualisierung werden die Daten in zwei Fenster und parallel in zwei Textdateien geschrieben und diese Dateinamen vergeben: BitcoinJCreateTimestamp_Output_xxx.txt und BitcoinJCreateTimestamp_Logfile_xxx.txt, wobei „xxx“ für das aktuelle Datum und die Uhrzeit steht; so könnt Ihr die Ausgaben später ganz in Ruhe studieren. Die hierfür notwendige Klasse RedirectedFrame.java findet Ihr in meinem GitHub-Archiv.

Die Benutzung ist sehr einfach gehalten – nach dem Programmstart geht das Programm nicht sofort online, sondern wartet auf Euren Button-Klick bei „starte das Wallet“:

Bis das Wallet aktualisiert ist (kann schon einmal 1 bis 3 Minuten dauern) läuft eine JProgressBar durch das Bild:

Sobald das Wallet auf dem aktuellen Stand ist wählt Ihr über den Button „waehlen Sie eine Datei für den Zeitstempel“ die Datei aus, für die Ihr einen Zeitstempel benötigt. Wenn alles klappt, hat das Programm in das Verzeichnis der Originaldatei eine zusätzliche Textdatei geschrieben (Dateiname ist der Originaldateiname + „.timestamp.txt“):

Die Timestamp-Datei enthält als wichtigste Angabe die Transaktions-Id, in der der Hashwert der Originaldatei gespeichert ist (zu finden in der ersten Zeile und Zeile 18). Alle anderen Angaben dienen mehr der besseren Zuordnung  des Timestamps zu einer speziellen Datei:

Diesen Timestamp könnt Ihr entweder manuell überprüfen oder Ihr nutzt das folgende Programm zur Erweiterung des Timestamps (BitcoinJ Erweitere einen Timestamp).

Hier ist die Suche der Transaktion in einem Bitcoin Testnetz-Explorer (Direktlink: https://tbtc.bitaps.com/406952a7ec2da89814ab1b635b6bad3e5fc46affdfd7c4deaa301973e7939aa0). Das Ergebnis stimmt uns positiv – der Hashwert unserer Originaldatei („3e383e47ec7a5434c918eceef3c1443931d5ed85061629378d3299710e649941“) ist nun in der Blockchain verewigt:

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: 22.03.2020

Hier der Sourcecode des Programms und der Form; den Quellcode der Klasse RedirectedFrame.java findet Ihr in meinem GitHub-Repository: