主页 > imtoken 官网 > DPoS共识机制

DPoS共识机制

imtoken 官网 2023-10-22 05:12:34

共识机制 什么是共识机制

区块链是一种去中心化的分布式账本系统。 但是比特币采用的是pow共识机制,在实际操作中,如何解决呢? 因为去中心化之后,可以保证整个系统有效运行,每个节点都诚实记账。 在没有所谓中心的情况下,不信任彼此的个人之间就交易的合法性达成共识的共识机制。

为什么需要共识机制?

在分布式系统中,各个主机通过异步通信形成一个网络集群。 为了保证每台主机达成一致的状态共识,需要在主机之间进行状态复制。 在异步系统中,可能会出现各种问题,比如主机无法通信,或者新的性能下降,网络也可能出现拥塞和延迟。 类似的故障可能会导致错误消息在系统内传播。 因此,需要在默认不可靠的异步网络中定义一个容错协议,以保证每台主机达成安全可靠的状态共识。 因此,利用区块链构建基于互联网的去中心化账本,首要解决的问题是如何实现账本数据在不同账本节点上的一致性和正确性。

什么是共识机制?

常见的共识机制包括:POW(工作量证明机制)、POS(权益证明机制)、DPOS(共享授权证书)、POW+POS(混合共识机制)等,以及Pool验证池、Ripple瑞波共识协议等.

区块链分类

在开始梳理共识机制之前,首先需要对现在的区块链有一个简单的了解。 目前,区块链根据共识算法和应用场景分为三类:公有链、联盟链和私有链。

公链是一个完全开放的分布式系统。 公链中的节点可以自由加入或退出,无需严格的验证和审计,如比特币、以太坊、EOS等。在公链中,共识机制不仅需要考虑网络中是否存在故障节点,还需要考虑恶意节点,保证最终一致性。

联盟链是一个相对开放的分布式系统。 对于联盟链来说,每一个新加入的节点都需要进行验证和审计,比如Fabric、BCOS等。联盟链一般用于企业之间,对安全性和数据一致性要求很高。 因此,在联盟链中,共识机制不仅需要考虑网络中的故障节点,还需要考虑恶意节点。 除了保证最终一致性,还需要保证强一致性。

私有链是一个封闭的分布式系统。 由于私有链是一个内部系统,不需要考虑新节点的加入和退出,也不需要考虑恶意节点。 私有链的共识算法还是传统分布式系统中的共识算法,比如zookeeper的ZAB协议,就是一种类Paxos算法。 只考虑系统或网络原因引起的故障节点,数据一致性要求取决于系统要求。

战俘

PoW共识机制 PoW(Proof of Work),即工作量证明,在比特币中大名鼎鼎,俗称“挖矿”。 PoW 是指系统为达到某个目标而设定的衡量方法。 简单理解就是证明你做了一定工作量的证书。 监控工作的整个过程通常是极其低效的,而通过证明工作结果来证明相应的工作量已经完成是一种非常高效的方式。 PoW按工作分配,算力共同决定。 谁的算力大,记账的概率就大,可以理解为权力比较。 以下内容基于比特币的 PoW 机制。 工作量证明(PoW)计算一个值(nonce),使得交易数据后的内容的哈希值满足指定的上限。 节点成功找到满意的哈希值后,会立即将打包好的区块广播给全网,全网节点收到广播的打包好的区块后会立即进行验证。 如何创建新块? 通过解决一个问题:找到一个使新区块头的哈希值小于指定值的nonce值,即区块头结构中的“难度目标”。 如果验证通过,则说明部分节点已经成功解谜,不再竞争当前区块的打包,而是选择接受这个区块,记录在自己的账本中,然后进行竞争猜测下一个区块。 只有网络中解谜速度最快的区块才会被添加到账本中,其他节点复制它,从而保证了整个账本的唯一性。

如果节点有作弊行为,将导致网络节点验证失败,打包区块将直接丢弃。 这个块不能记入总账,作弊节点的成本就白白浪费了。 因此,在巨大的挖矿成本下,也使得矿工自愿遵守比特币系统的共识协议,从而保证了整个系统的安全性。

