区块链基础知识(下):共识机制 附带图解、超详细教学!看不懂你打死我

news2024/11/19 1:47:32

 

 苏泽

大家好 这里是苏泽 一个钟爱区块链技术的后端开发者

本篇专栏 ←持续记录本人自学两年走过无数弯路的智能合约学习笔记和经验总结 如果喜欢拜托三连支持~


专栏的前面几篇详细了介绍了区块链的核心基础知识 有兴趣学习的小伙伴可以看看→http://t.csdnimg.cn/CstOy 关于区块链的基本组成、加密原理都用最通俗易懂的方式讲解了 希望能够帮助大家学习

以下是正文

目录

专栏的前面几篇详细了介绍了区块链的核心基础知识 有兴趣学习的小伙伴可以看看→http://t.csdnimg.cn/CstOy 关于区块链的基本组成、加密原理都用最通俗易懂的方式讲解了 希望能够帮助大家学习

以下是正文

共识机制

实用拜占庭容错机制理解

RBFT

RBFT算法通常包含以下几个阶段:视图切换(View Change)、决策提案(Proposal)、验证和投票(Validation and Voting)、决策达成(Decision)。

当然了还有很多种不同的算法没有天下第一的算法 只有不同场景下相对的最优决策

常用的共识机制有PoW(Proof of Work)工作量证明,PoS(Proof of Stake)权益证明,DPoS(Delegated Proof of Stake委任权益证明,DBFT(Delegated Byzantine Fault Tolerance)等。

EOS

在研究EOS之前 我们先说说DPOS

而在EOS的机制下,节点是定向广播的。21节点的位置是透明的,会选择最短路径来规定广播顺序。如图:

DBFT

共识术语 

共识消息 

共识流程 

三阶段共识流程 

大致分为这么几步:


共识机制

共识算法是用于保证分布式系统一致性的机制。这里的一致性可以是交易顺序的一致性、账本一致性、节点状态的一致性等。一般地,我们根据容错类型将共识算法分为两类。

  • 拜占庭容错 : 拜占庭容错强调的是能够容忍部分区块链节点由于硬件错误、网络拥塞或断开以及遭到恶意攻击等情况出现的不可预料的行为。BFT系列算法是典型的拜占庭容错算法,比如PBFT、HotStuff等。
  • 非拜占庭容错 : 非拜占庭容错通常指能够容忍部分区块链节点出现宕机错误,但不容忍出现不可预料的恶意行为导致的系统故障。常见的CFT共识算法有Paxos、Raft等。

实用拜占庭容错机制理解

我们用一个例子来说明 这个机制

假设有一个拜占庭帝国,帝国中有多位将军和士兵组成的军队,这些将军需要就发起进攻或撤退的决策达成一致,然后将命令传达给士兵执行。然而,有些将军可能是叛徒,他们可能会发送错误的指令或者伪造指令来导致军队混乱。

为了解决这个问题,拜占庭容错机制可以被应用。在这个机制中,将军们通过多轮的消息交流来达成共识。每一轮,将军们会相互发送自己的意见和指令,并收集其他将军们的意见。

在每一轮中,将军们会根据收到的消息进行验证。他们会检查消息的完整性、一致性和发送者的可信度。如果大多数将军发送了相同的指令,那么其他将军将接受这个指令并传达给士兵。如果有少数叛徒将军发送了错误的指令,那么大多数忠诚的将军可以通过多数投票的方式排除这些错误指令,并达成一致的决策。

通过这种方式,拜占庭容错机制可以保证大多数忠诚的将军达成一致的决策,并将正确的指令传达给士兵,即使存在少数叛徒将军的干扰。

大多数平台采用 自适应共识机制 ,支持RBFT、NoxBFT(BFT类)以及RAFT(CFT类)等多种共识算法,以满足不同的业务场景需求。下文将主要介绍RBFT、NoxBFT和RAFT等共识算法。

我们这里讲解其中一种--RBFT

RBFT

RBFT(Redundant Byzantine Fault Tolerance)是一种拜占庭容错算法,它通过增加冗余节点来提高系统的容错性能。在RBFT算法中,系统中的节点被分为两类:主节点(Primary)和备份节点(Backup)。主节点负责提出决策并向其他节点传达,备份节点则用于容错,以确保即使主节点出现错误或恶意行为,系统仍能正常运行。

回到之前的拜占庭帝国的例子,我们可以应用RBFT算法来改进共识过程。假设有5位将军,其中一位将军被选为主将军,其他4位将军作为备份将军。

在每一轮的共识过程中,主将军会提出进攻或撤退的决策,并将其发送给其他4位备份将军。备份将军会验证主将军的决策,并与其他备份将军进行比较。如果大多数备份将军收到并验证了相同的决策,那么他们会接受该决策并将其传达给士兵。

然而,如果主将军是叛徒或出现错误,发出了错误的决策,备份将军可以通过相互比较和多数投票的方式排除错误的决策,并达成一致的决策。只有当大多数备份将军达成一致时,正确的决策才会被传达给士兵。

通过增加备份将军,RBFT算法提供了冗余的节点来容忍主节点的错误或恶意行为。即使主节点是叛徒或出现错误,只要大多数备份节点是诚实的,系统仍然能够达成共识并保持正常运行。

RBFT算法通常包含以下几个阶段:视图切换(View Change)、决策提案(Proposal)、验证和投票(Validation and Voting)、决策达成(Decision)。

  1. 视图切换(View Change):在RBFT算法中,主节点可能会出现错误或恶意行为。为了应对这种情况,备份节点可以通过视图切换机制选择新的主节点。在每个视图中,节点可以根据事先约定的规则来选择新的主节点。这个阶段的目标是确保主节点的正确性和可靠性。

沿用之前的例子,假设主将军在某个轮次中发送了错误的决策或者出现了故障。备份将军可以触发视图切换,并通过约定的规则来选择新的主将军。

  1. 决策提案(Proposal):在RBFT算法中,主节点负责提出决策。主节点会根据一定的规则和条件提出进攻或撤退的决策,并将其发送给其他节点。

    在我们的例子中,新选出的主将军会提出进攻或撤退的决策,并将其发送给其他备份将军

     
  2. 验证和投票(Validation and Voting):备份节点在收到主节点的决策提案后,会对其进行验证。节点会检查决策的合法性和正确性,并与其他节点进行比较。如果大多数节点对决策达成一致,它们将投票支持该决策。


    在例子中,备份将军会验证主将军的决策,并与其他备份将军进行比较。如果大多数备份将军验证了相同的决策,它们会投票支持该决策。

        
  3. 决策达成(Decision):当大多数节点投票支持同一决策时,系统会达成共识并执行该决策。正确的决策将被传达给士兵,以便他们执行相应的行动。

    在例子中,当大多数备份将军达成一致,并投票支持同一个决策时,该决策将被传达给士兵,以便他们执行进攻或撤退的行动。

通过这些阶段的组合,RBFT算法能够容忍主节点的错误或恶意行为,并通过多数投票的方式达成共识。这种机制提高了系统的容错性和安全性

当然了还有很多种不同的算法没有天下第一的算法 只有不同场景下相对的最优决策

常用的共识机制有PoW(Proof of Work)工作量证明,PoS(Proof of Stake)权益证明,DPoS(Delegated Proof of Stake委任权益证明,DBFT(Delegated Byzantine Fault Tolerance)等。

EOS

采用了委任权益证明,选出一些代表性的节点来进行投票,这种方式目的是优化社区投票的效率和结果,但带来了一些中心化的风险。

在研究EOS之前 我们先说说DPOS

假设将军的例子中,我们有三个节点分别代表将军A、将军B和将军C。现在我们将这个例子应用于上述提到的情况。

假设A是第一个出块的将军,然后是B,最后是C。现在,将军B决定进行分叉。在轮到将军B出块时,他不再承认将军C和将军A的块,而是自己单独出块。在这种情况下,B分叉出去的链每9秒才能出一个块,而C和A每6秒出一个块。在DPOS机制下,即使分叉,B仍然需要等待A和C都出块后才能继续出块。

因此,分叉出块的速度永远追不上原来链的速度,因为共识机制只承认最长的链。这意味着少数节点分叉的情况下,分叉的节点无法超过由其他节点认可的链的增长速度。

如果有三分之二的节点决定分叉,原理也是一样的。最后一个诚实的少数节点决定了最快、最长的链。分叉的节点无法追上由其他节点认可的链的增长速度。

在DPOS共识机制中,确定最长的链是通过"最后不可逆块"的概念实现的。最后不可逆块是指无法修改的最后一个区块。根据DPOS规定,当三分之二的节点确认一个区块时,它就成为不可逆块。如果最新出块的三分之二节点确认一个区块,那么它就是最后不可逆块。

通过最后不可逆块,可以确认这条链是否是由三分之二的节点签名的最长链。

总结来说,DPOS机制可以有效地防范拜占庭作恶,具有强大的拜占庭容错性。本例只列举了几种主要的作恶情况,而DPOS机制可以预防许多其他作恶情况,这里没有一一列举。

此外,交易作为权益证明(TaPOS)是指交易作为验证前一个块的数据的证明。当块数增加时,这条链很难被替代,因为修改一个块会导致所有的TaPOS值不匹配。

在EOS的DPOS机制中,通过定向广播来提高出块速度和性能。在比特股和STEEM等系统中,广播是随机的,谁先收到块就可以接力生成新的块。然而,EOS采用了定向广播,使得块的传播更加高效。这种机制使得EOS可以达到更快的出块速度(例如500毫秒)。

在上文提到,比特股的出块速度是3s,而EOS可以达到500ms。EOS能提高出块速度是因为定向广播。

因为是随机广播,所以会诞生很多同步一轮的区块路径不是最短路径。

而在EOS的机制下,节点是定向广播的。21节点的位置是透明的,会选择最短路径来规定广播顺序。如图:

DBFT

DBFT共识机制则是通过对节点分配不同的角色来达成共识,这样可以很大程度降低开销和避免分叉,但是也有核心角色作恶的风险。

NEO 在 PBFT(Practical Byzantine Fault Tolerance, 实用拜占庭容错)算法的基础上,提出了 dBFT(delegated Byzantine Fault Tolerance, 委托拜占庭容错)共识算法。算法根据区块链实时投票情况,决定下一轮参与共识的节点,有效降低了算法耗时,从而提高了出块速度,同时降低了交易确认周期。

共识术语 

名称定义
共识节点具有发起新块提案和对提案投票权限的节点
普通节点具有转账、交易权限和全网账本,但不能发起区块提案与投票
议长负责向其他节点广播新块提案
议员参与共识出块的账户,负责对新块提案进行投票
候选人被提名有权参与共识节点竞选的账户
共识节点从候选人中被选出的,参与共识的账户
视图一轮共识从开始到结束所使用的数据集。视图编号 v,从 0 开始,本轮共识失败时 v 逐渐递增,直到新的提案通过后重置

共识消息 

dBFT 2.0 算法包含 6 种共识消息:

名称描述
Prepare Request发起新一轮共识的信息
Prepare Response用来通知其他节点已获取构建区块的全部交易信息
Commit通知其他节点已获取了足够多的 Prepare Response
Change View Request尝试改变视图的信息
Recovery Request同步共识状态的请求
Recovery Message对 Recovery Request 的响应信息

共识流程 

三阶段共识流程 

我们可以使用刚才的将军的例子来解释这四个步骤。

假设我们有三个将军A、B和C,他们正在进行一轮共识。

  1. 议长发起共识,广播 Prepare Request(准备请求):

    • 在这个步骤中,将军A被选为议长,并发出一个准备请求,表示他准备开始共识过程。
    • 将军A广播这个准备请求给其他两个将军B和C。
  2. 接收到 Prepare Request 后,议员广播 Prepare Response(准备响应):

    • 将军B和将军C接收到将军A的准备请求后,他们分别广播自己的准备响应。
    • 这些准备响应表示将军B和将军C同意参与共识过程。
  3. 接收到足够多的 Prepare Response 后,共识节点广播 Commit(提交):

    • 一旦将军A收到足够多的准备响应(例如收到了B和C的准备响应),他就会广播提交消息。
    • 这个提交消息表示将军A确认共识已经达成,并准备继续下一步。
  4. 接收到足够多的 Commit 后,共识节点产生新块并广播:

    • 一旦将军A收到足够多的提交消息(例如收到了B和C的提交消息),他们就开始生成新的区块。
    • 生成的新区块包含了达成共识后的数据,并由将军A广播给其他节点,以便它们更新他们的链。

大致分为这么几步:
 

  1. 初始化本地共识信息,重置共识上下文:

    • 这个步骤类似于将军们初始化并准备开始新一轮战斗。他们确定了将谁担任议长,并设置了超时时间。
  2. 各共识节点超时前监听网络,收集交易信息:

    • 这个步骤类似于将军们在超时时间之前,收集关于战局和敌方动向的情报信息。
  3. 发起共识:

    • 在这个步骤中,议长根据共识策略从内存池中选择交易,并将它们打包为准备请求(Prepare Request),然后广播出去,这相当于将军们发起了新一轮的战斗。
  4. 广播 Prepare Response:

    • 在这个步骤中,议员们收到议长的准备请求后,进行验证并将准备响应(Prepare Response)广播出去,这相当于将军们对议长的命令作出回应。
  5. 收集 Prepare Response & 广播 Commit:

    • 在这个步骤中,议长和接收到准备请求的议员们收集到足够多的准备响应后,进行验证并广播提交消息(Commit),这相当于将军们收集到足够多的回应后决定执行战斗计划。
  6. 收集 Commit 信息 & 出块:

    • 在这个步骤中,已经收集到准备请求中交易信息的共识节点收集到足够多的提交消息后,进行验证并生成新的区块,然后广播出去,这相当于将军们根据战斗计划执行行动并取得胜利。
  7. 回到第 1 步,开始下一轮共识:

    • 在这个步骤中,共识过程完成后,开始准备新一轮的共识,这相当于将军们完成一轮战斗后准备进入下一轮。

这样  我们就能对这个算法有一个初步的认知 但是实际的使用还要看具体的业务场景来判别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1509118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3588-PCIe

1. 简介 PCIe(Peripheral Component Interconnect Express)是一种用于连接主板和外部设备的高速串行接口标准。它是 PCI 技术的后继者,旨在提供更高的带宽和更好的性能。 高速传输: PCIe接口提供了高速的数据传输通道&#xff0…

【wine】WINEDEBUG 分析mame模拟器不能加载roms下面的游戏 可以调整参数,快速启动其中一个游戏kof98

故障现象,MAME启动后,游戏都没有识别 添加日志输出,重新启动wine #!/bin/bashexport WINEPREFIX$(pwd)/.wine export WINESERVER$(pwd)/bin/wineserver export WINELOADER$(pwd)/bin/wine export WINEDEBUG"file,mame,warn,err"…

CCF-C推荐会议 IEEE CLOUD‘24 3月24日截稿!深圳开启全球云计算新纪元!

会议之眼 快讯 IEEE CLOUD(IEEE International Conference on Cloud Computing)即IEEE云计算国际会议将于 2024 年7月7日至13日在中国深圳举行!IEEE CLOUD由lEEE Computer Society主办,CCF服务计算专委会、北京大学、IBM Research承办。CLOUD一直是研究人…

Linux---多线程(上)

一、线程概念 线程是比进程更加轻量化的一种执行流 / 线程是在进程内部执行的一种执行流线程是CPU调度的基本单位,进程是承担系统资源的基本实体 在说线程之前我们来回顾一下进程的创建过程,如下图 那么以进程为参考,我们该如何去设计创建一个…

STM32串口:DMA空闲中断实现接收不定长数据(基于HAL库)

STM32串口:DMA空闲中断实现接收不定长数据(基于HAL库): 第一步:设置rcc,时钟频率,下载方式 设置system core->RCC如图所示:(即High Speed Clock和Low Speed Clock都选…

EasyNVR级联EasyCVR,在EasyCVR播放视频会导致EasyNVR崩溃的原因排查与解决

视频综合管理平台EasyCVR视频监控系统支持多协议接入、兼容多类型设备,平台可以将监控区域内所有部署的监控设备进行统一接入与集中汇聚管理,实现对监控区域的实时视频监控、录像与存储、设备管理、云台控制、语音对讲、级联共享等,在监控中心…

跨境账号养号怎么做?Facebook、亚马逊运营必看

之前我们讨论过很多关于代理器的问题。它们的工作原理是什么?在不同的软件中要使用那些代理服务器?这些代理服务器之间的区别是什么?什么是反检测浏览器等等。 除了这些问题,相信很多人也会关心在使用不同平台的时代理器的选择问题。比如,为什么最好…

深入理解React中的useState:函数组件状态管理的利器

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

别再盲目推广!用Xinstall第三方统计,精准衡量广告ROI

在移动互联网时代,App推广已经成为各大广告主和开发者的必修课。然而,面对复杂的推广环境和多变的用户需求,如何提升推广效率、洞悉推广效果、衡量广告ROI,一直是困扰着广大广告主和开发者的难题。今天,我们就来聊聊一…

ChatGPT怎么用 ChatGPT小白能掌握的技巧原理

ChatGPT(Chat Generative Pre-training Transformer) 是一个 AI 模型,属于自然语言处理( Natural Language Processing , NLP ) 领域,NLP 是人工智能的一个分支。所谓自然语言,就是人们日常生活中接触和使用的英语、汉语、德语等等。自然语言处理是指,让计算机来理解并…

#LT8711V适用于Type-C/DP1.2/EDP转VGA应用方案,分辨率高达1080P。

1. 概述 LT8711V是一款高性能 Type-C/DP1.2 转 VGA 转换器,设计用于将 USB Type-C 源或 DP1.2 源连接到 VGA 接收器。 该LT8711V集成了一个符合DP1.2标准的接收器和一个高速三通道视频DAC。此外,还包括两个用于 CC 通信的 CC 控制器,以实现 …

揭秘PostgreSQL:超越传统数据库的无限可能!

介绍:PostgreSQL是一个功能强大的开源对象关系数据库系统。以下是对PostgreSQL的详细介绍: 开源性:PostgreSQL是完全开源的,这意味着任何人都可以自由地获取、使用和修改它的源代码。 可定制性:它具有高度可定制性&…

gitee分支管理,合并冲突

1、gitee展示分支 git branch 2、展示远程分支 git branch -r 3、新建分支 git branch base 4、切换分支 git checkout base 合并冲突 当代码在服务器上被提交了,再在本地提交会提示报错 点击merge

《互联网的世界》第六讲-去中心化和安全

互联网构建于开放互联的中立原则之上,公平接入,数据互联互通,流量被无差别对待,这意味着互联网本质上是匿名,去中心的,这与我们的现实世界完全不同。 但互联网上的主流业务却是 c/s 产销模式,试…

ansible基础与基础命令模块

一Ansible 1. ansible 的概念 Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 Ansible能批量配置、部署、…

Power Apps 学习笔记 -- Action

文章目录 1. Action 简介2. Action 配置3. 待补充 1. Action 简介 Action基础教程 : Action概述 操作Action: 1. 操作Action类似于工作流Workflow,提供一些重用性的操作,允许工作流或其他Web服务端点调用(例如javascript). 2. Action 类似于c#当中的一个…

HTML:注释的 5 种场景和 5 点注意事项

你好&#xff0c;我是云桃桃。 HTML 代码注释是用来在 HTML 源代码中添加一些说明性文字&#xff0c;而不会显示在页面中的内容。它们不会在浏览器中显示或渲染。 现在我们一起来看看它的语法&#xff0c;用途和注意事项吧。 注释语法 HTML 注释的基本语法格式是: <!--…

微信小程序-分包

分包 1.什么是分包 分包指的是把一个完整的小程序项目&#xff0c;按照需求划分为不同的子包&#xff0c;在构建时打包成不同的分包&#xff0c;用户在使用时按需进行加载。 2.分包的好处 对小程序进行分包的好处主要有以下两点&#xff1a; 可以优化小程序首次启动的下载时间…

从焦虑到成功:一个软件测试工程师的逆袭之路

日常大家聊天时经常提及一个关键词——大环境不好&#xff0c;由此带来了很多行为的变化&#xff0c;有的人迷茫&#xff0c;有的人躺平。本文给大家介绍发生在我身上和身边的真实案例&#xff0c;希望能带给你一些输入。 案例一&#xff1a;曾经的我也极度焦虑 我是2008年参加…

java(框架) springboot-1 基础使用+mybaits使用

学习视频&#xff1a;b站黑马java教程 tomcat spring-boot工程内嵌了tomcat服务器 所有请求经过DispatcherServlet(实现servlet接口的类)(核心控制器/前端控制器)处理&#xff0c;再通过DispatcherServlet转发给各个controller。 最后通过DispatcherServlet给浏览器响应数据…