forked from bitcoin/bips
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request bitcoin#620 from satoshilabs/master
BIP 84: Derivation scheme for P2WPKH based accounts
- Loading branch information
Showing
2 changed files
with
97 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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]] |