工作机制 为了在区块链上记录区块链交易数据并在一定时间内达成共识(共识),PoW提供了一种思路,即所有区块链网络节点参与者竞争记账,即所谓的竞争簿记意味着如果你想产生一个新的区块并将其写入区块链,你必须解决比特币网络发布的工作量证明难题。 谁先解出答案,谁就记账对了,然后开始记账。 记账并将解出的答案和交易记录广播给其他节点验证,自己开始下一轮挖矿。 如果该区块的交易被其他节点参与者验证有效且拼图答案正确,则说明答案可信,新节点将被写入验证者的节点区块链,验证者将进入下一轮竞争性采矿。

本题的三个关键要素是工作量证明函数、区块和难度值。 工作量证明函数是这道题的计算方式,区块决定了这道题的输入数据,难度值决定了这道题需要的计算量。

image 首先,这个问题是什么? 这道题的目的是计算一个值,这个值小于目标值。 这个值就是上图中上一个区块的哈希值。

目标值=最大目标值/难度值(最大目标值恒定:0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)新难度值=旧难度值*(过去2016块花费的时间/20160分钟)提示:难度值随网络变化,目的就是要在不同的网络环境下,保证每10分钟能出一个块。

如何计算呢? SHA256(SHA256(Block_Header)),即只需要对区块头进行两次SHA256运算,将得到的值与目标值进行比较,小于目标值。 区块头结构如下:

image 区块头中有一个重要的东西叫做MerkleRoot的哈希值。 这个东西的意思是:为了让区块头能够反映出区块中包含的所有交易,在区块的构建过程中,需要通过Merkle Tree算法为交易列表生成一个Merkle Root Hash被包含在区块中,并使用 这被存储在区块头中作为交易列表的摘要。

至此,我们发现除了block header中的nonce,其余的数据都是清晰的。 解决问题的核心在于不断调整nonce值,对区块头进行双重SHA256运算。 整个工作量证明过程如下:

无标题文件-6.jpg

PoW 的优缺点 通过以上描述,PoW 的优点显而易见: 1)完全去中心化(任何人都可以加入); 2)节点自由进出,易于实现; 3)破坏系统的代价巨大;

破坏系统的巨大成本可以从两个方面来理解:

在给定时间内,给定难度,找到答案的概率唯一地取决于所有参与者能够多快地迭代哈希。 它与之前的历史无关,与数据无关,只与计算能力有关。 以 51% 的算力攻击系统所付出的代价远远大于作为系统的维护者和诚实的参与者所得到的。 缺点也比较明显: 1)对节点性能和网络环境要求高; 2)资源浪费; 3)每秒只能进行7笔交易,效率低下; 4)矿场的出现违背了去中心化的初衷; 5)无法保证最终一致性; 6)比特币每4年产量减半,逐利减少导致缺勤人数减少,导致比特币网络瘫痪。

网络攻击和链分叉 1)网络攻击假设一个恶意节点试图双花之前花费的交易,攻击者需要重做包含这个交易的区块,以及这个区块之后的所有区块,创建一个比当前诚实的区块链是更长的区块链。 只有当网络中的大多数节点切换到攻击者创建的区块链时,攻击者的攻击才会成功。 由于每个区块都包含了之前所有区块的交易信息,随着区块高度的增加,之前的区块会被再次确认一次,如果确认超过6次,可以理解为不可修改。

考虑包含在区块 b1 中的交易 T。 每个后续区块 b2, b3, b4, ... bn 都会降低交易 T 被修改的可能性,因为修改这些后续区块需要更多的计算能力。 中本聪用概率论证明,攻击者在六个区块后追上最长链的可能性降低到 0.0002428%。 在 4 个或更多块之后,这个概率下降到 0.0000012%。 每增加一个新的区块bn,被攻击的可能性就会呈指数下降,很快整个攻击的可能性就会低到可以忽略不计。

