Welche Informationen sind in einer Transaktion enthalten?

Gemäß den Informationen, die ich hier gefunden habe: https://en.bitcoin.it/wiki/Transaction enthält eine Bitcoin-Transaktion,

FÜR JEDEN EINGANG:

  • Der Hash der eingehenden Transaktion
  • ScriptSig

FÜR JEDEN AUSGANG:

  • Wert
  • ScriptPubKey

Nun meine Frage: Welche Informationen sind implizit in der ScriptSig enthalten? Ich weiß, dass aus ScriptPubKey die Zieladresse berechnet werden kann, aber ich sehe nicht, ob andere Informationen aus dem ScriptSig abgerufen werden können.

Wenn außerdem nur der Hash der eingehenden Transaktion gespeichert wird, wie sucht ein Knoten in der Blockchain nach der eingehenden Transaktion, wenn er die neue Transaktion validieren muss? Und woher weiß es, in welchem ​​Block diese Transaktion enthalten ist? Wenn es nicht weiß, in welchem ​​Block sich diese Transaktion befindet, muss es dann die gesamte Blockchain durchsuchen, nur um es zu finden?

Ihr letzter Absatz ist eine separate Frage und sollte in einem separaten Beitrag stehen. Aber es wurde bereits angesprochen, zB unter bitcoin.stackexchange.com/questions/13731/… (siehe auch Kommentare zur Antwort). Ein vollständiger Knoten hat bereits alle Transaktionen in der Blockchain anhand ihres Hashs (txid) indiziert, sodass er jede beliebige Transaktion finden kann, ohne die gesamte Kette erneut zu scannen.
danke @NateEldredge. Gibt es eine Spezifikation, wie diese Indizierung erfolgt?
Es ist ein Implementierungsdetail der Node-Client-Software. Für Bitcoin Core können Sie en.bitcoin.it/wiki/… sehen.
Das heißt, wenn ein Full Node die Blockchain indiziert, berechnet er auch den Hash jeder Transaktion?
Ja das ist richtig.

Antworten (1)

Welche Daten sind in scriptSig

scriptSigIn einem typischen p2pkh-Szenario , das die meisten Bitcoin-Transaktionen ausmacht, enthält es nur den öffentlichen Schlüssel des Hashs scriptPubKeysowie die Signatur. Das bedeutet, dass außer dem öffentlichen Schlüssel und der Signatur zur Autorisierung der Zahlung keine weiteren Metadaten vorhanden sind.

Bei Nicht-p2pkh-Transaktionen, wie zum Beispiel p2sh-Transaktionen , sind mehr Daten in der enthalten scriptSig. Zum Beispiel werden in p2sh multisig die mehreren öffentlichen Schlüssel, die Multisig autorisieren können, offengelegt. In noch komplizierteren Skripten scriptSigkönnen wichtige Informationen preisgegeben werden, je nachdem, was das scriptPubKeySkript anfordert. Beispielsweise gibt es Snowflake-Transaktionen, scriptSigbei denen bestimmte Rätsel gelöst werden müssen . Diese Transaktionen sind jedoch sehr selten.

Wie Transaktionen validiert werden

Es gibt mehrere Sicherheitsmodelle bei der Validierung einer Transaktion. Die Transaktionsvalidierung ist ein anderer Begriff als die Transaktionsbestätigung, von der Sie sprechen. Die Transaktionsvalidierung fragt, ob eine Transaktion gültig ist – zum Beispiel ob sie das richtige Format hat, dem Kirchhoffschen Gesetz folgt (dh die Summe der Ausgaben ist kleiner als die Summe der Eingaben) und die ausgegebenen Ausgaben nicht doppelt ausgegeben wurden. Die Validierung einer Transaktion erfordert Zugriff auf das aktuelle UTXO .

Die Transaktionsbestätigung hingegen validiert, dass eine Transaktion unter einer bestimmten Menge an Proof-of-Work begraben wurde, zum Beispiel k = 6 Blöcke . Die Überprüfung des Bestätigungsstatus einer Transaktion erfordert nicht das Durchlaufen der gesamten Daten in der Blockchain. Es erfordert nur einen Blick auf die Blockchain-Header. Im SPV-Sicherheitsmodell wird der Transaktionsbestätigungsstatus einfach überprüft, indem überprüft wird, ob er in einen Block aufgenommen und unter einer bestimmten Menge an Arbeitsnachweisen begraben wurde. Dies erfolgt schnell, ohne die gesamten Blockchain-Daten (sondern nur alle Blockchain-Header) zu betrachten, indem ein Proof-of-Inclusion bereitgestellt wird, der aus Merkle-Baumpfad-Geschwistern besteht .

Ok, ich verstehe, wie Merkle Tree funktioniert. aber wie weiß ein Knoten, der prüfen möchte, ob eine bestimmte Eingabe für eine Transaktion noch nicht ausgegeben wurde, in welchem ​​Block sich diese Transaktion befand, wenn die einzige bereitgestellte Information der Hash der Transaktion ist?