Wie überprüft ein Miner, dass ein UTXO nicht woanders ausgegeben wird, müsste er nicht die gesamte Blockchain von diesem UTXO und weiter durchsuchen, um zu sehen, ob dies der Fall ist? Unter der Annahme einer realen Größenordnung würde dies effektiv Ewigkeiten dauern, oder verstehe ich etwas falsch?
Ein Miner tut dies, indem er überprüft, ob die UTXOs
neuen Transaktionen, die er auszugeben versucht, in der UTXO set
.
Das UTXO set
ist die Sammlung UTXOs
, die nicht ausgegeben wurde und daher durch neue Transaktionen eingelöst werden kann.
Dazu überprüft ein Miner (wie auch jeder andere Knoten) die LevelDB-Datenbank, die .bitcoin/chainstate
standardmäßig in Unix-Systemen gefunden wird.
UTXOs
werden durch ihre txid
(Little-Endian-Darstellung) mit vorangestelltem c
.
In der Antwort auf diese Frage finden Sie eine ausführliche Erläuterung des Formats, in dem die UTXOs gespeichert werden, mit einigen Beispielen.
Alle Full Nodes verarbeiten die komplette Blockchain. Während der Verarbeitung führen sie Aufzeichnungen über alle nicht ausgegebenen Transaktionsausgaben in der UTXO set
. Für jede Transaktion jedes Blocks werden die relevanten Änderungen an den UTXO set
angewendet: Alle UTXOs
Ausgaben werden entfernt und alle Transaktionsausgaben werden als neue hinzugefügt UTXOs
.
Wenn sich also ein Knoten vollständig mit dem aktuellen Blockchain-Tipp synchronisiert hat, um zu überprüfen, ob die Eingaben einer Transaktion ausgegeben werden können, prüft er einfach, ob für jede Eingabe ein entsprechendes UTXO
in ihrer UTXO set
. Ist dies nicht der Fall, UTXO
wurde der entweder bereits ausgegeben oder hat nie existiert.
UTXOs
sind einzigartig und können nur einmal und vollständig ausgegeben werden. Sie werden durch das (einzigartige) txid
der Transaktion, die das erstellt hat , UTXO
und das v_out
, dh die Position der Ausgabe in der Ausgabeliste der Transaktion, identifiziert.
nein nein
sr-gi
Murch