长安链共识算法切换:动态调整,灵活可变

#功能发布

长安链3.0正式版发布了多个重点功能,包括共识算法切换、支持java智能合约引擎、支持后量子密码、web3生态兼容等。我们接下来为大家详细介绍新功能的设计、应用与规划。

随着长安链应用愈加成熟与广泛,一些在生产中很实用的需求浮出水面。长安链3.0正式版围绕此类需求融合了多个功能特性,共识算法切换作为其中之一可以赋予联盟链更好的可扩展性,动态灵活的应对系统上线后业务发展、组织节点新增或变更等场景。

共识算法的选择取决于链上节点互信程度、容错率需求等因素。随着业务的发展,已有业务链可能会面临共识性能逐渐不满足现有需求、链上新增组织时节点间互信程度发生了改变等情况,这时共识算法切换就成了非常迫切的需求。

长安链原生支持RAFT、TBFT、ABFT、DPOS等多种共识算法,在首次配置启动后所使用的共识算法即落定不可改变。为了满足更多使用场景中改变共识的需求,长安链在3.0正式版开始支持切换已完成配置的链共识算法,目前TBFT和RAFT共识之间可切换,未来将会带来更多支持。在这里将为大家剖析下长安链是如何进行共识算法切换的。

 一、概述 

长安链共识算法切换是通过发起共识算法切换交易请求,判定当前的运行环境是否允许新共识算法运行,并对这种判定达成共识后,如果允许切换,则终止原共识算法启用新的共识算法。共识类型在长安链中配置如下

图片

 二、共识切换合约逻辑 

图片

图1

1.合约执行时,通过虚拟机运行获取到本节点所知晓的当前的共识运行环境信息;

2.获取切换的目标共识算法运行所依赖的环境条件;

3.判定目前的运行环境信息是否满足目标共识依赖的环境条件;

4.如果可切换,合约将更改链配置中共识的类型到目标共识类型,如果需要,则同时更改共识相关的额外配置信息。

概念说明

共识的运行环境:一般包括的信息有参与共识的节点、当前在线的共识节点、互相可正常连通的共识节点等。

共识算法依赖的条件:不同类型的共识算法能够正常运行所依赖的条件不尽相同,如CFT类共识需要满足2f+1<=n, BFT类满足3f+1<=n

 三、整体流程 

核心流程如下:

图片

图2

1.在共识切换合约逻辑中有提到在执行合约时,需要通过合约运行时获取到共识的运行环境信息,在长安链中这个信息由当前运行的共识算法实例提供,因此在依据链配置中的共识类型初始化成功相应的共识算法实例后,将其注册到vm中(共识状态holder);

2.创建配置块订监听器,解析监听到配置块,比对配置块中的共识类型同当前运行的共识类型是否相同,不同意味着需要对共识算法进行切换。

3.切换时,终止掉当前链的共识实例,并依据新的共识类型创建新的共识算法实例,而后将其注册到vm中以替换掉原有注册的共识实例。启动新的共识实例,完成切换。

 四、共识运行环境信息的采集 

在这里我们以RAFT为例,选择RAFT是因为RAFT算法的实现中,从节点之间是不知道彼此的状态的,而共识算法切换对于所有共识节点来说都需要获取到一个相对完备的环境信息,只有这样才能保证对切换的结果达成确定的共识,切换完成后共识也能正常地进行作业。

图片

图3

RAFT信息收集中,定义了两种消息类型

lHeartBeat:心跳消息,各个节点在启动后,会定时地给其他节点发送心跳,以保证对方节点能够知晓自己的存活状态,如果超时未获取,则标记此节点为掉线状态

lNodeLink:节点的连接信息,即节点还需要知晓其他节点所掌握的外部节点的状态信息。比如,node_1需要知道node_2所掌握的node_1、node_2、node_3的心跳状态。

通过这两个消息类型,一个节点就能够知晓整个共识网络中节点的连通状况,在目前的长安链版本中,依据最小交集原则,从中计算出能够彼此都连通的节点的最小集合,在合约执行中,判定这个最小集合是否满足目标共识的需求,如在四节点RAFT->TBFT切换时,判定最小集合的节点数是否满足2f+1即3个节点。

