比特币基本概念

许多人觉得 “比特币” 难以理解,与这个概念本身的多义性有关,它笼统地涵盖了从钱、钱包、银行到印钞厂等一整套事物。“比特币”可以指一种货币的计量单位,也可以指一套网络协议或相应的网络系统等,甚至还曾经指过相关网络的客户端软件。为了避免混淆,本书约定,在需要特指区分的时候用小写的 bitcoin 指代计量单位,大写的 Bitcoin 指代相关的网络协议。

比特币是一种利用点对点技术实现的电子现金系统,与各国央行来统一管理发行的法定货币不同,它的发行并不需要央行这样的权威机构,比特币允许一笔交易从一个组织直接结算给另外一个组织,省去了权威机构结算的环节,提高了交易和结算的效率,节省了交易的成本,尤其是跨境交易的成本。

一个点对点的在线交易系统如何保证交易的隐私性、正确性、不可篡改性?又是如何防止双重支付和防止作弊和攻击的呢?在深入了解比特币之前,应该先理解下面的一些基本概念。

非对称加密

所谓非对称加密,其实很简单,就是加密和解密需要两把钥匙:一把公钥和一把私钥。

公钥是公开的,任何人都可以获取。私钥是保密的,只有拥有者才能使用。他人使用你的公钥加密信息,然后发送给你,你用私钥解密,取出信息。反过来,你也可以用私钥加密信息,别人用你的公钥解开,从而证明这个信息确实是你发出的,且未被篡改,非对称加密保证了支付的可靠性。

由于支付的时候必须通过私钥取出,所以你是谁并不重要,重要的是谁拥有私钥。只有拥有了私钥,就能把这私钥上的比特币支付出去。

钱包与地址

对于比特币来说,钱不是支付给个人的,而是支付给某一把私钥。比特币交易的第一件事,就是你必须拥有自己的公钥和私钥。比特币钱包就是管理你自己的私钥与公钥的。

你向别人收钱时,只要告诉对方你的钱包地址即可,对方向这个地址付款。由于你是这个地址的拥有者,所以你会收到这笔钱。

由于你是否拥有某个钱包地址,是由私钥证明的(具体的证明方法稍后介绍),所以一定要保护好私钥。这是极其重要的,如果你的私钥被偷了,你的比特币也就等于没了,因为他人可以冒用你的身份了,把钱包里面的钱都转走。

同样的,你向他人支付比特币,千万不能写错他人的钱包地址,否则你的比特币就支付到了另一个不同的人了。

交易转账

一笔交易就是一个地址的比特币,转移到另一个地址。由于比特币的交易记录全部都是公开的,哪个地址拥有多少比特币,都是可以查到的。因此,支付方是否拥有足够的比特币,完成这笔交易,这是可以轻易验证的。

问题出在怎么防止其他人,冒用你的名义申报交易。举例来说,有人申报了一笔交易:地址 A 向地址 B 支付 10 个比特币。我怎么知道这个申报是真的,申报人就是地址 A 的主人?

比特币协议规定,申报交易的时候,除了交易金额,转出比特币的一方还必须提供以下数据。

  • 上一笔交易的 Hash(你从哪里得到这些比特币)
  • 本次交易双方的地址
  • 支付方的公钥
  • 支付方的私钥生成的数字签名

验证这笔交易是否属实,需要三步。

  • 找到上一笔交易,确认支付方的比特币来源。
  • 算出支付方公钥的指纹,确认与支付方的地址一致,从而保证公钥属实。
  • 使用公钥去解开数字签名,保证私钥属实。

经过上面三步,就可以认定这笔交易是真实的。

交易确认

用户所发送的交易会发送到比特币网络并被矿工接收传递。矿工负责验证这些交易是否合法,并把合法的交易打包记录下来,组成一个区块,然后计算这个区块的哈希。

计算哈希的过程叫做挖矿,这需要大量的计算才能获得一个符合条件的哈希值。矿工找到符合条件的哈希值后会向其它矿工广播这个区块,其它矿工接收到确认无误后,会在该区块上重新开始新一轮的挖矿操作,此时交易即获得了一次确认。随着新区块的不断产生,已有区块被改写的可能性迅速下降。

出块奖励

交易的确认离不开矿工。为什么有人愿意做矿工呢?答案很简单,矿工可以获得出块奖励和该区块中的手续费。

比特币协议规定,挖到新区块的矿工将获得出块奖励,刚开始是 50 个币,然后每 210000 个区块后 (约每四年) 奖励减半,目前(2019 年)是 12.5 个币。这也是比特币的供给机制,流通中新产生的比特币都是这样诞生的。

所谓交易手续费,就是矿工可以从每笔交易抽成,具体的金额由支付方自愿决定。你完全可以一毛不拔,一分钱也不给矿工,但是那样的话,你的交易可能会没有矿工愿意传递处理,从而迟迟无法得到打包确认。

减半机制使得比特币的流通量以可预测的方式出现。随着出块奖励的减少,手续费的占比将越来越大。到 2140 年,比特币的数量也将停止增加,矿工将得不到任何出块奖励。届时,矿工的收益就完全依靠交易手续费了。

双重支付

正如字面意思所说,双重支付指的是一笔钱花两次。由于交易信息很容易复制并且重新广播到网络上,所以如果没有一个很好的确认机制,消费者会有可能把同一笔钱花两次。

比特币网络通过经济方式解决双重支付的问题。交易的确认,需要投入计算资源来确认,比特币引入了工作量证明,矿工投入计算力来打包交易,若需修改某个区块上的交易,需重新计算自区块以来所有区块。比特币矿工维护着一个类似于传统现金交易系统的全局账本,这个账本以时间顺序保存了从 2009 年系统开始运转至今的所有交易和这些交易的时间戳。每一笔交易都有迹可循,已有的历史交易如果冲突,是很容易被发现的。

整个比特币系统中的每一个节点都获知每一笔交易的发生,且它们是有时间顺序的,有一个公认的交易序列。那么,只有当大部分节点都认同这笔交易是首次出现时,这笔交易才能发生。唯一可能造成这个系统崩溃的是,有一个人拥有超过整个系统 51% 的计算能力,那么他就能试图双花,并使用算力优势重写之前已被他们确认的交易记录,这就是所谓的“51% 攻击”,但随着比特币网络的算力的增长,这样做的成本也将迅速提高,在经济上得不偿失。

如果上述的内容对你来说有一些陌生的话,没关系,你可以先看看何岩同学写的《重新创造比特币》系列,会对比特币的设计有更清晰的认识。

而本书将继续前行,重新审视当年中本聪的设计。


results matching ""

    No results matching ""