Bei Bitcoin basiert das BTC-Buchhaltungssystem auf UTXOs (Unspent Transaction Outputs), wodurch verhindert wird, dass dieselbe BTC mehrmals ausgegeben wird. Ich habe gehört, dass Ethereum ein einfacheres Kontostandssystem hat, aber ich kenne die Details nicht. Wie funktioniert der Kontostand von Ethereum?
Wenn ich eine Nachricht habe, die 1 ETH von Alice an Bob sendet, was verhindert, dass dieselbe Nachricht mehr als einmal verwendet wird? Gibt es ein Sequenznummernsystem (wie TCP)?
Wenn Alice zuerst eine Nachricht signiert, die 1 ETH von Alice an Bob sendet, und dann eine Nachricht signiert, die 1 ETH von Alice an Charlie sendet, kann die zweite Nachricht vor der ersten bestätigt werden?
Jedes Konto hat einen global zugänglichen , der Replaynonce
-Angriffe in der gleichen Kette und doppelte Ausgaben verhindert. Das ist die Sequenznummer, die Miner überprüfen, da ein Block, der eine Transaktion mit einer falschen Nonce enthält, ein ungültiger Block ist (andere Miner bauen nicht darauf auf). (Das schützt nicht vor Cross-Chain-Replay-Angriffen.)nonce
nonce
Zweite Nachricht (mit höherer Nonce) kann nicht vor der ersten bestätigt werden.
Siehe dies für ergänzende Details wie:
Ein globaler Zustand speichert eine Liste von Konten mit Salden, Code und internem Speicher
Eine Transaktion ist gültig, wenn das sendende Konto über genügend Guthaben verfügt, um sie zu bezahlen. In diesem Fall wird das sendende Konto belastet und dem empfangenden Konto der Wert gutgeschrieben
Ich gebe hier keine Antwort, aber ich arbeite an einer kleinen Diskussion mit @eth, die für die Frage des OP relevant ist, und ich wollte teilen, was ich dank @eth und ein bisschen herumlesen gelernt habe.
Das Missverständnis, das ich hatte, war, dass alle Knoten Code ausführen, wenn eine Transaktion diesen Code aufruft, und daher angenommen, dass das Ergebnis der Ausführung des Codes dann an das Netzwerk zirkuliert, gesammelt und in einen Block geschürft wird.
Dieser Prozess der Transaktion, Übertragung, Sammlung und des Bergbaus zur Bestätigung funktioniert in der Bitcoin-Blockchain, aber nicht in der Ethereum-Blockchain und ist der Grund, warum ich missverstanden habe, warum doppelte Ausgaben in der Ethereum-Blockchain nicht möglich sind. Der Mechanismus ist nicht sofort offensichtlich, also wollte ich ihn erklären.
Bei Ethereum ist es richtig, dass alle Knoten den Code ausführen, aber das gilt besonders für Mining-Knoten. Jeder Mining-Knoten bestimmt die Transaktionen, die er ausführen möchte, und während er sie ausführt, sucht er gleichzeitig auch nach dem nächsten Block.
Dies bedeutet, dass ein Mining-Knoten, wenn er das Glück hat, den nächsten Block zu entdecken, bereits die gewonnene Transaktion ausgewählt hat und nicht zwei konkurrierende Transaktionen mit derselben Nonce ausführen wird.
Mit anderen Worten, jede gegebene Kombination aus Adresse und Nonce kann nur einmal pro Knoten ausgeführt werden, und wenn sie bei der Ausführung ausgeführt wird und der Knoten den Block erfolgreich findet, würde die Nonce inkrementiert werden. Dies würde dazu führen, dass alle anderen Knoten die konkurrierende Transaktion ablehnen, da die globale Registrierung von Adressen und Nonces sagen würde, dass die Nonce zu niedrig sei, wodurch alle Doppelausgabeversuche ausgeschlossen würden.
Ich hoffe, das hilft anderen zu verstehen, warum das funktioniert.
Ich glaube, ich bin etwas spät dran, aber das wurde bereits in der folgenden Frage beantwortet
Was ist Nonce in Ethereum? Wie verhindert es doppelte Ausgaben?
Guck mal.
T9b
eth
T9b
T9b
eth
T9b
almel