Wie ist die Reihenfolge der Vorgänge, um eine Transaktion zu verifizieren?

Ich frage nicht, ob alle Knoten jede Transaktion ausführen. Ich bitte um eine grobe zeitliche Abfolge der Ereignisse. Zum Beispiel im Fall eines Double Spend-Versuchs, und der Double Spender konspiriert mit dem Miner, der den nächsten Block hinzufügt. An welchem ​​Punkt überprüft ein zufälliger Knoten im Netzwerk, der am Mining beteiligt ist, dass dies falsch war, und kennzeichnet das Problem?
- Ist es nur der nächste Miner, der einen Block hinzufügen darf, der dieses Problem erkennt?
- Verifiziert / führt jeder Knoten die Transaktion nur aus, wenn er das nächste Mal am Mining teilnimmt, oder nur, wenn er den PoW löst und einen neuen Block hinzufügen kann?
- Das nächste Mal, wenn sie online sind?
- Gibt es einen Auslöser, sodass ein vollständiger Knoten, der möglicherweise inaktiv ist, den Vertragscode ausführen und verifizieren muss?

Was ist, wenn die nächsten N Miner ebenfalls konspirieren? Ist nur ein Miner erforderlich, um die Transaktion als falsch oder N+1 zu kennzeichnen?

Offensichtlich können nicht alle Nodes diese Transaktion ausführen, bevor ein weiterer Block erstellt wird, also hoffe ich, dass es eine grobe Zeitachse der Ereignisse gibt.

Ein Full Node sollte jede Transaktion verifizieren, die in einem neuen Block erscheint.
Ich bitte ausdrücklich um die Reihenfolge der Operationen und einen Zeitplan. Was ist, wenn ein Knoten offline geht? Was ist, wenn ein Knoten einen Computer einfriert? Alle diese Knoten können nicht synchron sein
Wenn sich ein Knoten zum ersten Mal verbindet, erhält er Blöcke von anderen Knoten. Für jeden Block führt es zunächst grundlegende Überprüfungen durch, z. B. ob der übergeordnete Block bereits vorhanden ist, die Blockschwierigkeit usw. Wenn die grundlegenden Überprüfungen bestanden werden, führt es die Transaktionen in der Reihenfolge aus, in der sie im Block vorhanden sind. Nach Durchführung aller Transaktionen wird überprüft, ob der resultierende Endzustand korrekt im Blockheader gespeichert ist. Wenn alles in Ordnung ist, wird der Block akzeptiert.
Es gibt einige Modi wie den schnellen Modus von Geth, der die Transaktionsausführung alter Blöcke überspringt und sie nur für neuere Blöcke ausführt. Dies geschieht, um Zeit und Speicherplatz zu sparen.
Ich bekomme immer noch keine Fernantwort auf eine beispielhafte Reihenfolge der Operationen. Wenn ich einen Smart Contract habe – und ich erwarte, dass er auf jedem Knoten ausgeführt wurde, wann wurde er auf 99 % der Knoten ausgeführt? Gibt es einen Hinweis? Überprüfen die Nodes die Transaktion vor dem Mining für die nächste Blockaddition? Nachdem sie den Pow gewonnen haben? Das nächste Mal, wenn sie tatsächlich an einer Transaktion in der Kette teilnehmen? Hintergrundaufgabe, die Blöcke verifiziert, auch wenn sie nicht aktiv abgebaut werden?
Die genaue Bedeutung ist etwas anders als erwartet. Es muss nicht auf 99 % der Knoten ausgeführt werden. Stattdessen muss es auf 50% + 1 der Miner ausgeführt werden (nicht in Bezug auf die Anzahl der Miner, sondern auf die gesamte Hashing-Leistung). Nur Bergleute haben Anreize für die Ausführung von Verträgen, und sie sollten abgebaute Transaktionen überprüfen, bevor sie einen neuen Block abbauen, oder sie verlieren möglicherweise die Blockbelohnung, wenn der vorherige Block ungültig war.
Andere Nicht-Mining-Knoten müssen keine Transaktionen ausführen, aber das Akzeptieren eines ungültigen Blocks kann zu Problemen führen. Weil andere Knoten Knoten auf die schwarze Liste setzen, die ungültige Blöcke verbreiten. Der vollständige Knoten kann also trotzdem Verträge ausführen, um zu überprüfen, ob der Block gültig ist.
Das Funktionsprinzip ist ganz anders und schwer zu akzeptieren. Q1 - jeder Knoten entscheidet für sich. Q2 – Doppelte Ausgaben werden nicht erkannt. Es ist nie passiert. Jeder Knoten arbeitet mit einer eindeutigen Reihenfolge von Ereignissen, an die er glaubt. F3: Jeder Full Node berechnet jede Transaktion, nicht nur Miner. F4: Siehe F3. Q5: Ein Block kommt mit einer geordneten Transaktionsliste an. Diese Transaktionen müssen ausgewertet werden. Q6: Es ist nicht linear. Alle Bergleute konkurrieren um das Privileg, Transaktionen für einen kurzen Zeitraum zu bestellen. Die Mehrheit bestimmt die Wahrheit. Q7: Nicht offensichtliche und falsche Annahme. Ja, das tun sie.

