Wie wird eine doppelte Ausgabe gelöst, wenn zwei Miner gleichzeitig widersprüchliche Blöcke finden?

Ich habe versucht, etwas über Bitcoin und seinen Fluss zu erfahren. Eigentlich steckte ich fest, wie die Kontrolle bei der Lösung der doppelten Ausgaben abläuft.

Für zB. wenn T a und T b eine doppelte Ausgabe derselben Transaktion mit unterschiedlichen Ausgaben sind. Diese beiden Transaktionen können durch unterschiedliche Pfade im Netzwerk fließen und einen Fluss in genau entgegengesetzten Pfaden annehmen. So erreicht T a den Miner M a , der einen Block erstellt, und T b erreicht einen anderen Miner M b . Nun kann M a den Block mit T a und M b mit T b lösen . Beide beginnen mit der Übertragung der jeweiligen Blöcke mit Ta und Tb , um Teil der Blockkette zu sein.

Nach einiger Zeit im Relay kann ein Knoten beide Transaktionen erhalten und seine ungültig finden, aber hier wird bereits der Block weitergeleitet. Was passiert in einem solchen Fall und wie werden die doppelten Ausgaben gelöst?

Antworten (2)

Blöcke bilden eine Kette; Jeder Block enthält ein prevFeld, das den Hash des Blocks enthält, der ihm "vorangeht". Die beiden Blöcke Ma und Mb sind inkompatibel (die Blockchain darf nicht zwei widersprüchliche Transaktionen enthalten), sodass keine der anderen vorangehen kann. Daher müssen sie eine "Gabel" sein; zwei verschiedene Blöcke mit demselben gemeinsamen Vorfahren. Alle anderen Miner müssen sich entscheiden, auf welchem ​​Fork sie minen wollen; zB ob sie einen Block erstellen wollen, dessen prevFeld auf den Block von Ma oder Mb zeigt. Es spielt in diesem Fall keine Rolle.

Angenommen, der nächste Block wird von Mc gefunden und zeigt auf den Ma-Block. Dann ist die Kette, die in Mc endet, länger, und der nächste Miner wird es vorziehen, auf dieser Seite des Forks zu minen. Nach einigen weiteren Iterationen sollte klar sein, dass die Kette mit Ma (mit der Transaktion Ta) länger ist und von da an von Minern bevorzugt wird. Das bedeutet, dass die Transaktion Tb jetzt tot ist. (Außerdem kann Mb ihre 12,5 BTC-Blockbelohnung nicht einsammeln, da der Block, der sie vergibt, nur in einer Seitenkette existiert, die tot ist.)

Also werden sich beide Blöcke durch das Netzwerk ausbreiten und die Blockkette hat gegabelte Blöcke in allen Knoten?. und die Zeit von durchschnittlich 10 Minuten zum Finden des Blocks dreht sich alles um das Lösen eines Blocks durch einen Knoten oder ist es die Gesamtzeit zum Hinzufügen des Blocks in die Blockkette durch alle Knoten, dh eine vollständige Blockkette?
Richtig, alle Knoten sehen beide Blöcke. Die 10 Minuten sind die durchschnittliche Zeit, um einen Block zu lösen; Sobald dies geschieht, wird der Block normalerweise sehr schnell an alle anderen Knoten im Netzwerk verteilt (was einer der Gründe dafür ist, warum Forks selten vorkommen).
Es wird also gesagt, dass ein Knoten, wenn er einen Block erhält, die Blöcke validiert, sodass hier irgendwann bereits ein Block zur Kette hinzugefügt wird, und wenn er einen weiteren Block mit doppelter Ausgabentransaktion erhält, wird er nicht stattdessen den Block herunterfallen es zu forken?
Angenommen, die Blöcke A, B enthalten widersprüchliche Transaktionen. Wenn B A als seinen Vorgänger nennt, dann ist B ungültig und wird gelöscht. Wenn A, B beide C als ihren Vorgänger nennen, dann könnte jeder gültig sein, und Sie haben eine Gabelung. Der Knoten wird beide Blöcke zumindest für eine Weile behalten, weil er nicht weiß, ob der nächste Block D A als seinen Vorgänger oder B benennen wird.
Bedeutet dies also, dass die Blockvalidierung durch einen Knoten nur bei der Überprüfung seines übergeordneten Knotens erfolgt? nicht, ob der Block die Transaktion enthält, die ungültig ist oder nicht?

Um die Art und Weise zu visualisieren, in der Bitcoin-Blöcke und -Transaktionen durch das Netzwerk „fließen“, sollten sie so betrachtet werden, als würden sie sich durch das P2P-Netzwerk ausbreiten. Verbundene Peers (Knoten) benachrichtigen sich gegenseitig über neue Transaktionen und Blöcke, und Peers können dann alle Transaktions- oder Blockdaten anfordern (Bestand).

In dem von Ihnen angegebenen Beispiel für doppelte Ausgaben, bei dem die doppelten Ausgaben an verschiedene Miner gehen, wird die Transaktion, die zuerst bestätigt wird , dh zuerst von einem Miner in einen gültigen Block aufgenommen wird, vom Netzwerk als gültig angesehen - vorausgesetzt, die Transaktion und der Block sind es im Übrigen gültig.

Die verbleibende Transaktion (selbst wenn sie zuerst gesendet wurde) wird gemäß den Konsensregeln des Netzwerks als Double-Spend-Versuch betrachtet, da sie dieselben Ausgaben (UTXOs) ausgibt wie eine bereits bestätigte Transaktion. Da es jedoch in einem konkurrierenden gültigen Block bestätigt wurde (wie in Ihrem Beispiel), wird dieser zweite (chronologische) Block höchstwahrscheinlich verwaist sein .

Während der Verbreitung neu geschürfter Blöcke unterliegen sie der Validierung durch Peers. Peers (und damit das Netzwerk) werden sich über die Gültigkeit von zwei (oder mehr) konkurrierenden Blöcken einigen und wahrscheinlich einen auswählen – wie im vorherigen Absatz beschrieben. In einigen Fällen kann sich die Kette vorübergehend verzweigen, bis nachfolgende geminte Blöcke eine Konvergenz ermöglichen, in diesem Fall wird eine Kette zugunsten des Konsenszweigs verwaist.

Es klingt übermäßig kompliziert, wenn es auf diese Weise diskutiert wird, aber der sich ständig ändernde Zustand des Konsenses führt schließlich zur Konvergenz. Aus diesem Grund wird die Blockchain als „langsam“ und „umständlich“ beschrieben, da sie einen Konsens über die Gültigkeit jeder Transaktion und jedes Blocks aufbaut.

Es gibt eine nützliche Diskussion über doppelte Ausgaben in dieser verwandten Frage .