wie Smart Contract Schritt für Schritt ausführen?

Ich habe ein paar Probleme, den Schritt der Ausführung der Transaktion in Smart Contracts zu verstehen.

1-Wenn ein Benutzer eine Transaktion an Smart Contract sendet, wird dieser Smart Contract nicht sofort ausgeführt, sondern in einem Transaktionspool zusammengefasst.

2- Irgendwann wird jeder EVM eine Transaktion ausgewählt, um den Code im Smart Contract Zeile für Zeile auszuführen.

3-Wenn alle EVMS das gleiche Ergebnis finden, was passiert danach? Andernfalls hat der Smart Contract diese Transaktion abgebrochen.

was passiert danach? ==> 4- Der Miner sammelt alle Transaktionen aus dem Transaktionspool und fügt sie dem neu erstellten Block hinzu, und dann beginnt der Mining-Prozess zwischen den Minern. (Korrigieren Sie mich, wenn ich mich in den Schritten irre)

5- schließlich wird die Blockchain in einen neuen Zustand überführt.

*Wie überprüft der Miner, dass diese Transaktionen von EVM gut ausgeführt werden?

*Spielt EVM nur im ersten Teil der Ausführung von Smart Contracts eine Rolle?

*Wer wird den Status ändern, wenn der Vertrag ausgeführt wird? (Transaktion?)

Antworten (1)

Du hast die Schritte falsch verstanden. Aber nah!

Konsens wird leicht missverstanden.

Das grundlegende Problem, das zuerst von Bitcoin gelöst wurde, war, wie man schließlich einen Konsens zwischen Knoten erreichen kann, die sich nicht kennen oder einander nicht unbedingt vertrauen. Fügen Sie der Umgebung Geld hinzu, und sie wird zu einer feindlichen Umgebung. Dies ist keineswegs wie in einem typischen Cluster von Computern, die sich kennen und einander vertrauen .

Einen Hinweis zur Lösung erhalten wir aus Transaktionsprotokollen, die von Datenbanken verwendet werden. Wenn man ein abspielbares Protokoll mit allen Eingaben in der richtigen Reihenfolge hat, kann man eine Datenbank rekonstruieren. Es ist nicht wichtig, "den Zustand" zu haben, wenn Sie die Eingaben haben, die diesen Zustand erzeugt haben.

Es gibt eine nicht offensichtliche Herausforderung zu bewältigen. Angesichts der Physik ist es nicht möglich, dass alle Knoten gleichzeitig oder sogar in derselben Reihenfolge von allen Transaktionen erfahren. Es wird (wahrscheinlich) nie möglich sein, alles so schnell oder schneller zu machen als alles andere.

In einer vertrauensvollen Umgebung könnte dies mit genauen, vertrauenswürdigen Zeitstempeln gelöst werden, die jedem helfen würden, die „richtige“ Transaktionsreihenfolge aufzuzählen. In einer gegnerischen Umgebung ohne Autorität funktioniert das nicht, weil die Uhr von niemandem als vertrauenswürdiger angesehen wird als die von jemand anderem.

Also, wie bestelle ich die Transaktionen?

Der Mining-Prozess bricht diese Mehrdeutigkeit zusammen. Der „gewinnende“ Miner erhält das Privileg, einen De-facto-Netzwerktransaktionsauftrag für einen Block festzulegen. Wichtig ist, dass dies nicht einmal ein Versuch ist, die zeitliche Reihenfolge von Transaktionen aufzulösen. Tatsächlich ist gasPrice eine Möglichkeit, in die Warteschlange zu springen. Man kann einen Miner wahrscheinlich dazu anregen, eine Transaktion früher einzubeziehen, indem man ein hohes Gebot anhängt. Umgekehrt kann man Transaktionsgebühren sparen, indem man geduldig ist.

Nirgendwo passiert etwas, bis Knoten Nachrichten über Transaktionen erhalten, die in Blöcken enthalten sind. Transaktionen in Blöcken sind wohlgeordnet. Die Blöcke selbst sind wohlgeordnet. Die Blockkette ist also eine wohlgeordnete Menge aller Transaktionen, die stattgefunden haben .

Jeder Full Node, nicht nur die Miner, verarbeitet Transaktionen vollständig und gelangt zu eigenen Schlussfolgerungen über Zustandsänderungen. Dies ist sehr ähnlich wie die Wiedergabe eines Transaktionsprotokolls, da sich alle über die Eingaben und die Reihenfolge dieser Eingaben einig sind. Die Funktionen sind deterministisch (strenge Anforderung), sodass es zwischen gut funktionierenden Knoten auf derselben Blockhöhe keine Meinungsverschiedenheiten geben kann.

Blöcke haben Zeitstempel, Transaktionen jedoch nicht. Die Blockzeit ist die minimale Auflösung, und alles, was gesagt werden kann, ist, dass alle Transaktionen in einem Block zu dieser Blockzeit in der Reihenfolge der Einbeziehung abgebaut wurden. Jede Transaktion, die in dem Kontext ausgeführt wird, der von der vorherigen Transaktion verlassen wurde.

