跳转到正文
buybitcoinsmart

术语表 /地址与密钥

密钥索引

密钥索引是什么?
密钥索引是在 HD 派生的每一步中选定的数字,范围从0到4,294,967,295,用于决定落在父密钥的哪一个子密钥上。

规定于 BIP-32。

索引是钱包计数的方式。树的每一层都取一个32位的数字,因此单个父密钥有4,294,967,296个可能的子密钥,而该范围从2,147,483,648起的整个上半部分,保留给硬化派生。日常使用中,您只会遇到路径中的最后一个索引:每次点击接收时递增的那一个。

运作方式

索引是一个子密钥与下一个子密钥之间唯一的差别。派生时,它被序列化为四字节的大端序数字,并在哈希之前附加到父密钥材料上,因此索引0和索引1产生的结果彼此之间没有任何可见的关联。这一步中其他内容都不变。

该范围在2,147,483,648处一分为二。低于这条界线,派生为普通派生,仅凭父级扩展公钥就能计算出子公钥,无需任何机密。处于或高于这条界线,派生为硬化派生,父私钥必须参与,仅凭公开材料得不到任何结果。符号表示隐藏了其中的算术:写作84'或84h 表示索引2,147,483,732,即84加上硬化偏移量。

同一件事的两种写法造成的混乱超出了应有的程度。较早的文档和大多数钱包界面使用撇号,例如 m/84'/0'/0',而 Bitcoin Core 输出的描述符则偏好 m/84h/0h/0h。两者完全相同。字母写法的存在,是因为 shell 参数中的撇号会带来引号问题,把它粘贴到 bitcoin-cli 中会出现很难调试的故障。

在哪里会遇到它

路径中的最后一个数字就是您日常遇到的索引。在 m/84h/0h/0h/0/7中,0选择接收链,7表示钱包已发出的第八个地址(从零开始计数)。找零在链1上有自己的计数器,因此全新钱包的第一个找零输出位于 m/84h/0h/0h/1/0,两个计数器各自独立递增。

顺序计数使恢复成为可能,也使恢复可能失败。BIP-44要求正在恢复的钱包向前派生,直到连续遇到20个未使用的地址,然后停止查找,因此在索引45处收到的币,如果前面有一长段空白,在您手动调高间隔上限之前,余额将显示为零。Bitcoin Core 通过维护一个预先派生的密钥池来避免这一问题,默认有1,000个,并在密钥被消耗时补充。

发现机制在上一层的运作方式相同。正在恢复的钱包检查账户0',发现有历史记录,再转到账户1',并在第一个完全没有交易的账户处停止。因此,创建账户5'而让其下方的账户保持为空,会使将来的恢复可靠地漏掉您的币。

密钥索引 vs 派生路径

索引是一个数字;路径是这些数字的有序列表。m/84h/0h/0h/0/7包含五个索引,正常使用中只有最后一个会变动,因为用途、币种类型、账户和链在钱包的整个生命周期内保持固定。当帮助文章要求您检查派生路径时,这一区别就很重要。它指的是固定的前缀,而不是地址计数器,如果余额缺失是因为前缀有误,再多次点击接收也无法找回。

请勿混淆

常见问题

数字后面的撇号是什么意思?

它表示该索引为硬化索引,即在其上加上2,147,483,648。因此0'是索引2,147,483,648,84'是索引2,147,483,732。有些软件用 h 代替撇号,两种写法的含义完全相同。

为什么恢复后的钱包显示的地址比之前少?

恢复软件向前派生,直到连续遇到20个未使用的地址,然后停止。如果您生成了许多地址却没有使用,请在钱包设置中调高间隔上限并重新扫描,使其在该分支上查找得更远。

相关术语

地址与密钥中的更多术语

阅读本页英文版