It would be nice to have documentation on how to set up a basic M-of-N multisig between multiple people using descriptor wallets and PSBTs, as well as a signing flow.
E.g. (borrowed some steps from @jonasschnelli)
- First phase: generate and exchange
xpub
s:- Every participant generates an
xpub
: most straightforward is to create a new wallet, I guess, but how to get thexpub
to share for a specific BIP32 path? - Maybe #21277 helps here but it might be putting the cart before the horse: do we want the default non-multisig descriptors at all here? I don’t think so.
- Share it with the other participants.
- Every participant generates an
- Second phase: Every participant imports the following descriptors using
importdescriptors
:- Receiving (
internal: false
) addresses arewsh(sortedmulti(<M>,xpubA/0/*,xpubB/0/*,xpubC/0/*,…))
- Change (
internal: true
) addresses arewsh(sortedmulti(<M>,xpubA/1/*,xpubB/1/*,xpubC/1/*,…))
- Receiving (
- Send funds to the resulting address (every participant should get the same addresses).
- When making a sending transaction create one using
walletcreatefundedpsbt
(everyone can initiate this)- Send the resulting PSBT to other users
- At least M users checks it with
decodepsbt
then (if ok) signs it withwalletprocesspsbt
- Collect the signed PSBTs with
joinpsbts
then broadcast the resulting transaction