Wie/wo wird die Zuordnung einer Transaktion zu einem bestimmten Block gespeichert?

Laut dem Whitepaper von Bitcoin enthält ein Block die Felder „Previous Hash“, „Nonce“ und „Root Hash“. Der Root-Hash ist ein Merkle-Tree-Root-Knoten aller Transaktionen, die in diesem bestimmten Block bestätigt wurden.

Ich habe im fünften Absatz der Top-Antwort zu Was ist die Merkle-Wurzel gelesen? :

Wenn wir eine Transaktion haben, die angeblich aus Block #234133 stammt, können wir die Transaktionen für diesen Block abrufen, den Merkle-Baum überprüfen und wissen, dass die Transaktion gültig ist.

Angenommen, ein Block birgendwo in der Blockchain enthält tTransaktionen. Wo und wie wird die Zuordnung eines bestimmten Transaktionssatzes zu einem bestimmten Block gespeichert? Denn die Blockchain selbst enthält aus Platzgründen nur den Root-Hash aller Transaktionen. Gibt es also andere versteckte Komponenten, die nicht im Whitepaper veröffentlicht wurden, und gibt es Ressourcen, um sich ein umfassendes Bild davon zu machen?

Danke.

Das Whitepaper ist keine Aussage darüber, wie das System konzipiert ist, sondern bestenfalls eine Übersicht über die Konzepte. Die tatsächliche Implementierung folgt nicht einmal strikt dem, was gesagt wird, und Sie sollten dies von einem 9-seitigen Dokument auch nicht erwarten.

Antworten (3)

Der Merkle-Baum wird dynamisch neu erstellt, um ihn in einem Block zu validieren, die Reihenfolge der Transaktionen im Block beschreibt implizit, wie der Merkle-Baum aussehen sollte, wenn er rekonstruiert wird. Die Transaktionen werden als Teil des Blocks gespeichert, buchstäblich der Header, eine Zahl, die die Anzahl der folgenden Transaktionen angibt, und dann folgt eine Liste aller Transaktionen.

Aber wie finden Sie eine bestimmte Transaktion oder einen Block, der die bestimmte Transaktion enthält, wenn Sie überprüfen möchten, ob die Transaktion stattgefunden hat?
Sie lesen entweder alle Blöcke und führen einen Index der Transaktionen, oder Sie fragen einen Dienst, der es weiß.

Das Whitepaper gibt nur einen konzeptionellen Überblick über Bitcoin, ist aber sicherlich keine vollständige Spezifikation. Wie auch immer, abgesehen von der Blockchain selbst ist das Verfolgen von Transaktionen und UTXOs eher ein Implementierungsdetail als ein Protokollanliegen. Verschiedene Explorer, Nodes und Wallets unterscheiden sich in ihren Ansätzen, aber im Allgemeinen gibt es einige unterschiedliche Zuordnungen zwischen Transaktionen und Blöcken für unterschiedliche Zwecke:

Blockchain: Zuordnung von Block zu Transaktion

Zuallererst beinhalten die Blöcke, wie sie in der Blockchain enthalten sind, die Transaktionen, die sie bestätigt haben. Die komplette Blockchain wird in archivierten Full Nodes vorgehalten. Wie Anonymous bereits erklärt hat , wird der Merkle-Baum nur implizit in der Blockchain für jeden Block gespeichert, der einfach seinen vollständigen Satz von Transaktionen der Reihe nach auflistet. Vollständige Nodes erstellen den vollständigen Merkle-Baum bei Bedarf neu, indem sie die Transaktionen des Blocks während der Blockvalidierung erneut hashen, sowie wenn ein Merkle-Proof von ihnen angefordert wird.

Spezifische Interessen: Transaktion zum Block-Mapping

Wallets bewahren im Allgemeinen Kopien der Transaktionen auf, die ihre Adressen betreffen. Diese Transaktionsobjekte sollten im Allgemeinen die Blockhöhe und den Block-Hash beibehalten, damit das Wallet Kettenreorganisationen bewältigen und die Anzahl der Bestätigungen verfolgen kann. Ich würde vermuten, dass einige Wallet-Implementierungen den Merkle-Beweis auch behalten können, wenn sie zB in der Lage sein wollen, die Existenz von Geldern für andere Geräte nachzuweisen.

Bitcoin Core wird einen vollständigen Transaktionsindex führen, wenn es mit dem Startindex konfiguriert ist -tindex=1.

UTXO-Set: Ausgabe an Transaktions-/Block-Mapping

Full Nodes führen das Hauptbuch aller Bitcoin-Gelder in Form des Unspent Transaction Output (UTXO)-Satzes. UTXOs werden eindeutig über ihre Outpoints ([txid:vout]) identifiziert, was bedeutet, dass sie von Natur aus auf die entsprechende Transaktion verweisen. Ein UTXO-Objekt sollte im Allgemeinen auch einen direkten oder indirekten Verweis auf den Block enthalten, der die Transaktion bestätigt hat, die das UTXO erstellt hat.

Entdecker

Explorer führen im Allgemeinen umfassendere Datenbanken mit Transaktionen, Blöcken, Adressen und UTXOs.

Ich bin mir nicht sicher, ob Sie als Mensch fragen, ob Sie eine bestimmte Transaktion überprüfen möchten, oder als Entwickler Code schreiben möchten, um eine bestimmte Transaktion anhand ihrer Blocknummer, Adresse usw. zu überprüfen

1-Im Allgemeinen, wenn Benutzer A "n Btc" als UTXO gesagt hätte, das sich nach Transaktion X in Block B in "n' Btc" geändert hätte; dann möchten Sie die Ausgabe des UTXO "n" (durch Überprüfung des Merkle-Beweises/Zeugnisses) und die Erstellung von UTXO "n'" in Block B validieren.

2- Oder als Benutzer können Sie ohne Codierung zu einer dieser Seiten gehen https://m.btc.com/ https://www.blockchain.com https://blockchair.com

- Beginnen Sie entweder mit dem Block # (wenn der Block beispielsweise mehr als 1000 TXs enthält, ist es schwierig, dies auf diese Weise zu überprüfen) z. Diese Fotos zeigen, wie ich überprüft habe, dass die Coinbase UTXO von Block 100.000 in Block 266.668 ausgegeben wurdeGeben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

- oder durch die angegebene Benutzeradresse erhalten Sie so etwas. Dann suchen Sie nach dem UTXO-Wert im angegebenen TX (ob es eine Eingabe oder Ausgabe von der Pfeilrichtung und der Farbe war, wie Sie hier sehen). Wenn Sie darauf klicken, wird es Geben Sie hier die Bildbeschreibung einGeben Sie hier die Bildbeschreibung einangezeigt wird dich zum TX bringen, der es mit Block Nr. & ​​allen Infos erstellt hat; Sagen wir, ich habe auf den obigen Link geklickt, ich bekomme die Transaktionsdetails und die Block-NrGeben Sie hier die Bildbeschreibung ein

(Ja, das sind wahrscheinlich Brieftaschenadressen, aber vielleicht wäre es einfacher zu überprüfen, da es eine chronologische Reihenfolge gibt, während Sie innerhalb eines Blocks nicht wissen, wie der Index / die relative Reihenfolge Ihres TX ist; ich meine, Sie haben nicht gesagt, dass es gegeben ist )

3 -Wenn Sie als Entwickler fragen, ich denke, dieser Bitcoin - Kerncode sagt Ihnen, wie die Dinge wirklich gespeichert werden fand es gestern "zufällig", als ich dies https://github.com/mit-dci/utreexo/issues/277 überprüfte

Ich hoffe das hilft...