Issue Details

Number
24861
Title
Awesome multisig PR labyrinth guide
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](https://github.com/bitcoin/bitcoin/blob/master/doc/multisig-tutorial.md) for how things currently work. I typically have the following future multisig wallet in mind to guide my thinking: 1. a computer running Bitcoin Core holding one master key (key 1) 2. one or more hardware wallets with additional keys, via HWI (keys 2 ... n) 3. taproot keypath using n-of-n MuSig2 4. a fallback with fewer keys after some time elapsed 5. 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: - [x] #22558 (PSBT fields) - [x] #23578 (External signer support) - [x] Timelock support for descriptors: this will be added along with full [MiniScript](https://bitcoin.sipa.be/miniscript/) support in #24148 & #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. - [x] #29130 makes it possible to create a wallet _with_ a seed, but without any descriptors. - [ ] The user would grab an xpub from it (#22341 ) to construct a multisig descriptor and then import that. - [x] #29130 added `gethdkeys`, helpful but doesn't support arbitrary derivation paths - [ ] MuSig2 setup and signing support, which requires: - [x] a BIP to specify new PSBT fields (tracked in #23326) - [ ] #31247 - [ ] Bitcoin Core MuSig2 support: #29675 - [ ] At least one other (hardware) wallet to support it - [ ] Ledger demo app, see [#29675](https://github.com/bitcoin/bitcoin/pull/29675#issuecomment-2152172999) - HWI changes: probably none needed - [ ] a simple Python setup wizard * right now [Specter Desktop](https://github.com/cryptoadvance/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 call `importdescriptors`. * the script could use [BIP 129 / BSMS](https://github.com/bitcoin/bips/blob/master/bip-0129.mediawiki) (perhaps initially without encryption) * Specter doesn't set the external_signer wallet flag, so I have a trivial PR to do that manually: #21928 (up for grabs) - [ ] 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: - [x] https://github.com/bitcoin/bitcoin/pull/24313 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.
URL
https://github.com/bitcoin/bitcoin/issue/24861
Closed by
Back to List