2)链分叉 所谓链分叉,主要是在计算哈希时,每个人得到的区块内容不同,导致计算出的区块结果不同,但都是正确的结果。 因此,区块此时在链中,有两个不同的区块都满足要求。 旷工怎么办? 由于距离、网络等原因,这两个区块被不同矿工看到的顺序是不一样的。 通常,矿工会先复制他们看到的区块链,然后在这个区块上继续。 开始一个新的采矿工作,所以有一个链叉。

PoW解决方案:从分叉的区块开始,由于不同的矿工跟随不同的区块,所以在两条不同的分叉链上算力是不同的。 由于解决问题的能力与矿工的算力成正比,因此两条链的增长速度也不同。 一段时间后,一条链条总是比另一条链条长。 当矿工发现全网有一条更长的链时,他会放弃自己当前的链,复制所有新的更长的链,并在这条链的基础上继续挖矿。 所有矿工都这样操作,这条链成为主链,分叉弃链消失。

区块链唯一性的前提是所有矿工遵循相同的机制。 当矿工遵循不同的机制时会发生硬分叉,这会导致资产增加并且两条链同时存在,例如 BBC。

位置

PoS 共识机制 对于 PoW,由于矿场的出现和挖矿设备性能的不断提升,算力开始集中,节点数量和算力逐渐不匹配。 同时,PoW太浪费了,旷工和连续挖矿Hash计算的重复性没有任何实用价值和科学价值,还有一个更大的问题,作恶没有成本,矿工的恶意攻击不会对矿工接下来的记账和相关权利(比特币)有什么影响。 因此,人们想出了 PoS.1。 pos的实现原理和公式

    要理解pos的实现原理,我认为从pos的实现算法公式来理解是最为直观的,其公式为:
    hash(block_header) =

PoS(Proof of Stake):与PoW相比,它不需要在记账前证明你做了某项工作,而是证明你拥有某项财产。 股权是一起决定的,谁的股权大,谁记账的概率就大。 由于PoS是比特币出现后提出的一种共识算法,尚未在实践中得到验证,PoS不是一个,而是一种共识算法。 最早使用 PoS 的是 Peer Coin,但它是一个简单的 PoS。 目前ETH Casper很火,但是还没有投产(观望),所以PoS的描述都是基于Peer Coin。

工作机理如下图所示。 在开始争夺区块记账之前,拥有权益的节点将自己的权益放入PoS机制中,同时自己的身份成为验证者。 PoS 机制采用随机的方式,根据验证者的投注金额进行分配。 选择簿记员进行大宗记账。 这种随机性并不是真的随机。 它通常与赌注的赢率成正比。 谁的股权多,获得记账权的概率就大。 如果被选中的记账人在一段时间内没有记账,PoS机制将重新选择记账节点。 当区块完成后,将开始下一轮记账。

POS机制.jpg 我们以Peer Coin为例来说明PoS的工作机制。 Peer Coin是第一个采用PoS共识机制的数字货币。 Peer Coin中引入了币龄和币日的概念。 所谓币日就是你持有币的时间,币龄=持币数量与当天的比值。 比如你有100个币,总共持有30天(Peer Coin至少30天没有使用的币可以参加下一个区块的竞争),那么你的币龄就是10030= 3000。 作为持币者,要参与下一轮比赛,流程如下:

比赛开始前,您押注3000个币龄作为筹码,成为记账验证人。 PoW 机制会随机选择一个簿记员。 恰好是你开始记账,完成你的3000币龄。 0 你得到利息=3000*5%/365=0.41个币(365个币龄每清空,你会从区块中获得0.05个币利息) 理解随机:选我,选我,选我? PoS在选择记账人时一般有两种方法,一种是选择赌注较多(大赌注)的轮流进行记账; 另一种是与 PoW 相结合。 重要的因素是块生成的难度。 PoS 将出块难度与权益挂钩。 权益越大,出块难度越低,出块概率越大。

PoS特性及分类 PoS特性 PoS需要一定的股权作为出块的竞争资本 PoS不需要进行大量“无用”的Hash计算 股权质押惩罚作恶者 PoS提供一种激励机制 PoS分类我来说说先问三个问题:

