Signaturschema für P2SH

Ich versuche, eine Rohtransaktion zu signieren, die Ausgabe Nr. 2 (txindex 1) dieser Transaktion ausgibt:267c6d75851efa18afb7edeb2da00c09afc575231db84b3277fc7ea3e174ecbd

Die Ausgabe ist ein 1-von-4-Multisig-P2SH, und ich glaube, ich habe möglicherweise einen Fehler in der Transaktionsstruktur, die zum Generieren der Signatur verwendet wird. Die Signatur, die ich berechne, unterscheidet sich (wie kryptografisch anders) von der, die mir der Bitcoin-Kern mit signrawtransaction gibt.

Aus meiner Sicht ist dies die Transaktionsstruktur, die signiert werden muss:

Version:   01000000
TxIn:      01 bdec74e1a37efc77324bb81d2375c5af090ca02debedb7af18fa1e85756d7c26 01000000 
subScript: 17 a9 14 37fe3f20433380be4c742c978d3a9712c509656e 87 
Sequence:  ffffffff 
TxOut:     OUTPUTDATA
Locktime:  00000000 
Hashtype:  01000000

Der Double-sha256-Wert, der zur Berechnung der Signatur verwendet wird, ist9d384de385512525b4faf08c97651e410e77f2906aa8baeefdee151cc0994655

Aber das Bitcoin-Netzwerk lehnt meine Transaktion ab, die aus dieser Transaktionsstruktur berechnet wurde.

Gerne liefere ich weitere Informationen wie zum Beispiel „redeaseScript“ und „pubKeys/privateKeys“, wenn der Fehler nicht in der Transaktionsstruktur liegen sollte.

Jede Hilfe ist willkommen! Danke!

Antworten (1)

Bei P2SH-Transaktionen ist das RedeemScript das, was in die scriptSig für das Transaktions-Preimage eingefügt wird, nicht der scriptPubKey der Ausgabe.

Ich kann es immer noch nicht zum Laufen bringen. The redeemScript that hashes to "37fe3f20433380be4c742c978d3a9712c509656e" is "512102930a11e92103daefde0d30b552f57d303e94a128e763ca9e69ff2006446934442103e74d2113dec75d75cde09a5b46297b1067e4b8b35e63c4c32b8cdbadfdffda1e2103067fcc39ee36d2417684511d1055fdc7d35e54911cb9de9ae30c988b666f675c2102dfb1c2a1c3456c8cb76714706dba77b3f4e7fe5afffc2503b121323a48ebbdcf54ae", with a length of "8b".
My new preimage is as above but changning subScript to: "4c8b512102930a11e92103daefde0d30b552f57d303e94a128e763ca9e69ff2006446934442103e74d2113dec75d75cde09a5b46297b1067e4b8b35e63c4c32b8cdbadfdffda1e2103067fcc39ee36d2417684511d1055fdc7d35e54911cb9de9ae30c988b666f675c2102dfb1c2a1c3456c8cb76714706dba77b3f4e7fe5afffc2503b121323a48ebbdcf54ae"
Aber ich bekomme immer noch die gleichen Fehlermeldungen und wenn ich die gültige Signatur von Bitcoin Core verwende, kann ich sie nicht mit diesem Preimage validieren.
Was ist der genaue Fehler, den Sie erhalten, wenn Sie versuchen, die Transaktion zu senden?
@Inaki Es ist nützlich, wenn Sie die gesamte serialisierte Transaktion bereitstellen können.
Danke, dass du mir Hilfe anbietest! Ich habe hier eine txt-Nachricht erstellt: pastebin.com/raw/21ucHYW7 Ich habe auch versucht, ein P2SH aus der ausgegebenen Blockchain zu nehmen und zu versuchen, das Preimage manuell neu zu erstellen, um die bereitgestellten Signaturen zu überprüfen. Aber auch das bekomme ich nicht zum Laufen. Wenn jemand Schritt für Schritt zeigen könnte, wie die Signatur für jede ausgegebene P2SH-Ausgabe berechnet wird, würde mir das auch sehr helfen!
Nachdem ich es hundertmal überprüft hatte, sah ich, dass ich in dem von mir hochgeladenen Pastebin vergessen hatte, das OP_0 (0x00) vor der scriptSig hinzuzufügen. Nach dem Hinzufügen funktioniert es! Vielen Dank für den Hinweis, dass das RedeemScript im Preimage verwendet wird! Dies war die endgültig unterzeichnete Transaktion:
0100000001bdec74e1a37efc77324bb81d2375c5af090ca02debedb7af18fa1e85756d7c2601000000d60047304402204887a352b503da6f212c09ed7e973384d7660f62d2319a15b968252012d134810220695130bc101f44348203c51a50e46f37ed4bc5622795f5dfbddef2affb27e2a8014c8b512102930a11e92103daefde0d30b552f57d303e94a128e763ca9e69ff2006446934442103e74d2113dec75d75cde09a5b46297b1067e4b8b35e63c4c32b8cdbadfdffda1e2103067fcc39ee36d2417684511d1055fdc7d35e54911cb9de9ae30c988b666f675c2102dfb1c2a1c3456c8cb76714706dba77b3f4e7fe5afffc2503b121323a48ebbdcf54aeffffffff01c05d00000000000017a914de5462e6e84cdab5064220343b9331a3af6dbbf18700000000