Diese Frage wurde vor einiger Zeit auf Reddit gestellt:
Wenn ein Knoten eine Transaktion an das Netzwerk sendet und den Empfänger als Vertrag hat, führt dann jeder Knoten den Vertrags-Bytecode mit den Eingaben aus, um den Hash zu bestätigen? Oder führt der erste Knoten, der die Transaktion empfängt, den Transaktions-Hash aus und erstellt ihn, der dann verteilt wird und für den Konsens verwendet wird. Wird der Vertragscode grundsätzlich einmal oder mehrmals für jede Transaktion ausgeführt? Ich gehe davon aus, dass es ersteres ist, wenn auf jedem Knoten die EVM ausgeführt wird. – Reddit: Grundlegende Fragen zum Ethereum EVM und State Storage
Ja, die Antwort ist ganz logisch. Jeder Knoten muss die Ergebnisse einer Transaktion überprüfen, die einen Smart Contract aufruft. Das Ergebnis ist, dass mindestens jeder vollständige Knoten den Code ausführt.
Der Hash der Transaktion ist nicht relevant, bis er in einen Merkle-Baum gesteckt wird. Bei der Durchführung der Ausführung kümmern wir uns nur um die Gasmenge, die übergebenen Daten und den Code des aufgerufenen Vertrags. Wenn die Ausführung abgeschlossen ist, kann der Speicherbaum des Vertrags aktualisiert werden, sodass wir den Merkle-Root-Hash dieses Baums neu berechnen (und jeden anderen Vertrag, der möglicherweise von diesem aufgerufen wurde!).
Quelle .
Jeder Full Node verarbeitet jede Transaktion. Die Bergleute wählen basierend auf dem Gaspreis aus, welche Transaktionen ausgeführt werden sollen. Sobald ein Block abgebaut ist, muss jeder Knoten alle Vertragsausführungen erneut ausführen, um den Block zu verifizieren.
Ja, jeder (vollständige) Knoten führt den Vertragscode für jede Transaktion aus.
Da die Ausführung von Vertragscode relativ teuer ist, tun Knoten dies nur, wenn sie es müssen. Wenn ein Knoten eine Transaktion erhält, führt er zunächst nur ein paar grundlegende Prüfungen durch, wie zum Beispiel:
Wenn die grundlegenden Prüfungen bestanden werden, leitet der Knoten die Transaktion weiter. Mining-Knoten führen dann die relativ teure Aufgabe der Ausführung der Transaktion aus, fügen sie in einen Block ein und erheben die Transaktionsgebühr. Wenn ein (vollständiger) Knoten den Block erhält, führt er die Transaktionen im Block aus, um die Sicherheit und Integrität der von ihm erstellten Blockchain unabhängig zu überprüfen.
In der aktuellen Version führt jeder Knoten jeden Vertrag aus. Da dies nicht skalierbar ist, ist es sehr wahrscheinlich, dass "Sharding" implementiert wird, bei dem einige Zustände nur auf bestimmten Knoten liegen. Auf sie wird dann bei Bedarf asynchron zugegriffen. Daran arbeitet Vitalik derzeit
Zanzu
Gehirn2000
eth
Astralmeister