Bitcoin

json rpc – How can I sign a custom tabscript leaf using the bitcoind `walletprocesspsbt` rpc endpoint?

There is tabroot output available through three different script paths: Typically all of these script paths are some kind of multi-signature.

My wallet has a key that is part of a multi-signature. The key was generated using: getnewaddress after that getaddressinfo rpc endpoint.

Now I want to create a signature for one of those spend paths using: walletprocesspsbt endpoint.

The current status is that you can do that with a simple script.

For example, if I have a script in my script path of the form:

<key1> OP_CHECKSIGVERIFY <key2> OP_CHECKSIG

where key1 It’s controlled by my wallet, so I can get signatures using the following psbt:


  "tx": 
    "txid": "e576917eea32cb8d98daf233bfbfa94b6b9ba450cb18e255bbd826a7862bcde1",
    "hash": "e576917eea32cb8d98daf233bfbfa94b6b9ba450cb18e255bbd826a7862bcde1",
    "version": 2,
    "size": 82,
    "vsize": 82,
    "weight": 328,
    "locktime": 0,
    "vin": (
      
        "txid": "8821c890aea7bf0c850a190a56841d0a8868aab71062a8b37b59b07db098909d",
        "vout": 0,
        "scriptSig": 
          "asm": "",
          "hex": ""
        ,
        "sequence": 0
      
    ),
    "vout": (
      
        "value": 0.00098000,
        "n": 0,
        "scriptPubKey": 
          "asm": "0 7238e566467d97144f21a0698b3e5b4d5c3c4765",
          "desc": "addr(bcrt1qwguw2ejx0kt3gnep5p5ck0jmf4wrc3m9hq96m4)#6azty5uq",
          "hex": "00147238e566467d97144f21a0698b3e5b4d5c3c4765",
          "address": "bcrt1qwguw2ejx0kt3gnep5p5ck0jmf4wrc3m9hq96m4",
          "type": "witness_v0_keyhash"
        
      
    )
  ,
  "global_xpubs": (
  ),
  "psbt_version": 0,
  "proprietary": (
  ),
  "unknown": 
  ,
  "inputs": (
    
      "witness_utxo": 
        "amount": 0.00100000,
        "scriptPubKey": 
          "asm": "1 e20f096ae701b95fdb45f76b8e5d89882bedfae1fc9ffc343b1539825a15a1c4",
          "desc": "rawtr(e20f096ae701b95fdb45f76b8e5d89882bedfae1fc9ffc343b1539825a15a1c4)#865n9v42",
          "hex": "5120e20f096ae701b95fdb45f76b8e5d89882bedfae1fc9ffc343b1539825a15a1c4",
          "address": "bcrt1pug8sj6h8qxu4lk697a4cuhvf3q47m7hplj0lcdpmz5ucyks458zq398wqk",
          "type": "witness_v1_taproot"
        
      ,
      "witness_script": 
        "asm": "2283868d5ee6960d988c91ff8f1efcd10676dc7b9af2c5c3197a9c1dee537fb5 OP_CHECKSIGVERIFY 5ef18b0ee964644e719ebd3deed6f19ed16a7b66d119446b6a7e4a71130fe223 OP_CHECKSIG",
        "hex": "202283868d5ee6960d988c91ff8f1efcd10676dc7b9af2c5c3197a9c1dee537fb5ad205ef18b0ee964644e719ebd3deed6f19ed16a7b66d119446b6a7e4a71130fe223ac",
        "type": "nonstandard"
      ,
      "taproot_scripts": (
        
          "script": "202283868d5ee6960d988c91ff8f1efcd10676dc7b9af2c5c3197a9c1dee537fb5ad205ef18b0ee964644e719ebd3deed6f19ed16a7b66d119446b6a7e4a71130fe223ac",
          "leaf_ver": 192,
          "control_blocks": (
            "c150929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0f5e193bf9eebda98862ea7c29c86a29d2124c907705b05f20b93218a471226473e2f5345f81ebc365f9dcf17f8bb49b777df103efab236de5598d01ea84c54e1"
          )
        
      ),
      "taproot_bip32_derivs": (
        
          "pubkey": "5ef18b0ee964644e719ebd3deed6f19ed16a7b66d119446b6a7e4a71130fe223",
          "master_fingerprint": "00000000",
          "path": "m",
          "leaf_hashes": (
          )
        
      ),
      "taproot_internal_key": "50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0",
      "taproot_merkle_root": "04c239dd79e3787440cb0cb7b35c211b122db9bf54d953ffa0b548bf39ddd1e9"
    
  ),
  "outputs": (
    
    
  ),
  "fee": 0.00002000

