Skip to content

wallet: Multi-sig flow with descriptor wallets #21278

Description

@laanwj

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 the xpub to share for a specific BIP32 path?
    • Maybe wallet: listdescriptors uses normalized descriptor form #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.
  • Second phase: Every participant imports the following descriptors using importdescriptors:
    • Receiving (internal: false) addresses are wsh(sortedmulti(<M>,xpubA/0/*,xpubB/0/*,xpubC/0/*,…))
    • Change (internal: true) addresses are wsh(sortedmulti(<M>,xpubA/1/*,xpubB/1/*,xpubC/1/*,…))
  • 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 with walletprocesspsbt
    • Collect the signed PSBTs with joinpsbts then broadcast the resulting transaction

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions