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
xpubs:- Every participant generates an
xpub: most straightforward is to create a new wallet, I guess, but how to get thexpubto 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
decodepsbtthen (if ok) signs it withwalletprocesspsbt - Collect the signed PSBTs with
joinpsbtsthen broadcast the resulting transaction