链分叉问题:从经济学的角度来看,PoW 自然可以防止链分叉,但 PoS 需要仔细审核,即无风险问题。 PoS 可以采用一定的惩罚机制。 远程攻击问题:即矿工提取固定虚拟资产后,发起对之前发生的套路区块的分叉。 卡特尔形成问题:即区块链的寡头垄断。 因为PoS共识算法,谁“有钱”就拥有更大的话语权,所以少数有钱矿工之间的“协调”会导致寡头的形成。 目前业界对PoS共识算法的实现主要分为两类:

简单的 PoS 系统。 这类 PoS 很少甚至没有从算法设计上解决上述问题,一般是早期的 PoS 尝试。 典型的例子是设计良好的 PoS 系统,例如 Peer Coin(PPC)、Nova Coin(NVC)、Black Coin(BLK)、NextCoin(Future Coin,NXT)等相对较新的系统。 基于不同的实现方式,设计良好的 PoS 系统可以分为两种类型。 一种是基于 BFT 的 PoS,如 Tendermint,另一种是基于 Chain 的 PoS,如 ETH Casper 和 ADA 的 Ouroboros。 第一种 PoS 系统不够安全。 第二种PoS系统还不够成熟,有的处于早期运行阶段,有的还在讨论和测试阶段。

PoS的优缺点 通过上面的描述和PoS的特点,PoS的优点是: 1)节能环保,不需要无用的计算; 2)高性能; 3)更安全; 4) 每个人都可以挖矿(获得利息),无需担心算力集中导致中心化; 5)避免货币紧缩

为什么 PoS 更安全? 在指定的时间段内,在POS系统中,即使你拥有全球51%的算力,你也未必能进行51%攻击,因为部分货币不是挖矿产生的,而是通过interest(利息存储在POS区块中),这就要求攻击者还需要持有全球51%以上的币量。 这大大增加了 51% 攻击的难度。 在PoS机制下,持有的币越多,越容易获得记账权,接近于赢者通吃的感觉,但持有的币越多,越接近诚实节点,因为破坏整个网络造成的损失越大,也就是假设有钱人不会作恶,毕竟作恶的目的是钱。 如果你有钱,自然就没有作恶的动力。 除了像PoW一样不能保证最终一致性,我们从两个维度来说,一个是货币维度,一个是链维度:

货币维度:

纯 PoS 机制的加密货币只能通过 IPO 发行,这导致“少数人”(通常是开发者)以极低的成本获得大量的加密货币。 在利益面前,难保他们不会大量出售。 PoS机制的加密货币信用基础薄弱。 为了解决这个问题,很多采用PoW+PoS的双重机制,通过PoW挖矿发行加密货币,使用PoS来维护网络稳定。 或者使用 DPoS 机制,通过社区选举来增强信任。 链尺寸:

权益碾压攻击:可以理解为“穷山恶水出事”。 部分权益不多的节点主动攻击导致链条分叉。 毕竟赤脚不怕穿鞋。 少责任少责任)。 PoS可以采用相应的惩罚机制,比如以太坊的casper中的slasher。 理性分叉:可以理解为“顺应大众心理的消费趋势”。 如果有分叉,诚实的节点为了保证自己的利益,会倾向于理性地在分叉上挖矿(挖了没有损失,不挖也有可能会有损失),如果整个网络足够理性,将会发生的是每个分支将永远存在,因为理性的矿工将同时在所有分支上进行挖掘。 tips:以太坊开发者Jan对PoS感到担忧,Jan目前是NERVOS的首席架构师

Jan:总觉得PoS有点问题。 因为共识是为了创造信任,而信任不能自己创造。 你想象一条蛇咬自己的尾巴。 PoS 以系统自身发行的资产作为保证金,保证系统的安全性。 它没有固定在任何东西上,它漂浮在空中。 我没有看到以 PoS 这样的方式创建任何信任。 我觉得信任的建立还是需要锚定能量。 美元与美国的军事力量挂钩。 如果有一天美国没有这种军事实力,我想美元的价值会有很多问号。 PoW相当于用军队锚定,PoS是用美元锚定美元。 这个问题你会想很久。 因为你可能又会想,归根结底,这两种方式好像都是资本锚定的,因为电本质上也是一种资本。 不过转念一想,这两个京城,似乎也有着天壤之别。 PoW 是系统外的资本。 所以,PoS总让我觉得有点问题。