After signing I get psbt with new fields. taproot_script_path_sigs:


  "tx": 
    "txid": "e576917eea32cb8d98daf233bfbfa94b6b9ba450cb18e255bbd826a7862bcde1",
    "hash": "e576917eea32cb8d98daf233bfbfa94b6b9ba450cb18e255bbd826a7862bcde1",
    "version": 2,
    "size": 82,
    "vsize": 82,
    "weight": 328,
    "locktime": 0,
    "vin": (
      
        "txid": "8821c890aea7bf0c850a190a56841d0a8868aab71062a8b37b59b07db098909d",
        "vout": 0,
        "scriptSig": 
          "asm": "",
          "hex": ""
        ,
        "sequence": 0
      
    ),
    "vout": (
      
        "value": 0.00098000,
        "n": 0,
        "scriptPubKey": 
          "asm": "0 7238e566467d97144f21a0698b3e5b4d5c3c4765",
          "desc": "addr(bcrt1qwguw2ejx0kt3gnep5p5ck0jmf4wrc3m9hq96m4)#6azty5uq",
          "hex": "00147238e566467d97144f21a0698b3e5b4d5c3c4765",
          "address": "bcrt1qwguw2ejx0kt3gnep5p5ck0jmf4wrc3m9hq96m4",
          "type": "witness_v0_keyhash"
        
      
    )
  ,
  "global_xpubs": (
  ),
  "psbt_version": 0,
  "proprietary": (
  ),
  "unknown": 
  ,
  "inputs": (
    
      "witness_utxo": 
        "amount": 0.00100000,
        "scriptPubKey": 
          "asm": "1 e20f096ae701b95fdb45f76b8e5d89882bedfae1fc9ffc343b1539825a15a1c4",
          "desc": "rawtr(e20f096ae701b95fdb45f76b8e5d89882bedfae1fc9ffc343b1539825a15a1c4)#865n9v42",
          "hex": "5120e20f096ae701b95fdb45f76b8e5d89882bedfae1fc9ffc343b1539825a15a1c4",
          "address": "bcrt1pug8sj6h8qxu4lk697a4cuhvf3q47m7hplj0lcdpmz5ucyks458zq398wqk",
          "type": "witness_v1_taproot"
        
      ,
      "witness_script": 
        "asm": "2283868d5ee6960d988c91ff8f1efcd10676dc7b9af2c5c3197a9c1dee537fb5 OP_CHECKSIGVERIFY 5ef18b0ee964644e719ebd3deed6f19ed16a7b66d119446b6a7e4a71130fe223 OP_CHECKSIG",
        "hex": "202283868d5ee6960d988c91ff8f1efcd10676dc7b9af2c5c3197a9c1dee537fb5ad205ef18b0ee964644e719ebd3deed6f19ed16a7b66d119446b6a7e4a71130fe223ac",
        "type": "nonstandard"
      ,
      "taproot_script_path_sigs": (
        
          "pubkey": "5ef18b0ee964644e719ebd3deed6f19ed16a7b66d119446b6a7e4a71130fe223",
          "leaf_hash": "cc54275b75e262eb3da81db55f4692a4b6052cfb71cc00f88ef54c016c911216",
          "sig": "c2504a8574137f7b25797439893ab16efe6ec2424b60dc3f9a896c6cd0cbed7369411dbdbddcbe88f54f041dda60911a0636021b76f9f9f2680666dedd9a34a4"
        
      ),
      "taproot_scripts": (
        
          "script": "202283868d5ee6960d988c91ff8f1efcd10676dc7b9af2c5c3197a9c1dee537fb5ad205ef18b0ee964644e719ebd3deed6f19ed16a7b66d119446b6a7e4a71130fe223ac",
          "leaf_ver": 192,
          "control_blocks": (
            "c150929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0f5e193bf9eebda98862ea7c29c86a29d2124c907705b05f20b93218a471226473e2f5345f81ebc365f9dcf17f8bb49b777df103efab236de5598d01ea84c54e1"
          )
        
      ),
      "taproot_bip32_derivs": (
        
          "pubkey": "5ef18b0ee964644e719ebd3deed6f19ed16a7b66d119446b6a7e4a71130fe223",
          "master_fingerprint": "00000000",
          "path": "m",
          "leaf_hashes": (
          )
        
      ),
      "taproot_internal_key": "50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0",
      "taproot_merkle_root": "04c239dd79e3787440cb0cb7b35c211b122db9bf54d953ffa0b548bf39ddd1e9"
    
  ),
  "outputs": (
    
    
  ),
  "fee": 0.00002000


If you have a more complex script like this, it won’t do the same thing:

