Wie die Transaktion von Minern bestätigt wird, wenn InputScript nur die Sig hat

Bitte helfen Sie mir zu verstehen, wie der Bitcoin-Client TX mit einem Eingabeskript überprüft, das nur aus der Sig besteht.

Zum Beispiel 6D5DF6C0D66CFFC25CC1ABA3655952D7B081ED4E9EA3B70FCD964FDBBA01E91Ehat TX eine Eingabe von der D9A9C88110775B196CDAF6FC8113B33547C8E33E68519F60D9C9FF306E096473Transaktion (8 Ausgaben) mit Input Script 4730440220797681C6711BB3D97AE373FC5CFF47F06EEC928DD46B8A9892D92C30953C9DF3022079C36E9A4C32D4E36B9E3ACCED0D40D70D8F90890C0E9F8F4F9AC083AFFD21B301.

Dieses Skript hat nur die Sig (r,s) und keine Darstellung des öffentlichen Schlüssels oder der Adresse.

So wie ich das verstehe Sigschafft das mit UnsignedTX doubleSHA256 hash, Random Numberund Private Key.

SigÜberprüfung mit UnsignedTX doubleSHA256 hashund a Public Key, aber hier ist nichts davon.

Auch die Frage lautet "Wo wird gespeichert UnsignedTX doubleSHA256 hash?". Weil es nicht der Transaktions-Hash ist, weil TX-Hash für die signierte Transaktion ist.

Antworten (1)

Die Transaktionsverifizierung erfordert die vorherigen Transaktionsausgaben, von denen die Transaktion ausgegeben wird. Das Ausgabeskript der vorherigen Transaktionsausgaben wird für jede Eingabe abgerufen. Das Eingabeskript wird zunächst durch den Skriptinterpreter geführt. Der resultierende Stack wird dann als Anfangszustand für den Durchlauf des Ausgabeskripts der vorherigen Transaktionsausgabe durch den Skriptinterpreter verwendet.

Für die bestimmte Transaktion, die Sie ausgewählt haben, hat das vorherige Transaktionsausgabeskript die Form

<pubkey> OP_CHECKSIG

und die Eingabe hat die Form

<sig>

Das bedeutet, dass die Signatur zuerst auf den Stapel geschoben wird. Dann wird der öffentliche Schlüssel auf den Stack geschoben und dann OP_CHECKSIGauf die beiden Stack-Elemente angewendet. Der öffentliche Schlüssel befindet sich im Ausgabeskript. Für andere Ausgabetypen wird der öffentliche Schlüssel im Eingabeskript als Teil der Ausgaben bereitgestellt.

Der als Nachricht signierte Hash wird aus der Ausgabentransaktion selbst erzeugt. Es enthält Daten, die in der Ausgabentransaktion und dem vorherigen Transaktionsausgabeskript bereitgestellt werden, damit es on-the-fly generiert werden kann. Sie können diese Frage überprüfen und beantworten. Wie kann ich feststellen, welchen Teil des vorherigen tx ich zum Signieren eines alten gegebenen tx mit dem Hash erstellen muss? die aufschlüsselt, wie dieser Hash für Nicht-Segwit-Eingaben generiert wird.

Wie ich aus Ihrer Antwort verstehe, wird die unsignierte Transaktion im laufenden Betrieb generiert und dann doppelter sha256-Hash für die Sig-Prüfung erstellt?
Ja. Das Sighash-Preimage wird erstellt (modifizierte Version der unsignierten Transaktion) und mit SHA256d gehasht. Dieser Hash wird entweder signiert oder verifiziert, je nachdem, was Sie tun möchten.