How to Sign a Musig with Bitcoin Core
How to Sign a Musig with Bitcoin Core
Loading saved threads...
Shannon A. · External communityPost link
External question — Bitcoin Stack Exchange
Author: Shannon A.
Original post: https://bitcoin.stackexchange.com/questions/131086
License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/
Adaptation: HTML converted to plain text; contact email addresses removed.
Today I was back at trying to sign a transaction spending a musig UTXO in Bitcoin Core. Last time around, Pieter W. gave me two pieces of advice.
Use PSBTs, as they're more likely to work on modern stuff like Musig than raw transactions.
He asked how I was generating my private/public keys, which made me realize I'd probably calculated my pubkey incorrectly.
So today I took a new swing, using the same methodology I use for signing regular multisigs in Bitcoin Core, but now I can't get the PSBT to process correctly.
I. Capturing the Individual Keys
I used the simplest method possible to generate a musig address: grab addresses from two different wallets and capture their pubkeys. (The private keys should then be sitting in those wallets.)
Here's the address & pubkey capture:
musigaddress1=$(bitcoin-cli -rpcwallet=musig1 getnewaddress)
musigaddress2=$(bitcoin-cli -rpcwallet=musig2 getnewaddress)
musigpubkey1=$(bitcoin-cli -rpcwallet=musig1 -named getaddressinfo address=$musigaddress1 | jq -r '.pubkey')
musigpubkey2=$(bitcoin-cli -rpcwallet=musig2 -named getaddressinfo address=$musigaddress2 | jq -r '.pubkey')
Here's the descriptor creation:
musigdesc="tr(musig($musigpubkey1,$musigpubkey2))"
musigcs=$(bitcoin-cli getdescriptorinfo $musigdesc | jq -r '.checksum')
musigdescwithcs=$musigdesc#$musigcs
echo $musigdescwithcs
tr(musig(031e4be4d329cb508f5b424564d23bb07f4f3e00b52797df607eabe25ebf7ff6ba,0269cd634538d451c95b1e9211605677542b19c813fc7a46795e39a19fd3053d59))#f56zcuwx
II. Creating a Watch Only Wallet
Next step: creating a watch-only wallet and generating a musig address
bitcoin-cli createwallet "musigwatchonly" true true
{
"name": "musigwatchonly"
}
bitcoin-cli -rpcwallet=musigwatchonly importdescriptors '''[{ "desc": "'$musigdescwithcs'", "timestamp": "now" }]'''
[
{
"success": true
}
]
bitcoin-cli -rpcwallet=musigwatchonly getaddressesbylabel ""
{
"tb1pp29jj0t4wfanctzsrvaz28l6ptamhqy7e8gmyuh8tv43ynra2dkqsskyne": {
"purpose": "receive"
}
}
Then, fund the address from a handy faucet.
III. Spend the Funds
Here's where I run into troubles. I can create a PSBT and process it through all three wallets. musigwatchonly should provide the descriptor, while musig1 and musig2 should provide signatures. They all seem to do something! But
analyzepsbt
continues to report that an Updater is needed!
Making the PSBT:
split1=$(bitcoin-cli -rpcwallet=musig1 getnewaddress)
split2=$(bitcoin-cli -rpcwallet=musig2 getnewaddress)
utxo_txid=$(bitcoin-cli -rpcwallet=musigwatchonly listunspent | jq -r '.[0] | .txid')
utxo_vout=$(bitcoin-cli -rpcwallet=musigwatchonly listunspent | jq -r '.[0] | .vout')
psbt=$(bitcoin-cli -named createpsbt inputs='''[ { "txid": "'$utxo_txid'", "vout": '$utxo_vout' } ]''' outputs='''{ "'$split1'": 0.0000498,"'$split2'": 0.0000498 }''')
bitcoin-cli analyzepsbt $psbt
{
"inputs": [
{
"has_utxo": false,
"is_final": false,
"next": "updater"
}
],
"next": "updater"
}
It seems to find the UTXO OK.
psbt=$(bitcoin-cli -rpcwallet="musigwatchonly" walletprocesspsbt $psbt | jq -r '.psbt')
bitcoin-cli analyzepsbt $psbt
{
"inputs": [
{
"has_utxo": true,
"is_final": false,
"next": "updater"
}
],
"estimated_vsize": 130,
"estimated_feerate": 0.00000307,
"fee": 0.00000040,
"next": "updater"
}
Lots of info has been filled in:
bitcoin-cli decodepsbt $psbt
{
"tx": {
"txid": "6b752ed99150f6cde71de6b9a5ea728bc2d908289744262b569da23eea60896f",
"hash": "6b752ed99150f6cde71de6b9a5ea728bc2d908289744262b569da23eea60896f",
"version": 2,
"size": 113,
"vsize": 113,
"weight": 452,
"locktime": 0,
"vin": [
{
"txid": "d376a2461fdba2198d070794224cdc5dd4c1f3f8bcef7a9bd8cdd254494476bf",
"vout": 0,
"scriptSig": {
"asm": "",
"hex": ""
},
"sequence": 4294967293
}
],
"vout": [
{
"value": 0.00004980,
"n": 0,
"scriptPubKey": {
"asm": "0 801f6ab23569c477fecf5ef7fb7568c208185200",
"desc": "addr(tb1qsq0k4v34d8z80lk0tmmlkatgcgyps5sq67nv2g)#52328mds",
"hex": "0014801f6ab23569c477fecf5ef7fb7568c208185200",
"address": "tb1qsq0k4v34d8z80lk0tmmlkatgcgyps5sq67nv2g",
"type": "witness_v0_keyhash"
}
},
{
"value": 0.00004980,
"n": 1,
"scriptPubKey": {
"asm": "0 0afe9ffb4f071020ed6f657c97881081f2b36c2c",
"desc": "addr(tb1qptlfl760qugzpmt0v47f0zqss8etxmpvpvgj5p)#9fgy0vvy",
"hex": "00140afe9ffb4f071020ed6f657c97881081f2b36c2c",
"address": "tb1qptlfl760qugzpmt0v47f0zqss8etxmpvpvgj5p",
"type": "witness_v0_keyhash"
}
}
]
},
"global_xpubs": [
],
"psbt_version": 0,
"proprietary": [
],
"unknown": {
},
"inputs": [
{
"witness_utxo": {
"amount": 0.00010000,
"scriptPubKey": {
"asm": "1 0a8b293d75727b3c2c501b3a251ffa0afbbb809ec9d1b272e75b2b124c7d536c",
"desc": "rawtr(0a8b293d75727b3c2c501b3a251ffa0afbbb809ec9d1b272e75b2b124c7d536c)#wrut38c9",
"hex": "51200a8b293d75727b3c2c501b3a251ffa0afbbb809ec9d1b272e75b2b124c7d536c",
"address": "tb1pp29jj0t4wfanctzsrvaz28l6ptamhqy7e8gmyuh8tv43ynra2dkqsskyne",
"type": "witness_v1_taproot"
}
},
"taproot_bip32_derivs": [
{
"pubkey": "1e4be4d329cb508f5b424564d23bb07f4f3e00b52797df607eabe25ebf7ff6ba",
"master_fingerprint": "cb218d03",
"path": "m",
"leaf_hashes": [
]
},
{
"pubkey": "69cd634538d451c95b1e9211605677542b19c813fc7a46795e39a19fd3053d59",
"master_fingerprint": "03f07354",
"path": "m",
"leaf_hashes": [
]
},
{
"pubkey": "b285c0aeabaf9104034deb39b57443a7ae6763b28c608bd9d5d1f52c8474f9cb",
"master_fingerprint": "5a124770",
"path": "m",
"leaf_hashes": [
]
}
],
"taproot_internal_key": "b285c0aeabaf9104034deb39b57443a7ae6763b28c608bd9d5d1f52c8474f9cb",
"musig2_participant_pubkeys": [
{
"aggregate_pubkey": "02b285c0aeabaf9104034deb39b57443a7ae6763b28c608bd9d5d1f52c8474f9cb",
"participant_pubkeys": [
"0269cd634538d451c95b1e9211605677542b19c813fc7a46795e39a19fd3053d59",
"031e4be4d329cb508f5b424564d23bb07f4f3e00b52797df607eabe25ebf7ff6ba"
]
}
]
}
],
"outputs": [
{
},
{
}
],
"fee": 0.00000040
}
But why isn't it now ready for a Signer? I think this is the point where something's not clicking.
Nonetheless, I pass to the other wallets for signing:
psbt1=$(bitcoin-cli -rpcwallet="musig1" walletprocesspsbt $psbt | jq -r '.psbt')
psbt2=$(bitcoin-cli -rpcwallet="musig2" walletprocesspsbt $psbt | jq -r '.psbt')
It gets bigger each time as expected:
echo $psbt
cHNidP8BAHECAAAAAb92RElU0s3Ym3rvvPjzwdRd3EwilAcHjRmi2x9GonbTAAAAAAD9////AnQTAAAAAAAAFgAUgB9qsjVpxHf+z173+3VowggYUgB0EwAAAAAAABYAFAr+n/tPBxAg7W9lfJeIEIHys2wsAAAAAAABASsQJwAAAAAAACJRIAqLKT11cns8LFAbOiUf+gr7u4CeydGycudbKxJMfVNsIRYeS+TTKctQj1tCRWTSO7B/Tz4AtSeX32B+q+Jev3/2ugUAyyGNAyEWac1jRTjUUclbHpIRYFZ3VCsZyBP8ekZ5Xjmhn9MFPVkFAAPwc1QhFrKFwK6rr5EEA03rObV0Q6euZ2OyjGCL2dXR9SyEdPnLBQBaEkdwARcgsoXArquvkQQDTes5tXRDp65nY7KMYIvZ1dH1LIR0+csiGgKyhcCuq6+RBANN6zm1dEOnrmdjsoxgi9nV0fUshHT5y0ICac1jRTjUUclbHpIRYFZ3VCsZyBP8ekZ5Xjmhn9MFPVkDHkvk0ynLUI9bQkVk0juwf08+ALUnl99gfqviXr9/9roAAAA=
echo $psbt1
cHNidP8BAHECAAAAAb92RElU0s3Ym3rvvPjzwdRd3EwilAcHjRmi2x9GonbTAAAAAAD9////AnQTAAAAAAAAFgAUgB9qsjVpxHf+z173+3VowggYUgB0EwAAAAAAABYAFAr+n/tPBxAg7W9lfJeIEIHys2wsAAAAAAABASsQJwAAAAAAACJRIAqLKT11cns8LFAbOiUf+gr7u4CeydGycudbKxJMfVNsIRYeS+TTKctQj1tCRWTSO7B/Tz4AtSeX32B+q+Jev3/2ugUAyyGNAyEWac1jRTjUUclbHpIRYFZ3VCsZyBP8ekZ5Xjmhn9MFPVkFAAPwc1QhFrKFwK6rr5EEA03rObV0Q6euZ2OyjGCL2dXR9SyEdPnLBQBaEkdwARcgsoXArquvkQQDTes5tXRDp65nY7KMYIvZ1dH1LIR0+csiGgKyhcCuq6+RBANN6zm1dEOnrmdjsoxgi9nV0fUshHT5y0ICac1jRTjUUclbHpIRYFZ3VCsZyBP8ekZ5Xjmhn9MFPVkDHkvk0ynLUI9bQkVk0juwf08+ALUnl99gfqviXr9/9rpDGwMeS+TTKctQj1tCRWTSO7B/Tz4AtSeX32B+q+Jev3/2ugIKiyk9dXJ7PCxQGzolH/oK+7uAnsnRsnLnWysSTH1TbEIDUW0NpPynpLb9EXN8T2YvnwqTD3pCQ7UprBoOTpfeyAUCSwTI/x0Xt4jSD/2/CwfC4nunxxiH5l3Bg9MkPuJO9IYAIgIDxMqMXLVL9Es9WxXOuTQqMT1pp/KQksHu2z5P3E8U1o8YIdUHUVQAAIABAACAAAAAgAAAAAAEAAAAAAA=
echo $psbt2
cHNidP8BAHECAAAAAb92RElU0s3Ym3rvvPjzwdRd3EwilAcHjRmi2x9GonbTAAAAAAD9////AnQTAAAAAAAAFgAUgB9qsjVpxHf+z173+3VowggYUgB0EwAAAAAAABYAFAr+n/tPBxAg7W9lfJeIEIHys2wsAAAAAAABASsQJwAAAAAAACJRIAqLKT11cns8LFAbOiUf+gr7u4CeydGycudbKxJMfVNsIRYeS+TTKctQj1tCRWTSO7B/Tz4AtSeX32B+q+Jev3/2ugUAyyGNAyEWac1jRTjUUclbHpIRYFZ3VCsZyBP8ekZ5Xjmhn9MFPVkFAAPwc1QhFrKFwK6rr5EEA03rObV0Q6euZ2OyjGCL2dXR9SyEdPnLBQBaEkdwARcgsoXArquvkQQDTes5tXRDp65nY7KMYIvZ1dH1LIR0+csiGgKyhcCuq6+RBANN6zm1dEOnrmdjsoxgi9nV0fUshHT5y0ICac1jRTjUUclbHpIRYFZ3VCsZyBP8ekZ5Xjmhn9MFPVkDHkvk0ynLUI9bQkVk0juwf08+ALUnl99gfqviXr9/9rpDGwJpzWNFONRRyVsekhFgVndUKxnIE/x6RnleOaGf0wU9WQIKiyk9dXJ7PCxQGzolH/oK+7uAnsnRsnLnWysSTH1TbEIDZOz5xPC+llfCjYxmcE7DQJaPvc6oCPMi8fljIPAS/7gCIYc1WFqSDDm3qtvYJY5yAa5OeSTpIZp/ninkCYZGsWcAACICAy4i+I2kVFm1W9ULY9/+ssHe6VkymFBX7NgkxBgff6unGLFWOEVUAACAAQAAgAAAAIAAAAAAAgAAAAA=
So I combine them:
psbt_complete=$(bitcoin-cli combinepsbt '''["'$psbt1'", "'$psbt2'"]''')
Here's that "complete" PSBT:
cHNidP8BAHECAAAAAb92RElU0s3Ym3rvvPjzwdRd3EwilAcHjRmi2x9GonbTAAAAAAD9////AnQTAAAAAAAAFgAUgB9qsjVpxHf+z173+3VowggYUgB0EwAAAAAAABYAFAr+n/tPBxAg7W9lfJeIEIHys2wsAAAAAAABASsQJwAAAAAAACJRIAqLKT11cns8LFAbOiUf+gr7u4CeydGycudbKxJMfVNsIRYeS+TTKctQj1tCRWTSO7B/Tz4AtSeX32B+q+Jev3/2ugUAyyGNAyEWac1jRTjUUclbHpIRYFZ3VCsZyBP8ekZ5Xjmhn9MFPVkFAAPwc1QhFrKFwK6rr5EEA03rObV0Q6euZ2OyjGCL2dXR9SyEdPnLBQBaEkdwARcgsoXArquvkQQDTes5tXRDp65nY7KMYIvZ1dH1LIR0+csiGgKyhcCuq6+RBANN6zm1dEOnrmdjsoxgi9nV0fUshHT5y0ICac1jRTjUUclbHpIRYFZ3VCsZyBP8ekZ5Xjmhn9MFPVkDHkvk0ynLUI9bQkVk0juwf08+ALUnl99gfqviXr9/9rpDGwJpzWNFONRRyVsekhFgVndUKxnIE/x6RnleOaGf0wU9WQIKiyk9dXJ7PCxQGzolH/oK+7uAnsnRsnLnWysSTH1TbEIDZOz5xPC+llfCjYxmcE7DQJaPvc6oCPMi8fljIPAS/7gCIYc1WFqSDDm3qtvYJY5yAa5OeSTpIZp/ninkCYZGsWdDGwMeS+TTKctQj1tCRWTSO7B/Tz4AtSeX32B+q+Jev3/2ugIKiyk9dXJ7PCxQGzolH/oK+7uAnsnRsnLnWysSTH1TbEIDUW0NpPynpLb9EXN8T2YvnwqTD3pCQ7UprBoOTpfeyAUCSwTI/x0Xt4jSD/2/CwfC4nunxxiH5l3Bg9MkPuJO9IYAIgIDxMqMXLVL9Es9WxXOuTQqMT1pp/KQksHu2z5P3E8U1o8YIdUHUVQAAIABAACAAAAAgAAAAAAEAAAAACICAy4i+I2kVFm1W9ULY9/+ssHe6VkymFBX7NgkxBgff6unGLFWOEVUAACAAQAAgAAAAIAAAAAAAgAAAAA=
It still thinks it's waiting for an updater:
bitcoin-cli analyzepsbt $psbt_complete
{
"inputs": [
{
"has_utxo": true,
"is_final": false,
"next": "updater"
}
],
"estimated_vsize": 130,
"estimated_feerate": 0.00000307,
"fee": 0.00000040,
"next": "updater"
}
Here's what the final PSBT looks like:
bitcoin-cli decodepsbt $psbt_complete
{
"tx": {
"txid": "6b752ed99150f6cde71de6b9a5ea728bc2d908289744262b569da23eea60896f",
"hash": "6b752ed99150f6cde71de6b9a5ea728bc2d908289744262b569da23eea60896f",
"version": 2,
"size": 113,
"vsize": 113,
"weight": 452,
"locktime": 0,
"vin": [
{
"txid": "d376a2461fdba2198d070794224cdc5dd4c1f3f8bcef7a9bd8cdd254494476bf",
"vout": 0,
"scriptSig": {
"asm": "",
"hex": ""
},
"sequence": 4294967293
}
],
"vout": [
{
"value": 0.00004980,
"n": 0,
"scriptPubKey": {
"asm": "0 801f6ab23569c477fecf5ef7fb7568c208185200",
"desc": "addr(tb1qsq0k4v34d8z80lk0tmmlkatgcgyps5sq67nv2g)#52328mds",
"hex": "0014801f6ab23569c477fecf5ef7fb7568c208185200",
"address": "tb1qsq0k4v34d8z80lk0tmmlkatgcgyps5sq67nv2g",
"type": "witness_v0_keyhash"
}
},
{
"value": 0.00004980,
"n": 1,
"scriptPubKey": {
"asm": "0 0afe9ffb4f071020ed6f657c97881081f2b36c2c",
"desc": "addr(tb1qptlfl760qugzpmt0v47f0zqss8etxmpvpvgj5p)#9fgy0vvy",
"hex": "00140afe9ffb4f071020ed6f657c97881081f2b36c2c",
"address": "tb1qptlfl760qugzpmt0v47f0zqss8etxmpvpvgj5p",
"type": "witness_v0_keyhash"
}
}
]
},
"global_xpubs": [
],
"psbt_version": 0,
"proprietary": [
],
"unknown": {
},
"inputs": [
{
"witness_utxo": {
"amount": 0.00010000,
"scriptPubKey": {
"asm": "1 0a8b293d75727b3c2c501b3a251ffa0afbbb809ec9d1b272e75b2b124c7d536c",
"desc": "rawtr(0a8b293d75727b3c2c501b3a251ffa0afbbb809ec9d1b272e75b2b124c7d536c)#wrut38c9",
"hex": "51200a8b293d75727b3c2c501b3a251ffa0afbbb809ec9d1b272e75b2b124c7d536c",
"address": "tb1pp29jj0t4wfanctzsrvaz28l6ptamhqy7e8gmyuh8tv43ynra2dkqsskyne",
"type": "witness_v1_taproot"
}
},
"taproot_bip32_derivs": [
{
"pubkey": "1e4be4d329cb508f5b424564d23bb07f4f3e00b52797df607eabe25ebf7ff6ba",
"master_fingerprint": "cb218d03",
"path": "m",
"leaf_hashes": [
]
},
{
"pubkey": "69cd634538d451c95b1e9211605677542b19c813fc7a46795e39a19fd3053d59",
"master_fingerprint": "03f07354",
"path": "m",
"leaf_hashes": [
]
},
{
"pubkey": "b285c0aeabaf9104034deb39b57443a7ae6763b28c608bd9d5d1f52c8474f9cb",
"master_fingerprint": "5a124770",
"path": "m",
"leaf_hashes": [
]
}
],
"taproot_internal_key": "b285c0aeabaf9104034deb39b57443a7ae6763b28c608bd9d5d1f52c8474f9cb",
"musig2_participant_pubkeys": [
{
"aggregate_pubkey": "02b285c0aeabaf9104034deb39b57443a7ae6763b28c608bd9d5d1f52c8474f9cb",
"participant_pubkeys": [
"0269cd634538d451c95b1e9211605677542b19c813fc7a46795e39a19fd3053d59",
"031e4be4d329cb508f5b424564d23bb07f4f3e00b52797df607eabe25ebf7ff6ba"
]
}
],
"musig2_pubnonces": [
{
"participant_pubkey": "0269cd634538d451c95b1e9211605677542b19c813fc7a46795e39a19fd3053d59",
"aggregate_pubkey": "020a8b293d75727b3c2c501b3a251ffa0afbbb809ec9d1b272e75b2b124c7d536c",
"pubnonce": "0364ecf9c4f0be9657c28d8c66704ec340968fbdcea808f322f1f96320f012ffb802218735585a920c39b7aadbd8258e7201ae4e7924e9219a7f9e29e4098646b167"
},
{
"participant_pubkey": "031e4be4d329cb508f5b424564d23bb07f4f3e00b52797df607eabe25ebf7ff6ba",
"aggregate_pubkey": "020a8b293d75727b3c2c501b3a251ffa0afbbb809ec9d1b272e75b2b124c7d536c",
"pubnonce": "03516d0da4fca7a4b6fd11737c4f662f9f0a930f7a4243b529ac1a0e4e97dec805024b04c8ff1d17b788d20ffdbf0b07c2e27ba7c71887e65dc183d3243ee24ef486"
}
]
}
],
"outputs": [
{
"bip32_derivs": [
{
"pubkey": "03c4ca8c5cb54bf44b3d5b15ceb9342a313d69a7f29092c1eedb3e4fdc4f14d68f",
"master_fingerprint": "21d50751",
"path": "m/84h/1h/0h/0/4"
}
]
},
{
"bip32_derivs": [
{
"pubkey": "032e22f88da45459b55bd50b63dffeb2c1dee95932985057ecd824c4181f7faba7",
"master_fingerprint": "b1563845",
"path": "m/84h/1h/0h/0/2"
}
]
}
],
"fee": 0.00000040
}
Unsurprisingly, I can't complete it:
bitcoin-cli finalizepsbt $psbt_complete
{
"psbt": "cHNidP8BAHECAAAAAb92RElU0s3Ym3rvvPjzwdRd3EwilAcHjRmi2x9GonbTAAAAAAD9////AnQTAAAAAAAAFgAUgB9qsjVpxHf+z173+3VowggYUgB0EwAAAAAAABYAFAr+n/tPBxAg7W9lfJeIEIHys2wsAAAAAAABASsQJwAAAAAAACJRIAqLKT11cns8LFAbOiUf+gr7u4CeydGycudbKxJMfVNsIRYeS+TTKctQj1tCRWTSO7B/Tz4AtSeX32B+q+Jev3/2ugUAyyGNAyEWac1jRTjUUclbHpIRYFZ3VCsZyBP8ekZ5Xjmhn9MFPVkFAAPwc1QhFrKFwK6rr5EEA03rObV0Q6euZ2OyjGCL2dXR9SyEdPnLBQBaEkdwARcgsoXArquvkQQDTes5tXRDp65nY7KMYIvZ1dH1LIR0+csiGgKyhcCuq6+RBANN6zm1dEOnrmdjsoxgi9nV0fUshHT5y0ICac1jRTjUUclbHpIRYFZ3VCsZyBP8ekZ5Xjmhn9MFPVkDHkvk0ynLUI9bQkVk0juwf08+ALUnl99gfqviXr9/9rpDGwJpzWNFONRRyVsekhFgVndUKxnIE/x6RnleOaGf0wU9WQIKiyk9dXJ7PCxQGzolH/oK+7uAnsnRsnLnWysSTH1TbEIDZOz5xPC+llfCjYxmcE7DQJaPvc6oCPMi8fljIPAS/7gCIYc1WFqSDDm3qtvYJY5yAa5OeSTpIZp/ninkCYZGsWdDGwMeS+TTKctQj1tCRWTSO7B/Tz4AtSeX32B+q+Jev3/2ugIKiyk9dXJ7PCxQGzolH/oK+7uAnsnRsnLnWysSTH1TbEIDUW0NpPynpLb9EXN8T2YvnwqTD3pCQ7UprBoOTpfeyAUCSwTI/x0Xt4jSD/2/CwfC4nunxxiH5l3Bg9MkPuJO9IYAIgIDxMqMXLVL9Es9WxXOuTQqMT1pp/KQksHu2z5P3E8U1o8YIdUHUVQAAIABAACAAAAAgAAAAAAEAAAAACICAy4i+I2kVFm1W9ULY9/+ssHe6VkymFBX7NgkxBgff6unGLFWOEVUAACAAQAAgAAAAIAAAAAAAgAAAAA=",
"complete": false
}
So that's the pretty complete rundown of where I got the keys from, how I created my MuSig2 descriptor, and how I tried to make the PSBT.
Where did I go wrong in this? Why can't I get the PSBT past the Updater stage? What are the wallets with the private keys doing if not offering signatures?
Hoping to get this documented for the next person!
Thanks!
Quote
Report
Ava Chow · External communityPost link
External answer — Bitcoin Stack Exchange
Author: Ava Chow
Original post: https://bitcoin.stackexchange.com/a/131087
License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/
Adaptation: HTML converted to plain text; contact email addresses removed.
MuSig2 is a 2 round signing protocol, which means that each signer must process the PSBT twice. The first time each signer processes the PSBT, they will add the public component of the nonce that they will use in signing. In the second round, every signer must have added a pubnonce, and the second processing will add the partial signature. Only then can the PSBT be finalized and the final signature created.
So what you need to is another round of of
walletprocesspsbt
after you do the
combinepsbt
step, with the combined psbt. Then you can
combinepsbt
again and
finalizepsbt
will produce the transaction.
analyzepsbt
doesn't have support for MuSig2 things yet so it might not recognize the next step.
Quote
Report
Post Reply
Quoted from Forex.com.bd-Editorial External answer — Bitcoin Stack Exchange Author: Ava Chow Source score (net votes, not local likes): 1 Original post: https://bitcoin.stackexchange.com/a/131087 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. MuSig2 is a 2 round signing protocol, which means that each signer must process the PSBT twice. The first time each signer processes the PSBT, they will add the public component of the nonce that they will use in signing. In the second round, every signer must have added a pubnonce, and the second processing will add the partial signature. Only then can the PSBT be finalized and the final signature created. So what you need to is another round of of walletprocesspsbt after you do the combinepsbt step, with the combined psbt. Then you can combinepsbt again and finalizepsbt will produce the transaction. analyzepsbt doesn't have support for MuSig2 things yet so it might not recognize the next step.
Checking account access…