Segwit-Transaktion – Nicht-kanonische DER-Signatur

Fehler (beim Senden)
Fehlercode: -26
Fehlermeldung:
64: non-mandatory-script-verify-flag (Non-canonical DER signature)

Transaktion010000000001020dcc23ccdb3665779a7657577cd33c5c0660e969ea2ffaf5438c58306ebc9dd201000000fd880100473044022075e1c8751f948b71a79e864040b8e9698e257f0dd65acb3cb6da852a1da8d96602204767d05ac1b75e1f85963c117e51cc8869711e1fe307b51cfdd7763b39e38aa9014730440220647678c47d4a4be2a5f70044e4cf5bf547fb513311401819a114e5a1e72e642002204e9f3847cb2789493446b96dce62acb7abdad06655aefef084bb0d6a49bc99c001473044022079be75240f2a1519559fc3eacfdbeee123403466879d720b9e7f68a45a2b3bef0220585ea1c34766d57e54103ec5102c8fd0925ee2bc1a847797176da9e878d21448014cad53210289d20d3d6e36f28537af3521ce05548fb16baf7d47ac67fbf318db6ed983b9ba21034712e706c1643ec0e9519edf093578886bac1c9c17893138a76111d9a14a2f1b2102a21047ac1a83c8cce21475240b2107a11d76212573a86f0dffe44cdd326f4dab2103430166298971c6282241ef46e866fa9077b4a48eafe4b370e94aef24050dda13210329446142884a33e6100603c6eead5300ec5cf438437f8374ea76dda2daced12855aeffffffff49508924c21b25ee2ff6aed61ccc202793aa992d3e033f12f2bf4a94d6346d0100000000232200207677cf0e71ff26dc2ac7e6b93a5f6b893d39c05a1367ca100cde7a62713ddb4affffffff0240420f00000000001976a9140d7ca1e17524d6c96209cf503fb053613cecf8f688acc0b606000000000017a914fa1cee87827866df00431b5c9a3506b5e31ef4ed87000500473045022100cd569e7f8e5fb6490ef3240d68abdd147f0c3ce4e77bcfd59f587b9a14848bdb02207fe31882d22518af84d3961809b6133c06b34ce6f91c1e579dcff0c58b7519d347304502210099699d11f3fa427c2739580de08fc3a305202a6b1f39c01d8f82e6ad8a9b191902205153041c9a291b81c3ef94cba9d22f3a8df6ee45faab13407ec8a56843051043483045022100b57e36875906add1edeb57badc92f5b4287f9e33b609fad5ae35912cdc0596ff022073338c6e14637dfc11abdb18c2396a58b8e537670d06084981799f64bcd7c3f401ad53210289d20d3d6e36f28537af3521ce05548fb16baf7d47ac67fbf318db6ed983b9ba21034712e706c1643ec0e9519edf093578886bac1c9c17893138a76111d9a14a2f1b2102a21047ac1a83c8cce21475240b2107a11d76212573a86f0dffe44cdd326f4dab2103430166298971c6282241ef46e866fa9077b4a48eafe4b370e94aef24050dda132102c877ef10e8dc5ca83f06263971f133f71e01e9b2a91a4184eb730026f2c3968f55ae00000000

Frage
Was ist hier mit den Signaturen falsch?

Meine Gedanken und ein bisschen Kontext
Also im Grunde haben wir hier zwei Eingaben. Beide stammen von Multisig-Adressen. Der Unterschied besteht darin, dass der zweite nur P2WSH ist . Der erste ist höchstwahrscheinlich in Ordnung. Das zweite ist meine Sorge. Schauen wir uns also Zeugensignaturen für die zweite Eingabe an.

Wir haben drei Unterschriften:

  • 3045022100cd569e7f8e5fb6490ef3240d68abdd147f0c3ce4e77bcfd59f587b9a14848bdb02207fe31882d22518af84d3961809b6133c06b34ce6f91c1e579dcff519d3b
  • 304502210099699d11f3fa427c2739580de08fc3a305202a6b1f39c01d8f82e6ad8a9b191902205153041c9a291b81c3ef94cba9d22f3a8df6ee45faab13407ec3a51084.51084.0
  • 3045022100b57e36875906add1edeb57badc92f5b4287f9e33b609fad5ae35912cdc0596ff022073338c6e14637dfc11abdb18c2396a58b8e537670d06084981799f34bcd7

Die ersten beiden werden von Hardware Wallets generiert. Der dritte wird von Bitcoin Core erstellt. Im Grunde behauptet also jede dieser Signaturen, 0x45 (69 Bytes lang) zu sein. Aber der dritte hat zusätzlich 01 am Ende.

Fragen
Ist dies der Grund für den Fehler?
Wenn nicht, was ist dieses zusätzliche Byte?
Irgendwelche Hinweise, was mit dieser Transaktion falsch ist?

Antworten (1)

Das "01"-Byte am Ende ist das Byte vom Sighash-Typ (insbesondere bedeutet 01 SIGHASH_ALL, was anzeigt, dass alle Eingänge und Ausgänge vorzeichenbehaftet sind). Ein solches Byte ist für alle Signaturen in Bitcoin-Skripten erforderlich (sowohl in Legacy- als auch in Segwit-Signaturen). Dieses Byte ist jedoch Teil der DER-codierten Signatur; es wird daran angehängt.

Vermutlich erzeugt Ihre Hardware-Wallet die DER-Signatur ohne den Sighash-Typ, und die Software, die Sie zum Erstellen der eigentlichen Transaktion verwenden, ist dafür verantwortlich, sie hinzuzufügen.

Ich habe diese Transaktion manuell zusammengestellt, und es war meine Schuld, dass ich den Unterschriften keine Seufzer hinzugefügt habe. Die Transaktion ist immer noch falsch, aber zumindest tritt ein anderer Fehler auf :) Scheint, dass die generierten Signaturen einfach falsch sind. Aber Ihre Antwort löst das hier beschriebene Problem. Danke schön.