DPoS共识机制

虽然 PoS 改进了 PoW 的许多缺点,但 PoS 仍然存在一些自身的缺点,而这些缺点中最显着的就是“权力中心化”。 在PoS系统中,基于权益平衡的选择会导致最富有的账户拥有更大的权利,并可能支配记账权,从而使基于PoS的区块链系统成为少数“有钱人”的游戏。 这与区块链的去中心化背道而驰,PoS(1 分钟)的性能相比 PoW(10 分钟)并没有太大提升,至今仍饱受诟病。 基于此,原Bitshares的首席开发者Dan Larimer(现为EOS CTO)提出了一种更快、更安全、耗能更少的算法,也就是后来的DPoS。

DPoS (Delegated Proof of Stake): Authorized proof of equity mechanism, based on PoS, similar to voting and election, with accounting by the elected nodes. 如果说PoS是资本主义的“集权”,那么DPoS则可以理解为社会主义“民主集中制”的特征。 目前采用Bitshares、EOS、Asch等DPoS共识机制。 由于EOS最近刚刚上线主网,由BM运营,下面以EOS DPoS为主。

tips:区块链/币圈不得不说的几位大神和区块链时代

区块链大神:

中本聪:比特币创始人,区块链缔造者,区块链1.0灵魂 V神:Vitalik Buterin,以太坊创始人,90后,区块链2.0代表,2014年排挤扎克伯格获得世界科技奖 BM:Bytemaster的简称,本名Daniel Larimer,区块链项目EOS的开发者。主要业绩:连续开发了三个区块链平台项目Bitshares(比特股)、Steem和EOS(Grapefruit),这三个项目在圈内都非常有名,市值排名前50,尤其是EOS最近很火 区块链时代

区块链1.0:以比特币为代表的加密货币为代表。 大多基于比特币,无法完成上层应用对接。 不是图灵完备的,开发需要从底层开始,难度大,成本高。 区块链2.0:以支持智能合约的以太坊为代表,如果把比特币理解为全球账本的话,那么以太坊就可以看成是一台全球计算机,任何人都可以上传和执行任何应用程序。智能合约的出现大大减少了区块链应用的开发门槛,提​​高开发效率,为应用繁荣提供良好的土壤和平台 区块链3.0:目前还没有代表,有人认为Token或者EOS的出现,区块链3.0有点不耐烦,所以我赢了现在发表评论,我们拭目以待

该工作机制与 PoS 不同,持有少数股份(权益)的节点也可以行使共识权,但是以间接的方式。 与股东大会类似,每当需要对公司作出重大决策(记什么账、由谁记账)时,全体股东(节点)依法行使表决权,选举股东代表(credible accounts) in their hearts, who gets the votes High who is elected. 候选人可以去公开演讲拉选票,获得足够多的股东(节点)的信任,然后由股东代表(选出的信任节点)代表股东对公司重大事件进行决策。 股东代表人数由系统决定,例如Bitshares为101人,EOS为51人,EOS为21人。

不同于生活中的股东代表选举: 1)DPoS机制中的股东(节点)按照其持有的加密货币数量占总数的百分比(持股比例)进行投票,不是一人一票; 2)选举的股东代表(可信节点)是完全点对点的,可以理解为101个具有相同算力的矿池; 3)一旦股东代表无能、不作为或行为不端(提供的算力不稳定、电脑宕机、或试图利用手中的权力作恶)将立即被股东踢出整个系统,然后其他后备代表在上面; 4)公司重大决策后(入账,区块完成),按持股比例分配资金。 DPoS的工作流程如下图所示:

DPOS Mechanism-2.jpg EOS的DPoS分为两步: 1)选举出块人(Block Producer,简称BP); 2)区块共识;