Antworten (2)

Wenn ein Miner das Proof-of-Work-Puzzle für den Block löst, den er/sie abbaut, fügt er es in den Header des Blocks ein und gibt es an die anderen Knoten weiter, die er kennt. Sie könnten andere Bergleute oder andere Nicht-Bergbau-Vollknoten sein.

Der neue Block wird nun propagiert. Die Knoten, die den neuen Block erhalten, müssen ihn validieren.

Non-Mining Full Nodes werden Folgendes tun:

  • Überprüfen Sie, ob das PoW im Blockheader gültig ist;
  • Den Block an Peer-Knoten weitergeben;
  • Prüfen Sie, ob die Zustandsübergänge im Block gültig sind.

Mining-Knoten tun dasselbe, aber in einer etwas anderen Reihenfolge, sodass sie beim nächsten Block schneller mit dem Mining beginnen können:

  • Überprüfen Sie das PoW im Blockheader;
  • Prüfen Sie, ob die Zustandsübergänge im Block gültig sind;
  • Geben Sie den Block an Peer-Knoten weiter.

Das Überprüfen der Zustandsübergänge in einem vollen 8-Mgas-Block dauert auf einem anständigen Computer in der Größenordnung von 100 bis 200 ms.

Zu deinen konkreten Fragen.

Ich frage nicht, ob alle Knoten jede Transaktion ausführen.

Sie tun dies, um sicherzustellen, dass ihr Zustand intern konsistent ist. (Es gibt tatsächlich spieltheoretische Argumente, die dagegen sprechen. Ich habe gehört, dass einige Miner nicht wirklich prüfen, ob der Inhalt des Blocks gültig ist, und nur davon ausgehen, dass ihnen dies einen Vorsprung beim Mining des nächsten Blocks verschaffen soll.)

An welchem ​​Punkt überprüft ein zufälliger Knoten im Netzwerk, der am Mining beteiligt ist, dass dies falsch war, und kennzeichnet das Problem?

Es sollte von der ersten Gruppe von Peers des Miners gekennzeichnet werden, die die Zustandsübergänge validieren sollten.

Ist es nur der nächste Miner, der einen Block hinzufügen darf, der dieses Problem erkennt?

Nein, wie oben.

Verifiziert / führt jeder Knoten die Transaktion nur aus, wenn er das nächste Mal am Mining teilnimmt, oder nur, wenn er den PoW löst und einen neuen Block hinzufügen kann?

Nein, wenn sie einen neu propagierten Block erhalten.

Das nächste Mal, wenn sie online sind?

Wenn sie offline gehen, wenn sie wieder online gehen und bevor sie wieder mit dem Mining beginnen, müssen sie sich wieder mit dem Kettenkopf synchronisieren. Die Validierung ist Teil dieser Synchronisierung.

Gibt es einen Auslöser, sodass ein vollständiger Knoten, der möglicherweise inaktiv ist, den Vertragscode ausführen und verifizieren muss?

Der Auslöser ist, dass der neue Block darauf geschoben wird.

Offensichtlich können nicht alle Nodes diese Transaktion ausführen, bevor ein weiterer Block erstellt wird, also hoffe ich, dass es eine grobe Zeitachse der Ereignisse gibt.

Theoretisch tun sie das, sonst wissen sie nicht, dass sie auf einem gültigen Zustand aufbauen.

Die Transaktionen werden nur während des Minings überprüft, also von den Nodes, die minen. Alle anderen Knoten prüfen, wenn sie den Block erhalten, ob die Lösung entsprechend der Schwierigkeit für den Block richtig ist. Sie verifizieren also nur die vom Miner bereitgestellte Lösung. Wenn es richtig ist, wird es akzeptiert, wenn nicht, wird es abgelehnt.

Mehr zur Blockvalidität finden Sie im Yellow Paper, Teil 4.4.2: http://yellowpaper.io/

Bezüglich der Hinrichtungsreihenfolge bin ich mir überhaupt nicht sicher, da ich lieber nichts sage. Sie sollten sich dazu auch das Yellow Paper ansehen: http://yellowpaper.io/

Auf dieser Grundlage hat sich niemand mit meiner Frage befasst. Das gelbe Papier ist diesbezüglich nicht offensichtlich, weshalb ich die Frage hier von jemandem stelle, der sich damit auskennt.