I am trying to spend a P2WSH output. Here are the steps I have taken:

  1. I have created a P2WSH output via bitcoin-cli. These are the details of the P2WSH output:
scriptPubKey (asm)
OP_0 OP_PUSHBYTES_32 a2b95877500eb4180401640c5649c55ce578584f865e4f1609f9971ca19d6f40
scriptPubKey (hex)
Spending tx

You can also view it here: https://blockstream.info/testnet/tx/3010534df31914f938014d34d0bd402ce1a741a46624b28abcfd2462126331a5?expand

  1. In order to spend that output, I am first creating a transaction via bitcoin-cli as such:
bitcoin-cli createrawtransaction [{\"txid\":\"3010534df31914f938014d34d0bd402ce1a741a46624b28abcfd2462126331a5\",\"vout\":0}] [{\"tb1q77vr56qx6y5vs2zzt9qc85ge62j30r6vaccfxl\":0.0000007}]

This outputs the following serialization:

  1. I now try to sign the message
bitcoin-cli signrawtransactionwithwallet "0200000001a53163126224fdbc8ab22466a441a7e12c40bdd0344d0138f91419f34d5310300000000000fdffffff014600000000000000160014f7983a6806d128c82842594183d119d2a5178f4c00000000" [{\"txid\":\"3010534df31914f938014d34d0bd402ce1a741a46624b28abcfd2462126331a5\",\"vout\":0,\"scriptPubKey\":\"0020a2b95877500eb4180401640c5649c55ce578584f865e4f1609f9971ca19d6f40\",\"witnessScript\":\"4c02efef754c14f7983a6806d128c82842594183d119d2a5178f4cac\",\"amount\":0.0000007}]

This does not work however, as I always get the following error:

  "hex": "0200000001a53163126224fdbc8ab22466a441a7e12c40bdd0344d0138f91419f34d5310300000000000fdffffff014600000000000000160014f7983a6806d128c82842594183d119d2a5178f4c00000000",
  "complete": false,
  "errors": [
      "txid": "3010534df31914f938014d34d0bd402ce1a741a46624b28abcfd2462126331a5",
      "vout": 0,
      "witness": [
      "scriptSig": "",
      "sequence": 4294967293,
      "error": "Witness program was passed an empty witness"

I do not understand why I receive a Witness program was passed an empty witness error, as I am explicitly passing a witness script in the command line. Is there a bug or what am I missing?

The witness script that was hashed is OP_PUSHDATA1 EFEF OP_DROP OP_PUSHDATA1 f7983a6806d128c82842594183d119d2a5178f4c OP_CHECKSIG which serializes to 4c02EFEF754c14f7983a6806d128c82842594183d119d2a5178f4cac

1 Answer 1


The witness script you are using, 4c02efef754c14f7983a6806d128c82842594183d119d2a5178f4cac is non-standard (in the sense that it does not represent a script descriptor defined by a standard, not in the sense of relay policy). Bitcoin Core won't be able to provide a satisfying witness for a non-standard Script.

If you want to use more advanced, but still standard, scripts with Bitcoin Core have a look at Miniscript.

  • I see! So can you only use standard witness unlock scripts? I thought you'd be free to choose your script in a P2WSH transaction? Dec 3, 2023 at 19:06
  • 2
    @BitcoinQuestioner You can use any script, but that doesn't mean Bitcoin Core knows how satisfy your script. If you use something beyond the supported scripts, you'll need to implement the signing logic yourself. Note however that through miniscript the set of supported scripts has increased a lot (but doesn't include your specific script). Dec 6, 2023 at 3:20
  • I clarified that non-standard in my answer isn't about relay policy. Dec 6, 2023 at 7:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.