区块生产者选举:任何持有Token的人都可以成为区块生产者并拥有投票权。 每次投票前,候选 BP 可以为自己拉票(离线方式)。 每次投票超过50%即为有效,然后生成一个BP候选池,每次从BP候选池中选出前21个节点作为BP,并对选出的21个BP进行随机排序。

区块共识:21个BP按照随机顺序出块。 在每一轮区块共识过程中,如果BP不出块或有恶意行为,将被其他节点报告和惩罚(被剥夺出块权),然后从候选池中选择另一个BP加入,一个BP成功在出块时,经过至少(2/3+1)个BP确认(至少15个),出块BP获得相应的奖励,然后轮流到下一个BP出块时,如果轮询取place 10 times or one day, the voting will be re-elected.

DPoS的优缺点 DPoS对EOS的优势: 1)记账节点少,交易速度快,EOS号称达到百万级TPS; 2)更安全,一般无链分叉且不可逆,保证最终一致性;3)与PoW相比,解决了资源消耗问题;

基于DPoS的设计,它的优势也变成了自身的劣势比特币采用的是pow共识机制,这也是V神对DPoS怒火中烧的原因。

首先,DPoS 选举少量的 BP 来创建区块和记账。 确实,从网络传输和确认时间来看,性能有很大的提升,但是少量的 BP 牺牲了一部分的去中心化。 Some people say that these elected BPs represent "public opinion". 与 PoW 的五大矿场和 PoS 的富豪玩家相比,DPoS 更加民主和去中心化,但 DPoS 机制的设计并不能保证必须有足够的真正的区块生产者,作为单个人或实体,可能控制多个节点。 比如在LBTC,一半的节点都曾经被鱼池家族控制。 在EOS的启动过程中,还疑似一个人虚拟了7个节点。 其次,在真实的网络环境中,EOS的实际运行效率远没有它吹嘘的那么强大。 同时,超级节点的治理权和经济利益过于集中。 如果他们串通一气,会进一步形成巨龙垄断,这和区块链的思路是不一样的。 彼此相反。 同样,处理坏节点也有很多困难。 社区选举不能有效及时阻止一些破坏节点的出现,给网络带来安全隐患。 同时,在网络节点数较少的场景下,BP选举的代表性不强。

网络攻击和链分叉 DPoS作为去中心化系统一直饱受诟病,主要表现在形成卡特尔和贿赂选民的动机上。

Regarding chain forks, under normal operation, DPoS has final consistency and will not experience any forks, because the elected BPs produce blocks through cooperation rather than competition, even if there is a fork , the consensus will automatically switch to the longest chain. 在简化过程中,我们假设有三个 BP,即 ABC。

在正常运行模式下,区块生产者轮流在 3 秒内形成一个区块。 如果没有人错过他们的轮次,将生成最长的链,并且 BP 不能在计划之外的任何时间段内生产区块。 如果你错过了一个街区,你可能会被淘汰。 如下所示。

Normal block generation.jpg 在出现少量恶意或故障节点的情况下,不超过节点总数三分之一的恶意或故障节点可能会产生少量分叉。 从图中可以看出,在分叉链中,每9秒只能产生一个区块(一轮是三秒,三轮),而大多数分叉链每9秒可以产生两个区块。 这样,诚实的 2/3 多数将永远比少数分叉链长,如下图所示。

Few blocks.jpg 在少数人多次生产的情况下,少数人可能会尝试产生无限多的分叉,但他们所有的分叉都会比多数人的链短,因为少数人注定要出块快于大多数人来得更慢。 所以在这种情况下,诚实的 2/3 多数将永远比少数分叉链长,如下图所示。

Multiple.jpg 在多数生产者集体作恶的情况下,如果多数生产者 (2/3) 腐败,那么他们可以产生无限数量的分叉,每个分叉似乎都在 2/3 多数确认的情况下向前推进。 在这种情况下,遵循最长的链选择。 最长的链是由最大多数批准的链,这将由剩余的少数诚实节点决定。 这种行为不会持续很长时间,因为利益相关者最终会投票更换生产者,如下图所示。

