Mein Verständnis ist, dass Transaktionen in der Blockchain im doppelt gehashten Format gespeichert werden: dh SHA256 (SHA256 (rawtransaction)). Es ist aber auch möglich, Zugriff auf die Rohtransaktion zu erhalten. Das bedeutet, dass die rohen Transaktionsdaten irgendwo gespeichert werden müssen. Wo werden also die rohen Transaktionsdaten gespeichert, wenn sie nicht in der Blockchain gespeichert sind? Oder war meine anfängliche Aussage falsch, dass Transaktionen im Double-Hash-Format gespeichert werden? Ich glaube nicht, dass die rohen Transaktionsdaten durch Umkehren der Double-Hash-Operation extrahiert werden können.
Das ist eine Definitionsfrage.
Die Blockchain speichert nichts, sie ist eine abstrakte Datenstruktur, die gemeinsam von Knoten in einem Netzwerk verwaltet wird. Diese Knoten sind diejenigen, die Dinge speichern. Das kann die tatsächlichen Transaktionsdaten enthalten oder auch nicht - es spielt keine Rolle.
Die Bitcoin-Blockchain besteht aus hashverknüpften Block-Headern. Jeder Blockheader enthält den Hash des vorherigen Blockheaders. Jeder Block-Header enthält auch einen Hash aller darin enthaltenen Transaktions-Hashes (über einen Merkle-Baum). Diese Transaktions-Hashes sind offensichtlich Hashes der Transaktionsdaten selbst.
Das ist eine Definition der Struktur, auf die sich alle Knoten einigen müssen, da es sich um Hashes handelt, und diese Hashes müssen übereinstimmen. Aber was sie davon speichern, ist ihre eigene Sache. Vollständige Nodes mit unbeschnittenem Verlauf speichern alle Transaktionen und alle Blöcke. Beschnittene Knoten können alle Transaktionen und Blöcke bis zu einem bestimmten Punkt in der Geschichte speichern. Leichtere Knoten speichern möglicherweise nur die Blockheader und Transaktionen, an denen der Benutzer interessiert ist.
doppelt gehashtes Format: dh SHA256 (SHA256 (rawtransaction))
Ihr Verständnis davon ist sehr, sehr falsch.
Die in einer Blockchain gespeicherte Datenstruktur ist nicht doppelt gehasht . Stattdessen werden zwei Hashes in der Datenstruktur gespeichert.
Statt SHA256(SHA256(rawtransaction))
. Sie sollten sich die Blockchain-Datenstruktur wie folgt vorstellen:
struct Block {
Transactions[] transactions;
int256 nonce;
int256 previousHash; // SHA256(previous.transactions + previous.nonce + previous.previousHash)
int256 hash; // SHA256(this.transactions + this.nonce + this.previousHash)
}
Sie können sehen, dass die Datenstruktur mit dem vorherigen Block verknüpft ist, indem der Hash des vorherigen Blocks als Teil seiner eigenen Daten aufgenommen wird. Dies ist der „Ketten“-Teil der Blockchain. Die Definition des gesamten Satzes von Blöcken ist rekursiv, denn um den Hash des vorherigen Blocks zu berechnen, müssen Sie den Hash des Blocks davor berechnen und so weiter, bis Sie zum Genesis-Block gelangen.
Die unverarbeiteten festgeschriebenen Transaktionen sind Teil des Blocks.
Markus
Pieter Wuille