跳转到正文
buybitcoinsmart

术语表 /地址与密钥

输出描述符

又称 Output descriptor、描述符、Descriptor。

输出描述符是什么?
输出描述符是一行文本,用于说明钱包应使用哪种脚本类型、哪些密钥和哪条派生分支,末尾附有校验和。

规定于 BIP-380。

描述符之所以存在,是因为单独一个扩展密钥是有歧义的。同一个 xpub 可以生成传统地址、嵌套 SegWit 地址、原生 SegWit 地址或 Taproot 地址,只有外层的包装函数才能确定究竟是哪一种。Bitcoin Core 自23.0版起默认创建描述符钱包,该版本发布于2022年4月,而缺少描述符的多重签名备份往往无法恢复。

运作方式

描述符是应用于密钥表达式的一个函数,后面跟一个井号和八个校验和字符。函数名指明脚本类型:pkh 对应传统脚本,sh(wpkh(...)) 对应嵌套 SegWit,wpkh 对应原生 SegWit,tr 对应 Taproot,wsh(sortedmulti(2,...)) 对应2-of-3保险库。

其余信息由密钥表达式承载。方括号内是来源信息,即主密钥指纹和到达该密钥所用的路径,例如 [1a2b3c4d/84h/0h/0h]。随后是扩展密钥,再后面是形如 /0/* 的后缀,其中星号是通配符,依次代表每一个地址索引。带通配符的描述符称为范围描述符,向它请求第0至999个地址只需一次 RPC 调用,而无需导入一千次。

接收和找零是两个描述符,而不是一个,因此钱包会成对导入,分别以 /0/* 和 /1/* 结尾。BIP-389用多路径表示法理顺了这一点,把这一对写成单个字符串 /<0;1>/*。

校验和虽小,却至关重要。BIP-380为描述符文本定义了一个八字符的校验码,旨在发现长字符串实际会遇到的各种损坏:字符被调换、粘贴时被截断、电子邮件客户端插入了换行。Bitcoin Core 会拒绝任何校验和不匹配的描述符,而 getdescriptorinfo 可以为您自己输入的字符串计算出正确的校验和。

在哪里会遇到它

对于比单个助记词更复杂的配置,描述符是备份格式。Sparrow、Nunchuk 和 Specter 会为所创建的每个钱包导出一个描述符,Coldcard 在多重签名设置过程中会把描述符写入 microSD 卡,这样无需原来的协调软件即可重建该配置。

描述符正是在 Bitcoin Core 中成为标准的。0.17.0版发布于2018年10月,首次将其用于扫描和地址生成;importdescriptors 和 listdescriptors 使其成为钱包的原生语言;描述符钱包如今是该软件创建的唯一类型。通过描述符加重新扫描来恢复 Core 钱包是受支持的途径,即使软件被完全重新安装,这一途径依然有效。

对于普通的单签名钱包,您通常无需见到描述符,因为助记词和标准路径就已足够。对于多重签名,描述符是备份缺失的另一半:三个助记词如果没有脚本类型、密钥顺序和各共同签名方来源信息的记录,可能使您无法重建存放比特币的那些地址。

输出描述符 vs 扩展密钥

扩展密钥是原料,描述符是配方。xpub 告诉软件存在哪些密钥;描述符则告诉软件用这些密钥构建什么,以及从哪里开始计数。因此,把同一个 xpub 导入两个不同的应用,可能得到两份不同的地址列表,而导入同一个描述符则不会。两者披露的隐私信息相同:持有其中任何一个的人都可以枚举您的这条分支,因此描述符应与其中的密钥得到同样的保管。

请勿混淆

常见问题

除了助记词,我还需要备份描述符吗?

对于使用标准路径的普通单签名钱包,助记词就足够了。对于多重签名或任何自定义配置,还应备份描述符,因为仅凭助记词无法记录脚本类型、共同签名方的密钥或密钥顺序。

分享描述符安全吗?

只能分享给您愿意让其知晓全部交易历史的人。包含扩展公钥的描述符可让持有者派生该分支上的每一个地址并永久监视,但绝不允许其动用资金。

相关术语

地址与密钥中的更多术语

阅读本页英文版