之前我们说到的运作方式,打包和广播,正是区块链最核心的技术内容之一:共识机制
分布式系统的经典问题: 拜占庭将军问题
拜占庭将军问题是一个虚构出来的,可以方便通俗的介绍分布式系统所面临的难题.这边不做表述.
我们还是回到村子当中,随着村子和人口的发展,大村子变成了十一个小村子,并分散在各地,村子间只能靠信鸽来通讯.
大家约定了每年都举办一个相亲大会,每年从 A 村或 B 村中选择一个,得票多的胜出.
由于村子相隔甚远,没办法靠一只信鸽传送到每个村子,这个就必须有个村子作为中转站来代为传输,也就意味着这个村子可以读到其他村子的投票信息.
那么,下面两个问题就会出现:
- 村子的投票行为不一致,比如 E 村发送给一个村子说自己投了 A,但是对另外一个村子说自己投了 B
- 中继村舞弊,篡改投票消息
上面的问题可以看做简化版的拜占庭将军问题
我们再回头看区块链,本质上也是分布式系统的一种,其共识机制就是为上述问题而提出的解决方案.
什么是区块链共识机制?
共识机制是区块链最核心的组成要素之一,它决定了区块链的业务吞吐量,交易速度,准入门槛等,是最为关键的要素之一.
共识机制主要解决了两个问题:
- 谁有权利
- 作弊问题
在中心化的记账场景下,可以简化为大家信任中心记账者.
而在分布式记账的场景下,首选要解决的是谁有权利记账,其次是如何避免记账者作弊.
最经典入门型共识机制:PoW工作量证明
在PoW 这种机制中,计算资源(算力)是决定记账权的唯一因素,与之对应的,便是计算难度.
计算难度又被称为挖矿难度,计算难度是区块链为了控制产生答案的速度,比如平均10小时就有一个答案产生
比如现在大家都一样做题,但是张三买了一个算盘,其他村民都是用手指,那么他的算力就大大提成,也就是说张三有很大概率能获取记账权,那么李四的个人诚实性,便成为了系统的唯一破绽.
比如张三在第一次记账时篡改了交易信息,第二次还是他记账,还继续篡改,那么两次修改不会冲突,就形成了假账,这就是中心化风险.
那么怎么避免作弊者呢?答案还是算力.
如果一个作弊者想要修改信息,首先要获得记账权,也就是装信封的权利.
而在 PoW 中,营销记账权的唯一因素就是计算资源的大小,如果要篡改交易,只能投入大量的算力与整个系统中的其他人做对抗,这是十分困难的,尤其是在整个系统中有一定基础计算资源的情况下.
PoW中一个有趣的设计是激励机制,在 PoW 共识下,我们假设所有的参与者都是理性的,单纯逐利,不考虑其他因素.有了理性的前提,共识机制会给每个诚实的记账者给予奖励,这个设计可以抗击作弊收益的问题.
怎么进行抗击的呢?整个过程是这样的,理性的人如果作弊,篡改账本肯定要投入成本,也就是计算资源,收益就是篡改账本获得的收益去掉投入成本,这个收益往往小于诚实的记账者所获得的收益,所以作弊者在作弊时投入的资源过大,得不偿失.
PoW解决双花攻击
刚刚我们说的作弊的收益小于诚实计算的收益,这一点其实可以解决一个区块链领域的著名问题:双花攻击
双花攻击是指一个代币被花了两次,在这任何一个区块链系统中都是不被允许的,如果避免了双花问题,就能避免作弊收益大于诚实计算的问题,因为发起共计需要同时控制你的密钥和你的算力资源.
我们之前提到的广播分为两种,一种是未确认的Transaction,另一个是装在信封里已被确认的Transaction
所有的记账节点都会遵循两个规则
- 一个代币如果已经被花费,那么就会被标记为已花费,如果再次接收到合格代币被花费的请求,那么记账节点会拒绝打包这笔交易
- 如果同时接到两个信封,这两个信封中装的两笔交易出现了一个代币被花费两次的情况,这种情况就是我们所说的分叉,那么就选择挖矿难度较大的那个信封
规则一避免了未确认的交易出现双花,规则二避免了已经确认的交易中(信封)出现双花.
假设作弊者的算力占整个系统的30%,那么连续两次获得记账权的概率为9%,看起来还是挺高的,那如果是连续6次获得呢?就降到了万分之七.
在比特币中,这个6次代表了6次确认,表示连续6个块过去了,如果我的交易没有被双花,那么他被篡改1可能性就越来越小,最后变的几乎不可能被篡改,这也是不可被篡改的说话的由来.
试想,如果作弊者花了大量的成本获取了系统30%的算力,最有只有万分之七的概率获得篡改的可能,比起作弊,还不如诚实记账的收益高.
区块链的入门机制 PoW,他其实也是目前区块链领域中使用最广泛的,应用最成熟共识机制.