
1.2.1 比特币——数字货币的诞生
无论现金支付,还是电子支付,都有一个共同的问题——中心化,也就是说它们都是由政府、大企业和公司控制。中心化的系统存在着很多问题,例如容易受到黑客攻击、信息不够透明、信息容易出现堵塞等。比特币的初衷就是去中心化,它由大量分布式的节点构成,没有中心服务器。关于比特币的具体技术细节会在后面的章节详细介绍,读者可以结合第3章的内容来学习,本节先给出比特币系统的整体结构和运行机制。
人们平时用到的支付系统,如支付宝是由中心服务器存储用户的每笔花销,即可以将它看作一个账本,这个账本记录了所有用户的每笔消费。这需要中心系统有很大的存储空间和较快的处理速度,而分布式系统,如比特币就是要打破这种格局。比特币是由各个节点来处理每笔交易,而这些节点都是分布在全世界各个地方,它们既可以是个人计算机,也可以是大型的服务器或者专用的设备,称为矿机,这种分布式的架构完全没有传统中心化网络的问题。
但是这么多节点,每个节点都各自运行自己的处理程序,如何保证系统准确无误地记录每笔交易呢?这就是区块链技术所要解决的问题。节点将交易信息打包进区块中,并连接前一个区块,就组成了区块链。整个区块链系统可以看作一个完整的账本,那么每个区块就是账本中的一页。这里存在几个问题:交易信息由哪个节点记录?如何保证记录交易的准确性?每个区块怎么存储交易信息并与上一个区块连接?每个账户怎么记录余额?
在比特币系统中,每个用户都有一个地址存储自己的比特币,这个地址叫作钱包。实际上钱包就是由一串密码控制的地址,一个用户可以拥有多个钱包,也可以只有一个钱包。用户每次交易时都需要提供对应钱包的密码,交易就是比特币由一个地址转移到另一个地址上。在用户发起交易后,整个网络的节点都会收到这笔交易的请求,但是并不是任何节点都有能力来记录交易,比特币系统通过工作量证明(proof of work,PoW)机制来解决记录问题。简单地讲,工作量证明就是通过计算机密码学中的哈希值进行的,每次交易都有一个固定的哈希值,这个哈希值的生成需要一个随机数和一个难度值,所以这个哈希值只能通过不断地尝试得到。最先得到符合要求哈希值的节点才有资格记录这笔交易,一旦产生了这个节点,其他节点就停止尝试,转而验证这个节点的结果。工作量证明的目的之一是提高难度,防止恶意节点攻击,通过这种方法最终产生一个所有节点公认的节点,所以称为共识机制(consensus mechanism)。共识机制除了PoW外还有其他的方法,如PoS、DPoS等,之后的章节会做详细的介绍。无论通过什么方式,共识机制的目的就是产生一个所有节点都承认的记录节点,同时保证公平性和可靠性。
比特币的运行机制如图1-1所示,也就是区块链中每笔交易的验证和打包上链的过程如下。

图1-1 比特币的运行机制
(1)产生新交易,例如A与B发生了转账交易。
(2)每笔交易产生后,会通过P2P网络被广播到所有的参与节点。
(3)网络中收到该广播的各节点都会将数笔新交易进行验证,并各自形成一个等待上链的区块(每个区块可以包含数百笔或上千笔交易,这由区块大小和交易大小决定)。
(4)通过共识算法(PoW、PoS、DPoS等)选出拥有记账权的节点(矿工),只有它产生的区块才能够上到主链。
(5)获得记账权的矿工通过P2P网络广播它的新区块,全网其他节点核对该区块记账的正确性(确认该区块记录的所有交易没被重复花费且具有有效签名),没有错误后就会把该区块加入链中。没有获得记账权的节点会开始竞争下一个区块的记账权。
(6)超过一定数量的节点验证新区块无误后,就可以将这个区块连接到上一个区块上组成区块链,这样就形成了一个合法记账的区块链。
区块链中每个区块的结构如图1-2所示。在区块头部包含上一个区块的头哈希值和当前区块的头哈希值,从而保证每个区块的唯一性和顺序。
比特币系统为了奖励矿工,起初每产生一个区块系统会自动给矿工50个比特币,每个区块的产生时间大约为10分钟。每产生21万个区块,也就是每个阶段(大约是4年),对矿工奖励的比特币会减半,所以第二个阶段中奖励的比特币是25个,目前每产生一个区块,矿工会得到12.5个比特币。中本聪设定了比特币系统在第33次减半时,每个块产生的新比特币从0.0021个直接减为0个,由此可以推出比特币的总发行量为2100万个。
比特币最大的优点就是在分布式的系统中通过共识机制使每个节点参与到交易中,使得交易不再由单一的中心化组织控制。而且通过区块链形式记录的交易很难被篡改,因为想要改变一个区块内的交易信息就要改变之前所有区块的信息,所以区块链内的攻击常常是双花问题(double spend)。双花问题就是人为的恶意攻击,在进行交易时同一个支付者再发起一笔交易,并将新的交易打包进区块中,而原有的交易就作废了,没有进行支付,但所购买的商品在第一笔交易中已经发出,这时第二笔进行的交易常常是自己对自己或者自己的其他钱包。这种攻击相比于改变区块交易信息所付出的代价更低,所以在区块链中一个高风险就是双花问题。那么一旦出现双花问题怎么解决呢?这时一般的解决办法是分叉,就是在原有的区块链上进行一个分叉产生一条新的链,使从出现问题的区块位置之后的所有交易都作废。截至2017年11月比特币已经分叉了7次,本书第7章会对分叉问题做详细的介绍。
比特币产生一个新区块是10分钟,每个区块的大小限制在1兆字节(MB),这就造成比特币系统的交易速度不会很快。平均每笔交易信息大概会占用250字节(B),也就是每个区块能记账4000笔交易,因此比特币每秒最多进行7笔交易。区块链交易速度一般用tps(transaction per second,笔每秒)表示,比特币的实际交易速度是3~4tps,也就是说每秒只能进行3、4笔交易,这个速度远远达不到实际应用的需求。此外,如果需要确认某笔交易,需要等待6个区块即60分钟,而且由于比特币价格高昂导致每笔交易的交易费用奇高,这些都是比特币致命的问题。总之,比特币系统只有支付的功能,没有其他的应用场景,而且一枚比特币上万元的价格也令普通投资者望而却步。

图1-2 区块链结构