mirror of https://github.com/lukechilds/bips.git
Luke Dashjr
7 years ago
committed by
GitHub
2 changed files with 97 additions and 0 deletions
@ -0,0 +1,90 @@ |
|||||
|
<pre> |
||||
|
BIP: 84 |
||||
|
Layer: Applications |
||||
|
Title: Derivation scheme for P2WPKH based accounts |
||||
|
Author: Pavol Rusnak <stick@satoshilabs.com> |
||||
|
Comments-Summary: No comments yet. |
||||
|
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0084 |
||||
|
Status: Draft |
||||
|
Type: Informational |
||||
|
Created: 2017-12-28 |
||||
|
License: CC0-1.0 |
||||
|
</pre> |
||||
|
|
||||
|
==Abstract== |
||||
|
|
||||
|
This BIP defines the derivation scheme for HD wallets using the P2WPKH ([[bip-0173.mediawiki|BIP 173]]) serialization format for segregated witness transactions. |
||||
|
|
||||
|
==Motivation== |
||||
|
|
||||
|
With the usage of P2WPKH transactions it is necessary to have a common derivation scheme. |
||||
|
It allows the user to use different HD wallets with the same masterseed and/or a single account seamlessly. |
||||
|
|
||||
|
Thus the user needs to create dedicated segregated witness accounts, which ensures that only wallets compatible with this BIP will detect the accounts and handle them appropriately. |
||||
|
|
||||
|
===Considerations=== |
||||
|
|
||||
|
We use the same rationale as described in Considerations section of [[bip-0049.mediawiki|BIP 49]]. |
||||
|
|
||||
|
==Specifications== |
||||
|
|
||||
|
This BIP defines the two needed steps to derive multiple deterministic addresses based on a [[bip-0032.mediawiki|BIP 32]] root account. |
||||
|
|
||||
|
===Public key derivation=== |
||||
|
|
||||
|
To derive a public key from the root account, this BIP uses the same account-structure as defined in [[bip-0044.mediawiki|BIP 44]] and [[bip-0049.mediawiki|BIP 49]], but only uses a different purpose value to indicate the different transaction serialization method. |
||||
|
|
||||
|
<pre> |
||||
|
m / purpose' / coin_type' / account' / change / address_index |
||||
|
</pre> |
||||
|
|
||||
|
For the <code>purpose</code>-path level it uses <code>84'</code>. The rest of the levels are used as defined in BIP44 or BIP49. |
||||
|
|
||||
|
|
||||
|
===Address derivation=== |
||||
|
|
||||
|
To derive the P2WPKH address from the above calculated public key, we use the encapsulation defined in [[bip-0141.mediawiki#p2wpkh|BIP 141]]: |
||||
|
|
||||
|
|
||||
|
witness: <signature> <pubkey> |
||||
|
scriptSig: (empty) |
||||
|
scriptPubKey: 0 <20-byte-key-hash> |
||||
|
(0x0014{20-byte-key-hash}) |
||||
|
|
||||
|
==Backwards Compatibility== |
||||
|
|
||||
|
This BIP is not backwards compatible by design as described under [#considerations]. An incompatible wallet will not discover accounts at all and the user will notice that something is wrong. |
||||
|
|
||||
|
==Test vectors== |
||||
|
|
||||
|
<pre> |
||||
|
mnemonic = abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about |
||||
|
rootnode = zprvAWgYBBk7JR8Gjrh4UJQ2uJdG1r3WNRRfURiABBE3RvMXYSrRJL62XuezvGdPvG6GFBZduosCc1YP5wixPox7zhZLfiUm8aunE96BBa4Kei5 |
||||
|
|
||||
|
// Account 0, root = m/84'/0'/0' |
||||
|
xpriv = zprvAdG4iTXWBoARxkkzNpNh8r6Qag3irQB8PzEMkAFeTRXxHpbF9z4QgEvBRmfvqWvGp42t42nvgGpNgYSJA9iefm1yYNZKEm7z6qUWCroSQnE |
||||
|
|
||||
|
// Account 0, first receiving address = m/84'/0'/0'/0/0 |
||||
|
privkey = KyZpNDKnfs94vbrwhJneDi77V6jF64PWPF8x5cdJb8ifgg2DUc9d |
||||
|
pubkey = 0330d54fd0dd420a6e5f8d3624f5f3482cae350f79d5f0753bf5beef9c2d91af3c |
||||
|
address = bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu |
||||
|
|
||||
|
// Account 0, second receiving address = m/84'/0'/0'/0/1 |
||||
|
privkey = Kxpf5b8p3qX56DKEe5NqWbNUP9MnqoRFzZwHRtsFqhzuvUJsYZCy |
||||
|
pubkey = 03e775fd51f0dfb8cd865d9ff1cca2a158cf651fe997fdc9fee9c1d3b5e995ea77 |
||||
|
address = bc1qnjg0jd8228aq7egyzacy8cys3knf9xvrerkf9g |
||||
|
|
||||
|
// Account 0, first change address = m/84'/0'/0'/1/0 |
||||
|
privkey = KxuoxufJL5csa1Wieb2kp29VNdn92Us8CoaUG3aGtPtcF3AzeXvF |
||||
|
pubkey = 03025324888e429ab8e3dbaf1f7802648b9cd01e9b418485c5fa4c1b9b5700e1a6 |
||||
|
address = bc1q8c6fshw2dlwun7ekn9qwf37cu2rn755upcp6el |
||||
|
</pre> |
||||
|
|
||||
|
==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-0141.mediawiki|BIP141 - Segregated Witness (Consensus layer)]] |
||||
|
* [[bip-0173.mediawiki|BIP173 - Base32 address format for native v0-16 witness outputs]] |
Loading…
Reference in new issue