说到区块链,大家都听到过钱包、地址、公钥、私钥这些概念。这些东西究竟是什么呢,也没有什么高大上的。

钱包

如果你拥有和保存比特币,就需要通过客户端,通常这个客户端就是钱包。关于钱包的解释就不多介绍了,简单的来说就是连接区块的一个入口。像成熟的比特币、以太坊就有很多钱包工具。比特币钱包实际上是不包含比特币的,比特币钱包是由私钥和公钥所组成的数据库。比特币本身是存储在区块链中。用户用私钥来签名交易,从而证明他们有这笔交易。

对于钱包而言,最重要的就是私钥。一般钱包需要访问你的用户资产,就会要求输入私钥。

一个钱包包含的信息有:

  • 公钥、私钥、地址
  • 与钱包中地址相关的交易信息
  • 其他数据

钱包中的地址生成过程:

1
私钥 ---> 公钥 ---> 地址

上面的过程是单向的,反过来是不的行。

钱包根据不同的维度还分为多种。
根据访问钱包数据类型,钱包分类如下:

  • CS 型 (Server-Client):服务端-客户端模式,大部分数据存储在服务端
  • BS 型:所有数据均通过浏览器在线使用

根据同步数据类型,钱包分类如下:

  • 完全节点型 (Full Node):含有 BlockChain 所有完整数据
  • 简易节点型 (SPV Node):Header-Only Clients,仅有 Block 头部信息,无需交易数据

拥有了一个钱包,获得自己的地址。就像银行账户,有了它别人就可以给你转账。很多钱包软件可以帮你生成自己的地址。此外钱包还是可以自己开发的,这儿就不多介绍了。

私钥、公钥、地址

刚刚也说了,对于钱包最核心的就是私钥。私钥是一个大于零,小于1.158 * 10^77的一个任意数字,挑中了就是你的。然后通过椭圆曲线函数,生成对应的公钥,再经过一系列的hash计算得到地址。

如果一个人公开了他的比特币地址,我们就可以在Blockchain.info 网站输入比特币地址查询到他的资产和交易记录,我们只能看到他的资产,却没法通过地址反推出他的私钥。私钥就可以认为是银行账号的密码。如果私钥丢失了,我们就没法找到会这部分资产。

钱在哪里?

前面就提到了,比特币本身是存储在区块链中。可见,钱不是存在钱包里。钱包这个软件只是可以显示余额,完成交易【唯一记录就是私钥,交易需要私钥签名】。

钱的数量存在区块链上,如果你下载一个比特币的客户端,同步以后有大约100多G的数据。里面包含了从第一笔交易到现在快10年的所有数据。钱并不存在在任何地方,钱的余额存在无数的电脑共同维护的一个账本里。

钱包的创建、恢复

钱包创建后,我想恢复怎么办?就需要助记词。我在创建钱包的时候,钱包就帮我生成了一串12个单词的句子。说这句话要抄下来,不要截屏保存。每个单词都有一个自己的编号,这些编号按照复杂的算法拼起来就可以还原出私钥。

助记词生成的过程:

  • 创造一个 128 到 256 位的随机顺序(熵)。
  • 提出 SHA256 哈希前几位,就可以创造一个随机序列的校验和。
  • 把校验和加在随机顺序的后面。
  • 把顺序分解成 11 位的不同集合,并用这些集合去和一个预先已经定义的 2048 个单词字典做对应。
  • 生成一个 12 至 24 个词的助记码。

128 位熵产生 12 位单词的助记词,助记词产生 512 位的种子。什么是种子呢?种子就是能生成主密钥的数据,钱包所有的数据都衍生自这个种子。通常某些钱包还会包含一个密码,这个密码是进入钱包的凭证。它仅仅是是一个保护私钥的密码,丢了存私钥的文件,有密码也没有用了。

!注:BIP39(Bitcoin Improvement Proposal 39)定义了2048个单词的列表。

选择正确的钱包很重要,如果往不支持该token的钱包里转token,可能会导致token再也找不回来。

存在的问题

  • 私钥不能更改,私钥改了 -> 公钥变了 -> 地址就变了,就成了另外一个钱包了。私钥泄露,也没有办法了。
  • 私钥忘了,忘了就忘了,没有办法了。