Wenn Smart Contract jedes Mal ausgeführt wird, wird die entsprechende Aktion wiederholt?

Angenommen, ich habe einen intelligenten Vertrag, um 0,01 Eth an eine vordefinierte Adresse zu verdrahten, wenn er ausgelöst wird. Der Smart Contact wird ausgeführt, wenn die Transaktion vom Miner in einen Block aufgenommen wird und die 0,01 Eth gesendet werden sollen. Ich verstehe, dass der Smart Contract immer dann ausgeführt wird, wenn die Transaktion von anderen Nodes validiert wird. Meine Frage ist, dass die Verkabelung per Smart Contract für jede Validierung erfolgt. Es wäre ein großes Problem, wenn dies der Fall wäre. Vielen Dank.

Antworten (2)

Wenn Sie eine einzelne Transaktion an das Netzwerk senden, wird diese nur einmal ausgeführt.

Es ist möglich, dass mehrere Nodes dieselbe Transaktion minen, was dazu führt, dass sie unterschiedliche Blöcke haben, aber das Netzwerk ist darauf ausgelegt, diese Situationen zu bewältigen, indem es die Kette mit der höchsten Blocknummer mit Peers teilt und andere Nodes diese Kette als die eine validieren und akzeptieren gültige Blockchain.

Selbst wenn Ihre Transaktion also mehrmals abgebaut würde, würde dies auf jedem dieser Knoten nur eine Ausführung Ihrer Funktion verursachen, und am Ende wird es nur eine solche Kette mit einer solchen Ausführung geben.

Sie können sich das genauso vorstellen wie eine Überweisung zwischen zwei Ethereum-Konten. Was Sie erwarten würden, wird passieren, auch wenn es Tausende von Knoten geben kann, die alle versuchen, Ihre Transaktion zu verarbeiten.

Ich hoffe, das ist klar genug.

Es kann hilfreich sein, anzugeben, was damit gemeint ist, dass jeder Knoten die Transaktion unabhängig ausführt.

Diese Knoten überprüfen und berechnen den Vertragscode und die Transaktion, damit sie einen Konsens über das Ergebnis erzielen können. Dies ist ganz anders als viele tausend Computer, die einzigartige Transaktionen erstellen.

  • Angenommen, Alice beginnt mit 10 und Bob mit 20.
  • Angenommen, Alice unterzeichnet eine Transaktion, um 5 an Bob zu senden.

Jeder Knoten hat den Anfangszustand. Sie kennen die Salden beider Konten bei einer bestimmten Blockhöhe. Alle Knoten "sehen" die Transaktion auf derselben Blockhöhe. Dies gilt auch dann, wenn ein Knoten im Rückstand ist – schließlich synchronisiert er sich und sieht dieselben Transaktionen in derselben Reihenfolge wie alle anderen.

Jeder Knoten wird unabhängig die Vertragsfunktion ausführen, die (vermutlich) überprüft, ob Alice genug ist, Alice hat die Transaktion tatsächlich unterzeichnet, und dann sollten beide Konten angepasst werden. Wenn das vorbei ist.

  • Alice hat 5
  • Bob hat 25

Jeder Knoten führt selbstständig den Vertrag aus, um für sich selbst zu bestimmen, wie der neue Zustand nach der Transaktion aussieht. Der Konsens ist nicht unbedingt universell oder augenblicklich, aber er konvergiert schließlich zu einer Interpretation, die weithin als Wahrheit akzeptiert wird. Die häufigste Abweichung ist eine leicht unterschiedliche Transaktionsreihenfolge (keine Duplizierung), und dies wird für Sie auf Protokollebene ausgebügelt.

Ich hoffe es hilft.