You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
9.1 KiB
Markdown

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 第3讲 | 浅说区块链共识机制
我在第2讲“区块链到底是怎么运行的”一文中提到了“打包Transaction”和“广播交易”这两个概念因为概述的原因当时只带着你走了一遍过程。其实以上谈到的两个内容正是区块链最核心的技术内容之一共识机制。
区块链发展至今,已经形成了各种不同类型的共识机制,在今天的文章中,我们就展开聊一聊区块链共识机制到底是什么,以及区块链的共识过程到底是怎样的。
## 分布式系统的经典问题: 拜占庭将军问题
拜占庭将军问题其实是虚构出来的一个故事,是为了方便通俗地介绍分布式系统所面临的难题。这里我仅作一个简短的说明,你可以在中文社区找到更丰富的通俗解释材料。
为了避免重复,我们换一种表述形式,还是以上一次的村子为例,假设随着村子和人口的发展,大村子演变成了十一个小村子并分散在各地,各地的通信只能靠信鸽进行。
大家约定了每年都会举办一个相亲大会至于谁能举办每年轮流从两个备选村子A村和B村中选择一个然后大家投票票数多者可以赢得举办权。
由于地图很大,任何一个村子的投票都无法靠一只信鸽传输到每个村子,必须靠一个中继村子代为传输,这也就意味着有中继村子可以读到其他村子的投票信息。
那么,如何防止下面两个问题的出现呢?
1. 投票者的“精分”这里所谓的“精分”是指某个村子的投票行为不一致发送给第一个村子的投票消息为“投票给A”而发送给第二个村子的投票消息却为“投票给B”。
2. 中继村子作弊,即篡改上一村的投票消息。
上面讨论的问题我们可以认为是简化的 “拜占庭将军问题”(完整的拜占庭将军问题还有将军-副官模型,如果感兴趣的话,你可以自行阅读)。
我们回头再看区块链。区块链本质上也是分布式系统的一种,其共识机制也是为了上述问题而提出的解决方案。
## 什么是区块链共识机制?
共识机制是区块链是核心的组成要素之一,它决定了区块链的业务吞吐量、交易速度、不可篡改性、准入门槛等等,是最为关键的技术要素之一。
要理解区块链共识机制,首先就需要理解区块链共识机制到底解决了什么问题。
共识机制主要解决了两个问题:
1. 谁有权利;
2. 作弊问题。
上一次我们构造了一个中心化记账的场景,在这个场景下,记账问题其实可以简化为大家信任中心记账者即可。
然而在分布式记账的场景下,问题更为复杂。首先,大家面临的最大问题是谁有权利记账,其次是如何避免记账者作弊。毕竟,谁都有权利记账,也就意味着谁都有可能作弊。
以上两部分共同构成了区块链共识机制。
另外补充一点在比特币社区“共识”consensus这个词已经跳出了技术的范畴。通常人们在表述一个比特币上的问题时共识的内涵还包括比特币的使用者、开发者、矿工来达成社区共识的部分,所以“共识”这个词在区块链领域还有些“民主”的味道,不单单是技术领域的“共识”。
## 最经典的入门型共识机制PoW工作量证明
PoW Proof of Work工作量证明可以解决上述的两个问题
在上一篇文章中其实我们已经悄悄讲解了一点PoW共识机制你还记得上文提到的“24点”那个游戏吗“24点”其实是尽可能随机地选取系统中任意的节点来规避作弊者这个方案的实践其实就是PoW共识机制。
产生记账者的随机性其实来自于谁最先计算出24点的答案这个问题可以简化成谁拥有的计算资源更多谁就拥有整个系统的最大概率的记账权。一旦这个概率超过一半以上那么这个系统就有一定的中心化风险。
如何理解上面一段话呢?
举个例子李四家发明了一种算盘可以快速计算24点答案比起其他人掰手指头李四家总是有很大的概率拿下记账权换句话说也就是李四和全村其他所有人竞争相当于算盘对全村其他人手指头的竞争。
如果算盘足够强大,就能有一半的概率获得记账权,那么李四个人的诚实性,就成为了系统的唯一破绽。
比如李四在第一次记账时篡改部分交易,第二次还是他记账,还继续篡改交易,那么两次修改如果自洽的话,是可以形成假账的,这就是所谓的中心化风险。
所以在PoW这种机制中计算资源又称算力是决定记账权的唯一因素。与之对应的便是计算难度。
计算难度又称作挖矿难度计算难度是区块链为了控制产生答案的速度比如平均10分钟就有一个答案产生平均2分钟一个答案产生。
在上述场景中,因为李四有了算盘,强大的计算资源突然加入以后,肯定会让整个系统的产生答案的速度变快很多,作为系统本身会自适应,将难度提升,降低答案产生的速度。
上面介绍了这么多其实是想引出另外一个问题PoW到底是如何避免作弊者的呢答案就是计算资源算力
设想,如果一个作弊者想篡改信封里面的交易,首先得获得记账权,也就是装信封的权利。
而影响记账权的唯一因素只有计算资源(算力)的大小,如果想篡改交易,只能投入大量的计算资源与整个系统中其他所有人进行对抗,这是十分困难的,尤其在整个系统有一定基础计算资源(算力)的情况下。
PoW中一个有趣的设计是激励机制在PoW共识机制下我们假设所有参与者都是理性的理性的意思就是单纯逐利不考虑家庭、爱好等其他因素。有了理性的前提PoW共识机制会给每个诚实的记账者予以奖励这个设计可以抗击作弊收益的问题。
怎么进行抗击的呢?整个过程是这样的,理性的人如果作弊、篡改账本肯定需要投入成本,也就是计算资源,收益是篡改账本获得的收益减去投入成本,这个收益往往小于诚实计算所获得的收益。所以,作弊者在作弊过程中投入的计算资源过大,反而得不偿失。
## PoW工作量证明的补充解决双花攻击
上面给出了一个结论我们说作弊的收益往往小于诚实计算的收益。这一点其实对应到区块链领域有个著名的问题双花攻击double-spending
双花攻击是指一个代币被花费了两次,这在任意的区块链系统中是不被允许的。如果避免了双花问题,基本就能避免上述作弊中收益过大的问题,因为攻击者首先要窃取到你的私钥,同时又能控制了你的计算资源(算力)。
为了方便分析我们回到上一篇中广播交易的那一节。那一节中我介绍了广播的内容分为两种第一种是Transaction第二种是区块也就是信封。
第一种又被称为未确认的Transaction第二种信封中所有的交易被称作已确认的Transaction。
所有记账节点都会遵循以下两条规则:
规则一:一个代币如果已经被花费,那么会被标记成已花费,如果再次接收到这个代币被花费的请求,那么记账节点会拒绝打包这笔交易;
规则二如果同时接收到两个信封这两个信封中装的两笔交易出现了一个代币被花费了两次的情况这种情况也就是我们所说的分叉Fork那么选择挖矿难度比较大的那个信封。
规则一避免了未确认的交易出现双花,规则二基本避免已经确认的交易中(信封中)的双花问题。
假设作弊者的计算资源算力占整个系统的30%那么连续两次获得记账权的概率是9%看起来作弊的可能性还是挺高的如果是连续6次获得记账权呢概率直降到万分之七。
在比特币中这个6也就是6次确认表示连续6个块过去了如果我的交易没有被双花的话那么它被篡改的可能性将越来越小最后变得几乎不可能被篡改。这也是区块链不可被篡改说法的由来。
试想如果任何作弊者花了大量的成本获取了系统30%的计算资源(算力),最后只有万分之七的概率获得篡改的可能性,比起作弊,还不如诚实记账的收益高。
## 总结
好了今天带你了解了区块链的共识机制也顺便浅谈了拜占庭将军问题介绍了区块链的入门共识机制PoW它其实也是目前区块链领域使用最广泛应用最成熟的共识机制。
最后还涉及了一部分PoW工作量证明的补充解决双花攻击。由于篇幅所限我们将在技术篇详细讲解PoW、PoS、DPoS等共识机制。
那么亲爱的读者你觉得PoW共识机制和其他分布式一致性算法有什么不同吗欢迎给我留言一起讨论。
感谢你的收听,我们下期再见。