Bitcoin Core Multisig-Signaturreihenfolge

Ich habe eine technische Frage zur signrawtransaction-Funktion im Bitcoin-Kern beim Signieren einer teilweise signierten Transaktion.

Ich habe verschiedene Szenarien getestet und signrawtransaction sortiert die Signaturen im scriptSig immer auf die richtige Weise, unabhängig von der Reihenfolge, in der die Transaktion einzeln signiert wird.

Wird dies erreicht, indem die scriptSig der teilweise signierten Transaktion beim Signieren analysiert und dann jede Signatur in der teilweise signierten Transaktion scriptSig gegen alle öffentlichen Schlüssel im Einlöseskript überprüft und schließlich korrekt bestellt werden? Oder gibt es einen besseren Weg, dies zu tun?

Leider verstehe ich nicht, wie das gemacht wird, indem ich den C-Code von Bitcoin Core lese.

Antworten (1)

Die Signaturen müssen genauso bestellt werden wie öffentliche Schlüssel. Andernfalls ist die Transaktion ungültig. So funktioniert OP_CHECKMULTISIG(VERIFY).

Natürlich können Sie die privaten Schlüssel zum Signieren in beliebiger Reihenfolge verwenden, da Signaturen unabhängig sind.

Danke für deine Antwort. Ich weiß, dass die Reihenfolge im finalen ScriptSig das RedeemScript beachten muss. Aber deserialisiert die Bitcoin Core signrawtransaction-Funktion das teilweise signierte scriptSig und ordnet die Signaturen entsprechend an? Dies geschieht, indem der Verifizierungsalgorithmus tatsächlich für jede bereitgestellte Signatur und jeden möglichen öffentlichen Schlüssel aus dem Einlöseskript ausgeführt wird?
Beispiel: Bei einem 2-von-3-Multisig (A,B,C) signieren wir zuerst die neu erstellte Rohtransaktion mit dem öffentlichen Schlüssel C. Jetzt wird dieser teilweise signierte TX mit dem öffentlichen Schlüssel B signiert. Um die Signatur von zu platzieren B in der teilweise signierten scriptSig, die die Signatur von C enthält, muss signrawtransaction zuerst prüfen, zu welchem ​​​​Public-Key die bereits gegebene Signatur gehört, um zu wissen, ob die Signatur von B vor oder nach platziert werden muss?
>>>...durch tatsächliches Ausführen des Verifizier-Signaturalgorithmus für jede bereitgestellte Signatur und jeden möglichen öffentlichen Schlüssel aus dem Einlöseskript? <<< Ja. github.com/bitcoin/bitcoin/blob/master/src/script/sign.cpp#L228
Tatsächlich können Sie Ihren eigenen Algorithmus zum Signieren von Multisig-Transaktionen implementieren. Sie können einige "Platzhalter" verwenden und diese später durch Signaturen ersetzen. Das Format der rohen unsignierten Transaktion ist keine Konsensregel :)
Danke! Ich implementiere die Signaturfunktion in einem anderen Programm und möchte die Kompatibilität mit der Art und Weise wahren, wie Core Multisig signiert. Ihre Informationen haben mir sehr geholfen!
Permalink für zukünftige Referenz: github.com/bitcoin/bitcoin/blob/…