区块链应用开发指南:业务场景剖析与实战
上QQ阅读APP看书,第一时间看更新

1.15.2 共识算法

正如前面所说,比特币网络中的所有节点都会接收到一组转账记录(一个区块),然后把这个区块更新到本地的账本记录中。这里就有一个问题,由于各节点处于分布式网络中,有可能不同的节点收到不同的记录,如果节点都随意增加记录,那么整个比特币网络中的记录就无法保持一致。为了保持记录的一致,那么必须确认哪个区块被优先写入,也就是需要以某一个节点的操作为准。但如果人为规定以某个节点为准,就意味着这个节点比其他节点更权威,相当于变成了一个中心节点,那么去中心化的优势就荡然无存。区块链的分布式共识算法就是设计用来解决这个问题。共识算法能够让区块链中的节点认同某一个节点的记录,同时这个认同并不是固定某一个节点,而是区块链中的所有节点都有可能获得这个权利。

比特币使用的共识算法叫作PoW共识机制,全称是Proof of Word,中文翻译为“工作量证明”。PoW机制是1997年由亚当·巴克(Adam Back)发明的,主要是为了解决垃圾邮件泛滥的问题。主要思路是邮件接收者不是任意接受别人的邮件,在一次有效的邮件发送接收过程中,发送者需要计算一个难题,然后把这个难题的答案同时发送给接收者,接受者先验证这个答案是否有效,有效的话才接收邮件。

可以看出,PoW中最重要的就是计算一个难题。这个难题需要具有一个特点,那就是计算出这个难题的答案比较困难,而验证这个难题却比较简单。因为如果验证和计算一样复杂的话,那发送方和接收方的成本就是一致的。从经济上来说,成本一致也就很难实现防止恶意攻击的目的。

关于计算困难但验证容易的问题,我们可以举一个现实中的例子。比如323由哪两个数(要求每个数都大于1)相乘得到?这个问题的计算就比较复杂,必须一个数字一个数字地去试,相反,验证这个问题很简单,直接把对方给的两个数字相乘,然后看结果是不是323就可以,一次乘法就出结果。(注:答案是19和17,并且答案唯一。)

比特币就使用了这种机制,所有节点要记录一个新的区块,需要计算一个非常复杂的问题,先算出答案的节点就获得了记录新区块的权力,其他节点都会使用这个节点的记录。虽然理论上也有可能其他的节点在同一时间计算出答案,但在实际运行中,这个概率可以小到忽略不计,事实上比特币运行这么多年,证明了这个机制是非常稳定安全的。