An welchem ​​Punkt werden die Smart Contracts ausgeführt?

Nehmen wir an, ich habe eine Transaktion gesendet, um einen Smart Contract aufzurufen (an seine Adresse). An welchem ​​Punkt wird der Smart Contract ausgeführt? Ist es während des Transaktionsvalidierungsprozesses?

Gibt es auch eine Begrenzung, wie lange ein Smart Contract laufen kann? Beispielsweise beträgt die Blockgenerierungszeit in Ethereum etwa 12 Sekunden. Wenn es einen Smart Contract gibt, dessen Ausführung lange dauert, und wenn er während des Transaktionsvalidierungsprozesses ausgeführt wird, wie würde sich das auf die Blockzeit auswirken?

Antworten (1)

Wann läuft es?

Die Ausführung einer Smart-Contract-Transaktion erfolgt, wenn der Mining-Knoten die Transaktion in einen von ihm generierten Block einschließt. Der Transaktions- und Smart-Contract-Code wird von jedem Validierungsknoten nach Erhalt des Blocks erneut ausgeführt.

Mining-Knoten, um einen Block zu generieren:

  1. Empfangen Sie unbestätigte Transaktionen aus dem Netzwerk (p2p-Protokoll)
  2. Validieren Sie jede unbestätigte Transaktion, einschließlich der Ausführung des zugehörigen Codes
  3. Schließen Sie gültige Transaktionen ein, um den Block so zu füllen, dass die Rentabilität maximiert wird

Sobald der Block generiert ist, wird er an das Netzwerk verteilt, und jeder Knoten, der diesen Block empfängt, fährt fort, die Liste der Transaktionen zu durchlaufen, um sicherzustellen, dass jede Transaktion gültig ist (einschließlich der Ausführung des zugehörigen Codes). Wenn sich ein neuer Knoten mit dem Netzwerk verbindet, lädt er jeden Block im Verlauf herunter und validiert jede Transaktion in jedem neu.

Wann wird also Smart Contract Code ausgeführt?

  1. Viele Male, wiederholt und überflüssig. Von Entwurf.
  2. Aber der „offizielle“ Ausführungspunkt ist der Punkt, an dem die Transaktion in der Blockchain stattfindet. Wenn es Transaktion Nr. 5 in Block Nr. 3000000 ist, dann könnte der "Ausführungspunkt" der Transaktion vielleicht nur als unmittelbar nach Transaktion Nr. 4 und vor Transaktion Nr. 6 beschrieben werden.

Die wiederholte Validierung ist möglich, da intelligente Vertragstransaktionen deterministisch sind. Sie können von Faktoren wie der Blocknummer selbst, aktuellen Speicherwerten für einen Vertrag oder dem Ergebnis der Berechnung eines anderen Smart Contracts abhängen, aber diese Informationen sind konstant und können perfekt neu berechnet werden, indem Transaktionen vom Anfang der Kette an durchlaufen werden.

Hinweis: Dies bezieht sich speziell auf Transaktionen . Die EVM definiert auch den Begriff eines Anrufs . Diese Unterscheidung wird an anderer Stelle in diesem Forum gut erklärt.

Was begrenzt die Ausführungszeit?

Die Grenzwerte werden über das System „Gas“ vorgegeben. Das Gas wird basierend auf der Menge des verwendeten Speichers zuzüglich der individuellen Gaskosten für jede Maschinenanweisung (Opcode) berechnet.

Gas wird durch zwei Mechanismen begrenzt:

  1. Der Absender einer Transaktion gibt das Gaslimit an, das er bereit ist, für die Transaktion auszugeben. (Dies wird normalerweise automatisch auf der Grundlage einer Schätzung berechnet)

  2. Mining-Knoten geben ein Block-Gesamtgaslimit an, das theoretisch auf Rentabilität basierend auf der Netzwerkleistung optimiert wird. Transaktionen, die das Blockgaslimit überschreiten, werden in keinen Block aufgenommen.

Während der Validierung kann die Ausführung des Transaktionscodes sicher abgebrochen werden, wenn eines dieser Limits erreicht wird. Dies verhindert, dass Nodes übermäßig viel Rechenzeit für diese Validierung aufwenden, und verhindert, dass die Blockzeit mit zunehmender Anzahl von Transaktionen anwächst.

Danke für die Antwort. Können Sie bitte erläutern: „Die Ausführung einer Smart-Contract-Transaktion erfolgt, wenn der Mining-Knoten die Transaktion in einen von ihm generierten Block einschließt. ' ? Ist es während des Validierungsprozesses der Transaktion vor dem Hinzufügen zu einem Block? und meine andere Frage ist, ob es lange läuft - wie würde sich das auf die Blockzeit auswirken - oder muss der Miner warten, bis der Vertrag abgeschlossen ist, um den Block zur Kette hinzuzufügen?
Ich habe meine Antwort etwas erweitert, ich hoffe, es klärt die Dinge besser auf!
Danke das hilft! Kann ich auch davon ausgehen, dass der Vertrag länger läuft, wenn die Transaktion genug Gas hat, und sich dies auf die Blockzeit auswirkt? Wenn zum Beispiel die durchschnittliche Blockzeit 12 Sekunden beträgt, kann sie dann sogar in Minuten gehen, basierend auf der Zeit, die für die Ausführung eines Vertrags benötigt wird?
Nicht ganz - die Blockzeit ist relativ konstant ausgelegt; Das Gesamtblockgaslimit (Nr. 2 in der Antwort) verhindert, dass die Ausführung eine bestimmte Menge überschreitet. (Lassen Sie mich wissen, wie ich dies in meiner Antwort klarer wiedergeben kann!)
Was würde also passieren, wenn die Ausführung eines Vertrags 1 Minute dauert und jeder, der die Transaktion aufruft, bereit ist, das erforderliche Gas bereitzustellen? Würde dies vom Miner fallen gelassen, wenn das Gaslimit das überschreitet, was der Miner pro Block festlegt?
Der Code würde bis zum Punkt der Blockgasgrenze ausgeführt, an welcher Stelle er aufhören würde. Die Transaktion wird nicht ganz abgebrochen – der Code wird keine Wirkung haben, aber das ausgegebene Gas wird immer noch an den Miner gezahlt. (Das Netzwerk wird immer bezahlt :)
Warum sollten Prüfer jede Transaktion ausführen, wenn sie dafür nicht bezahlt werden? Gibt es keinen Anreiz zum „Betrügen“? Ich meine, warum Strom verbrauchen, wenn man ihn vermeiden kann? Wäre das nicht ein Rennen nach unten? Wenn ich zum Beispiel nur 90 % der Transaktionen validiere, sinken meine Stromkosten, oder?