diff --git a/README.mediawiki b/README.mediawiki index d8bcae62a5..a3a7406f51 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -434,6 +434,13 @@ Those proposing changes should consider that ultimately consent may rest with th | Ethan Kosakovsky | Informational | Draft +|- +| [[bip-0086.mediawiki|86]] +| Applications +| Key Derivation for Single Key P2TR Outputs +| Andrew Chow +| Standard +| Draft |- style="background-color: #ffffcf" | [[bip-0087.mediawiki|87]] | Applications @@ -1029,6 +1036,55 @@ Those proposing changes should consider that ultimately consent may rest with th | Andrew Chow | Standard | Draft +|- +| [[bip-descriptors-general.mediawiki|bip-descriptors-general]] +| Applications +| Output Script Descriptors General Operation +| Pieter Wuille, Andrew Chow +| Informational +| Draft +|- +| [[bip-descriptors-non-segwit.mediawiki|bip-descriptors-non-segwit]] +| Applications +| Non-Segwit Output Script Descriptors +| Pieter Wuille, Andrew Chow +| Informational +| Draft +|- +| [[bip-descriptors-segwit.mediawiki|bip-descriptors-segwit]] +| Applications +| Segwit Output Script Descriptors +| Pieter Wuille, Andrew Chow +| Informational +| Draft +|- +| [[bip-descriptors-multi.mediawiki|bip-descriptors-multi]] +| Applications +| Multisig Output Script Descriptors +| Pieter Wuille, Andrew Chow +| Informational +| Draft +|- +| [[bip-descriptors-combo.mediawiki|bip-descriptors-combo]] +| Applications +| combo() Output Script Descriptors +| Pieter Wuille, Andrew Chow +| Informational +| Draft +|- +| [[bip-descriptors-raw-addr.mediawiki|bip-descriptors-raw-addr]] +| Applications +| raw() and addr() Output Script Descriptors +| Pieter Wuille, Andrew Chow +| Informational +| Draft +|- +| [[bip-descriptors-tr.mediawiki|bip-descriptors-tr]] +| Applications +| tr() Output Script Descriptors +| Pieter Wuille, Andrew Chow +| Informational +| Draft |} diff --git a/bip-0032.mediawiki b/bip-0032.mediawiki index b8152e7663..88c2dbbcd9 100644 --- a/bip-0032.mediawiki +++ b/bip-0032.mediawiki @@ -119,7 +119,7 @@ To shorten notation, we will write CKDpriv(CKDpriv(CKDpriv(m,3H),2),5 * N(m/aH/b/c) = N(m/aH/b)/c = N(m/aH)/b/c. However, N(m/aH) cannot be rewritten as N(m)/aH, as the latter is not possible. -Each leaf node in the tree corresponds to an actual key, while the internal nodes correspond to the collections of keys that descend from them. The chain codes of the leaf nodes are ignored, and only their embedded private or public key is relevant. Because of this construction, knowing an extended private key allows reconstruction of all descendant private keys and public keys, and knowing an extended public keys allows reconstruction of all descendant non-hardened public keys. +Each leaf node in the tree corresponds to an actual key, while the internal nodes correspond to the collections of keys that descend from them. The chain codes of the leaf nodes are ignored, and only their embedded private or public key is relevant. Because of this construction, knowing an extended private key allows reconstruction of all descendant private keys and public keys, and knowing an extended public key allows reconstruction of all descendant non-hardened public keys. ===Key identifiers=== diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki index 498694c3ce..4ac3c556d9 100644 --- a/bip-0039.mediawiki +++ b/bip-0039.mediawiki @@ -163,7 +163,7 @@ Haskell: * https://github.com/NicolasDorier/NBitcoin JavaScript: -* https://github.com/bitpay/bitcore-mnemonic +* https://github.com/bitpay/bitcore/tree/master/packages/bitcore-mnemonic * https://github.com/bitcoinjs/bip39 (used by [[https://github.com/blockchain/My-Wallet-V3/blob/v3.8.0/src/hd-wallet.js#L121-L146|blockchain.info]]) Java: diff --git a/bip-0086.mediawiki b/bip-0086.mediawiki new file mode 100644 index 0000000000..f724884e8a --- /dev/null +++ b/bip-0086.mediawiki @@ -0,0 +1,128 @@ +
+  BIP: 86
+  Layer: Applications
+  Title: Key Derivation for Single Key P2TR Outputs
+  Author: Andrew Chow 
+  Comments-Summary: No comments yet.
+  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0086
+  Status: Draft
+  Type: Standards Track
+  Created: 2021-06-22
+  License: BSD-2-Clause
+
+ +==Abstract== + +This document suggests a derivation scheme for HD wallets whose keys are involved in single key +P2TR ([[bip-0341.mediawiki|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 information. Thus we largely use the same approach used in BIPs +[[bip-0049.mediawiki|49]] and [[bip-0084.mediawiki|84]] for ease of implementation. + +==Specifications== + +This BIP defines the two needed steps to derive multiple deterministic addresses based on a +[[bip-0032.mediawiki|BIP 32]] master private key. + +===Public key derivation=== + +To derive a public key from the root account, this BIP uses the same account-structure as +defined in BIPs [[bip-0044.mediawiki|44]], [[bip-0049.mediawiki|49]], and [[bip-0084.mediawiki|84]], +but with a different purpose value for the script type. + +
+m / purpose' / coin_type' / account' / change / address_index
+
+ +For the purpose-path level it uses 86'. +The rest of the levels are used as defined in BIPs 44, 49, and 84. + +A key derived with this derivation path pattern will be referred to as derived_key further +in this document. + +===Address derivation=== + + +[[bip-0341.mediawiki#cite_ref-22-0|BIP 341]] states: "If the spending conditions do not require a +script path, the output key should commit to an unspendable script path instead of having no +script path. This can be achieved by computing the output key point as +''Q = P + int(hashTapTweak(bytes(P)))G''." Thus: + +
+internal_key:       lift_x(derived_key)
+32_byte_output_key: internal_key + int(HashTapTweak(bytes(internal_key)))G
+
+ +In a transaction, the scripts and witnesses are as defined in +[[bip-0341.mediawiki#specification|BIP 341]]: + +
+witness:      
+scriptSig:    (empty)
+scriptPubKey: 1 <32_byte_output_key>
+              (0x5120{32_byte_output_key})
+
+ +==Backwards Compatibility== + +This BIP is not backwards compatible by design. +An incompatible wallet will not discover these accounts at all and the user will notice that +something is wrong. + +However this BIP uses the same method used in BIPs 44, 49, and 84, so it should not be difficult +to implement. + +==Test vectors== + +
+mnemonic = abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
+rootpriv = xprv9s21ZrQH143K3GJpoapnV8SFfukcVBSfeCficPSGfubmSFDxo1kuHnLisriDvSnRRuL2Qrg5ggqHKNVpxR86QEC8w35uxmGoggxtQTPvfUu
+rootpub  = xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8
+
+// Account 0, root = m/86'/0'/0'
+xprv = xprv9xgqHN7yz9MwCkxsBPN5qetuNdQSUttZNKw1dcYTV4mkaAFiBVGQziHs3NRSWMkCzvgjEe3n9xV8oYywvM8at9yRqyaZVz6TYYhX98VjsUk
+xpub = xpub6BgBgsespWvERF3LHQu6CnqdvfEvtMcQjYrcRzx53QJjSxarj2afYWcLteoGVky7D3UKDP9QyrLprQ3VCECoY49yfdDEHGCtMMj92pReUsQ
+
+// Account 0, first receiving address = m/86'/0'/0'/0/0
+xprv         = xprvA449goEeU9okwCzzZaxiy475EQGQzBkc65su82nXEvcwzfSskb2hAt2WymrjyRL6kpbVTGL3cKtp9herYXSjjQ1j4stsXXiRF7kXkCacK3T
+xpub         = xpub6H3W6JmYJXN49h5TfcVjLC3onS6uPeUTTJoVvRC8oG9vsTn2J8LwigLzq5tHbrwAzH9DGo6ThGUdWsqce8dGfwHVBxSbixjDADGGdzF7t2B
+internal_key = cc8a4bc64d897bddc5fbc2f670f7a8ba0b386779106cf1223c6fc5d7cd6fc115
+output_key   = a60869f0dbcf1dc659c9cecbaf8050135ea9e8cdc487053f1dc6880949dc684c
+scriptPubKey = 5120a60869f0dbcf1dc659c9cecbaf8050135ea9e8cdc487053f1dc6880949dc684c
+address      = bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr
+
+// Account 0, second receiving address = m/86'/0'/0'/0/1
+xprv         = xprvA449goEeU9okyiF1LmKiDaTgeXvmh87DVyRd35VPbsSop8n8uALpbtrUhUXByPFKK7C2yuqrB1FrhiDkEMC4RGmA5KTwsE1aB5jRu9zHsuQ
+xpub         = xpub6H3W6JmYJXN4CCKUSnriaiQRCZmG6aq4sCMDqTu1ACyngw7HShf59hAxYjXgKDuuHThVEUzdHrc3aXCr9kfvQvZPit5dnD3K9xVRBzjK3rX
+internal_key = 83dfe85a3151d2517290da461fe2815591ef69f2b18a2ce63f01697a8b313145
+output_key   = a82f29944d65b86ae6b5e5cc75e294ead6c59391a1edc5e016e3498c67fc7bbb
+scriptPubKey = 5120a82f29944d65b86ae6b5e5cc75e294ead6c59391a1edc5e016e3498c67fc7bbb
+address      = bc1p4qhjn9zdvkux4e44uhx8tc55attvtyu358kutcqkudyccelu0was9fqzwh
+
+// Account 0, first change address = m/86'/0'/0'/1/0
+xprv         = xprvA3Ln3Gt3aphvUgzgEDT8vE2cYqb4PjFfpmbiFKphxLg1FjXQpkAk5M1ZKDY15bmCAHA35jTiawbFuwGtbDZogKF1WfjwxML4gK7WfYW5JRP
+xpub         = xpub6GL8SnQwRCGDhB59LEz9HMyM6sRYoByXBzXK3iEKWgCz8XrZNHUzd9L3AUBELW5NzA7dEFvMas1F84TuPH3xqdUA5tumaGWFgihJzWytXe3
+internal_key = 399f1b2f4393f29a18c937859c5dd8a77350103157eb880f02e8c08214277cef
+output_key   = 882d74e5d0572d5a816cef0041a96b6c1de832f6f9676d9605c44d5e9a97d3dc
+scriptPubKey = 5120882d74e5d0572d5a816cef0041a96b6c1de832f6f9676d9605c44d5e9a97d3dc
+address      = bc1p3qkhfews2uk44qtvauqyr2ttdsw7svhkl9nkm9s9c3x4ax5h60wqwruhk7
+
+ +==Reference== + +* [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]] +* [[bip-0043.mediawiki|BIP43 - Purpose Field for Deterministic Wallets]] +* [[bip-0044.mediawiki|BIP44 - Multi-Account Hierarchy for Deterministic Wallets]] +* [[bip-0049.mediawiki|BIP49 - Derivation scheme for P2WPKH-nested-in-P2SH based accounts]] +* [[bip-0084.mediawiki|BIP84 - Derivation scheme for P2WPKH based accounts]] +* [[bip-0341.mediawiki|BIP341 - Taproot: SegWit version 1 spending rules]] diff --git a/bip-0155.mediawiki b/bip-0155.mediawiki index 19f92f24e5..3e7b0d829d 100644 --- a/bip-0155.mediawiki +++ b/bip-0155.mediawiki @@ -131,7 +131,7 @@ See the appendices for the address encodings to be used for the various networks ==Signaling support and compatibility== -Introduce a new message type sendaddrv2. Sending such a message indicates that a node can understand and prefers to receive addrv2 messages instead of addr messages. I.e. "Send me addrv2". +Introduce a new message type sendaddrv2. Sending such a message indicates that a node can understand and prefers to receive addrv2 messages instead of addr messages. I.e. "Send me addrv2". Sending or not sending this message does not imply any preference with respect to receiving unrequested address messages. The sendaddrv2 message MUST only be sent in response to the version message from a peer and prior to sending the verack message. diff --git a/bip-0174.mediawiki b/bip-0174.mediawiki index b211434699..f3de964f97 100644 --- a/bip-0174.mediawiki +++ b/bip-0174.mediawiki @@ -501,7 +501,7 @@ determine which outputs are change outputs and verify that the change is returni | [[bip-psb2.mediawiki|psbt2]] |- | Output Script -| PSBT_OUT_SCRIPT = 0x03 +| PSBT_OUT_SCRIPT = 0x04 | None | No key data |