Raft 共识机制 我们引入了三种共识机制,分别是 PoW、PoS 和 DPoS,但是对于一些特殊场景(私有链和联盟链),不需要解决拜占庭将军问题(后面会提到,即没有“叛徒”),只需要处理一般的崩溃,同时追求共识的效率和强一致性,显然,这三种共识机制都不适合。 在这种情况下,采用Paxos等协议会更加高效。 Paxos 是 Lamport 设计的一种维护分布式系统一致性的协议。 但是,由于Paxos非常复杂和难以理解,因此出现了各种实现和变体,例如Raft。

Raft最初是一种管理复制日志的共识算法,注重协议的实现和可理解性,是一种在非拜占庭故障下达成共识的强共识协议。 目前Hyperledger的Fabric项目支持PBTF、Raft等共识协议。

工作机制 一个 Raft 集群通常有 5 个节点,允许系统有两个故障节点(因为至少需要 N/2 + 1 个节点来投票)。 每个节点都有三种状态:leader、follower、candidate。 正常情况下只有一个leader,其他都是follower。 follower是被动的,不会主动发起请求,只能响应leader和念珠菌的请求。 领导者处理所有客户端请求,候选状态用于选举。

Raft 算法包括三个基本组成部分:领导人选举、日志复制和安全问题。

领导者选举:当现有领导者失败时,必须选举新的领导者。 日志复制(记账):领导者必须接受来自客户端的交易记录,并将其复制到参与共识记账的节点中,以便其他节点可以交换相应的区块安全问题:如果一个节点将特定的区块项应用于其状态machine, 其他节点不能对同一个块索引应用不同的命令(这句话真是变态满口) Leader's Election:leader 的选举只会在两种情况下发生:1)Raft 集群第一次启动时; 2)当一个已知的领导者失败时;

过程如下图所示。 对于初始网络,每个节点都处于follower状态,自动转换为candidate,然后给自己投票,并发起RequestVoteRPC,然后等待,会出现以下情况: 1)当前节点已经赢得了一半以上节点的选票并赢得了选举,成为领导者; 2) Other nodes win the election, the current node receives the other party's heartbeat, and the current node becomes a follower; 3) The election times out, no node wins the election, the current node self-increases its term, and re-initiates the election.

Leander-2.jpg 图中有几点需要说明一下:

任期:指任期,与选举相同。 现在开始选举人大代表名额和选举村委会书记。 术语是“数字”或“数字”。 每次选举后,任期都会增加。 生活中,没有人傻到去参加过去的选举。 比如你说你要参加2017年的全国人大选举,人家不会投你的票,会认为你脑子有问题。 但在分布式环境中,由于网络抖动、延迟等原因,节点完全有可能获得前任期,参与过去式选举。 For this situation, Raft will react the same as normal people, and will only Say one word: "Get out", does it mean that you are here to be funny? Pack up now and go to the next one. Quorums: It is your vote. Every time the network is initialized, each node will automatically become a candidate. First, vote for yourself (anyway, you vote for yourself, if you don't vote, you don't vote), and then send out a voting invitation, waiting for others votes, if the number of votes received from other people exceeds (N/2 +1) of network nodes, then congratulations, you have been elected Leader! Split vote: It means that during the election process, two candidates in the same term get the same number of votes, which means that everyone has the same strength and are equal to each other. Then no one can be elected, a new term is generated, and voting starts again. time out: Time out, that is, after the follower fails to receive the leader's heartbeat within the period, it will wait for a period of time. If this time is exceeded, the current node will become a candidate and start the election. This time setting is not uniform. Raft uses a random method to generate timeouts. Whoever gets the timeout first will start the election first. Log replication (consensus accounting): In the log replication process, there are four steps, let's draw a frame to explain it, as shown in the figure below.

Copy-2.jpg Client sends requests to leader, each request is an instruction. After the leader accepts the request, it appends the command (Entry) to the leader's operation log, and then initiates the AppendEntries operation on the follower, trying to append the operation command (Entry) to the Followers' operation log. If any Follower is unavailable, keep trying once the Leader receives the response from most (Quorums) Followers, the Leader will perform the commit operation, and each node server will hand over the operation instructions to the state machine for processing. This ensures the consistency of the state of each node. After the processing of each server state machine is completed, the Leader returns the result to the Client. Security issues: In terms of security, Raft mainly ensures security through the following mechanisms.

