跳转到正文
buybitcoinsmart

术语表 /地址与密钥

BIP-84派生

BIP-84派生是什么?
BIP-84派生是一种将 BIP-32路径的 purpose 层级设为84' 的方案,因此同一助记词可通过 BIP-141中的 P2WPKH 封装生成原生 SegWit 的 bc1q 地址。

规定于 BIP-84。

BIP-84沿用 BIP-44的五层结构,只改变 purpose 的取值。它于2017年12月28日分配,并为每个账户配以版本字节为0x04b24746 的 zpub 扩展密钥。对您而言,它决定了恢复出的助记词能否找到您的 bc1q 余额,还是显示为空钱包。

运作方式

BIP-84做了两件事,第一件是在路径中固定一个数字。密钥挂在 BIP-44引入的框架之下,写作 m / purpose' / coin_type' / account' / change / address_index,本规范只将 purpose 这一层据为己有,固定为84'。币种类型、账户、找零和地址索引保持 BIP-44和 BIP-49已赋予的含义,作者 Pavol Rusnak 明确沿用了 BIP-49的设计理由,而没有重新阐述。

第二件是输出格式。BIP-84借用了 BIP-141的封装:scriptPubKey 为0x0014 后接公钥的20字节哈希,scriptSig 留空,见证数据依次包含签名和公钥。该输出中没有任何记录说明它由哪个 purpose 值生成。

该分支上的扩展密钥有各自的版本字节。公钥使用0x04b24746,显示为 zpub,私钥使用0x04b2430c,显示为 zprv,测试网则使用0x045f1cf6 和0x045f18bc,分别显示为 vpub 和 vprv。这些值并非比特币独有。收录这些值的登记表 SLIP-0132将 Groestlcoin 和 Syscoin 也列在同一个0x04b24746 之下,因为序列化格式中没有币种类型字段,所以 zpub 只能告诉您脚本类型,无法说明它属于哪条链。

该规范称自己 "not backwards compatible by design"(设计上不向后兼容),并称不兼容的钱包 "will not discover accounts at all"(根本发现不了这些账户)。这是有意为之。单独的 purpose 值可使 SegWit 出现之前编写的软件不会进入它处理不好的账户,余额显示为零,好过钱包悄无声息地只恢复一部分。

在哪里会遇到它

BIP-84出现在您的钱包本来就会显示的三个地方:账户路径 m/84'/0'/0',以 zpub 开头的扩展密钥,以及以 bc1q 开头的收款地址。SLIP-0132将比特币的这一行 zpub 与路径 m/84'/0' 配对,这正是应用向您提供 zpub 时所主张的对应关系。Sparrow 在本站评测中的评分为4.7,支持常见脚本类型的单签名和多重签名钱包,因此您打开的账户是自己选择的,而不是沿袭而来的默认设置。

该文档中值得借鉴的是它的测试向量部分,它把“这个钱包是否和其他钱包一样实现了 BIP-84”变成一分钟就能完成的检查。该 BIP 公布了助记词 "abandon" 重复十一次、最后接 "about" 的结果:

  • m/84'/0'/0'/0/0得到 bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu
  • m/84'/0'/0'/0/1得到 bc1qnjg0jd8228aq7egyzacy8cys3knf9xvrerkf9g
  • m/84'/0'/0'/1/0得到 bc1q8c6fshw2dlwun7ekn9qwf37cu2rn755upcp6el

请在没有存放任何币的设备上,将这组助记词载入不熟悉的软件,选择原生 SegWit,然后将第一个收款地址和第一个找零地址与上述字符串比对。两者都一致,说明该实现在找零分支上也与标准相符,而这恰恰是人们容易忘记检查的一半。切勿向这些地址转入任何资产:该 BIP 印出了对应的私钥,SLIP-0132也印出了同一组助记词,任何读过其中一份文档的人都可以花掉转入的资金。

BIP-84派生 vs P2WPKH

BIP-84派生说明密钥从何而来,P2WPKH 说明币如何被锁定。只有后者属于共识规则。钱包完全可以沿着不含84' 的路径派生密钥,用同样的0x0014 模式锁定输出,得到的 bc1q 地址在链上与您的地址无法区分。因此“BIP-84地址”只是一种简称,任何区块浏览器都无法据此下结论,而 purpose 值需要您记在备份笔记里,因为日后无法从区块链上读回。

请勿混淆

常见问题

BIP-84和 BIP-49有什么区别?

区别在于 purpose 层级,以及随之而来的地址格式。BIP-84使用84',在 zpub 扩展密钥下生成原生 SegWit 的 bc1q 地址,而 BIP-49于2016年5月19日分配,使用49',在 ypub 下生成嵌套于 P2SH 的 P2WPKH 地址。同一助记词可以同时承载这两个账户。

zpub 前缀能证明您看到的是比特币钱包吗?

不能。SLIP-0132将同一组版本字节0x04b24746 同时登记给 Groestlcoin、Syscoin 和比特币,因为扩展密钥格式中没有币种类型字段。该前缀只告诉您脚本类型是 P2WPKH,无法说明它属于哪条链。

备份时需要同时记下 m/84'/0'/0' 吗?

是的,请将其记在钱包名称旁边。该路径并不保密,单独来看也不会泄露任何信息,但如果软件在另一个 purpose 层级上恢复同一组助记词,就会派生出另一组地址,并显示一个空钱包。

接着阅读

相关术语

地址与密钥中的更多术语

阅读本页英文版