<key1> OP_CHECKSIGVERIFY <key2> OP_CHECKSIG <key3> OP_CHECKSIGADD 1 OP_GREATERTHANOREQUAL

where key3 Controlled by my wallet.

After sending psbt:


  "tx": 
    "txid": "a87941d58431cd09c2d116c1cc06ed55e0c62203a976ea0be72b365c73f4ecd4",
    "hash": "a87941d58431cd09c2d116c1cc06ed55e0c62203a976ea0be72b365c73f4ecd4",
    "version": 2,
    "size": 82,
    "vsize": 82,
    "weight": 328,
    "locktime": 0,
    "vin": (
      
        "txid": "bfbadf7f017d9a4351c6a0d677440ce0413a6fb2941337c87ecff973698f410d",
        "vout": 0,
        "scriptSig": 
          "asm": "",
          "hex": ""
        ,
        "sequence": 0
      
    ),
    "vout": (
      
        "value": 0.00098000,
        "n": 0,
        "scriptPubKey": 
          "asm": "0 7977cce5169ecc596a32fdff65c6a244be9710a6",
          "desc": "addr(bcrt1q09mueegknmx9j63jlhlkt34zgjlfwy9xav6wcq)#cr0chwt0",
          "hex": "00147977cce5169ecc596a32fdff65c6a244be9710a6",
          "address": "bcrt1q09mueegknmx9j63jlhlkt34zgjlfwy9xav6wcq",
          "type": "witness_v0_keyhash"
        
      
    )
  ,
  "global_xpubs": (
  ),
  "psbt_version": 0,
  "proprietary": (
  ),
  "unknown": 
  ,
  "inputs": (
    
      "witness_utxo": 
        "amount": 0.00100000,
        "scriptPubKey": 
          "asm": "1 0100d055acf66f6cd1f777fa61f8164f78778393029347eca6af5334270385ec",
          "desc": "rawtr(0100d055acf66f6cd1f777fa61f8164f78778393029347eca6af5334270385ec)#p43tkhf0",
          "hex": "51200100d055acf66f6cd1f777fa61f8164f78778393029347eca6af5334270385ec",
          "address": "bcrt1pqyqdq4dv7ehke50hwlaxr7qkfau80qunq2f50m9x4afngfcrshkqh68rw9",
          "type": "witness_v1_taproot"
        
      ,
      "witness_script": 
        "asm": "94979a92a8e36fb070a0455d8621c3db5b93cdc3a943702effa70b3438428bb5 OP_CHECKSIGVERIFY 7d7a4a305ecc5c9cbfef7f17cab1f127fd16746de66715f12c68ef65d2f1e535 OP_CHECKSIG 8682e046c6de4d4a28e6df60830525d779e2e4ea897bd439492061a3f1edb339 OP_CHECKSIGADD 1 OP_GREATERTHANOREQUAL",
        "hex": "2094979a92a8e36fb070a0455d8621c3db5b93cdc3a943702effa70b3438428bb5ad207d7a4a305ecc5c9cbfef7f17cab1f127fd16746de66715f12c68ef65d2f1e535ac208682e046c6de4d4a28e6df60830525d779e2e4ea897bd439492061a3f1edb339ba51a2",
        "type": "nonstandard"
      ,
      "taproot_scripts": (
        
          "script": "2094979a92a8e36fb070a0455d8621c3db5b93cdc3a943702effa70b3438428bb5ad207d7a4a305ecc5c9cbfef7f17cab1f127fd16746de66715f12c68ef65d2f1e535ac208682e046c6de4d4a28e6df60830525d779e2e4ea897bd439492061a3f1edb339ba51a2",
          "leaf_ver": 192,
          "control_blocks": (
            "c050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac070a51f0529b1675a42bfb5e12f2d8f40422a2b4e6643bd92c90aea1a3af3e4878c554e3a01b0fe563a991bba70924174e83f06237ff0cf21e11f51139d814837"
          )
        
      ),
      "taproot_bip32_derivs": (
        
          "pubkey": "7d7a4a305ecc5c9cbfef7f17cab1f127fd16746de66715f12c68ef65d2f1e535",
          "master_fingerprint": "00000000",
          "path": "m",
          "leaf_hashes": (
          )
        
      ),
      "taproot_internal_key": "50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0",
      "taproot_merkle_root": "4f26390aace2c87c38c3ec639bb661697903832d2d3e20ab29a2fee6e2443188"
    
  ),
  "outputs": (
    
    
  ),
  "fee": 0.00002000

I get back the same psbt without signature.

The question here is, what additional data do I need to enter into psbt to sign this more complex script?

Related Articles

Back to top button