跳转到正文
buybitcoinsmart

术语表 /地址与密钥

BIP-49派生

BIP-49派生是什么?
BIP-49派生将嵌套 SegWit 账户放在 m/49'/0'/0' 这一独立分支上,因此无法识别这些账户的钱包只会显示为空,而不会显示错误的余额。

规定于 BIP-49。

BIP-49将密钥树的第一个硬化层级49' 保留给地址为 P2WPKH 嵌套于 P2SH 之内的账户。该规范于2016年5月19日获得分配,后来又获得了自己的扩展密钥版本字节:ypub 为0x049d7cb2,yprv 为0x049d7878。如果您的钱包导出的账户密钥以 ypub 开头,恢复时就必须到这个分支下去查找。

运作方式

BIP-49解决两个问题:BIP-32密钥树中哪一个分支存放嵌套 SegWit 密钥,以及如何由该分支上的密钥构造地址。

该分支沿用 BIP-44已使用的五层路径模板 m / purpose' / coin_type' / account' / change / address_index,只改动一个数字:目的层级由44' 变为49'。币种类型、账户、链和索引的含义与 BIP-44中相同。

地址部分是机械化的:先对压缩公钥做哈希,再把20字节的结果包裹进22字节的赎回脚本,然后对该脚本做哈希,得到输出所承诺的内容。规范把这两部分写作 scriptSig: 0x160014{20-byte-key-hash} 和 scriptPubKey: 0xA914{20-byte-script-hash}87。

有意思的是作者否决的那个方案。Weigl 列出了两种做法:一是沿用已有账户,把嵌套 SegWit 地址挂在同一批公钥之下;二是在新的目的层级下创建专用账户。第一种做法在出问题之前更方便,而一旦出问题,用规范的话说,账户"might show up but also it might miss some UTXOs"。BIP-49选择专用账户,正是因为后一种做法"fails in a more visible way"。空白屏幕作为错误提示,比一个看似合理的错误数字更好。

序列化最终也得到了同样的处理:该分支上的扩展公钥使用版本字节0x049d7cb2,经 base58 编码后前缀为 ypub,yprv 使用0x049d7878,测试网则为 upub 和 uprv。

在哪里会遇到它

BIP-49表现为以 ypub 而非 xpub 开头的扩展密钥,以及钱包在原生账户旁列出的嵌套 SegWit 账户。Mycelium(本站评分为3.7)在一个应用中同时支持原生和嵌套 SegWit 账户,即 SLIP-0132登记的 zpub 和 ypub 两种方案。

ypub 前缀是事后补上的,这段历史至今仍有痕迹。BIP-43在2014年提出了目的层级,并要求实现者对每个目的值一律沿用0x0488B21E 和 xpub 前缀。BIP-49起初也是这样发布的,而 SLIP-0132于2018年2月8日创建,目的是正式登记版本字节,它对这一结果的描述毫不留情:前缀不变导致了"unsustainable user confusion",因为要么用户必须记住某个 xpub 来自哪个分支,要么接收工具必须扫描两个地址空间。前缀只是提示,不是保证。如果您把扩展密钥粘贴到区块浏览器中,它派生出的地址以1开头,而您的钱包显示的地址以3开头,那么您手中的就是使用旧前缀的 BIP-49密钥,需要手动告知该工具派生路径。

规范附带了一组测试网测试向量,可用来核对工具:助记词为 abandon 重复十一次,后接 about,账户根路径为 m/49'/1'/0',第一个收款地址为2Mww8dCYPUpKHofjgcXcBCEGmniw9CoaiD2。

BIP-49派生 vs 嵌套 SegWit

BIP-49派生是关于密钥的规则,嵌套 SegWit 则是链上可见的模式;两者通常同时出现,但互不蕴含。一个输出之所以是嵌套 SegWit,取决于它所承诺的脚本,其中没有任何内容记录密钥由哪条路径产生。钱包可以用导入的私钥构建这样的输出,也可以采用 BIP-49否决的做法,即由 BIP-44账户中已有的公钥再派生出第二个 P2SH 地址。因此,知道您的资金位于以3开头的地址上,并不能告诉您该从哪里恢复,这就是为什么应当把账户路径和助记词备份记在一起。

请勿混淆

常见问题

为什么我的扩展公钥以 ypub 而不是 xpub 开头?

因为它使用了 BIP-49为该分支分配的版本字节0x049d7cb2 进行序列化,经 base58 编码后即为 ypub。该前缀是派生方案的标记,并不代表另一种密钥,SLIP-0132将其与 xpub 和 zpub 一并登记。

BIP-49是否已被弃用?

没有。该 BIP 自身的头部仍标注为 Deployed,在49' 分支上创建账户的钱包仍会正常派生这些账户。规范中没有任何内容撤销该分支,位于其下的资金也无需抢救。

能否通过地址判断它是否来自 BIP-49?

不能。P2SH 输出只记录它所承诺的脚本哈希,因此以3开头的地址无法透露其背后的路径。请把账户路径和备份一起记录下来,不要事后再去推断。

接着阅读

相关术语

地址与密钥中的更多术语

阅读本页英文版