> For the complete documentation index, see [llms.txt](https://u.naturaldao.io/be/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://u.naturaldao.io/be/chapter2/2.7-qian-bao-de-shu-ju-cun-chu-fang-shi-yu-te-se.md).

# 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) 中定义了地址的大小写标准。

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