共识机制是区块链的灵魂,区块链的发展离不开共识机制。工作量证明系统(Proof Of
Work,PoW)机制是第一代的共识机制,发展至今,PoW机制每年将消耗数十亿美元,这个损耗超过了盗窃和诈骗。这么庞大的数字令人震惊,今天小编就带着大家了解第一代的区块链共识机制—PoW机制。
为什么需要共识机制?
在中心化的体系中,系统规则由中心机构决定,各参与方只需要根据中心遵从下达的命令。但在去中心化的体系中,各参与节点的地位平等,当出现分歧时就需要共识机制来协助各方达成共识。
从这方面来看,中心化的体系要比区块链系统高效,因为不会在共识方面浪费时间。举例来说,暑假学生快要开学了,老师会提前通知开学时间、领书地点以及缴费情况,如果不准时按照规则行事,就可能造成旷课、无法领到书籍、拖欠费用等,所以每个同学基本都会按照学校的要求进行入学工作。如果把同样的情况,放到区块链领域,学生、老师、学校之间的地位是平等的,大家可能会商议达成一个共识,开学工作究竟如何安排,这种耗时是不可避免的。
从去中心化账本系统的角度来看,每个新加入区块链系统的节点都需要保存一份完整的账本。但就实际情况来看,每个节点不可能同时记账,因为区块链系统的节点可能遍布全球,接受到的信息也不同,如果同时记账的话,就会导致账本不一致,从而无法界定什么样的账本是真实的账本。这种情况给了共识机制诞生的机会。
工作量证明系统(Proof Of Work)
1997年,英国密码学专家亚当.贝克(Adam Back)发明了哈希现金(Hashcash),用工作量证明系统解决了互联网垃圾邮件问题,它要求计算机在获得发送信息权限之前做一定的计算工作,这对正常的信息传播来讲,几乎很难察觉,但是对向全网大量散步垃圾信息的计算机来说,就成为了巨大的工作量和负担。
从名称上来看,工作量证明就是用来确认你做过一定量的工作。举例来说,你考取了某证书,能够客观证明你进行了一定量的学习,具备了考取证书所需要的能力。工作量证明,一开始是为了解决比特币随意记账的一种方式。
最开始的比特币系统设计了以每个节点的算力来竞争记账权的机制。在比特币系统中,大约每10分钟进行一轮算力竞赛,竞赛的胜利者获得一次记账的权力,并向其他节点同步新增账本信息。
然而去中心化的系统,并不存在权威性的中心机构,那么谁有权判定竞争的结果呢?这时,第一代共识机制工作量证明(PoW)机制的重要性就体现出来了。
借用书上一个稍微复杂的例子:给定字符串“blockchain”,给出工作量要求是可以在这个字符串后面连接一个称为nonce的整数值串, 对连接后的字符串进行SHA256哈希运算,如果得到的哈希结果(以十六进制的形式表示)是以若干个0开头的,则验证通过。为了达到这个工作量证明的目标,我们需要不停地递增nonce值,对得到的新字符串进行SHA256哈希运算。
PoW系统的主要特征是计算的不对称性。 工作端需要做一定难度的工作得出一个结果,验证方却很容易通过结果来检查工作端是不是做了相应的工作。
PoW的过程
延续上文的例子来解读比特币PoW的过程,可以将其简单的理解成:输入不同的nonce值,尝试进行SHA256哈希运算,找出满足给定数量前导0的哈希值的过程。而要求的前导0的个数越多,代表难度越大。
比特币节点求解工作量证明问题的步骤大致归纳如下:
1)生成铸币交易,并与其他所有准备打包进区块的交易组成交易列表,通过Merkle树算法生成Merkle根哈希;
2)把Merkle根哈希及其他相关字段组装成区块头,将区块头的80字节数据作为工作量证明的输入;
3)不停地变更区块头中的随机数,即nonce的数值,并对每次变更后的区块头做双重SHA256运算,将结果值与当前网络的目标值做对比,如果小于目标值则解题成功,工作量证明完成。
基于PoW机制的共识记账
我们以比特币网络的共识记账为例,来说明基于PoW的共识记账过程。
1) 客户端产生新的交易,向全网进行广播要求对交易进行记账;
2) 每一个记账节点一旦收到这个请求,将收到的交易信息纳入一个区块中;
3) 每个节点都通过PoW过程,尝试在自己的区块中找到一个具有足够难度的工作量证明;
4) 当某个节点找到了一个工作量证明,它就向全网进行广播;
5) 当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性;
6) 其他节点表示它们接受该区块,而表示接受的方法则是在跟随该区块的末尾,制造新的区块以延长该链条,而将被接受区块的随机哈希值视为先于新区块的随机哈希值。
通过上述的记账过程,客户端所要求记录的交易信息被写入了各个记账节点的区块链中, 形成了一个分布式的高概率的一致账本。
工作量证明机制(PoW)具有完全去中心化的优点,在以工作量证明机制为共识的区块链中,节点可以自由进出。大家所熟知的比特币网络就应用工作量证明机制来生产新的货币。然而,由于工作量证明机制(PoW)在比特币网络中的应用已经吸引了全球计算机大部分的算力,其他想尝试使用该机制的区块链应用很难获得同样规模的算力来维持自身的安全。同时,基于工作量证明机制的挖矿行为还造成了大量的资源浪费,达成共识所需要的周期也较长,因此该机制的适用范围存在局限性。
参考书籍:《区块链技术指南》邹均 张海宁 唐屹 李磊等著