I created a 2-of-3 multisig taproot address by following the steps outlined by Pieter Wuille in this post using importdescriptors
and 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 walletprocesspsbt
and 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?