主页 > imtoken安全下载地址 > 区块链的几种共识算法(区块链的几种共识算法的区别)
区块链的几种共识算法(区块链的几种共识算法的区别)
我们先从常见的拜占庭将军问题来理解什么是unity。
拜占庭将军问题
拜占庭位于现在的土耳其伊斯坦布尔,是东罗马帝国的首都。 当时,拜占庭罗马帝国幅员辽阔。 为防御起见,各军相隔甚远,将领只能靠使者传话。 在战斗中,拜占庭军队中的所有将军和副官都必须聚集在一起,决定是否有机会取胜,然后再进攻敌人的阵营。 但是,军队中可能出现内奸和敌特,影响将领的决策,扰乱全军秩序。 将领采用投票策略来决定进攻还是撤退,也就是说,如果多数人决定进攻,他们就冲上去,如果多数人决定撤退,他们就撤退(例如,有10个将军, 6 选择攻击, 然后只攻击)。
这时候,在已知成员造反的情况下(可能是奸细的情况,乱投,或者擅自修改军令),其他忠臣将领怎么可能不被内奸影响而达成协议呢? 拜占庭 这就是问题所在。
拜占庭将军问题是一个协议问题。 拜占庭帝国军队的将领必须集体决定是否攻击某支敌军。 问题是武将异地,武将中有内奸。 叛徒可以随意行动以达到以下目的:诱使某些将军采取进攻行动; 促进并非所有将军都同意的决定,例如当将军不想进攻时促进进攻行动; 或引诱某些将领,使他们不能决断。 如果叛徒实现了这些目标之一,任何进攻行动的结果都注定要失败,只能通过完全团结的努力才能获胜。
所以,拜占庭将军是分布式系统中的通病,也是分布式容错系统中的一个问题。 Byzantine Generals' Problem不是让将军们达成进攻的决定,而是让所有忠诚的将军们齐心协力,要么全部进攻,要么全部撤退,这样才不会被敌人一一击破。
现在拜占庭将军问题有很多经典的解决方案,比较常见的有PBFT和Raft。 PBFT的求解条件是要求n≥3t+1,其中t为故障节点数(即叛将数),n为节点总数(即总节点数)所有将军)。 虽然这些方法可以一起实现并且各有优势,但它们都有不同的假设和局限性。
现在区块链系统中,PBFT、Raft是联盟链和私有链上常用的常用算法,而在公有链上,常用的常用算法有POW、POS、DPOS等。
一起区块链
我们平时支付的时候,直接用支付宝刷一下就可以了。 事实上,并没有实际的货币转账,只是支付宝在其数据库中记录了一个账户。 现在的货币体系其实是记账货币,记账主体是国家央行或者支付宝等第三方机构。 这是一种集中记账的方式。 中心化记账虽然效率很高,但也面临着各种问题,比如中心化节点导致的单点故障。 如果一颗流星正好落在阿里巴巴的数据库机房; 巴巴的数据库管理员有一天心情不好,然后把数据库删掉就跑了。 当然,这些事件发生的可能性很小,但黑天鹅事件要么不发生,要么发生可能是毁灭性的打击。 所以,对于这种可能出现的小概率任务,解决方案一般都是以预防为主,比如备份数据,多建几个分布式节点,对人员进行SOP培训等。 另一个解决方案是使用更可靠、更安全的系统。
区块链去中心化记账从技术上解决了上述中心化记账的不足。 没有中心节点接入,通过计算机算法、密码学、经济学,结合智能合约,点对点传输,不可篡改。 区块链的每一个区块都相当于一个账本页,每一个区块都记录着对应的交易内容。 然而,去中心化记账中一个非常重要的问题是各节点账本的一致性。
从去中心化账本系统的角度来看,每个参与系统的节点都需要保存一个完整的账本,但不能有两个节点跑来跑去记账。 访问节点所处环境不同,接收到的交易信息也不同。 如果记账犹豫不决,就会导致账目不一致。 因此,需要使用通用机制来:
公平公正地决定由哪个节点保留账户。 现在常用的有POW、POS等。 某个节点记账后,坚持同步全网账户。 现在常用的是最长链策略。
POW:Proof of Work,工作量证明
比特币系统设计了一种根据每个节点的算力即“算力”来争夺记账权的机制。 简单的说,POW就是工作端确认完成了一定工作量的证明。 比如我去面试的时候,招聘网站上写的是这个职位需要本科以上学历。 那如何证明自己是本科毕业呢? 把本科毕业证给面试官看就行了,就这么简单。 但是我如何获得这个文凭呢? 我需要上4年大学,在那之前,我要上高中、初中、小学。 上了大学,不能天天开心,还要上课,要考试,不能挂科。 这是一个艰难的过程。 对于面试官来说,文凭就足以证明我上过大学,我不傻。
因此,POW方法的主要特点是计算的不对称性。 操作者需要做一些困难的工作才能得到一个结果,但是验证者可以很容易地通过结果检查操作者是否做了相应的工作。 具体方法是对区块链头中的父块哈希、Merkle树根和nonce值三个字段进行哈希运算。 如果结果小于目标值,则计算成功,如果大于目标值,则改变nonce值,重复操作,直到结果小于目标值。
如何理解pow的运行端和验证端? 再来个栗子
Worker:假设输入值为blockchain1,对其进行哈希运算,找到前三位为0的哈希值,则计算过程为:
- blockchain1->ef7797e13d3a75526946a3bcf00daec9fc9c9c4d51ddc7cc5df888f74dd434d1
- blockchain2->db0b9c1cb5e9c680dfff7482f1a8efad0e786f41b6b89a758fb26d9e223e0a10
- ......
- blockchain515->0063e58fb6e3789fcb5eb64d05d7a9b909c5e9e1b60b18cb566a3326c1fd54c
- ......
- blockchain2688->0005f2ee930eafef21d06545c0058ddfcf2ac9dfa542b745021f51ceb9e9f43c
可以看出,经过2688次运算,可以找到前三位为0的哈希值。 随着0个数的增加,计算难度呈指数级增长。
验证者:验证者从运营者那里得到值blockchain2688,只需要一次计算就知道运营者的工作是否已经完成。
对于pow,如果要找到特定字符串背后的随机nonce,满足前n位全0的SHA256值,需要进行多次hash值运算。 一般来说,要访问hash值的伪随机性,需要找到前导有3个0的hash值,预计要进行大约2的12次方测试。 这个数学期望的计算次数就是所谓的“工作量”。 整个工作量证明活动就是我们常说的“挖矿”。
在上面的例子中,比特币实际系统中有几个关键点,比如nonce值是如何改变的,目标值0的个数是如何确定的等等,可以参考比特币挖矿的文章。
比特币网络中的任何一个节点,如果要产生新的区块并将其写入区块链,就必须解决比特币网络的 POW 问题。 这个问题有三个关键要素:
比特币系统使用的工作量证明函数是 SHA256。 SHA 是 Secure Hash Algorithm 的缩写。 它是一个密码哈希函数族。 SHA256 就是其中之一,输出一个 256 位的哈希算法。 . 比特币区块由区块头和区块中包含的交易列表组成。 区块中包含一个指向前一个区块的哈希指针,这样记录不同交易的各个区块就形成了区块链。 难度值是比特币系统中节点出块时的重要参考指标。 它决定了一个节点需要进行多少次哈希运算才能生成一个哈希块。 难度值会随着全网算力的变化而变化。 调整以保持每 10 分钟生成一个块的速率。
因此,POW成功与否的决定因素是算力的大小。 如果你的算力为n,全网的算力为m,那么你成功完成一次工作量证明,即一次挖矿活动的概率为n/m,经过m/n次挖矿后,可以成功一次。 比如我的笔记本算法大概是1GH/s,现在全网算力是21EH/s,那我需要做200亿左右的工作量证明,每次10分钟左右,肯定挖不出来在我的一生中出一个。
POS: Proof of Stake, 权益证明
现在我们知道了如何针对比特币进行挖矿,也就是需要购买挖矿设备和支付电费,从而获得新的币作为挖矿的奖励。 这基本上是一个资源密集型过程。 并且有两个明显的缺点。 一方面,Pow 的条件是节点和算力分布均匀。 访问中本聪的原计划是通过CPU挖矿比特币记账与分配问题,让节点数量和算力大致匹配。 但是随着GPU、FPGA、矿机的出现,节点数量和算力逐渐不匹配。 另一方面,pow 太浪费了。 比特币网络每秒可以完成数百万亿次 SHA256 计算。 这些计算除了让恶意攻击者无法轻易破坏比特币网络外,似乎没有更多的实用价值。 当然,与它带来的好处相比,这种浪费可能只是微不足道的价值。
但无论如何浪费也不好。 有什么办法可以去掉挖矿设备和能耗的联系吗? 毕竟这个过程只需要选择一个节点记账即可。 还有其他方法可以完成吗? 因此,人们提出了一些工作量证明的替代品,其中之一就是 POS。
权益证明由量子力学在2011年比特币论坛演讲中提出,后由PPC(Piancoin)和NXT(Future Coin)以不同方式完成。 POW是根据算力随机的,POS是根据财产随机的。 这就是这两种通用机制的本质。 但是另外一个问题是,POW是比特币出现之前就已经存在的东西,要访问比特币的成功,POW基本上特指比特币的POW。 但恰恰相反,POS 是一个新生事物,现在还没有成熟的 POS 应用,所以说到 POS 并不是指某种算法比特币记账与分配问题,而是指一个类别,而这些算法各有各的优势和缺点。 而且,截至目前,还没有一种算法的可靠性经过实践检验。 因此,要比较POW和POS的优劣,我只能以POS这一类为例。 我们现在常说的POS,其实就是说PPCoin的POS,也就是最早的POS。 那个东西有根本性的缺陷,比如币龄攻击(save-up attack),只适用于PPC,不是POS问题。
当量子力学提出 POS 的概念时,他是这样说的:
我想知道随着比特币的分布越来越广泛,是否会从基于工作量证明的系统过渡到权益证明系统。 我所说的股权证明的意思是,您对已接受的交易历史的“投票”不是由您带给网络的计算资源份额加权,而是由您可以证明自己拥有的比特币数量加权,使用您的私人键。
他的意思是,节点记账权的获取与节点持有的币数有关,即权益。 两者呈反比关系,持有的币越多,越容易获得记账权。 这种决定谁来记账的方式,省去了POW过程中的大量计算,但仍然需要进行哈希运算才能获得记账权。
在 POW 中,用户可以拿出 1000 美元购买一台矿机,在网络中参与挖矿,然后获得奖励。 在 POS 中,用户将拿出 1000 美元购买等值的代币,并将这些代币作为押金放入 POS 机制中,这样就有机会产生新的区块并获得奖励。
简单来说,这个系统中会有一个代币持有者的集合。 他们将一定的代币放入pos机制中,因此成为验证者,有权验证交易和生成区块。 然后pos算法会在这个集合中随机选择一个节点,赋予他生成下一个区块的权利。 如果该节点没有在要求的时间内生成块,则选择第二个节点来替换它。 在这个过程中,被选中的概率与他们投入的代币数量有关。 例如,如果一个节点投资 10,000 个代币,则被选中的概率是投资 1,000 个代币的节点的 10 倍。
点币 (PPC)
PPC是第一个采用权益证明算法的数字资产。 它在量子力学提出的权益证明概念的基础上引入了货币时代的概念。 硬币年龄是硬币数量和硬币拥有天数的乘积。
简单来说,就是按照你持有货币的数量和时间来支付利息的原则。 在PPC POS方式下,每枚币每天产生1个币龄。 比如你持有100个币,如果你总共持有30天,那么你的币龄现在是3000,这时候如果你发现一个POS块,你的币龄就会被清0。每次你清空365个币,你将从区块中获得0.05个币的利息(假设利息可以理解为5%的年利率,而PPCoin是1%的年利率),那么在这个例子中,利息=3000 * 5% / 365 = 0.41 币,这个很有意思,持币有利息。
PPC实际上是Proof of Stake和Proof of Work的结合,获取它也需要挖矿。 Peercoin矿工为了挖到一个区块,也需要像比特币矿工一样进行一次SHA256解谜操作,但是这个解谜操作的难度会根据他们要花费多少币来调整。 当花费一些硬币时,找到有效区块变得非常简单。 这个计算难题的关键是确保当两个矿工尝试花费相同数量的硬币年龄时,这个过程仍然是随机的。
关于POS,除了PPC之外,还有其他不同的策划方式。 在这些设计中,消耗一定数量的币,使得计算和解谜变得极其简单,使得解谜计算不再是挖矿过程中最重要的挑战。
POW 和 POS
两者最直接的区别就是POW靠的是算力,而POS靠的是持币数量。 所以为了有记账权,POW要买矿机,POS要买代币。
工作量证明消耗资源多,监督性差,机制强,需要全网算力,参与效率低。 优点也很明显,完全去中心化,节点可以自由进出。 Proof of Stake在一定程度上缩短了总时间,但仍然需要挖矿,但不需要消耗大量能量。 两种方案都没有实质性解决用户降本提效的痛点。 只是为了优化计划,所以这两种方法的逻辑中的项目必须更换。 比如更优化的方案,或者新机制的出现,彻底解决痛点。
DPOS:Delegated Proof of Stake,委托权益证明
虽然 POW 和 POS 都可以解决记账一致性的通病,但是 POW 过于依赖算力。 一是浪费资源,二是某些矿池庞大的算力成了中心。 但POS是根据股权余额来选择的,这会导致首富的账户拥有更大的权力,可以分配记账权。 因此,有人提出了DPOS算法。 从本质上讲,DPOS是POS的一种改进,就像PPC是POS的一种改进,只不过PPC是一种特定的数字资产,而DPOS是一种思维。
比特股
比特股是一种采用DPOS机制的数字资产。 它提出了见证人(即代理人或代表)的概念,希望通过引入技术民主层来减少中心化的负面影响。 与董事会投票类似,持币者投出一定数量的节点进行代理验证和记账。
BitShare 的 DPOS 运行原理是:每个持有 BitShares 的节点都相当于一个股东,有选举代表的权力,每个股东将自己的表决权发给一个代表。 得票最多的前 N 个(N 通常为 101 个)代表用于生成区块。 Satisfaction required to be elected as proxy and at least half of the shareholders voted.
每个保护周期(1 天)更新代理的候选列表。 代理人随机放置,每个代理人有2秒的时间依次出块。 如果在规定的时间内不能生成块,则由下一个时间片的代理完成。
DPOS充分利用股东的投票权,以公平公正的方式走到一起。 他们选出的N个代理人可以看作是N个矿池,这N个矿池的权利是完全平等的。 股东们可以随时投票更换这些代理人,只要他们提供的算力不稳定,电脑宕机,或者他们企图作恶。
DPOS的优点是可以大大减少参与验证和记账节点的数量,可以实现秒级同步验证,缺点是整个统一机制还是依赖token,很多商业应用不需要token .
除了POW、POS、DPOS这三种主流的通用机制外,在实际的区块链应用中还衍生出了很多变种机制。 这些机制各有优缺点。 例如,POW在安全性和公平性方面具有优势,凭借先发优势形成了成熟的挖矿产业链,但其耗能问题备受诟病。 POS、DPOS等新机制更环保高效,但不如POW安全公平。