Bitte helfen Sie mir zu verstehen, wie der Bitcoin-Client TX mit einem Eingabeskript überprüft, das nur aus der Sig besteht.
Zum Beispiel 6D5DF6C0D66CFFC25CC1ABA3655952D7B081ED4E9EA3B70FCD964FDBBA01E91E
hat TX eine Eingabe von der D9A9C88110775B196CDAF6FC8113B33547C8E33E68519F60D9C9FF306E096473
Transaktion (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 Sig
schafft das mit UnsignedTX doubleSHA256 hash
, Random Number
und Private Key
.
Sig
Überprüfung mit UnsignedTX doubleSHA256 hash
und 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.
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_CHECKSIG
auf 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.
Denis Leonow
Andreas Chow