# HD钱包

## 1. 介绍 <a href="#id-1-introduction-and-definitions" id="id-1-introduction-and-definitions"></a>

在典型的加密钱包中，随机生成一对私有/公共地址（或密钥），这要求你每次创建新地址后都进行备份。

一开始你可能会觉得这过程很容易，但是随着交易数量的增加，备份如此多的私有/公共地址将变得越来越复杂和麻烦。

而且如果你是一个关心财务隐私并经常进行交易的人，那么你可能需要生成大量的私有/公共地址对（或密钥），这意味着你需要进行更多备份。

另一方面，某些钱包将相同的地址用于所有交易，以避免丢失备份可能造成的损失，这不是很健康的做法，并且可能会损害你的财务隐私。

这就是为什么在BIP 32（又称为[比特币改进提案32](https://en.bitcoin.it/wiki/Bitcoin_Improvement_Proposals)）下开发HD钱包的原因。

## 什么是HD钱包? <a href="#id-1-introduction-and-definitions-1" id="id-1-introduction-and-definitions-1"></a>

![](https://blobs.gitbook.com/assets%2F-LYvndWBvrmJxi5m4Vyp%2F-M1DtlDVN5yB49Cv41Wh%2F-M1Du5frElcOEVMMIF8W%2FHD_Wallets.jpg?alt=media\&token=b97fcdbe-7a34-48c0-a1e1-8858deb73760)

如果有一种机制可以以某种方式生成无法猜测且不需要备份复杂的公钥/私钥，这将多么方便。

这种易于使用的钱包称为**HD钱包**，HD是“**H**ierarchical **D**eterministic 分层确定性”的缩写，所有HD钱包都使用12字主种子密钥，每次将此种子末尾附加一个计数器，并用于按层次结构和顺序生成近似无限的新钱包地址。 由于所有地址都来自同个主种子，因此你只需对其进行备份，所以它被称为“分层确定性”。

**HD钱包内部会发生什么?**

&#x20;HD钱包从基于[BIP 32](https://en.bitcoin.it/wiki/Bitcoin_Improvement_Proposals)的种子主密钥开始生成树状分层结构的密钥，当你使用种子密钥还原HD钱包时，钱包运行并使用BIP 32的树状分层私钥。 在网络上完成密钥扫描后，你的资金便会回复！

使用HD钱包时，必须**强制备份**种子密钥，并且应确保种子密钥安全，以便在设备丢失或损坏时可以恢复钱包。

这就是HD钱包的方便之处，仅备份一次就可以轻松地从数学算法中重新创建所有后续地址，HD钱包使用单向SHA-256哈希算法，如果input （或种子密钥）相同，则生成的密钥树不会出现任何错误。

**HD钱包的优点**

* 你只需要备份一个密钥（即“种子密钥”）。
* 每次接收硬币时，你可以生成许多新的接收地址。
* 你可以保护自己的财务隐私，因为你的接收地址可以每次更改。

## 2. 如何使用HD钱包-备份/恢复 <a href="#id-1-introduction-and-definitions-2" id="id-1-introduction-and-definitions-2"></a>

在TWINS和FIX钱包中，默认情况下禁用HD支持，为了启用它，必须使用“ *-usehd=1* ”命令行参数启动钱包，如下所示：

![](https://blobs.gitbook.com/assets%2F-LYvndWBvrmJxi5m4Vyp%2F-M1DtlDVN5yB49Cv41Wh%2F-M1Dut02_831kCrK993L%2Ft65.png?alt=media\&token=6d76d3b5-9e34-47f6-8ebc-39cd05c9e4c6)

或者可以在conf文件中加入“ usehd=1”，如下所示：

![](https://blobs.gitbook.com/assets%2F-LYvndWBvrmJxi5m4Vyp%2F-M1Dvdy4nBm7wnb6SZlI%2F-M1Dx2syRq0HtDEd8AlN%2Ft71.png?alt=media\&token=ef4abd52-d844-4acb-bfa8-3a3a370965fb)

![](https://blobs.gitbook.com/assets%2F-LYvndWBvrmJxi5m4Vyp%2F-M1DtlDVN5yB49Cv41Wh%2F-M1DuxusiuWR-7pIqMSt%2Ft66.png?alt=media\&token=a071494f-7904-4b70-8133-fed1041a25a1)

在这种情况下，保存conf文件后需要重新启动钱包。

**请注意：钱包一旦创建，就不能更改为HD /或旧版格式**，如果要从一种格式迁移到另一种格式，则必须创建一个新的钱包（从文件夹中删除wallet.dat）并转移所有资金。 为新钱包生成随机的24个单词的助记符种子，可在控制台/ 或CLI命令使用' dumphdinfo '显示该种子，如下所示：

![](https://blobs.gitbook.com/assets%2F-LYvndWBvrmJxi5m4Vyp%2F-M1Dvdy4nBm7wnb6SZlI%2F-M1Dx6lxJKzOibFqGYj7%2Ft70.png?alt=media\&token=022b96f1-26dc-49c7-822b-7ebfbf8a4aaf)

![](https://blobs.gitbook.com/assets%2F-LYvndWBvrmJxi5m4Vyp%2F-M1DtlDVN5yB49Cv41Wh%2F-M1Dv1-3LlizT41refDo%2Ft67.png?alt=media\&token=25cea0bb-af6b-4119-a111-b0e8590196d7)

使用现有的种子/助记词短语来恢复HD钱包，应使用以下参数启动钱包：

```
-usehd=1 -mnemonic="你的种子助记词" -mnemonicpassphrase="可选/密码"
```

例：

![](https://blobs.gitbook.com/assets%2F-LYvndWBvrmJxi5m4Vyp%2F-M1DtlDVN5yB49Cv41Wh%2F-M1Dv4OwdoQ36587Ofux%2Ft68.png?alt=media\&token=d2210ae6-e95d-4302-ab1d-58701a3a8305)

或

```
-usehd=1 -hdseed="_correct_hex_seed_"
```

例：

![](https://blobs.gitbook.com/assets%2F-LYvndWBvrmJxi5m4Vyp%2F-M1DtlDVN5yB49Cv41Wh%2F-M1DvGvSQex3og5IUasn%2Ft69.png?alt=media\&token=12b7f637-ce37-408c-a7b9-ee759306d847)

恢复后，只需使用“ *usehd=1*”参数即可启动钱包。

## 备注 <a href="#id-1-introduction-and-definitions-3" id="id-1-introduction-and-definitions-3"></a>

* 应在钱包恢复之前和之后使用dumphdinfo命令确认是否返回相同的输出，这样你就可以确定钱包是否成功恢复。
* dumphdinfo命令返回有关HD钱包的敏感私人信息，切勿与任何人共享该信息。
* 如果进行了上述检查，同步完成后但你的资金仍未显示，请转到工具/钱包修复点选“rescan blockchain files”，它应该重新扫描区块链并恢复旧的交易（如果有），然后你所有的资金都应该在钱包中可见。
* 还原HD钱包时，先前的“接收地址”将不会出现在“文件”->“接收地址”下，但是它们仍然属于你的钱包，例如你可以在调试控制台的CLI中使用它们。
