Validierungsprozess für Bitcoin-Transaktionen

Ich habe ein allgemeines Verständnis für Bausteine. Aber ich hoffe, jemand kann die Details / Lücken ausfüllen. Können Sie auch korrigieren, wenn etwas nicht stimmt? Danke.

Szenario:

  1. Bitcoin-Transaktionen werden an das Bitcoin-Netzwerk gesendet.
  2. Knoten empfangen die Transaktionen.
  3. Jeder Node legt die Transaktionen in seinem eigenen internen Mempool ab – oder ist es ein Netzwerk-Mempool, aus dem alle Nodes Transaktionen ziehen?
  4. Irgendwann beginnen einige Knoten mit dem Mining (Hashing, um den richtigen Hash mit führenden Nullen zu finden). Wann fängt das an? Ich nehme an, so schnell wie möglich, da es ein Rennen ist. Dann werden die Daten also nicht unbedingt in einem vollständig erstellten Block verwendet, oder?
  5. Irgendwann füllen die Mining-Knoten einen Block mit Transaktionen aus Mempool (sie ziehen die mit den höchsten Gebühren). Jeder Node validiert jede Transaktion, die er in seinen Block einfügt, anhand der gesamten Blockchain.
  6. Wenn ein Knoten einen Gewinner-Hash findet, gibt er die Gewinner-Parameter an das Netzwerk weiter.
  7. Das Netzwerk kann den Hash einfach anhand der Parameter (Datensatz, Nonce-Wert usw.) überprüfen, die der Gewinnerknoten aussendet.

Also hier bin ich etwas unklar. Wie/wann werden die Transaktionen im Gewinnerblock vom Rest des Netzwerks verifiziert? Ist es während der Zeit, in der sie den gewinnenden Hash verifizieren? Überprüfen sie auch, ob alle Transaktionen zu diesem Zeitpunkt gut sind?

Wie viele Nodes müssen den gewinnenden Hash genehmigen/verifizieren, bevor er als nächster hinzuzufügender Block in das Bitcoin-Netzwerk aufgenommen wird?

Danke.

Antworten (3)

Alles, was MCCCS geschrieben hat, ist gut, aber nur um Ihre letzte Frage zu klären:

Wie viele Nodes müssen den gewinnenden Hash genehmigen/verifizieren, bevor er als nächster hinzuzufügender Block in das Bitcoin-Netzwerk aufgenommen wird?

Diese Frage ist leicht fehlgeleitet: Es gibt kein „Akzeptieren eines Blocks in das Bitcoin-Netzwerk“, da dies davon ausgeht, dass es eine netzwerkweite Akzeptanzschwelle gibt, die erreicht werden muss, oder eine Art zentraler Ja/Nein-Schalter für die Annahme eines Blocks.

Die Realität ist, dass das Netzwerk aus unabhängig agierenden Knoten besteht . Jeder Knoten entscheidet für sich selbst, ob ein Block gültig ist oder nicht, und durch diese „Konsensregeln“ einigt sich das Netzwerk zufällig darauf, was die längste (am meisten funktionierende) Blockchain ist. Sobald ein gültiger Block gesendet wurde, überprüft jeder Knoten unabhängig, ob er gültig ist, und fügt ihn dann zu seiner lokalen Kopie der Blockchain hinzu, wenn er alle Tests besteht. Das Netzwerk ist so konzipiert, dass wir erwarten, dass alle Knoten, die diese Konsensregeln befolgen, im Konsens bleiben, auch wenn sie unabhängig handeln.

3: Jeder Knoten hat seinen eigenen Mempool. Jeder Knoten validiert die neuen Transaktionen, die er erhält, wenn er sie erhält.

4-5-6: Nodes minen nicht, Miner schon. Bergleute hören nie auf und holen sich alle [irgendein Intervall] eine neue Blockvorlage vom Knoten des Pool-Betreibers, deren Merkle-Hash neue Transaktionen enthält. Wenn sie einen Block finden, wird er veröffentlicht und Transaktionen in diesem Block können nicht geändert werden.

F: Wenn Knoten neue Blöcke erhalten, überprüfen sie ihren Hash (ob er niedriger als die Zielschwierigkeit ist), den darin enthaltenen Hash des vorherigen Blocks und die darin enthaltenen Transaktionen. (Beachten Sie, dass die meisten akzeptierten Transaktionen von jedem Knoten zweimal empfangen werden, was Compact Blocks] lösen soll.)

F: Es spielt keine Rolle, Blöcke breiten sich schnell aus, und selbst wenn ein (falsch konzipierter) Client sie ablehnt, ist dieser Block immer noch Teil der Blockchain (da er gültig ist und es keine konkurrierenden Blöcke gibt).

Ich denke, wenn Sie am Anfang zwei weitere Schritte hinzufügen, ist es sinnvoller.

  1. Transaktionserstellung. (wenn Benutzer A eine Münze an Benutzer B sendet)
  2. Transaktionsüberprüfung.

Die Transaktion wird an die benachbarten Knoten übertragen und diese Knoten verifizieren die Transaktion. Wenn die Transaktion gültig ist, übertragen diese Knoten sie weiter an ihre Nachbarknoten im Netzwerk. Wenn die Transaktion nicht gültig ist, wird sie nicht in das Netzwerk eingetragen.