至此,我们从合约逻辑、整体流程及信息采集三个方面阐述了长安链共识算法切换的机制和流程。

 五、共识算法切换使用 

sdk逻辑接口

// ### 构造 raft切换到tbft payload
// 参数说明:extConfig: 应用到tbft共识的配置信息 无更改则填nil
CreateRaftToTbftPayload(extConfig []*common.KeyValuePair) (*common.Payload, error)
// ### 构造 tbft切换到raft payload
// 参数说明:extConfig: 应用到raft共识的配置信息 无更改则填nil
CreateTbftToRaftPayload(extConfig []*common.KeyValuePair) (*common.Payload, error)

目前版本仅支持TBFT和RAFT算法之间的相互切换,其中参数extConfig是为目标共识配置的扩展信息,对应链配置的consensus.ext_config,不需要此参数可选填nil。

权限配置

共识切换默认启用的权限为major,可通过更改资源策略来更改共识切换的权限合约名:CHAIN_CONFIG, 方法名:CONSENSUS_SWITCH,资源名:CHAIN_CONFIG-CONSENSUS_SWITCH, 描述:共识切换

cmc命令

./cmc client chainconfig consensus switch \
--sdk-conf-path=./testdata/sdk_config.yml \
--admin-crt-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.crt,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.tls.crt,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.tls.crt,./testdata/crypto-config/wx-org4.chainmaker.org/user/admin1/admin1.tls.crt \

./cmc client chainconfig consensus switch \
--sdk-conf-path=./testdata/sdk_config.yml \
--admin-key-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.key,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.tls.key,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.tls.key,./testdata/crypto-config/wx-org4.chainmaker.org/user/admin1/admin1.tls.key \

--src-consensus=tbft \

--dst-consensus=raft \

--sync-result=true

其中:--src-consensus为源共识类型,需和链上的当前使用的共识类型相对应 --dst-consensus为目标共识类型

至此,我们从合约逻辑、整体流程、信息采集和使用四个方面阐述了长安链共识算法切换的机制和流程。长安链3.0正式版本支持的共识算法可切换能力将使区块链系统更加灵活,可以动态适应复杂多变的业务场景。

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

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

相关文章

RIPGeo代码理解(五)utils.py( 辅助函数)第一部分

​ 代码链接:RIPGeo代码实现 ├── lib # 包含模型(model)实现文件 │ |── layers.py # 注意力机制的代码。 │ |── model.py # TrustGeo的核心源代码。 │ |── sublayers.py # layer.py的支持文件。 │ |── utils.p…

Linux发布项目(包括前端和后端)到OpenEuler虚拟机上

后端&#xff1a;SpringBoot 前端&#xff1a;VUE3 操作系统&#xff1a;Linux 虚拟机&#xff1a;OpenEuler 发布项目是需要关闭虚拟机上的防火墙 systemctl stop firewalld 一、发布后端项目到虚拟机 1打包后端项目为jar包 2将打包后的jar包放到虚拟机 /opt 目录下 3 运行项…

算法体系-12 第 十二 二叉树的基本算法 下

一 实现二叉树的按层遍历 1.1 描述 1&#xff09;其实就是宽度优先遍历&#xff0c;用队列 2&#xff09;可以通过设置flag变量的方式&#xff0c;来发现某一层的结束&#xff08;看题目&#xff09;看下边的第四题解答 1.2 代码 public class Code01_LevelTraversalBT {publ…

Elsevier(爱思唯尔)如何查询特刊special issue

1. 以Knowledge-Based Systems为例 网站&#xff1a;https://www.sciencedirect.com/journal/knowledge-based-systems 2.具体位置

Linux进程间通信【一】

进程间通信介绍 进程间通信的概念 进程间通信简称IPC&#xff08;Interprocess communication&#xff09;&#xff0c;进程间通信就是在不同进程之间传播或交换信息。 进程间通信的目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程资源共享&#xff1a;多…

linux内核input子系统概述

目录 一、input子系统二、关键数据结构和api2.1 数据结构2.1.1 input_dev2.1.2 input_handler2.1.3 input_event2.1.4 input_handle 2.2 api接口2.2.1 input_device 相关接口input_device 注册流程事件上报 2.2.2 input handle 相关接口注册 handle指定 handle 2.2.3 input han…

