Wie wirken sich Onkelblöcke auf den Weltzustand von Ethereum aus?

Nehmen wir an, Sie haben zwei Miner: A und B.

Nehmen wir auch an, Sie haben zwei Transaktionen: eine, die eine Zahl bei einem Smart Contract um eins erhöht (Transaktion X), und eine andere, die dieselbe Zahl um eins verringert (Transaktion Y).

Miner A schürft einen Block, der Transaktion X enthält.

Miner B schürft einen Block, der Transaktion Y enthält.

Miner A ist also der Ansicht, dass sich die Smart-Contract-Nummer erhöht hat, und Miner B ist der Ansicht, dass sich die Nummer verringert hat. Beide haben den Status der Adresse in ihren jeweiligen EVMs aktualisiert.

Diese Blöcke werden gesendet und Knoten aktualisieren ihren Smart-Contract-Status entsprechend. Nehmen wir an, dass schließlich ein Konsens erreicht wird und Miner A als „Gewinner“ hervorgeht.

Werden die Zustandsaktualisierungen von Miner B dann "zurückgesetzt" und die Zustandsaktualisierung von Miner B angewendet?

Antworten (2)

Nur die Änderungen von A werden berücksichtigt (es gibt nichts zurückzusetzen, da die Änderungen von B in der neuen Blockchain nicht berücksichtigt werden).

Sie beschreiben einen Fork, also die Situation, in der wir verschiedene Versionen der Blockchain-Geschichte und des Zustands haben (eine, in der es die Änderungen von A gibt, und eine, in der es die Änderungen von B gibt).

Sobald wir einen Konsens erzielt haben (unter Verwendung einer Auswahlregel, z. B. der längsten Blockchain), können Sie nach einer Reihe von Bestätigungsblöcken die Blockchain vergessen, die die Änderungen von B angewendet hat.

Vielleicht finden Sie diese Antwort interessant .

Aber wenn ein Knoten zuerst den Block von Miner B empfängt, würde dieser Knoten (nachdem er den Block verifiziert hat) nicht tatsächlich alle Transaktionen darin ausführen und seinen eigenen Zustand ändern?
Ja, aber Sie hätten zwei verschiedene Forks der Blockchain (der Einfachheit halber können Sie sich diese als zwei unterschiedliche Kopien der Blockchain und des Staates vorstellen), eine, in der die Änderungen von A durchgeführt werden, und eine, in der die Änderungen von B vorgenommen werden angewandt. Wenn wir einen Konsens über den Fork von A erzielen, verwerfen wir die Änderungen, die im Fork von B vorgenommen wurden.
Ich denke ich verstehe. Die "unerwünschten" Blöcke in der Gabelung von B würden einfach weggeworfen und durch die Blöcke aus der Gabelung von A ersetzt. Richtig?
Ja, der Fork wird buchstäblich vergessen (nach einer Reihe von Bestätigungsblöcken). Bitte beachten Sie auch meine Bearbeitung, ich habe versucht, einige Informationen hinzuzufügen
Nur-Link-Antworten werden nicht empfohlen, wenn die Seite verschoben oder der Server heruntergefahren ist, können keine Informationen verwendet werden. Es ist besser, die Antworten mit der Grundidee zu beantworten und den Link zu verwenden, um die Details zu erweitern.