Wo werden die UTXO-Daten gespeichert?

Wenn eine neue Transaktion empfangen wird, wird sie dem Speicherpool hinzugefügt (nachdem sie auf Konflikte geprüft wurde). Beim Mining werden nur die Transaktionen berücksichtigt, die sich im Pool befinden. Was passiert mit den Transaktionen, nachdem sie in einen neu abgebauten Block aufgenommen wurden? Werden sie aus dem Pool gelöscht? Wo wird das UTXO gespeichert? Welche Funktion übernimmt das?

Antworten (1)

Ich nehme an, diese Frage bezieht sich auf den internen Betrieb von Bitcoin Core. Diese Beschreibung gilt für Version 0.8 und höher (mindestens bis 0.14).

Ein Teil des Systems befasst sich mit der aktiven Kette , die die längste gültige Kette von Blöcken (gespeichert in $DATADIR/blocks) ist, die wir kennen. An diese aktive Kette werden Blöcke angehängt – und gelegentlich entfernt, wenn es eine Reorganisation gibt.

Wo wird das UTXO gespeichert?

Für den Tipp (den letzten Block in der aktiven Kette) pflegen wir eine Datenbank mit dem Satz nicht verbrauchter Transaktionsausgaben (UTXOs), die in gespeichert $DATADIR/chainstateund aggressiv im Speicher zwischengespeichert werden. Wenn ein neuer Block empfangen wird, entfernen wir die von Transaktionen im Block ausgegebenen UTXOs und fügen die Ausgaben dieser Transaktionen hinzu. Wenn eine Reorganisation stattfindet, verwenden wir Undo-Daten (gespeichert in $DATADIR/blocks/rev*.dat), um die Änderungen am UTXO-Set rückgängig zu machen. In gewisser Weise können Sie Blöcke als Patches für das UTXO-Set sehen – aber das UTXO-Set wird niemals explizit an Blöcke gebunden oder in Blöcken gespeichert , es wird lediglich durch sie impliziert.

Was passiert mit den Transaktionen, nachdem sie in einen neu abgebauten Block aufgenommen wurden? Werden sie aus dem Pool gelöscht?

Der Mempool ist eine Reihe von Transaktionen, die gültig sind, sich aber nicht in einem Block befinden. Wir behandeln diese nicht als Teil des UTXO-Sets. Vielmehr handelt es sich nur um eine Gruppe von Transaktionen, die intern konsistent und mit der aktiven Kette konsistent sind. Dies bedeutet, dass jede Mempool-Transaktion nur Ausgaben ausgibt, die im UTXO-Set oder von anderen Mempool-Transaktionen enthalten sind. Immer wenn ein neuer Block hereinkommt, entfernen wir seine Transaktionen aus dem Mempool (vorausgesetzt, sie waren dort), und wir entfernen alle Mempool-Transaktionen und ihre Abhängigkeiten, die mit dem neuen UTXO-Set in Konflikt stehen. Wenn eine Reorganisation stattfindet, versuchen wir, die Transaktionen des entfernten Blocks zurück in den Mempool zu verschieben.

Welche Funktion übernimmt das?

Das ist zu lang, um hier zu antworten. Ein erheblicher Teil von src/validation.*(in 0.14) oder src/main.*(in älteren Versionen) zusammen mit src/coins.*befasst sich mit der Wartung und dem Caching des Mempool- und UTXO-Sets.