当前位置: 首页 > 科技观察

区块链的几种共识算法

时间:2023-03-20 20:27:42 科技观察

我们先从常见的拜占庭将军问题来了解什么是共识。拜占庭将军问题拜占庭位于现在的土耳其伊斯坦布尔,是东罗马帝国的首都。由于当时拜占庭罗马帝国幅员辽阔,为防御起见,各支军队都隔得很远,将军们只能靠使者传递消息。战争期间,拜占庭军队中的所有将军和副官必须达成共识,决定自己是否有胜算,然后才能进攻敌方阵营。但是,军队中可能出现内奸和敌特,影响将领的决策,扰乱全军秩序。武将采用投票策略来决定进攻还是撤退,也就是说,如果大多数人决定进攻,他们就冲上去,如果大多数人决定撤退,他们就撤退(例如,如果10个将军中有6个选择攻击,然后攻击)。这时候,在成员已知造反的情况下(或者在间谍的情况下,他们乱投票,或者擅自修改军令),剩下的忠臣将军又如何能在不受汉奸影响的情况下达成共识?拜占庭问题就这样形成了。拜占庭将军问题是一个协议问题。拜占庭帝国军队的将领必须一致决定是否攻击某支敌军。问题是武将异地,武将中有内奸。叛徒可以随意行动以达到以下目的:诱使某些将军采取进攻行动;促成并非所有将军都同意的决定,例如在将军不想进攻时促使他们采取进攻行动;或混淆某些将军,使他们无法做出决定。如果叛徒达到了其中一个目的,那么任何进攻行动的结果都注定要失败,只有通力合作才能取胜。因此,拜占庭将军是分布式系统中的共识问题,也是分布式容错系统中的问题。拜占庭将军问题不是让将军们达成进攻的决定,而是让所有忠诚的将军们达成共识,要么全部进攻,要么全部撤退,这样才不会被敌人一一击破。目前,拜占庭将军问题的经典解决方案有很多,比较常见的有实用拜占庭容错系统(PBFT)和Raft。PBFT求解的前提是n≥3t+1,其中t为故障节点数(即叛将数),n为节点总数(即所有故障节点总数)将军)。尽管这些方法可以达成共识并具有各自的优势,但它们都具有不同的假设和局限性。目前,在区块链系统中,PBFT和Raft是联盟链和私有链上常用的共识算法,而在公有链上,常用的共识算法有POW、POS、DPOS等。区块链的共识是我们平时支付的时候一般都是用支付宝刷卡。事实上,并没有实际的货币转账,只是支付宝在其数据库中记录了一个账户。现在的货币体系其实是一种记账货币,记账主体是国家央行或者支付宝等第三方机构。这是一种集中簿记的形式。中心化记账虽然效率很高,但也面临着各种各样的问题,比如中心化节点导致的单点故障,万一一颗流星正好落在阿里巴巴的数据库机房;某天阿里巴巴数据库管理员心情不好,然后把数据库删了就跑。当然,这些事件发生的可能性很小,但黑天鹅事件要么没有发生,要么就是毁灭性的打击。所以,对于这种可能发生的小概率事件,解决方案一般都是以预防为主,比如备份数据,多建几个分布式节点,对人员进行SOP培训等。另一种解决方案是使用更可靠和更安全的系统。区块链的去中心化记账从技术上解决了上述中心化记账的弱点。因为它没有中心节点,通过计算机算法、密码学、经济学,结合智能合约,点对点传输,不可篡改。区块链的每一个区块都相当于一个账本页,每一个区块都记录着对应的交易内容。然而,去中心化记账行为中一个非常重要的问题是各节点账本的一致性。从去中心化账本系统的角度来看,每个加入系统的节点都需要保存一份完整的账本,但是两个节点不能同时保存账本,因为节点处于不同的环境,接收到的交易信息是不一致的。如果同时记账,会导致账目不一致。因此,需要一个共识机制来:公平公正地决定由哪个节点来记账。目前常用的有POW、POS等。一个节点在记账后保持全网账本的同步。目前普遍采用最长链策略。POW:ProofofWork,工作量证明比特币系统设计了一种机制,利用每个节点的算力,即“算力”来竞争记账权。简单来说,POW就是工作方确认已经完成了一定工作量的证明。比如我去面试的时候,招聘网站上写的是这个职位需要本科以上学历。那如何证明自己是本科毕业呢?给面试官看本科毕业证就可以了,就这么简单。但是这个毕业证怎么办呢?我需要上4年大学,在那之前,我要上高中、初中、小学。上了大学,不能天天开心,还要上课,要考试,不能挂科。这是一个艰难的过程。对于面试官来说,文凭就足以证明我上过大学,我不傻。因此,POW方法的主要特点是计算的不对称性。工作方需要做一些困难的工作才能得到结果,但验证者可以很容易地通过结果检查工作方是否做了相应的工作。Thespecificmethodistoperformahashoperationonthethreefieldsoftheparentblockhash,Merkletreerootandnoncevalueintheheaderofablockchain.Iftheresultislessthanthetargetvalue,thecalculationissuccessful,andifitisgreaterthanthetargetvalue,thenchangenoncevalue,repeattheoperationuntiltheresultislessthanthetargetvalue.Howtounderstandtheworkingsideandverificationsideofpow?Anotherchestnut.工作方:假设输入值是blockchain1,对它进行哈希运算,寻找结果前3位为0的哈希值,那么计算过程是:blockchain1->ef7797e13d3a75526946a3bcf00daec9fc9c9c4d51ddc7cc5df888f74dd434d1blockchain2->db0b9c1cb5e9c680dfff7482f1a8efad0e786f41b6b89a758fb26d9e223e0a10......blockchain515->0063e58fb6e3789fcb5eb64d05d7a9b909c5e9e1b60b18cb566a3326c1fd54c......blockchain2688->0005f2ee930eafef21d06545c0058ddfcf2ac9dfa542b745021f51ceb9e9f43cItcanbeseenthatthehashvaluewhosefirstthreedigitsare0canbefoundafter2688operations.Asthenumberof0sincreases,thecomputationaldifficultyincreasesexponentially.Verifier:Theverifiergetsthevalueblockchain2688fromtheworkingparty,andonlyneedsonecalculationtoknowwhethertheworkoftheworkingpartyhasbeencompleted.Forpow,ifyouwanttofindtherandomnonceafteraspecificstring,satisfyingtheSHA256valuewhosefirstnbitsareall0,youneedtoperformmultiplehashvalueoperations.Generallyspeaking,duetothepseudo-randomnessofthehashvalue,tofindthehashvaluewith3leading0s,itisexpectedtotryabout2tothe12thpower.Thenumberofcalculationsofthismathematicalexpectationistheso-called"workload"..Theentireproof-of-workactivityiswhatweoftencall"mining".Intheaboveexample,thereareseveralkeypointsintheactualBitcoinsystem,suchashowthenoncevalueischanged,howthenumberofzerosinthetargetvalueisdetermined,etc.YoucanrefertothearticleonBitcoinmining.AnynodeintheBitcoinnetwork,ifitwantstogenerateanewblockandwriteitintotheblockchain,mustsolvethePOWproblemissuedbytheBitcoinnetwork.本题包含三个关键要素:工作量证明函数区块难度值/目标值比特币系统中使用的工作量证明函数是SHA256,SHA是SecureHashAlgorithm的缩写,是密码哈希的一族函数,SHA256就是其中之一,它输出一个256位的哈希算法。比特币区块由区块头和区块中包含的交易列表组成。区块包含一个指向前一个区块的哈希指针,这样记录不同交易的各个区块被关联起来形成区块链。难度值是比特币系统中节点出块时的重要参考指标。它决定了一个节点需要进行多少次哈希运算才能生成一个哈希块。难度值会随着全网算力的变化进行调整,使出块速率保持在10分钟。因此,POW成功与否的决定性因素是算力的大小。如果你的算力是n,全网的算力是m,那么你在一个工作量证明,也就是一次挖矿活动中能够成功的概率是n/m,经过m/n次挖矿能够成功一次.比如我笔记本电脑的算法大概是1GH/s,现在全网算力是21EH/s,那我要进行200亿次工作量证明,每次10分钟左右,我肯定不会有生之年能挖出一个。POS:ProofofStake,权益证明现在我们知道了如何挖比特币,也就是需要购买挖矿设备,支付电费,从而获得新的币作为挖矿奖励。这基本上是一个资源密集型过程。并且有两个明显的缺点。一方面,pow的前提是节点和算力分布均匀,因为中本聪最初的设计是通过CPU挖矿,这样节点数和算力可以大致匹配,但是有了GPU、FPGA和矿机、节点数量和算力逐渐失配。另一方面,pow太浪费了。比特币网络每秒可以完成数百万亿次SHA256计算。这些计算似乎没有更多的实用价值,只是恶意攻击者无法轻易击败比特币网络。当然,这种浪费对于它带来的好处来说可能是一个很小的代价。但浪费总是不好的。有什么办法可以去掉挖矿设备和能耗的联系吗?毕竟这个过程只是选择一个节点记账。还有其他方法可以实现吗?因此,人们提出了一些工作量证明的替代方案,其中一种称为POS。股权证明由量子力学在2011年比特币论坛演讲中提出,后由PPC(Piancoin)和NXT(FutureCoin)以不同的思路实施。POW是根据算力随机的,POS是根据财产随机的。这就是这两种共识机制的本质。但是另外一个问题是,POW是比特币之前就存在的东西,而因为比特币的成功,POW基本上就是指比特币的POW。但恰恰相反,POS是一个新生事物,目前还没有成熟的POS应用。因此,当提到POS时,它不是指某种算法,而是指一个类别。而且,目前每种算法都有自己的优点和缺点。而且,到目前为止,还没有一种算法的可靠性通过实践的检验。因此,要比较POW和POS的优劣,我只能以POS的范畴为例。我们现在常说的POS,其实就是说PPCoin的POS,也就是最早的POS。那东西有根本的缺陷。例如币龄攻击(save-upattack)只适用于PPC,不适用于PPC。POS问题。当QuantumMechanic提出POS的概念时,他说了以下内容:我想知道随着比特币的分布越来越广泛,是否会从基于工作量证明的系统过渡到权益证明系统。我所说的股权证明的意思是,您对已接受的交易历史的“投票”不是由您带给网络的计算资源份额加权,而是由您可以证明自己拥有的比特币数量加权,使用您的私人键。他也就是说,节点记账权的获得与节点持币量,即权益相关。两者成反比关系,持有的币越多,越容易获得记账权。这种决定谁来记账的方式去掉了POW中需要大量计算的过程,但仍然需要进行哈希运算才能获得记账权。在POW中,用户可以拿出1000美元购买一台矿机,加入网络挖矿,从而获得奖励。在POS中,用户将拿出1000美元购买等值的代币,并将这些代币作为押金放入POS机制中,这样就有机会产生新的区块并获得奖励。简单来说,这个系统中会有一个代币持有者的集合。他们将一定的代币放入pos机制中,因此成为验证者,有权验证交易和生成区块。那么pos算法会在这个集合中随机选择一个节点,并赋予他生成下一个区块的权利。如果该节点在一定时间内没有出块,则选择第二个节点来代替它。在这个过程中,被选中的概率与他们投入的代币数量有关。例如,如果一个节点投资10,000个代币,则被选中的概率是投资1,000个代币的节点的10倍。Peercoin(PPC)PPC是第一个采用权益证明算法的数字资产。它在量子力学提出的权益证明思想的基础上引入了币龄的概念。硬币年龄是硬币数量和硬币拥有天数的乘积。简单来说,它是一个根据你持有货币的数量和时间给你利息的系统。PPCPOS模式下,每种币种每天产生1个币龄。比如你持有100个币,总共持有30天,那么此时你的币龄就是3000。这时候如果你找到一个POS块,你的币龄就会被清零,每清空365个币龄,你就会从该区块中获得0.05个币的利息(假设利息可以理解为5%年利率,PPCoin是1%的年利率),那么这样的话,利息=3000*5%/365=0.41个币,这个就很有意思了,持币有利息。PPC其实是权益证明和工作量证明的结合,因为它也需要挖矿。Peercoin矿工为了挖出一个区块,也需要像比特币矿工一样进行一次SHA256解谜操作,但是这个解谜操作的难度会根据他们要消耗的币量多少来调整。当消耗了一些币龄后,找到有效区块变得非常容易。这个计算难题的作用是保证当两个矿工尝试消耗相同币龄的时候,这个过程仍然是随机的。对于POS,除了PPC之外,还有其他不同的设计形式。在这些设计中,消耗一定数量的币,使得解谜变得极其简单,使得解谜不再是挖矿过程中的主要挑战。POW和POS最直接的区别就是POW靠的是算力,而POS靠的是持币数量。所以想要有记账权,POW就得买矿机,POS就得买代币。工作量证明消耗资源多,监督性差,共识机制强,需要全网算力参与,效率低下。优点也很明显,完全去中心化,节点自由进出。权益证明在一定程度上缩短了共识时间,但仍然需要挖矿,但不需要消耗大量能源。两种方案都没有从根本上解决用户降本提效的痛点。这只是一个优化方案,所以这两种方式逻辑上的项目必然会被替换。比如更优化的解决方案,或者彻底解决痛点的新机制出现。DPOS:DelegatedProofofStake,虽然POW和POS都可以解决记账一致性的共识问题,但是POW过于依赖算力,一是资源浪费,二是一些矿池巨大的算力变成了一个中心。但POS是根据股权余额来选择的,这会导致首富的账户拥有更大的权力,并可能控制记账权。因此,有人提出了DPOS算法。从本质上讲,DPOS是POS的一种改进,就像PPC是POS的一种改进,只不过PPC是一种特定的数字资产,而DPOS是一种思想。比特股(BitShare)比特股是一种采用DPOS机制的数字资产。它提出了见证人(即代理人或代表)的概念,期望通过引入技术民主层来减少中心化的负面影响。与董事会投票类似,持币者投出一定数量的节点进行代理验证和记账。比特股DPOS的工作原理是:每个持有比特股的节点都相当于一个股东,有投票权代表,每个股东将自己的投票权授予一个代表。获得最多选票的前N??个(N通常为101个)代表将生成区块。Tobeelectedasaproxy,atleasthalfoftheshareholdersvoted.每个维护周期(1天)更新代理的候选列表。代理人随机排列,每个代理人有2秒的时间依次出块。如果在规定的时间内不能生成块,则由下一个时间片的代理完成。DPOS充分利用股东的投票权,以公平公正的方式达成共识。他们选出的N个代理人可以看作是N个矿池,这N个矿池的权利是完全平等的。股东们可以随时投票更换这些代理人,只要他们提供的算力不稳定,电脑宕机,或者他们企图作恶等等。DPOS的好处是可以大大减少代理人的数量。参与验证和记账节点,可以实现秒级共识验证,但缺点是整个共识机制仍然依赖代币,很多商业应用不需要代币。除了POW、POS、DPOS这三大主流共识机制外,区块链的实际应用还衍生出了很多变种机制。这些机制各有优缺点。例如,POW在安全性和公平性方面具有优势,凭借先发优势形成了成熟的挖矿产业链,但其能耗问题备受诟病。POS、DPOS等新兴机制更环保高效,但在安全性和公平性上不如POW。