Bergleute haben nicht-triviale Privilegien. Gemeinsam können sie Transaktionen zensieren. Sie können mit Zeitstempeln und Transaktionsreihenfolge spielen, wenn dies einen egoistischen Vorteil bringt. Dies kann bei der Vertragsgestaltung wichtig sein, wenn Faktoren wie „Frist“ vorhanden sind.

In jedem Fall beschließt der Konsens die Transaktionsreihenfolge. Knoten ermitteln den Zustand selbst.

Ich hoffe es hilft.

ps Im Bergbau passiert noch viel mehr, aber ich wollte mich auf Ihre Frage konzentrieren.

Können Sie diesen Satz bitte erklären: Jeder Full Node, nicht nur die Miner, verarbeitet Transaktionen vollständig. wie verarbeitet transaktionen?? Aber nach dem, was ich gelesen habe und in diesem Link: [link]( ethereum.stackexchange.com/questions/16990/… ) Der Smart Contract wird innerhalb des EVM ausgeführt, . Die Ergebnisse der Ausführung sollten genau gleich sein, um die Transaktionen zur Blockchain hinzuzufügen. Ich brauche Hilfe, um Sir besser zu verstehen.
Sagt auch, Each node of the network, not only miners execute the smart contracts.die EVM ist in jedem Knoten, und die Knoten bilden einen Schwarm. Dies könnte helfen, es sichtbar zu machen: bitrates.com/guides/ethereum/…
Um zu korrigieren, was ich zu Beginn gesagt habe und was ich verstanden habe, führt ein Miner, wenn er eine Transaktion erhält, eine Transaktion auf EVM aus und fügt das Ergebnis der Transaktion in Block to Mine ein. Dann wird der Block schließlich abgebaut und zu Blockchain hinzugefügt (wenn der Miner diesen Block erfolgreich abgebaut hat). Schließlich kopiert jeder den neuen Block und verifiziert ihn, indem er EVM ausführt (die Transaktion, die in das Netzwerk geht, wird von allen oft in EVMs ausgeführt, um die Transaktion zu verifizieren. Ich habe die gleiche Ausgabe erhalten, um zu überprüfen, ob alles in Ordnung ist). korrigiert mich wenn ich falsch liege bitte
Es ist fast richtig, aber ich denke, es gibt Verwirrung. Verzeihen Sie, wenn ich mich irre. Dies: and includes result of transaction in block to mine- völlig falsch angegeben. Es enthält nicht "das Ergebnis". Es enthält die Transaktion ... genauer gesagt, es enthält die Eingaben (von Alice an Bob, Betrag, Daten ... Unterschrift) - nicht das Ergebnis. Dies ist nicht in einem Block "to mine". Der Job des Bergmanns ist "to mine". Der Miner fügt die Transaktionseingaben in eine Transaktion ein, die „geschürft“ wurde. Ja, der Miner führt die Transaktion aus. Das liegt daran, dass alle Knoten die Transaktion ausführen und „alle Knoten“ den Miner beinhalten.
Die Transaktion wurde in einen Block aufgenommen, der Block wurde an alle übermittelt. Jeder führt die Transaktion aus, einschließlich des Miners. Der Miner war der erste, der wusste, dass die Transaktion in einem Block enthalten war, also war er der erste, der sie ausführte. Niemand kümmert sich darum, was der Miner von der Transaktion hält. Sie werden es selbst ausführen, um es herauszufinden.
Ja, Sir, ich meine die Transaktion. aber wo der Miner die Transaktionseingaben einbezieht?, verstehe ich das nicht: ` Der Miner fügt die Transaktionseingaben in eine Transaktion ein, die "geschürft wurde". ` dh nicht im Block? so , wo und dann Transaktion ausführen. was meinst du damit all nodes run the transaction and "all nodes" includes the miner ?
Ich brauche diese Antwort, Sir, um sie zu verstehen.
@RobHitchens Dies ist eine alte Frage, aber ich hoffe, Sie werden antworten. Ich denke, Sie irren sich, wenn Sie sagen, dass das and includes result of the transaction in block to minefalsch ist. Tatsächlich werden bei der Berechnung einer Transaktion die Ergebnisse im Receipt Trie des Miners/Validators gespeichert, dessen Wurzel im Header des Blocks enthalten ist, den der aktuelle Validator/Miner zusammenstellt, was bedeutet, dass das Ergebnis der Transaktion in gewissem Sinne tatsächlich ist in den Block "eingeschlossen" (in dem Fall wird der Block des Miners/Validators akzeptiert). Vielleicht habe ich dich falsch verstanden, aber ich würde mich über deine Antwort freuen!
Vielleicht nicht ganz klar formuliert. Es gibt eine Merkle-Wurzel, die zwar aus dem Ergebnis der Transaktion fließt, aber sehr verlustbehaftet ist. Sie können nicht mit nichts als der Merkle-Wurzel feststellen, dass x = 4 in einem bestimmten Vertrag ist. Sie können die Merkle-Root jedoch nicht generieren, ohne zu wissen , dass x = 4 ist, also führen Sie die Transaktion aus, um dies herauszufinden.
@RobHitchens Danke, großartig, dann sind wir uns tatsächlich einig! Vielleicht möchten Sie sich meine andere Frage ansehen ( ethereum.stackexchange.com/questions/136406/… ) Ich denke, sie ist ziemlich technisch und ich habe Probleme, Antworten darauf zu finden.