Go语言Hyperledger区块链开发实战
上QQ阅读APP看书,第一时间看更新

1.2.2 比特币

比特币系统是区块链技术落地应用的第一个项目,也是经典的区块链平台。

1.比特币系统的发展历程

2009年1月3日,中本聪“挖”出了比特币的第一个区块,也就是创世区块(Genesis Block),并得到了50个比特币的奖励,这也意味着比特币从理论变成了现实。

比特币最大的特色就是没有任何特定金融机构发行比特币,也没有任何机构为比特币的价值背书。比特币系统每隔一段时间就会产生一个区块,用于记录所发生的交易,记录和验证交易会得到一定数额的比特币奖励,这个过程被形象地称为“挖矿”,记录和验证交易的参与者被称为“矿工”。比特币系统是开放的,任何人下载并安装比特币客户端都可以参与挖矿,赚取比特币。

最初的比特币矿工大多是技术社区里的技术人员和爱好者。由于参与的人并不多,因此挖到比特币相对比较容易。但是那时的比特币几乎是没有价值的。最初的比特币开发者之一加文·安德烈森(Gavin Andresen)为了宣传和推广比特币,还创办了一个比特币网站,只要访问该网站的人都可以得到5个比特币。

2010年5月22日是比特币发展历程中具有里程碑意义的一天。在这一天,早期的比特币矿工拉斯洛·豪涅茨(Laszlo Hanyecz)用10 000比特币给自己的女儿买了2个比萨,大约相当于41美元。这标志着比特币第一次有了实际的价值。

2011年,津巴布韦发生了严重的通货膨胀。当时的津巴布韦政府发行了据称是人类历史上最大面额的纸币——一百万亿津巴布韦元。津巴布韦人民对政府的金融体系丧失了信心,转而追捧比特币。这进一步推高了比特币的价值。到2013年11月,1个比特币的价格飙升到了1 000美元。

比特币也经历过一些“黑暗”时刻。比如,2014年2月,世界上最大的比特币交易商Mt.Gox(昵称为门头沟)被黑客攻击,损失了85万个比特币;按当时的市值算,其价值超过4.5亿美元。随后Mt.Gox宣布破产。该事件影响了人们对比特币的信心,导致比特币大规模地贬值。

但是冷静下来后,人们意识到,安全漏洞并不是出现在比特币系统本身,而是出现在中心化的交易所系统。这其实从另一个侧面证实了去中心化的比特币系统的稳定性和安全性。随着时间的推移,人们的信心逐渐恢复。现在1个比特币的市值(截至完稿时)已经高达20 000多美元,越来越多的国家和企业开始接受、认可比特币。

● 德国财政部认可比特币为合法的私有资产,拥有者可以使用比特币缴纳税金等。

● 日本允许使用比特币来支付水电费。

● 微软、戴尔、维基百科和PayPal等知名企业陆续宣布接受比特币。

中本聪打造的比特币系统已经成长为一个庞大的数字货币“帝国”。

2.比特币的挖矿

比特币系统是一个去中心化的分布式系统,由分布在世界各地的很多矿工参与记账,那么怎样在所有矿工之间达成共识、防止矿工在记账时作假就很重要。共识算法可以解决这个问题,实现不同节点上数据的一致性和正确性。

分布式系统是一个不稳定的系统,其中的节点随时可能掉线或死机,而且不能排除节点恶意作假,因此共识算法应具有容错性。分布式系统的核心问题就是在各节点间达成共识。达成共识的方法被称为共识算法。

在比特币系统中,共识算法需要解决以下2个问题。

● 确定选择记账节点的机制。

● 确保账本数据在全网保持正确且一致。

比特币系统通过挖矿解决以上2个问题。挖矿既是比特币系统的记账过程,又是比特币的发行机制。在比特币系统中,平均每10min会产生一个区块,矿工会将最近发生的交易记录在新区块中。那么谁才能得到记账奖励呢?比特币系统采用PoW共识算法。这是一种简单、“粗暴”的共识算法,就是谁的算力大,就由谁记账。这有点儿类似于矿工之间的“华山论剑”。那么,比特币系统是如何进行算力“比武”的呢?

当产生新区块时,网络中所有在线矿工都会参与争夺记账权,这个过程就是挖矿。比特币的区块头中包含一个“难度目标”字段,这就是系统给所有矿工出的一道数学题。

比特币的区块头中还包含一个字段 Nonce,这是为了找到满足难度目标的矿工而设定的随机数。解题的过程就是不断地调整Nonce的值,然后对区块头进行双重SHA-256运算,进而得到result。可以使用如下代码表示运算的过程:

result = SHA256(SHA256(区块头数据))

如果result小于给定的难度目标值,则视为成功解题。最先解题的矿工会取得记账权。

节点在成功解题后,会立即广播打包的区块。收到被打包的区块后,网络中的节点会按以下步骤进行处理。

(1)对打包的区块进行验证。验证的过程比较复杂,这里不展开介绍。

(2)如果未通过验证,则丢弃该区块,不做处理。比特币系统规定只有经过6个确认的交易才被认为是真实的交易。这样,即使有些矿工想作弊,也会因为得不到足够的确认而无法得逞。

(3)如果通过验证,则说明本轮挖矿已经结束,其他节点放弃竞争记账权,本节点将该区块记录在自己的账本中。

PoW算法保证了全网只有一个节点将一个区块添加到账本中,其他节点均复制账本中该区块的数据,从而保证了比特币账本的全网一致性和唯一性。

在比特币网络刚刚建立的时候,参与挖矿的人很少,中本聪本人也要亲自参与挖矿,才能维持比特币系统的运转。那时候只需要用普通的PC就可以挖到比特币。

随着比特币的推广和普及,越来越多的人接受比特币,参与挖矿。于是诞生了生产专业矿机的硬件厂商。有些矿机利用GPU(Graphics Processing Unit,图形处理单元)的计算能力进行挖矿,这种矿机被称为GPU矿机。

还有利用ASIC(Application Specific Integrated Circuit,专用集成电路)芯片进行计算的 ASIC 矿机。ASIC 芯片是一种专门为某种特定用途而设计的芯片。例如比特币采用SHA-256算法,那么比特币ASIC矿机的芯片就被设计为仅能计算SHA-256。还有一些其他种类的矿机,这里不展开介绍。

矿机出现后,普通计算机已经很难挖到比特币了。还有一些公司大量购置矿机,组成矿场,凭借规模优势提高挖矿的成功率。矿场通常开设在水电站旁边,因为那里的电费相对低廉。

为了进一步提高算力,矿池产生了。矿场和少量拥有矿机的个人可以联合起来,将算力合并,联合运作。以这种方式搭建的网站就是矿池。矿池挖到比特币后,由参与者按照贡献度分配。