区块链中的共识

拜占庭将军问题

拜占庭为东罗马帝国的都城,帝国的将军们守卫着辽阔的疆域,为了协同作战就必须先达成共识。但是达成共识存在很多问题,比如主帅副官可能是叛徒,或者军队中存在间谍。

拜占庭将军问题是一个协议问题,拜占庭帝国军队的将军们必须全体一致的决定是否攻击某一支敌军。问题是这些将军在地理上是分隔开来的,并且将军中存在叛徒。叛徒可以任意行动以达到以下目标:欺骗某些将军采取进攻行动;促成一个不是所有将军都同意的决定,如当将军们不希望进攻时促成进攻行动;或者迷惑某些将军,使他们无法做出决定。如果叛徒达到了这些目的之一,则任何攻击行动的结果都是注定要失败的,只有完全达成一致的努力才能获得胜利。

除此之外,还有另一种表述方法,

在拜占庭时代有一个墙高壁厚的城邦,拜占庭,高墙之内是它的邻居想象不到之多的财富。它被其他10个城邦所环绕,这10个城邦也很富饶,但和拜占庭相比就微不足道了。它的十个邻居都觊觎拜占庭的财富,并希望侵略并占领它。
但是,拜占庭的防御如此之强,十个邻居的一半以上同时进攻才能攻破它,也就是说,如果六个或者更多的相邻敌军一起进攻,他们就会成功并获得拜占庭的财富。然而,如果其中有一个或者更多背叛了其他人,答应一起入侵但在其他人进攻的时候又不干了,也就导致只有五支或者更少的军队在同时进攻,那么所有的进攻军队都会被歼灭,并随后被其他的(包括背叛他们的那(几)个)邻居所劫掠。这是一个由不互相信任的各方构成的网络,但他们又必须一起努力以完成共同的使命。
而且,是个邻居之间通讯和协调统计时间的唯一途径是通过骑马在他们之间传递信息。他们不能聚在一个地方开个会(所有的王都不互相信任他们的安全在自己的城堡或者军队范围之外能够得到保障)。然而,他们可以在任意时间以任意频率派出任意数量的信使到任意的对方。每条信息都包含类似如下的内容:“我将在第四天的6点钟进攻,你愿意加入吗?”。
如果收信人同意了,他们就会在原信上附上一份签名了的/认证了的/盖了图章的/验证了的回应,然后把新合并了的信息的拷贝再次发送给九个邻居,要求他们也如此这样做。最后的目标是,通过在原始信息链上盖上他们所有十个人的图章,让他们在时间上达成共识。最后的结果是,会有一个盖有十个同意同一时间的图章信息链,可能还会有一些被抛弃了的包含部分但不是全部图章的信息链。
但是,问题在于如果每个城邦向其他九个城邦派出一名信使,那么就是十个城邦每个派出了九名信使,也就是在任何一个时间又总计90次的传输,并且每个城市分别收到九个信息,可能每一封都写着不同的进攻时间。除此以外,部分城邦会答应超过一个的攻击时间,故意背叛发起人,所以他们将重新广播超过一条的信息链。这个系统迅速变质成不可信的信息和攻击时间相互矛盾的纠结体。

其实这个问题的核心就是分布式节点传输信息时如何保持数据的一致的问题,也就是共识。区块链采用两种方式来实现。比特币采用的是工作量证明,而点点币(PPCoin)采用的是权益证明方法。

工作量证明Proof of Work

如何解决共识问题,两个规则:增加信息传输成本降低传输效率,使用加密算法验证真实性。

规则一工作量证明算法

增加发送信息条件限制,让难度增加。工作量证明就是制订了一个规则,只有符合这个规则的信息才会被全网接受。规则就是所有参与者把当前时间点的整个总账的数据作为输入哈希计算出一个前13个字符是0的64位字母数字串,最先完成者胜出。胜出者将此哈希值和自己的签名以及此前所有数据打包一起向全网广播,所有收到信息者验证数据,停止计算,同步数据,然后把新的总账数据作为输入继续开始新一轮竞赛。如此循环,实现总账数据的分布式生产存放更新。
按照当前的比特币网络能力,一次循环或者说一次竞争耗时约为10分钟。(请注意这是故意的,算法难度每两周调整一次以保证网络一直需要花费10分钟来找到一个有效的哈希值)。同时这10分钟之内的所有交易记录也会被同步。
期间可能产生十亿个无效数值。胜出者只有一个。这就是挖矿。

规则二非对称加密算法

个人进行交易时,使用比特币客户端内的公钥加密工具记录自己的私钥和接受者的公钥为这笔交易签名,这也就是交易印章。
比特币网络通过上述两种技术成为拜占庭将军问题的解决方案。

权益证明Proof Of Stake

工作量证明机制中存在大量的计算力浪费,比特币网络每秒种进行600千亿次运算,最终这些运算并没有任何实际或科学用途。而且随着挖矿难度增加,矿工们在优化计算技术方面很少投入,把大量财力投入到硬件设备升级方面,对技术推进帮助不大(我们是否可以设想将这些计算力运用在公益事业比如疾病防范的研制计算,甚至是setti@home这样的项目中,而不是大量电力资源的浪费,这种浪费甚至已经引起某些国家机构的重视,当然这需要改变比特币的运营模式,基本不可能,但这也同时是比特币未来的软肋,所谓成也萧何败萧何)
因此出现了另外一种解决共识问题的办法,就是权益证明。它不是依赖计算力证明自己实现共识,而是采用货币占有权评估共识话语能力。
POS就是采用持有货币的量和时间计算权益,单位是币龄。币龄就是每个币每天为1币龄。(这种思想来源于银行业务中的积数计息法)

比如你持有100个币,总共持有了30天,那么,此时你的币龄就为3000,这个时候,如果你发现了一个POS区块(例如矿工挖出一个点点币),你的币龄就会被清空为0。你每被清空365币龄,你将会从区块中获得0.05个币的利息(可理解为年利率5%),那么在这个案例中,利息 = 3000 * 5% / 365 = 0.41个币。

POS的实践是PPCoin。

权益证明机制下,只要持有PPC的人,不论持有算力多少,都可以挖到数据块,而不用采用任何的矿池导致出块集中;同时,也只有持有PPC的人,才能够进行Minting挖矿,参与网络安全的维护,不会出现利益错位的问题。

当然POS机制中也存在计算,但计算重点只同交易输入、一些附加的固定数据以及当前时间(是一个表示自1970年1月1日距离当前时刻的秒数的正数)有关。

从本质上讲,每个PPCoin都可以表现的像是一个“仿造的挖矿设备”,但是它有一个有趣的性质:随着时间的推移它的挖矿能力线性上升但是每当它找到有效的区块时挖矿能力就归为零。

————————————
参考内容:
区块链铅笔公众号文章
https://mp.weixin.qq.com/s?__biz=MzA3NTg1MjE0Ng==&mid=2649774279&idx=5&sn=912d0b6dd0245318fff4d5ddb9d0f936&scene=0#wechat_redirect
李白话日常(hi4fortune)文章
http://mp.weixin.qq.com/s/g47MX_9OxJ_wnTkMzJbZGg
http://mp.weixin.qq.com/s/GSwqOV7n2erbPqJvYnSezQ
巴比特:什么是权益证明以及为什么它重要http://www.8btc.com/what-proof-of-stake-is-and-why-it-matters

    原文作者:乔延宏
    原文地址: https://www.jianshu.com/p/cfa5a369d7b2
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