Vor kurzem war ich von Blockchain fasziniert und fing an, Ethereum zu lernen. Ich bin auf das Konzept der Nonce in Ethereum gestoßen.
Nach Recherchen fand ich heraus, dass Nonce für zwei Zwecke verwendet wird.
a. Um Transaktionen im Zusammenhang mit einem Konto in Ordnung zu halten. dh wenn es eine Transaktion mit Nonce 3 gibt, die sich auf ein Konto im txpool bezieht und eine Transaktion mit Nonce 4 angekommen ist, wird diese Transaktion nicht abgebaut, bis und es sei denn, die Transaktion mit Nonce 3 wird abgebaut.
Ich verstehe das.
Aber ich habe eine Frage, die ich nicht finden kann?
i) Der Nonce-Wert bezieht sich auf eine Adresse, richtig? So können zwei Adressen gleichzeitig die gleiche Nonce haben, dh Konto mit Adresse A kann die neueste Nonce 2 haben, ähnlich kann Konto mit Adresse B auch die letzte Nonce 2 haben.
ii) Haben alle Knoten im Netzwerk den gleichen neuesten Nonce-Wert für alle im Netzwerk verfügbaren Konten?
Das heißt, wenn es drei Konten und 2 Bergleute gibt und der Nonce-Wert für drei Konten jeweils 1,2,3 beträgt, dann haben beide Bergleute die gleiche Nonce.
Annahme: Beide Miner sind synchron
b) Wie wird Nonce verwendet, um doppelte Ausgaben zu vermeiden?
Was ist Nonce in Ethereum?
Wenn Sie sich auf das Glossar im Github-Wiki beziehen , gibt es zwei Arten von Nonce, die in Ethereum verwendet werden.
Konto-Nonce: ein Transaktionszähler in jedem Konto. Dies verhindert Replay-Angriffe, bei denen eine Transaktion gesendet wird, z. 20 Münzen von A nach B können von B immer wieder gespielt werden, um das Guthaben von A kontinuierlich zu leeren.
Proof of Work Nonce: ein bedeutungsloser Wert in einem Block, der angepasst werden kann, um zu versuchen, die Proof-of-Work-Bedingung zu erfüllen
Hier beziehen Sie sich auf das Konto Nonce, bei dem es sich um die Transaktionszählung von diesem Konto handelt.
i) Der Nonce-Wert bezieht sich auf eine Adresse, richtig? So können zwei Adressen gleichzeitig dieselbe Nonce haben, dh Konto mit Adresse A kann die neueste Nonce 2 haben, ähnlich kann Konto mit Adresse B auch die letzte Nonce 2 haben.
Ja, wie oben erklärt, es ist die Anzahl der Transaktionen und daher mit dem Konto verbunden. Da es sich um eine aufsteigende Nummer handelt, können zwei Konten gleichzeitig dieselbe Nonce haben.
ii) Haben alle Knoten im Netzwerk denselben neuesten Nonce-Wert für alle im Netzwerk verfügbaren Konten?
Wenn die Knoten mit der Blockchain synchronisiert werden, werden sie es schließlich tun. Da ein Knoten die längste gültige Kette akzeptiert, gibt es kein Problem damit, dass nicht alle Knoten mit dem neuesten Nonce-Wert in dem Moment aktualisiert werden, in dem eine Transaktion abgebaut wird. Nach der Synchronisierung haben sie denselben Nonce-Wert für das Konto. (Es ist offensichtlich, weil in einer Blockchain alle Knoten die gleichen Blockdaten haben sollen. Nach einer gewissen Zeit können Sie also ziemlich sicher sein, dass die Transaktion bestätigt wird, daher der Nonce-Wert)
b)Nonce wird verwendet, um doppelte Ausgaben zu verhindern, wie?
Double Spend zu vermeiden bedeutet, den gleichen Betrag nicht mehr zweimal zu verwenden. Wenn die Nonce auf die gleiche eingestellt ist, wird nur eine der Transaktionen abgebaut und meistens kann dies diejenige mit dem höheren Gaspreis sein, aber es kommt zu keinen doppelten Ausgaben, da am Ende in beiden Fällen nur eine Transaktion stattfindet Fall.
Ein weiterer Trick, der von Nonce vermieden wird, besteht darin, höhere Gaspreise zu verwenden, um eine später gesendete Transaktion vor einer früheren von demselben Konto abzubauen.
Stellen Sie sich eine Situation vor, in der A eine Transaktion von X ETH als Zahlung an B sendet und das Konto von A nur diese X ETH auf seinem Konto hat. Sobald die Transaktion zum Schürfen gesendet wurde, kann A eine weitere Transaktion von X ETH mit einem höheren Gaspreis an eines seiner anderen Konten senden, wodurch die erste gesendete Transaktion später abgebaut wird, indem er eine höhere Priorität in der Warteschlange für ausstehende Transaktionen erhält. Aber da Ethereum Nonce berücksichtigt, ist dies nicht erlaubt, da die Nonce der späteren Transaktion höher ist als die vorherige.
Sie können diese Frage auch stellen.
Erstens ist es "nonce", nicht "nounce".
i) Ja, jede Adresse hat eine Nonce. Adressen können dieselbe Nonce haben und tun dies oft.
ii) Ja, alle Knoten in derselben Blockchain haben für jede Adresse dieselbe Nonce aufgezeichnet, da die Nonces in der Blockchain gespeichert sind.
b) Die Nonce ist im Grunde nur ein Zähler, der verfolgt, wie viele Transaktionen eine Adresse gesendet hat.
Angenommen, eine Adresse A hat 1 ETH.
Zuerst versucht es, 1 ETH an Adresse B zu senden. Nennen wir diese Transaktion A0, weil sie von A signiert wurde und keine 0 hat. Jetzt versucht A, diese 1 ETH zu verdoppeln, indem es eine weitere Transaktion von 1 ETH an C sendet: nennen wir es Transaktion A1. A1 wird sofort von allen Knoten abgelehnt, da jeder Knoten sehen kann, dass A1 nach A0 kommen muss und nach A0 nicht genügend ETH in A vorhanden ist, um A1 zu senden.
Sie können also nicht mit verschiedenen Nonces doppelt ausgeben.
A könnte eine andere Strategie ausprobieren: doppelte Ausgaben mit derselben Nonce. Zuerst sendet A die Transaktion A0 an B und dann eine weitere Transaktion A0 an C. Beide haben dieselbe Nonce und dieselbe Quelle, aber ein unterschiedliches Ziel. Nur eine der A0-Transaktionen wird in die Blockchain aufgenommen, da alle Knoten sehen können, dass die Nonce 0 zweimal von A verwendet wurde, und dies nicht zulässig ist.
Sie können also auch nicht mit derselben Nonce doppelt ausgeben.
Prashant Prabhakar Singh
sudo
Jeansstoff