# 2.7 钱包的数据存储方式与特色

根据数据存储方式的不同，数字加密货币钱包又可分为全节点钱包、轻钱包、分层确定钱包。

**全节点钱包（Full Nodes Wallet）**：是指包含了全部历史交易数据的钱包。多被矿工所使用。其优点是安全可靠。缺点是要下载或更新全部数据后才能正常使用，有时候的确很慢，会影响到用户的使用。

**轻钱包（Light Wallet）**：它通过一种名为“简易支付验证”（Simplified Payment Verification ，SPV）的方式来完成交易验证。简易支付验证节点即“SPV节点”又叫“轻量级节点”，相对应的钱包就是轻钱包。SPV节点只需下载区块头信息，而不下载每个区块中的所有交易信息，由此产生的不含交易信息的区块链，比完整区块链小了很多。“简易支付验证”只是“支付验证”而非“交易验证”，所以SPV节点可以证实某个交易的存在，但不能验证某个交易不存在，这个缺陷可被针对SPV节点的拒绝服务攻击或双重支付攻击所利用。为了防御这些攻击，SPV节点往往会随机连接多个节点，以增加与至少一个可靠节点相连接的概率。

轻钱包的优点是使用快捷、占用存储空间小。随着比特币的使用热潮，轻钱包越来越常用。但对于网络有问题的人来说缺点还是更新数据太慢，加上也不是百分百安全，因此近年其风头被分层确定钱包抢走。

**分层确定性钱包（Hierarchical Deterministic Wallet, HD Wallet，HD钱包）**：常常也被称为多层确定钱包，也曾被称为双层确定钱包。

比特币最早的客户端（Satoshi client）是分层确定性钱包。分层确定性钱包会预先生成 100个随机私钥(对应于100个公钥和100个地址)，并且每个私钥只使用一次。每个交易使用一个地址的概念是中本聪提出的。如果交易比较频繁，私钥可能很快会用光，然后再产生100个随机私钥，所以每次完成 100 个交易后，你必须备份钱包的wallet.dat文件，否则可能会丢失资产。这就意味着这个钱包必须被经常性地备份。每个私钥都必须备份，否则一旦钱包不可访问时，就可能无法找回钱包。这种钱包难以管理和备份，经常发生有人清空钱包app的缓存和数据，然后资产全数丢失！

分层确定性钱包则无需每次转账后都备份。它的私钥是对种子密码（Seed，一串由随机数生成器生成的随机数）进行单向哈希运算生成的，在分层确定性钱包中，只要有这个种子密码，就可以找回所有私钥，因此备份了种子密码就相当于备份了您的所有资产，所以它非常方便使用。

分层确定性的概念是根据比特币核心开发者Gregory Maxwell的原始描述和讨论，Pieter Wuille在2012年2月11日整理完善通过BIP32提案提出。但它直到2016年6月15日才被合并到Bitcoin Core，目前几乎所有的比特币钱包服务商都整合了该协议。

BIP32 是HD 钱包的核心提案，通过种子密码来生成主私钥，然后派生海量的子私钥和地址，但是种子密码是一串很长的随机数，不利于记录，后来BIP39用算法将种子密码转化为一串助记词 （Mnemonic），方便种子密码的保存。再后来BIP43对BIP32树结构增加了子索引标识purpose的扩展“***m/purpose'/ \**** ”。最后，BIP44在BIP43和BIP32的基础上增加多币种，通过分层确定性钱包派生多个地址，可以同时管理主网和测试网的比特币，BIP44 提出了5层的路径建议，如下：

***m/purpse'/coin\_type'/account'/change/address\_index***，

BIP44的规则使得HD钱包非常强大，用户只需要保存一个种子密码（12～18个英文单词），就能控制其钱包里的所有币种。

比特币分层确定性钱包实现机制：

1\. 生成一个助记词（BIP39）

2\. 该助记词使用PBKDF2转化为种子（BIP39）

3\. 种子用于使用HMAC-SHA512生成根私钥（BIP39）

4\. 从该根私钥，导出子私钥（BIP32），其中节点布局由BIP44设置

可以看出 BIP39 生成助记词的过程非常重要，早期的HD 钱包助记词是12个单词（现在有的钱包已经增加到18个单词），一共有 2048 个单词可能性，根据这个公式“\_**n!/( n - r )!”**\_我们可以计算出随机生成的助记词所有可能性：

***2048!/(2048-12)! = 5.2715379713014884760003093175282 e+39*** 。

地球上的沙子数量在大约是1 后面 18 个零。如果你可以每秒生成 一百万个助记词，那么一年可以生成 ***1000000\*60\*60\*24\*365=3.1536e+13***，你大约需要 ***1.6715937e+26*** 年遍历以上所有助记词！

以太坊的EIP85提案HD钱包的路径为 : m/44'/60'/a'/0/n

a——表示帐号

n——第 n 生成的地址

60 是在SLIP44提案中暂定的补充协议，对应的币种就是ETH，因为BIP44对币种只定义到0 – 31。

以太坊各钱包的具体实现如下：

m/44'/60'/0'/0/x——imToken（可自定义路径），MetaMask，Jaxx，MyEtherWallet，TREZOR，Exodus

m/44'/60'/x'/0/0——KeepKey，MetaMask

m/44'/60'/0'/x——Electrum，Ledger Chrome App，

m/44'/coin\_type'/account'/0——Coinomi

发展到这结束了嘛？

并没有。

[EIP-55](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-55.md) 中定义了地址的大小写标准。

你可以调查下是否还有其它相关的技术标准。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://u.naturaldao.io/be/chapter2/2.7-qian-bao-de-shu-ju-cun-chu-fang-shi-yu-te-se.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