基于springboot+vue的电影院购票系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

数码管的动态显示

1.共阴极数码管实现HELLO #include<reg51.h> char str[]{0x76,0x79,0x38,0x38,0x3F}; //HELLO char wei[]{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void delay(int n) {int i0,j0;for(i0;i<n;i){for(j0;j<120;j);} } void seg() {int i;for(i0;i<…

NC 现金流量查询 节点 多账簿联查时,根据所选择的列来判断明细和现金流量联查按钮是否可用,根据添加列选择监听事件处理。

NC 现金流量查询 节点 多账簿联查时&#xff0c;根据所选择的列来判断明细和现金流量联查按钮是否可用&#xff0c;如下图的情况&#xff1a; 在现金流量查询界面UI类的initTable(QueryConditionVO conVO)方法中添加列选择监听事件即可&#xff0c;如下&#xff1a; // 列监听…

LeetCode刷题【树状数组、并查集、二叉树】

目录 树状数组307. 区域和检索 - 数组可修改406. 根据身高重建队列673. 最长递增子序列的个数1409. 查询带键的排列 并查集128. 最长连续序列130. 被围绕的区域 二叉树94. 二叉树的中序遍历104. 二叉树的最大深度101. 对称二叉树543. 二叉树的直径108. 将有序数组转换为二叉搜索…

web性能检测工具lighthouse

About Automated auditing, performance metrics, and best practices for the web. Lighthouse 可以自动检查Web页面的性能。 你可以以多种方式使用它。 浏览器插件 作为浏览器插件&#xff0c;访问chrome网上商店 搜索Lighthouse 插件安装。以两种方式使用。 方式一 安装…

DP:路径规划模型

创作不易&#xff0c;感谢三连支持&#xff01; 路径规划主要是让目标对象在规定范围内的区域内找到一条从起点到终点的无碰撞安全路径。大多需要用二维dp数组去实现 一、不同路径 . - 力扣&#xff08;LeetCode&#xff09;不同路径 class Solution { public:int uniquePath…

重学SpringBoot3-MyBatis的三种分页方式

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-MyBatis的三种分页方式 准备工作环境搭建数据准备未分页效果 1. 使用MyBatis自带的RowBounds进行分页演示 2. 使用物理分页插件演示 3. 手动编写分页SQL…

pcl 凸包ConvexHull

pcl 凸包ConvexHull 头文件等 #include <pcl/surface/convex_hull.h>typedef pcl::PointXYZ PointT; typedef pcl::PointCloud<PointT> CloudT; typedef CloudT::Ptr CP 代码 CP PSO::tubao(CP cloud) {pcl::ConvexHull<PointT> hull;hull.setInputCloud…

代码随想录算法训练营第十七天|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和

代码随想录算法训练营第十七天|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和 110.平衡二叉树 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true题解&#xff1a;平衡…

查看Scala类的方法

文章目录 一、概述如何查看Scala类的方法二、使用Scala文档查看类的方法三、使用反射机制查看类的方法 一、概述如何查看Scala类的方法 本文介绍了在Scala中查看Int类方法的两种方法&#xff1a;使用Scala标准库文档和使用反射机制。通过Scala标准库文档&#xff0c;您可以方便…

【C++庖丁解牛】二叉搜索树(Binary Search Tree,BST)

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1. 二叉搜索树概念2. 二叉…

Etcd Raft 协议(进阶篇)

前言 在正式开始介绍 Raft 协议之间&#xff0c;我们有必要简单介绍一下其相关概念。在分布式系统中&#xff0c;一致性是比较常见的概念&#xff0c;所谓一致性指的是集群中的多个节点在状态上达成一致。在程序和操作系统不会崩溃、硬件不会损坏、服务器不会掉电、网络绝对可靠…

【Linux】环境变量常见指令操作&基本实验(入门必看!)

前言 大家好吖&#xff0c;欢迎来到 YY 滴Linux系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《…

安卓实现翻转时间显示效果

效果 废话不多说上代码 自定义组件 import android.content.Context; import android.content.res.TypedArray; import android.graphics.Camera; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.…