ビットコイン・インスティテュート

BIP 84 — P2WPKHベースの​アカウントの​ための​導出方​式

BIP: 84
  Layer: Applications
  Title: Derivation scheme for P2WPKH based accounts
  Authors: Pavol Rusnak <stick@satoshilabs.com>
  Comments-Summary: No comments yet.
  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0084
  Status: Deployed
  Type: Specification
  Assigned: 2017-12-28
  License: CC0-1.0

概要

本BIPは、SegWitトランザクションのP2WPKH(BIP 173)シリアライズ形式を用いるHDウォレットの導出方式を定義する。

動機

P2WPKHトランザクションを使うには、共通の導出方式が必要である。 これにより、ユーザーは同じマスターシードや単一のアカウントを、異なるHDウォレット間でシームレスに使い回せるようになる。

したがってユーザーは、SegWit専用のアカウントを作成する必要がある。これにより、本BIPに対応したウォレットだけがそのアカウントを検出し、適切に扱えるようになる。

考慮事項

本BIPは、BIP 49の「考慮事項」節に述べられているものと同じ論拠を用いる。

仕様

本BIPは、BIP 32のルートアカウントを基点として複数の決定性アドレスを導出するために必要な、2つの手順を定義する。

公開鍵の導出

ルートアカウントから公開鍵を導出するにあたり、本BIPはBIP 44およびBIP 49で定義されているものと同じアカウント構造を用いるが、異なるトランザクションシリアライズ方式を示すために異なるpurpose値のみを用いる。

m / purpose' / coin_type' / account' / change / address_index

purposeパスレベルには84' を用いる。それ以外のレベルはBIP44またはBIP49で定義されているとおりに用いる。

アドレスの導出

上記で計算した公開鍵からP2WPKHアドレスを導出するには、BIP 141で定義されているカプセル化を用いる。

witness:      <signature> <pubkey>
scriptSig:    (empty)
scriptPubKey: 0 <20-byte-key-hash>
              (0x0014{20-byte-key-hash})

拡張鍵バージョン

拡張鍵をシリアライズする際、この方式では代替のバージョンバイトを用いる。拡張公開鍵は0x04b24746を用いて「zpub」接頭辞を生成し、拡張秘密鍵は0x04b2430cを用いて「zprv」接頭辞を生成する。テストネットでは0x045f1cf6「vpub」と0x045f18bc「vprv」を用いる。

その他の登録済みバージョンバイトはSLIP-0132 (https://github.com/satoshilabs/slips/blob/master/slip-0132.md)に一覧化されている。

後方互換性

本BIPは、「考慮事項」で述べたとおり、設計上後方互換性を持たない。非対応のウォレットはアカウントをまったく検出できないため、ユーザーは何かがおかしいとすぐに気づくことになる。

テストベクトル

  mnemonic = abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
  rootpriv = zprvAWgYBBk7JR8Gjrh4UJQ2uJdG1r3WNRRfURiABBE3RvMXYSrRJL62XuezvGdPvG6GFBZduosCc1YP5wixPox7zhZLfiUm8aunE96BBa4Kei5
  rootpub  = zpub6jftahH18ngZxLmXaKw3GSZzZsszmt9WqedkyZdezFtWRFBZqsQH5hyUmb4pCEeZGmVfQuP5bedXTB8is6fTv19U1GQRyQUKQGUTzyHACMF

  // Account 0, root = m/84'/0'/0'
  xpriv = zprvAdG4iTXWBoARxkkzNpNh8r6Qag3irQB8PzEMkAFeTRXxHpbF9z4QgEvBRmfvqWvGp42t42nvgGpNgYSJA9iefm1yYNZKEm7z6qUWCroSQnE
  xpub  = zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs

  // 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

参照

  • BIP32 - Hierarchical Deterministic Wallets
  • BIP43 - Purpose Field for Deterministic Wallets
  • BIP44 - Multi-Account Hierarchy for Deterministic Wallets
  • BIP49 - Derivation scheme for P2WPKH-nested-in-P2SH based accounts
  • BIP141 - Segregated Witness (Consensus layer)
  • BIP173 - Base32 address format for native v0-16 witness outputs