Wenn ein Knoten eine Transaktion erhält, welche Schritte unternimmt er, um diese Transaktion zu verifizieren?

Ich weiß, dass es den Block-Hash verifiziert, indem es jeden Hash der zusammenhängenden Blöcke der Reihe nach berechnet, aber verifiziert es auch den Kontostand jeder Brieftasche, die die Transaktionen sendet? Und führt es die Block-Hash-Berechnung jedes Mal durch oder nur beim Start?

Antworten (3)

Wenn ein Knoten eine Transaktion empfängt, führt er die folgenden Schritte auf hoher Ebene durch.

Induktiv verfügen sie bereits über eine Reihe validierter Transaktionen; diese gehören zu der Blockchain, die sie übernommen haben, sowie zu ihrem aktuellen Mempool . Daraus hat der Knoten ein UTXO extrahiert .

  1. Stellen Sie sicher, dass die Eingaben der neuen Transaktion auf gültige Endpunkte im UTXO verweisen. Dadurch wird sichergestellt, dass das ausgegebene Geld echt ist .

  2. Bestätigen Sie das Erhaltungsgesetz, dh dass die Summe der Werte der Ausgaben die Summe der Werte der Eingaben nicht übersteigt. Dadurch wird sichergestellt, dass kein neues Geld geschöpft wird . Die einzige Ausnahme hiervon ist, wenn eine neue Coinbase-Transaktion mit einem neu geschürften Block empfangen wird; dann kann wirklich neues Geld geschaffen werden.

  3. Stellen Sie für jede Eingabe der neuen Transaktion sicher, dass die Ausführung des scriptPubKey-Skripts, das an den Outpoint angehängt ist, mit dem es sich verbindet, mit den in der scriptSig der Eingabe angegebenen Parametern den Bitcoin -Skriptstapel mit einem Wert ungleich Null am Anfang belässt. Meistens ist dies der Schritt, bei dem die Validierung der digitalen Signatur erfolgt und sichergestellt wird, dass das Geld von seinem rechtmäßigen Eigentümer ausgegeben wird .

Der letzte Schritt oben hat viele Unterfälle und kann auf verschiedene Weise funktionieren, je nachdem, ob die Transaktion beispielsweise einen getrennten Zeugen oder ein angehängtes indirektes Skript beinhaltet .

Schließlich wird, sobald eine Transaktion durch die obigen Schritte validiert wurde, der UTXO des Knotens aktualisiert, damit sie weitere Transaktionen validieren können.

Keines der oben genannten Punkte hat etwas mit der Blockvalidierung zu tun. Die Blockvalidierung ist ein von der Transaktionsvalidierung getrennter Mechanismus. Transaktionen werden validiert, auch wenn sie nicht zu Blöcken gehören. Einer der Schritte zur Blockvalidierung besteht darin, alle Blocktransaktionen mit dem obigen Algorithmus zu validieren. Die Transaktionsvalidierung erfordert keine Berechnung von Block-Hashes.

Wenn ein Knoten eine Transaktion erhält, welche Schritte unternimmt er, um diese Transaktion zu verifizieren?

Diese Referenz mag etwas veraltet (und sogar falsch) sein, aber sie ist ein guter Anfang: https://en.bitcoin.it/wiki/Protocol_rules#.22tx.22_messages

Ich weiß, dass es den Block-Hash verifiziert, indem es jeden Hash der zusammenhängenden Blöcke der Reihe nach berechnet, aber verifiziert es auch den Kontostand jeder Brieftasche, die die Transaktionen sendet?

Kein Sinn in dieser Frage. Das Überprüfen von Transaktionen hat nichts mit dem Überprüfen von Block-Hash zu tun. Und so etwas wie balance of each walletim Bitcoin-Protokoll gibt es nicht.

Und führt es die Block-Hash-Berechnung jedes Mal durch oder nur beim Start?

Das Überprüfen des Hashs des headerBlocks wird nur einmal durchgeführt, wenn der Knoten den Block empfängt. Es muss nicht mehr als einmal überprüft werden, da der Header und sein Hash später nicht mehr geändert werden können.

Ich weiß, dass es den Block-Hash verifiziert, indem es jeden Hash der zusammenhängenden Blöcke der Reihe nach berechnet

Dies allein bestätigt nur, dass die Kette ununterbrochen ist. Der Knoten hasht auch den Block-Header, um zu überprüfen, ob der Hash die Schwierigkeitsanforderungen für diese Blockhöhe erfüllt. Es erstellt auch den Transaktions-Merkle-Baum und überprüft, ob die Merkle-Root im Header mit der Merkle-Root der Transaktionsdaten übereinstimmt.

überprüft es auch den Kontostand jeder Brieftasche, die die Transaktionen sendet

Ein Wallet ist eine Sammlung von Adressen. Bei der Blockchain gibt es kein Wallet, alle Adressen werden einzeln behandelt.

Eine Transaktion verbraucht eine oder mehrere Ausgaben, die zuvor an bestimmten Adressen erstellt wurden. Jede Adresse kann mehreren Ausgängen zugeordnet werden. Beim Ausgeben von Coins muss eine Transaktion auf bestimmte Ausgaben in der Vergangenheit verweisen (identifiziert durch eine Transaktions-ID + Ausgabeindex). Der Knoten überprüft dann, ob diese Ausgaben zuvor nicht von einer anderen Transaktion ausgegeben wurden. Es wird auch überprüft, ob die bereitgestellte scriptSig in der Transaktion die Anforderungen für die Ausgabe einer Ausgabe (normalerweise eine Signatur durch einen bestimmten privaten Schlüssel) erfüllt.

Und führt es die Block-Hash-Berechnung jedes Mal durch oder nur beim Start?

Die Blockverifizierung wird nur durchgeführt, wenn neue Blöcke empfangen werden. Wenn Sie einen Knoten herunterfahren und neu starten, wird er nur eine vollständige Validierung für neue Blöcke durchführen.