Pop-up Window Signing PSBTs to spend from Taproot multisig address - NTV News 🔥

Display

See it

____

Ad Unit BIG

Signing PSBTs to spend from Taproot multisig address

I created a 2-of-3 multisig taproot address by following the steps outlined by Pieter Wuille in this post using importdescriptorsand deriveaddresses. His steps worked perfectly, and I was able to create the address from 3 pubkeys no problem.

My problem is that I don't know how to spend from the funded address (kinda a big deal)

I am using Bitcoin Core QT Console, 24.0rc2 on Signet.

I am using 4 different wallets I have set up. All are descriptor wallets, but the 4th has Private keys Disabled so I can import the taproot descriptors and create the multisig address.

I used getnewaddress and getaddressinfo in each of the 3 regular descriptor wallets to get an address and the corresponding 66-character hex pubkey.

I used these 3 pubkeys to create the taproot descriptor

0249f48bd0c87f48a3d4d0fd5f0a2571861fd1891b092a41bd3546a93bc6db97ae, 03cde9c66862a392780e6868a7fd245273eff736a516d0f950a4e027d4d83d9194, 02d56baf4e4b77932b2f195598c68b63ee98827f21acb660b34bbf3ebf1862fc2e

Using this format from the above linked post; tr(KI,multi_a(2,K1,K2,K3))#12345678

I got this descriptor;

tr(50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0,multi_a(2,0249f48bd0c87f48a3d4d0fd5f0a2571861fd1891b092a41bd3546a93bc6db97ae,03cde9c66862a392780e6868a7fd245273eff736a516d0f950a4e027d4d83d9194,02d56baf4e4b77932b2f195598c68b63ee98827f21acb660b34bbf3ebf1862fc2e))#s7q27ueu

For KI I used the unspendable output from BIP341 PW mentioned in the above linked post.

After using importdescriptors and deriveaddresses I got this taproot multisig address as a result;

tb1p6vzv5za7pc9503fkvexccv4qm43z6600lhpj3k7sem9w3vdh8xjqanz5ld

I funded the address with a transaction.

txid=071a04111096e77bfb8a5b1518b2ea5dca6adac245d41b4025fb50ed4a740819

I then created a PSBT with this command;

createpsbt \
'[{"txid": "071a04111096e77bfb8a5b1518b2ea5dca6adac245d41b4025fb50ed4a740819", "vout": 0, "sequence":1}]' \
'{"tb1qlxrmerprf9h2tgnlysltcs2lcc4dj9hjtu9se5": 0.0002}'

This returned a PBST;

cHNidP8BAFICAAAAARkIdErtUPslQBvURcLaaspd6rIYFVuK+3vnlhARBBoHAAAAAAABAAAAASBOAAAAAAAAFgAU+Ye8jCNJbqWifyQ+vEFfxirZFvIAAAAAAAAA

Decoding the PSBT returns;

