2

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?

0

1 Answer 1

4

When you create the PSBT with createpsbt, it does not contain any information about the inputs. As wallets1-3 also do not have any information about the inputs, they are unable to sign it. It is only wallet4 that has information about the inputs. So you must use walletprocesspsbt with wallet4 in order to fill in that information before going to wallets1-3 for signing.

However it looks like there is a bug in the multi_a logic that is not filling in all of wallet4's information, which is causing wallets1-3 to still be unable to sign.


I've opened a PR that should fix this issue.

2
  • 1
    I saw the PR, that's awesome, thanks! I'll test this in rc3 when it's released and report back. Oct 30, 2022 at 18:03
  • 1
    I've compiled and run rc24.04 and confirmed this fix worked. I was able to spend the bitcoin in the taproot multisig address. THANKS! Here is the signet tx ID 52063d0c2ec3f7fc60702e98c0a39e057ee71ae583ddace3d1d68f7a8cb5c125 Nov 17, 2022 at 23:49

Your Answer

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

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