Zustandsänderungen innerhalb eines Blocks

Ich habe irgendwo gelesen, dass der 'Status' nur am Ende jedes Blocks aktualisiert wird. Ich habe auch gelesen, dass jeder Block eine bestimmte Abfolge von Transaktionen enthält und somit implizit den Status innerhalb eines Blocks „aktualisiert“. Dies könnte Semantik sein, aber ich möchte nur sicher sein, wie Statusvariablen aktualisiert werden: Wird eine Transaktion, die den Status ändert, dies vor der nächsten Transaktion tun, unabhängig davon, ob sie sich im selben Block befindet?

Um es klar zu sagen: Nehmen Sie an, dass eine Vertragsvariable Book10 ETH ist, damit Benutzer Wetten gegen diese 10 ETH annehmen können. Jedes Mal, wenn eine Transaktion einen Betrag setzt X, Bookwird um X: verringert Book = Book - X. Wetten sind so eingeschränkt, dass Bookimmer >=0: require(Book - X >= 0)ganz oben in der Wettfunktion. Wenn Bob 6 ETH und Alice 6 ETH setzt, würde dies offensichtlich meiner Anforderung widersprechen. Wenn sich ihre Transaktionen jedoch im selben Block befinden, würde die zweite Transaktion abgelehnt werden?

Antworten (1)

Wird eine Transaktion, die den Zustand ändert, dies vor der nächsten Transaktion tun, unabhängig davon, ob sie sich im selben Block befindet?

Ja

Wenn sich ihre Transaktionen im selben Block befinden, würde die zweite Transaktion abgelehnt?

Ja

Ein wichtiger Punkt ist, dass weder Alice noch Bob wissen, wer zuerst kommt: Der Miner entscheidet, welche Transaktion zuerst kommt.

Siehe auch Was ist die Standardreihenfolge von Transaktionen während des Minings?

Ich dachte schon, aber das ist beruhigend.