协议演进 / BIP/比特币改进提案 / BIP-84

BIP-84 基于 P2WPKH 账户的派生方案

为原生 SegWit 的 P2WPKH 账户定下统一派生路径 m/84’/…,让只备份种子就能在不同钱包间找回同一批地址。本 BIP 目前处于已部署状态。

一、档案卡

档案卡
编号BIP-84
标题Derivation scheme for P2WPKH based accounts
作者Pavol Rusnak <[email protected]>
指定日期2017-12-28
层级Applications(应用)
类型Specification(规范类)
状态Deployed(已部署)
阅读版https://bips.dev/84
官方原文https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki

二、放在哪一族

HD 钱包派生路径族的一员,与单签账户的几条姊妹规范并列:

BIP-32:分层确定性钱包(一切派生的根)

BIP-43:用 purpose 字段区分用途

BIP-44:多账户层级(P2PKH,purpose 44’)

BIP-49:P2WPKH 嵌套 P2SH 账户(purpose 49’)

BIP-84 补的是原生 SegWit 这一格:purpose 换成 84’,地址是 BIP-173 的 Bech32 格式(bc1q…)。后续 BIP-86 用同样的套路为 Taproot 单密钥输出定了 86’。

这一族的共同约定是:路径本身就标明脚本类型,不兼容的钱包干脆扫不到账户,而不是扫错、显示错余额。

三、它要解决什么

P2WPKH 交易开始使用后,需要一套共同的派生方案。没有统一路径时,同一个主种子(masterseed)导入不同 HD 钱包,会派生出完全不同的地址,用户换钱包就等于“丢了账户”。

BIP-84 的目标有二:

其取舍直接沿用 BIP-49 Considerations 一节的理由:用 purpose 区分序列化/脚本类型,刻意不做向后兼容。

四、规则本身

4.1 公钥派生路径

沿用 BIP-44 与 BIP-49 的账户结构,只改 purpose 一层:

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

其中 purpose 固定为 84';其余各层(币种、账户、外部/内部链、地址索引)的含义与用法照 BIP-44、BIP-49 的定义。带 ' 的层用硬化派生。

4.2 地址派生

由上述路径得到公钥后,按 BIP-141 对 P2WPKH 的封装生成地址:

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

即见证版本 0 加 20 字节公钥哈希,再按 BIP-173 编码为 bc1q… 地址。

4.3 扩展密钥版本字节

序列化扩展密钥时使用另一套版本字节,以前缀区分账户类型:

更多已登记的版本字节见 SLIP-0132。原文附有完整测试向量(助记词、账户 0 的 zprv/zpub,以及前两个收款地址与第一个找零地址),实现者可逐项核对。

五、谁必须动

普通持币人:只需备份好种子。换钱包时选支持 BIP-84 的钱包,原生 SegWit 账户会自动被发现;若钱包不支持,这些地址不会显示,但币并未丢失。

钱包开发者:实现 m/84’/… 路径、P2WPKH 地址生成与 zpub/zprv 序列化,并按测试向量验证。

全节点与矿工:无须改动。本 BIP 只约定钱包内部的派生方式,不改共识与网络规则。

共识层:无变化。P2WPKH 的合法性由 BIP-141 等 SegWit 规范定义,与本 BIP 无关。

六、现在算不算数,以及一个常见误读

状态为 Deployed。按仓库状态含义,这表示该方案已被实际部署使用:m/84’… 是今天原生 SegWit 单签账户最常见的派生路径,bc1q… 地址的恢复通常就靠它。

常见误读:“用同一个种子,任何钱包都能找回我全部的币。”

不对。一个种子可以同时派生 44’、49’、84’、86’ 等多套账户;钱包只会发现它实现并扫描的那些路径。导入后余额为零,先确认钱包是否支持 BIP-84,而不是先怀疑种子错了。

七、延伸

本页内容整理自 bitcoin/bips 仓库与 bips.dev,事实已与仓库核对;解读仅供学习参考。