-
Notifications
You must be signed in to change notification settings - Fork 37.6k
Description
@ryanofsky recently suggested that I should write an overview of how the various pull requests spread over different repositories relate to some bigger picture view.
See the multisig tutorial for how things currently work.
I typically have the following future multisig wallet in mind to guide my thinking:
- a computer running Bitcoin Core holding one master key (key 1)
- one or more hardware wallets with additional keys, via HWI (keys 2 ... n)
- taproot keypath using n-of-n MuSig2
- a fallback with fewer keys after some time elapsed
- a GUI wizard to set this up (simple Python command line tool until then)
The descriptors for this could be hand crafted, but it would be nice to have:
6. Miniscript compiler that can generate this
What's Missing?
- Taproot support for external signers:
- psbt: Taproot fields for PSBT #22558 (PSBT fields)
- Add external signer taproot support #23578 (External signer support)
- Timelock support for descriptors: this will be added along with full MiniScript support in Miniscript support in Output Descriptors #24148 & Signing support for Miniscript Descriptors #24149 (@darosior).
- Ability to handle descriptors for which we have 1-of-N keys. Descriptor wallets currently expect the wallet to be either watch-only and have no keys, or to have all the keys.
- wallet: Add
createwalletdescriptor
andgethdkeys
RPCs for adding new automatically generated descriptors #29130 makes it possible to create a wallet with a seed, but without any descriptors. - The user would grab an xpub from it (rpc: add path to gethdkey #22341,wallet: derivehdkey RPC to get xpub at arbitrary path #32784) to construct a multisig descriptor and then import that.
- wallet: Add
createwalletdescriptor
andgethdkeys
RPCs for adding new automatically generated descriptors #29130 addedgethdkeys
, helpful but doesn't support arbitrary derivation paths
- wallet: Add
- wallet: Add
- MuSig2 setup and signing support, which requires:
- a BIP to specify new PSBT fields (tracked in MuSig2 support #23326)
- psbt: MuSig2 Fields #31247
- Bitcoin Core MuSig2 support: wallet: Be able to receive and spend inputs involving MuSig2 aggregate keys #29675
- At least one other (hardware) wallet to support it
- Ledger demo app, see #29675
- HWI changes: probably none needed
- a simple Python setup wizard
- right now Specter Desktop is by far the easiest way to setup a multisig wallet. But it's a huge dependency (including a bunch of NPM packages for their web interface). A simple Python script in contrib/ could call HWI to get a list of signers, ask what threshold to use, call
createwallet
to generate a blank wallet, fetch an xpub from it, and then callimportdescriptors
. - the script could use BIP 129 / BSMS (perhaps initially without encryption)
- Specter doesn't set the external_signer wallet flag, so I have a trivial PR to do that manually: wallet: allow toggling external_signer flag #21928 (up for grabs)
- right now Specter Desktop is by far the easiest way to setup a multisig wallet. But it's a huge dependency (including a bunch of NPM packages for their web interface). A simple Python script in contrib/ could call HWI to get a list of signers, ask what threshold to use, call
- a GUI setup wizard: once we have an established work flow, we would implement that in the GUI
Misc
I have a PR that improves address display handling on the device:
Even better would be if we had a feature to ask the wallet for a signature to prove it has the private key (without passing that information to the outside world of course, see #24186). This requires BIP-322 support on our end (#24058), at least one hardware wallet to support it, and a new HWI signmessage
command. Perhaps this can later be expanded to allow your device to prove that it (still) has the keys it needs as a co-signer.
Miniscript compilers currently doesn't support Taproot (e.g. to find the optimal tree structure), but I'm assuming you can still hand craft a leaf containing MiniScript.