385 - raw() and addr() Output Script Descriptors
BIP: 385 source Layer: Applications Title: raw() and addr() Output Script Descriptors Authors: Pieter Wuille Ava Chow Status: Deployed Type: Informational Assigned: 2021-06-27 License: BSD-2-Clause Requires: 380 Table of ContentsAbstractCopyrightMotivationSpecificationraw()addr()Test VectorsBackwards CompatibilityReference Implementation Abstract This document specifies raw() and addr() output script descriptors. raw() encapsulates a raw script as a descriptor. addr() encapsulates an address as a descriptor. Copyright This BIP is licensed under the BSD 2-clause license. Motivation In order to make descriptors maximally compatible with scripts in use today, it is useful to be able to wrap any arbitrary output script or an address into a descriptor. Specification Two new script expressions are defined: raw() and addr(). raw() The raw(HEX) expression can only be used as a top level descriptor. As the argument, it takes a hex string representing a Bitcoin ...
384 - combo() Output Script Descriptors
BIP: 384 source Layer: Applications Title: combo() Output Script Descriptors Authors: Pieter Wuille Ava Chow Status: Deployed Type: Informational Assigned: 2021-06-27 License: BSD-2-Clause Requires: 380 Table of ContentsAbstractCopyrightMotivationSpecificationTest VectorsBackwards CompatibilityReference Implementation Abstract This document specifies combo() output script descriptors. These take a key and produce P2PK, P2PKH, P2WPKH, and P2SH-P2WPKH output scripts if applicable to the key. Copyright This BIP is licensed under the BSD 2-clause license. Motivation In order to make the transition from traditional key based wallets to descriptor based wallets easier, it is useful to be able to take a key and produce the scripts which have traditionally been produced by wallet software. Specification A new top level script expression is defined: combo(KEY). This expression can only be used as a top level expression. It takes a single key expression as an arg...
382 - Segwit Output Script Descriptors
BIP: 382 source Layer: Applications Title: Segwit Output Script Descriptors Authors: Pieter Wuille Ava Chow Status: Deployed Type: Informational Assigned: 2021-06-27 License: BSD-2-Clause Requires: 380 Table of ContentsAbstractCopyrightMotivationSpecificationwpkh()wsh()Test VectorsBackwards CompatibilityReference Implementation Abstract This document specifies wpkh(), and wsh() output script descriptors. wpkh() descriptors take a key and produces a P2WPKH output script. wsh() descriptors take a script and produces a P2WSH output script. Copyright This BIP is licensed under the BSD 2-clause license. Motivation Segregated Witness added 2 additional standard output script formats: P2WPKH and P2WSH. These expressions allow specifying those formats as a descriptor. Specification Two new script expressions are defined: wpkh(), and wsh(). wpkh() The wpkh(KEY) expression can be used as a top level expression, or inside of a sh() descriptor. It takes a single k...
381 - Non-Segwit Output Script Descriptors
BIP: 381 source Layer: Applications Title: Non-Segwit Output Script Descriptors Authors: Pieter Wuille Ava Chow Status: Deployed Type: Informational Assigned: 2021-06-27 License: BSD-2-Clause Requires: 380 Table of ContentsAbstractCopyrightMotivationSpecificationpk()pkh()sh()Test VectorsBackwards CompatibilityReference Implementation Abstract This document specifies pk(), pkh(), and sh() output script descriptors. pk() descriptors take a key and produces a P2PK output script. pkh() descriptors take a key and produces a P2PKH output script. sh() descriptors take a script and produces a P2SH output script. Copyright This BIP is licensed under the BSD 2-clause license. Motivation Prior to the activation of Segregated Witness, there were 3 main standard output script formats: P2PK, P2PKH, and P2SH. These expressions allow specifying those formats as a descriptor. Specification Three new script expressions are defined: pk(), pkh(), and sh(). pk() The pk(KEY...
86 - Key Derivation for Single Key P2TR Outputs
BIP: 86 source Layer: Applications Title: Key Derivation for Single Key P2TR Outputs Authors: Ava Chow Status: Deployed Type: Specification Assigned: 2021-06-22 License: BSD-2-Clause Table of ContentsAbstractCopyrightMotivationSpecificationsPublic key derivationAddress derivationBackwards CompatibilityTest vectorsReference Abstract This document suggests a derivation scheme for HD wallets whose keys are involved in single key P2TR (BIP 341) outputs as the Taproot internal key. Copyright This BIP is licensed under the 2-clause BSD license. Motivation With the usage of single key P2TR transactions, it is useful to have a common derivation scheme so that HD wallets that only have a backup of the HD seed can be likely to recover single key Taproot outputs. Although there are now solutions which obviate the need for fixed derivation paths for specific script types, many software wallets and hardware signers still use seed backups which lack derivation path and script infor...
387 - Tapscript Multisig Output Script Descriptors
BIP: 387 source Layer: Applications Title: Tapscript Multisig Output Script Descriptors Authors: Pieter Wuille Ava Chow Status: Deployed Type: Informational Assigned: 2024-04-17 License: BSD-2-Clause Requires: 380 Table of ContentsAbstractCopyrightMotivationSpecificationsortedmulti_a()Multiple Extended KeysTest VectorsBackwards CompatibilityReference Implementation Abstract This document specifies multi_a() and sortedmulti_a() output script descriptors. Like BIP 383's multi() and sortedmulti(), both functions take a threshold and one or more public keys and produce a multisig script. The primary distinction is that multi_a() and sortedmulti_a() only produce tapscripts and are only allowed in a tapscript context. Copyright This BIP is licensed under the BSD 2-clause license. Motivation The most common complex script used in Bitcoin is a threshold multisig. These expressions allow specifying multisig scripts as a descriptor. Specification Two new script e...
328 - Derivation Scheme for MuSig2 Aggregate Keys
BIP: 328 source Layer: Applications Title: Derivation Scheme for MuSig2 Aggregate Keys Authors: Ava Chow Status: Complete Type: Informational Assigned: 2024-06-04 License: CC0-1.0 Table of ContentsAbstractCopyrightMotivationSpecificationTest VectorsBackwards CompatibilityRationaleReference ImplementationAcknowledgements Abstract This document specifies how BIP 32 extended public keys can be constructed from a BIP 327 MuSig2 aggregate public key and how such keys should be used for key derivation. Copyright This BIP is licensed under the Creative Commons CC0 1.0 Universal license. Motivation Multiple signers can create a single aggregate public key with MuSig2 that is indistinguishable from a random public key. The cosigners need a method for generating additional aggregate pubkeys to follow the best practice of using a new address for every payment. The obvious method is for the cosigners to generate multiple public keys and produce a new aggregate pubkey every time on...
383 - Multisig Output Script Descriptors
BIP: 383 source Layer: Applications Title: Multisig Output Script Descriptors Authors: Pieter Wuille Ava Chow Status: Deployed Type: Informational Assigned: 2021-06-27 License: BSD-2-Clause Requires: 380 Table of ContentsAbstractCopyrightMotivationSpecificationsortedmulti()Multiple Extended KeysTest VectorsBackwards CompatibilityReference Implementation Abstract This document specifies multi(), and sortedmulti() output script descriptors. Both functions take a threshold and one or more public keys and produce a multisig output script. multi() specifies the public keys in the output script in the order given in the descriptor while sortedmulti() sorts the public keys lexicographically when the output script is produced. Copyright This BIP is licensed under the BSD 2-clause license. Motivation The most common complex script used in Bitcoin is a threshold multisig. These expressions allow specifying multisig scripts as a descriptor. Specification Two new s...
386 - tr() Output Script Descriptors
BIP: 386 source Layer: Applications Title: tr() Output Script Descriptors Authors: Pieter Wuille Ava Chow Status: Deployed Type: Informational Assigned: 2021-06-27 License: BSD-2-Clause Requires: 380 Table of ContentsAbstractCopyrightMotivationSpecificationTree Expressiontr()Modified Key ExpressionTest VectorsBackwards CompatibilityReference Implementation Abstract This document specifies tr() output script descriptors. tr() descriptors take a key and optionally a tree of scripts and produces a P2TR output script. Copyright This BIP is licensed under the BSD 2-clause license. Motivation Taproot added one additional standard output script format: P2TR. These expressions allow specifying those formats as a descriptor. Specification A new script expression is defined: tr(). A new expression is defined: Tree Expressions Tree Expression A Tree Expression (denoted TREE) is an expression which represents a tree of scripts. The way the tree is represented in a...
390 - musig() Descriptor Key Expression
BIP: 390 source Layer: Applications Title: musig() Descriptor Key Expression Authors: Ava Chow Status: Draft Type: Informational Assigned: 2024-06-04 License: CC0-1.0 Requires: 380, 328 Table of ContentsAbstractCopyrightMotivationSpecificationmusig(KEY, KEY, ..., KEY)musig(KEY, KEY, ..., KEY)/NUM/.../*Test VectorsBackwards CompatibilityRationaleReference ImplementationAcknowledgements Abstract This document specifies a musig() key expression for output script descriptors. musig() expressions take multiple keys and produce an aggregate public key using BIP-327. Copyright This BIP is licensed under the Creative Commons CC0 1.0 Universal license. Motivation BIP-327 introduces the MuSig2 Multi-Signature scheme. It is useful to have a way for keys to be used in a MuSig2 aggregate key to be expressed in descriptors so that wallets can more easily use MuSig2. Specification A new key expression is defined: musig(). In the following sections, the term KEY refers to key expre...
389 - Multipath Descriptor Key Expressions
BIP: 389 source Layer: Applications Title: Multipath Descriptor Key Expressions Authors: Ava Chow Status: Draft Type: Informational Assigned: 2022-07-26 License: BSD-2-Clause Requires: 380 Table of ContentsAbstractCopyrightMotivationSpecificationTest VectorsBackwards CompatibilityReference Implementation Abstract This document specifies a modification to Key Expressions of Descriptors that are described in BIP 380. This modification allows Key Expressions to indicate BIP 32 derivation path steps that can have multiple values. Copyright This BIP is licensed under the BSD 2-clause license. Motivation Descriptors can describe the scripts that are used in a wallet, but wallets often require at least two descriptors for all of the scripts that they watch for. Wallets typically have one descriptor for producing receiving addresses, and the other for change addresses. These descriptors are often extremely similar - they produce the same types of scripts, derive keys from t...
371 - Taproot Fields for PSBT
BIP: 371 source Layer: Applications Title: Taproot Fields for PSBT Authors: Ava Chow Status: Deployed Type: Specification Assigned: 2021-06-21 License: BSD-2-Clause Table of ContentsIntroductionAbstractCopyrightMotivationSpecificationUTXO TypesCompatibilityTest VectorsRationaleReference implementationAcknowledgements Introduction Abstract This document proposes additional fields for BIP 174 PSBTv0 and BIP 370 PSBTv2 that allow for BIP 340/341/342 Taproot data to be included in a PSBT of any version. These will be fields for signatures and scripts that are relevant to the creation of Taproot inputs. Copyright This BIP is licensed under the 2-clause BSD license. Motivation BIPs 340, 341, and 342 specify Taproot which provides a wholly new way to create and spend Bitcoin outputs. The existing PSBT fields are unable to support Taproot due to the new signature algorithm and the method by which scripts are embedded inside of a Taproot output. Therefore new fields must be ...
373 - MuSig2 PSBT Fields
BIP: 373 source Layer: Applications Title: MuSig2 PSBT Fields Authors: Ava Chow Status: Complete Type: Specification Assigned: 2024-06-04 License: CC0-1.0 Requires: 32, 174, 327, 328, 370 Table of ContentsIntroductionAbstractCopyrightMotivationSpecificationRolesUpdaterSignerFinalizerBackwards CompatibilityTest VectorsRationaleReference implementationAcknowledgements Introduction Abstract This document proposes additional fields for BIP 174 PSBTv0 and BIP 370 PSBTv2 that allow for BIP 327 MuSig2 Multi-Signature data to be included in a PSBT of any version. These will be fields for the participants' keys, the public nonces, and the partial signatures produced with MuSig2. Copyright This BIP is licensed under the Creative Commons CC0 1.0 Universal license. Motivation BIP 327 specifies a way to create BIP 340 compatible public keys and signatures using the MuSig2 Multi-Signature scheme. The existing PSBT fields are unable to support MuSig2 as it introduces new concep...
375 - Sending Silent Payments with PSBTs
BIP: 375 source Layer: Applications Title: Sending Silent Payments with PSBTs Authors: Andrew Toth Ava Chow josibake Status: Draft Type: Specification Assigned: 2025-01-08 License: BSD-2-Clause Discussion: https://groups.google.com/g/bitcoindev/c/5G5wzqUXyk4 Requires: 352, 370, 374 Table of ContentsIntroductionAbstractCopyrightMotivationSpecificationUnique IdentificationRolesConstructorUpdaterChange DetectionSignerComputing the ECDH Shares and DLEQ ProofsVerifying the DLEQ ProofComputing the Output ScriptsTransaction ExtractorBackwards CompatibilityTest VectorsRationaleReference implementation Introduction Abstract This document proposes additional fields and updated role responsibilities for BIP370 PSBTv2 which adds support for sending to silent payments as described in BIP352. Copyright This BIP is licensed under the 2-clause BSD license. Motivation Partially Signed Bitcoin Transaction Version 2 as described in BIP370 is not compatible ...
380 - Output Script Descriptors General Operation
BIP: 380 source Layer: Applications Title: Output Script Descriptors General Operation Authors: Pieter Wuille Ava Chow Status: Deployed Type: Informational Assigned: 2021-06-27 License: BSD-2-Clause Table of ContentsAbstractCopyrightMotivationSpecificationScript ExpressionsKey ExpressionsNormalization of Key Expressions with Hardened DerivationCharacter SetChecksumTest VectorsBackwards CompatibilityReference ImplementationAppendix A: Index of ExpressionsAppendix B: Index of Script Expressions Abstract Output Script Descriptors are a simple language which can be used to describe collections of output scripts. There can be many different descriptor fragments and functions. This document describes the general syntax for descriptors, descriptor checksums, and common expressions. Copyright This BIP is licensed under the BSD 2-clause license. Motivation Bitcoin wallets traditionally have stored a set of keys which are later serialized and mutated to produce the ...
370 - PSBT Version 2
BIP: 370 source Layer: Applications Title: PSBT Version 2 Authors: Ava Chow Status: Deployed Type: Specification Assigned: 2021-01-14 License: BSD-2-Clause Table of ContentsIntroductionAbstractCopyrightMotivationSpecificationDetermining Lock TimeUnique IdentificationRolesCreatorConstructorUpdaterSignerTransaction ExtractorBackwards CompatibilityTest VectorsRationaleReference implementation Introduction Abstract This document proposes a second version of the Partially Signed Bitcoin Transaction format described in BIP 174 which allows for inputs and outputs to be added to the PSBT after creation. Copyright This BIP is licensed under the 2-clause BSD license. Motivation Partially Signed Bitcoin Transaction Version 0 as described in BIP 174 is unable to have new inputs and outputs be added to the transaction. The fixed global unsigned transaction cannot be changed which prevents any additional inputs or outputs to be added. PSBT Version 2 is intended to rectify this pr...
379 - Miniscript
BIP: 379 source Layer: Applications Title: Miniscript Authors: Pieter Wuille Andrew Poelstra Sanket Kanjalkar Antoine Poinsot Ava Chow Status: Draft Type: Informational Assigned: 2023-10-10 License: CC0-1.0 Requires: 380 Abstract This document specifies Miniscript, a language for writing (a subset of) Bitcoin Scripts in a structured way, enabling analysis, composition, generic signing and more. Copyright This document is licensed under the Creative Commons CC0 1.0 Universal license. Motivation Bitcoin Script is an unusual stack-based language with many edge cases, designed for implementing spending conditions consisting of various combinations of signatures, hash locks, and time locks. Yet, despite being limited in functionality, it is still highly nontrivial to: Given a combination of spending conditions, finding the most economical script to implement it. Given two scripts, construct a script that implements a composition...
174 - Partially Signed Bitcoin Transaction Format
BIP: 174 source Layer: Applications Title: Partially Signed Bitcoin Transaction Format Authors: Ava Chow Comments-Summary: No comments yet. Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0174 Status: Deployed Type: Specification Assigned: 2017-07-12 License: BSD-2-Clause Table of ContentsIntroductionAbstractCopyrightMotivationSpecificationHandling Duplicated KeysProprietary Use TypeVersion 0RolesCreatorUpdaterSignerData Signers Check ForSimple Signer AlgorithmChange DetectionCombinerInput FinalizerTransaction ExtractorEncodingExtensibilityVersion NumbersProcedure For New FieldsProcedure For New VersionsCompatibilityExamplesManual CoinJoin Workflow2-of-3 Multisig WorkflowTest VectorsRationaleReference implementationAcknowledgements Introduction Abstract This document proposes a binary transaction format which contains the information necessary for a signer to produce signatures for the transaction and holds the signatures for an input while the inp...