{
  "tx": {
    "txid": "52063d0c2ec3f7fc60702e98c0a39e057ee71ae583ddace3d1d68f7a8cb5c125",
    "hash": "52063d0c2ec3f7fc60702e98c0a39e057ee71ae583ddace3d1d68f7a8cb5c125",
    "version": 2,
    "size": 82,
    "vsize": 82,
    "weight": 328,
    "locktime": 0,
    "vin": [
      {
        "txid": "071a04111096e77bfb8a5b1518b2ea5dca6adac245d41b4025fb50ed4a740819",
        "vout": 0,
        "scriptSig": {
          "asm": "",
          "hex": ""
        },
        "sequence": 1
      }
    ],
    "vout": [
      {
        "value": 0.00020000,
        "n": 0,
        "scriptPubKey": {
          "asm": "0 f987bc8c23496ea5a27f243ebc415fc62ad916f2",
          "desc": "addr(tb1qlxrmerprf9h2tgnlysltcs2lcc4dj9hjtu9se5)#jhwtg3zn",
          "hex": "0014f987bc8c23496ea5a27f243ebc415fc62ad916f2",
          "address": "tb1qlxrmerprf9h2tgnlysltcs2lcc4dj9hjtu9se5",
          "type": "witness_v0_keyhash"
        }
      }
    ]
  },
  "global_xpubs": [
  ],
  "psbt_version": 0,
  "proprietary": [
  ],
  "unknown": {
  },
  "inputs": [
    {
    }
  ],
  "outputs": [
    {
    }
  ]

Now here's where I run into problems, I open the PSBT in Wallet1 to run walletprocesspsbtand it returns false, which normally might be fine, but the PSBT data is unchanged, so I can tell nothing happened and it truly failed to process;

    {
  "psbt": "cHNidP8BAFICAAAAARkIdErtUPslQBvURcLaaspd6rIYFVuK+3vnlhARBBoHAAAAAAABAAAAASBOAAAAAAAAFgAU+Ye8jCNJbqWifyQ+vEFfxirZFvIAAAAAAAAA",
  "complete": false
}

I get the same results in Wallet2 and Wallet3. These are the wallets used to create the addresses/pubkeys used in the taproot descriptor.

Then just to see what happened, I tried the same command in the wallet with disabled private keys (the wallet I imported the tr descriptor into and created the addresses). As a note, if I run listunspent, I can see the funding tx (the funds I am trying to spend with the PSBT). This returns a different PSBT data, but still false;

{
  "psbt": "cHNidP8BAFICAAAAARkIdErtUPslQBvURcLaaspd6rIYFVuK+3vnlhARBBoHAAAAAAABAAAAASBOAAAAAAAAFgAU+Ye8jCNJbqWifyQ+vEFfxirZFvIAAAAAAAEBKxdPAAAAAAAAIlEg0wTKC74OC0fFNmZNjDKg3WItae/9wyjb0M7K6LG3OaQiFcBQkpt0waBJVLeLS2A16XpeB4paDyjsltVHv+6azoA6wGkgSfSL0Mh/SKPU0P1fCiVxhh/RiRsJKkG9NUapO8bbl66sIM3pxmhio5J4Dmhop/0kUnPv9zalFtD5UKTgJ9TYPZGUuiDVa69OS3eTKy8ZVZjGi2PumIJ/Iay2YLNLvz6/GGL8LrpSnMAhFlCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrABQB8Rh5dARcgUJKbdMGgSVS3i0tgNel6XgeKWg8o7JbVR7/ums6AOsABGCDt29WnxAqM6dFJQ1DxQsSQgva1MP5WQW1URX0xZXSThwAA",
  "complete": false
}

Decoding the PSBT gives this result;

{
  "tx": {
    "txid": "52063d0c2ec3f7fc60702e98c0a39e057ee71ae583ddace3d1d68f7a8cb5c125",
    "hash": "52063d0c2ec3f7fc60702e98c0a39e057ee71ae583ddace3d1d68f7a8cb5c125",
    "version": 2,
    "size": 82,
    "vsize": 82,
    "weight": 328,
    "locktime": 0,
    "vin": [
      {
        "txid": "071a04111096e77bfb8a5b1518b2ea5dca6adac245d41b4025fb50ed4a740819",
        "vout": 0,
        "scriptSig": {
          "asm": "",
          "hex": ""
        },
        "sequence": 1
      }
    ],
    "vout": [
      {
        "value": 0.00020000,
        "n": 0,
        "scriptPubKey": {
          "asm": "0 f987bc8c23496ea5a27f243ebc415fc62ad916f2",
          "desc": "addr(tb1qlxrmerprf9h2tgnlysltcs2lcc4dj9hjtu9se5)#jhwtg3zn",
          "hex": "0014f987bc8c23496ea5a27f243ebc415fc62ad916f2",
          "address": "tb1qlxrmerprf9h2tgnlysltcs2lcc4dj9hjtu9se5",
          "type": "witness_v0_keyhash"
        }
      }
    ]
  },
  "global_xpubs": [
  ],
  "psbt_version": 0,
  "proprietary": [
  ],
  "unknown": {
  },
  "inputs": [
    {
      "witness_utxo": {
        "amount": 0.00020247,
        "scriptPubKey": {
          "asm": "1 d304ca0bbe0e0b47c536664d8c32a0dd622d69effdc328dbd0cecae8b1b739a4",
          "desc": "rawtr(d304ca0bbe0e0b47c536664d8c32a0dd622d69effdc328dbd0cecae8b1b739a4)#sn2t4sme",
          "hex": "5120d304ca0bbe0e0b47c536664d8c32a0dd622d69effdc328dbd0cecae8b1b739a4",
          "address": "tb1p6vzv5za7pc9503fkvexccv4qm43z6600lhpj3k7sem9w3vdh8xjqanz5ld",
          "type": "witness_v1_taproot"
        }
      },
      "taproot_scripts": [
        {
          "script": "2049f48bd0c87f48a3d4d0fd5f0a2571861fd1891b092a41bd3546a93bc6db97aeac20cde9c66862a392780e6868a7fd245273eff736a516d0f950a4e027d4d83d9194ba20d56baf4e4b77932b2f195598c68b63ee98827f21acb660b34bbf3ebf1862fc2eba529c",
          "leaf_ver": 192,
          "control_blocks": [
            "c050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0"
          ]
        }
      ],
      "taproot_bip32_derivs": [
        {
          "pubkey": "50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0",
          "master_fingerprint": "7c461e5d",
          "path": "m",
          "leaf_hashes": [
          ]
        }
      ],
      "taproot_internal_key": "50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0",
      "taproot_merkle_root": "eddbd5a7c40a8ce9d1494350f142c49082f6b530fe56416d54457d3165749387"
    }
  ],
  "outputs": [
    {
    }
  ],
  "fee": 0.00000247
}

I tried bringing this PSBT into the other 3 wallets to see if they could process this PSBT, but all gave the same results, false, and the PSBT data was unchanged.

So what should I be doing to get PSBTs I can actually combine and finalize?



from Recent Questions - Bitcoin Stack Exchange
October 28, 2022 at 05:22AM

Related Posts

Subscribe Our Newsletter
close