Überprüfen, ob sich eine Transaktion in der Blockchain befindet

Lassen Sie mich zunächst sagen, dass ich gerade etwas über Blockchain und die technischen Aspekte lerne.

Nach meinem Verständnis wird jede Transaktion kryptografisch gehasht, die Hashes werden gepaart und gehasht, bis ein einzelner Root-Hash generiert wird. Die Miner hashen den gesamten Block, der den Root-Hash, den vorherigen Hash, den Zeitstempel usw. enthält. Wenn der Hash die Zielschwierigkeit erfüllt, wird der Block der Kette hinzugefügt. Kryptografisches Hashing macht es unmöglich, die Eingabe aus der Hash-Ausgabe zu erhalten.

F. Wenn ich zum Beispiel zu Block X zurückkehren und sehen wollte, welche Transaktionen darin enthalten sind, wie ist das möglich, wenn alle Hashes kryptografisch sind und es unmöglich ist, die Eingabe aus der Hash-Ausgabe zu finden?

Danke im Voraus.

Antworten (2)

Nur um das klarzustellen: Es wird nicht der gesamte Block gehasht, wie Sie sagten, Blöcke werden gefunden, indem nur der Blockheader eines Kandidatenblocks gehasht wird. Der Block-Header enthält jedoch die Merkle-Wurzel des Transaktionsbaums, die wiederum auf den genauen Satz von Transaktionen im Block festlegt.

Sie haben Recht, eine kryptografische Hash-Funktion ist eine Einwegfunktion und der Blockinhalt kann nicht aus dem Hash abgerufen werden. Um den Inhalt des Blocks zu erfahren, verwenden Sie den Block-Hash als eindeutige Kennung und fordern den vollständigen Block von einem Archivknoten an, dh einem vollständigen Knoten, der die vollständige Bitcoin-Blockchain vorhält.

Wenn Sie wiederum nur die Ausgangsposition haben txid, können Sie die vollständige Transaktion von jedem Knoten anfordern, der davon Kenntnis hat. Die Rohtransaktion enthält jedoch nicht die Information, in welchem ​​Block sie enthalten war. AFAIU, um das zu bekommen, würdest du eine solche getDataAnfrage stellen MSG_MERKLEBLOCK. Dadurch erhalten Sie nicht nur die vollständige Transaktion, sondern auch Hash-Partner, um den Merkle-Zweig bis hin zum Block-Hash und dem Block-Header zu bilden, sodass Sie die Aufnahme der Transaktion in die Blockchain vollständig validieren können.

Die Miner hashen den gesamten Block, der den Root-Hash, den vorherigen Hash, den Zeitstempel usw. enthält. Wenn der Hash die Zielschwierigkeit erfüllt, wird der Block der Kette hinzugefügt

Nicht ganz, nur der Blockheader wird für den Proof of Work gehasht. Der Block-Header besteht aus: der Versionsnummer, dem Hash des vorherigen Blocks, der Merkle-Root, einem Zeitstempel, dem Ziel (Schwierigkeitsgrad) und der Nonce, die verwendet wird, um den gültigen Block zu finden.

Der Blockheader ist jedoch nur ein Teil des Blocks, jeder Block enthält auch die Daten für alle darin enthaltenen Transaktionen. Also um deine Frage zu beantworten:

Ich wollte zurück zu Block X und sehen, welche Transaktionen darin enthalten sind, wie ist das möglich [...]?

Einfach genug, Sie würden einfach zu diesem Block zurückkehren und sich die Transaktionsdaten darin ansehen!

Wenn Sie sich fragen, warum/wie eine Merkle-Wurzel verwendet wird, hat diese Frage eine gute Antwort. Das Bitcoin-Wiki hat auch einige relevante Informationen :

[Transaktionen] werden nur indirekt über die Merkle-Root gehasht. Da Transaktionen nicht direkt gehasht werden, erfordert das Hashing eines Blocks mit 1 Transaktion genau den gleichen Aufwand wie das Hashing eines Blocks mit 10.000 Transaktionen.