Wo und wie werden Rohtransaktionen in der Blockchain gespeichert?

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.

Antworten (2)

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.

Die Rohtransaktion wird also tatsächlich in den Knoten gespeichert (zumindest vollständige Knoten und möglicherweise beschnittene), und jede Transaktion speichert eine doppelt gehashte Darstellung ihrer Eingabetransaktionen: bitcoin.stackexchange.com/questions/8443/…
Ja, Transaktionen werden normalerweise auf diese Weise serialisiert und gespeichert, aber noch einmal: Das muss nicht sein. Wie die Dinge gespeichert werden, hängt von der einzelnen Knotensoftware ab. Beispielsweise verwendet einige Software eine komprimierte Darstellung, die wiederholte Eingabe-Hashes weglassen kann. Das einzige, was zählt, ist, wie eine txid definiert wird, die ein Doppel-SH256 der Transaktionsdaten in der "Netzwerkserialisierung" ist, die tatsächlich die txids der vorherigen tx enthält, die die ausgegebenen UTXOs erstellt haben. Wenn irgendwo Dinge anders gespeichert werden können, aber sich immer noch auf diesen Hash geeinigt wird, ist alles in Ordnung.

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.

Ähm, nein. Double Hashing wird in der Tat in der Blockchain verwendet. Ich kann Ihnen viele Referenzen geben, zB bitcoin.stackexchange.com/questions/8443/… . Ich weiß, wie der Kettenteil der Blockchain funktioniert. Die wirkliche Antwort ist, dass in (zum Beispiel) Links in der aktuellen Transaktion zu Eingabetransaktionen die aktuelle Transaktion den doppelten Hash der vorherigen Transaktion speichert. Double Hashing wird auch an anderer Stelle verwendet.
Hinweis: Das in dieser Antwort angegebene Beispiel der Blockstruktur vermittelt ein grundlegendes Verständnis, ist jedoch nicht wirklich genau. Siehe: en.bitcoin.it/wiki/Protocol_documentation#Block_Headers