bitcoin core – Concern: Taproot Multisig Script Path Spending Fails with “Witness program hash mismatch”

0
5
bitcoin core – Concern: Taproot Multisig Script Path Spending Fails with “Witness program hash mismatch”


I generated a Taproot multisig tackle utilizing Bitcoin Core’s deriveaddresses command with multi_a:

deriveaddresses "tr(tprv8ZgxMBicQKsPdgBQV2Y9EVPSjAGhyZXArhwSzHwnV3FytzPRr8KCR8EKEpLeHbANAncgbc31a6QoXjBTARQiZ2h1Z2NgSCjFYeTqKpAN5Gc/86h/1h/0h/0/1,multi_a(2,tprv8ZgxMBicQKsPdgBQV2Y9EVPSjAGhyZXArhwSzHwnV3FytzPRr8KCR8EKEpLeHbANAncgbc31a6QoXjBTARQiZ2h1Z2NgSCjFYeTqKpAN5Gc/86h/1h/0h/0/2,tprv8ZgxMBicQKsPdgBQV2Y9EVPSjAGhyZXArhwSzHwnV3FytzPRr8KCR8EKEpLeHbANAncgbc31a6QoXjBTARQiZ2h1Z2NgSCjFYeTqKpAN5Gc/86h/1h/0h/0/3))"

Key-path spending works appropriately.

Script-path spending fails with error:

mandatory-script-verify-flag-failed (Witness program hash mismatch)

Code for Establishing Script Path Spending Transaction

last script = Script(script: [
  pk2.toXOnlyHex(),
  'OP_CHECKSIG',
  pk3.toXOnlyHex(),
  'OP_CHECKSIGADD',
  2,
  'OP_NUMEQUAL'
]);

last tackle = pk.toTaprootAddress(scripts: [
  [script]
]);

last sig1 = prv1.signTapRoot(
  tx.getTransactionTaprootDigset(
    txIndex: 0,
    tapleafScript: script,
    scriptPubKeys: [address.toScriptPubKey()],
    quantities: [amount],
  ),
  tweak: false
);

last sig2 = prv2.signTapRoot(
  tx.getTransactionTaprootDigset(
    txIndex: 0,
    tapleafScript: script,
    scriptPubKeys: [address.toScriptPubKey()],
    quantities: [amount],
  ),
  tweak: false
);

last controlBlock = ControlBlock(
  public: pk,
  scripts: toTapleafTaggedHash(script.toBytes())
);

last witness = TxWitnessInput(
  stack: [ sig1, sig2, script.toHex(), controlBlock.toHex()]
);

tx = tx.copyWith(witnesses: [witness]);

Uncooked Transaction

020000000001012543af34ab664d559d793946dd47345d5b6fff9f2e89456e03a5cc8acf57bf0e0100000000ffffffff0210270000000000001976a914e12bdac26ab92798ca56a38fd81bd09406458d5a88acb44e070000000000225120577176e689685df89c26a97cf400f11e33431ace42973389f48b78c14310d13a0440051c660118fbf450304e929389074629303fa4c5777a3e638c1956e64960e885fc5df26b430063e3b57012b6ec69262f30c0e922a2528aeeee472cdcada508eb40dd52984447622f84b473fa92336ebb4c3482c51cf4ad74b6ce50b76441c00cc59d69cab1b0fc76a9627847a87a7a0ca6a37860c15a574e052c675b323f90d64d46200db491b6b7b47d42a78b270a1e395e6b8f62886d4286c39c6111d326cdd31dc6ac20116d5f1c9eee66aef644423bd29e3b7549dd3e3d7e44702f3076305b7fd9d946ba529c41c0ba4e3cf774e82577c830c1e99b4e08ce158644f7ddd04aeca712b0daa72c74c01819cabf8c966ff15284017054ef1ce61b18dd66ccefa4b67941d2c0d04be44200000000

What’s inflicting the witness hash mismatch?
Is my management block appropriate?
Does Bitcoin Core permit spending through script-path for multi_a descriptors?
Am I lacking any required tweaks or flags.
Thanks

LEAVE A REPLY

Please enter your comment!
Please enter your name here