Election safety: Under a term, there is at most one Leader. Leader Append-Only: A Leader can only append new entries, and cannot rewrite or delete entries. Log Matching: The logs of each node in the cluster are the same and consistent. Leader Completeness: If a log entry is committed, the entry must be Appears in the Leader's log. State Machine Safety: If the state machine of a node server executes a certain log entry command, other node servers will also execute the log entry command and will not execute other commands.

The advantages and disadvantages of Raft are described by the working mechanism. The advantages of Raft are: 1) fast speed, a small number of nodes, high network transmission and consensus efficiency; 2) no need for mining, energy saving and environmental protection; 3) no need to consider Byzantine nodes, the algorithm is more efficient Simple.

Because Raft relies too much on the Leader, it loses some decentralization, which is unacceptable on the public chain, so Raft is generally used in private chains or alliance chains. At the same time, Raft needs multiple confirmations when there is a network fork that breaks the station under certain network fluctuations or competitions.

Network Attacks and Chain Forks Let's talk about network attacks first. Based on its advantages and disadvantages, Raft is generally used in private chains or alliance chains. It tends to believe that no one does evil or is less likely to do evil. But it usually appears and is selected as the bookkeeper, then other nodes cannot see through it at that time, at most it can only be discovered through post-mortem inspection.

Chain fork? To analyze chain forks, we must first check whether the Raft mechanism will cause chain forks. We know that chain forks are generally caused by multiple bookkeepers appearing at the same time, but according to Raft's mechanism, only There will be a leader (bookkeeper), and there will be no chain fork?

State Machine Safety: When a candidate is elected, he will send his log information to other nodes to get the number of votes. If the log is the latest, he will get the votes. If other nodes have a newer log, Ze will refuse to vote. Guaranteed State Machine Safety.

Follower crashes: If the follower fails, it will not accept additional entry and voting requests. The leader will continue to try to maintain a heartbeat with the failed node. When the node replies, Ze accepts the latest log of the leader and applies the log to the State Machine to ensure that no will fork.

Leader crashes: In the case of a leader failure, the logs of all nodes in the cluster may be inconsistent. Some operation logs of the old leader are not completely replicated through the cluster. The new leader will force followers to copy their own logs to deal with inconsistencies:

For each Follower, the new leader compares its log with the Followers' logs to find their agreed last log entry. Then delete all the entries behind this key entry in Followers, and replace it with your own log entry. This mechanism will restore log consistency.

拜占庭

PBFT consensus mechanism Through the above description, we know that the biggest problem of the Raft mechanism is its strong dependence on the Leader, which cannot avoid Byzantine nodes. However, the performance of PoW, PoS and DPoS is not very good. More importantly, in finance or In some special application fields, distributed systems need to ensure consistency and correctness. Based on BFT, people proposed the PBFT consensus mechanism.

BFT & PBFT BFT (Byzantine Fault Tolerance), that is, Byzantine Fault Tolerance Technology, is a type of fault-tolerant technology in the field of distributed computing. Due to hardware errors, network congestion or interruption, and malicious attacks, computers and networks may exhibit unpredictable behavior , Byzantine fault-tolerant techniques are designed to handle these abnormal behaviors and meet the specification requirements of the problem to be solved.

The Byzantine Generals Problem: The Byzantine Generals Problem is a hypothetical problem raised by Leslie Lamport in the 1980s, that is, the generals of the Byzantine Roman Empire need to propose an agreement in order to make the combat plan unified and avoid traitors. The agreement can make the generals reach an agreement , and a handful of traitors cannot cause the loyal generals to make wrong plans. That is to say, the Byzantine generals problem refers to finding a way to enable the generals to establish a consensus on the battle plan in a non-trust environment with traitors.

What we need to know is the Byzantine general problem. When the total number of generals is greater than 3f and the number of traitors is f or less, loyal generals can reach a consensus on orders, that is, 3f+1