协议演进 / BIP/比特币改进提案 / BIP-84
BIP-84
为原生 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 的目标有二:
- 让用户用同一个主种子,在不同兼容钱包之间无缝使用同一个账户;
- 为 SegWit 单独开设专用账户,保证只有兼容本 BIP 的钱包才会发现并正确处理这些账户——发现不了,比发现错了更安全。
其取舍直接沿用 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 扩展密钥版本字节
序列化扩展密钥时使用另一套版本字节,以前缀区分账户类型:
- 扩展公钥
0x04b24746,前缀 zpub;扩展私钥0x04b2430c,前缀 zprv; - 测试网:公钥
0x045f1cf6(vpub),私钥0x045f18bc(vprv)。
更多已登记的版本字节见 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,而不是先怀疑种子错了。
