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

#功能发布

长安链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.mfbz.cn/a/489471.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL进阶-----索引的结构与分类

目录 前言 一、认识索引 二、索引结构 1.概述 2. 二叉树 3 .B-Tree 4.BTree 5.Hash 三、索引的分类 1 .索引分类 2 .聚集索引&二级索引 前言 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统还维…

基于nginx 动态 URL反向代理的实现

背景&#xff1a; 我们在项目中在这样一个场景&#xff0c;用户需要使用固定的软件资源&#xff0c;这些资源是以服务器或者以容器形式存在的。 资源以webAPI方式在内网向外提供接口&#xff0c;资源分类多种类型&#xff0c;每种类型的资源程序和Wapi参数都一样。这些资源部属…

javaWeb在线考试系统

一、简介 在线考试系统是现代教育中一项重要的辅助教学工具&#xff0c;它为学生提供了便捷的考试方式&#xff0c;同时也为教师提供了高效的考试管理方式。我设计了一个基于JavaWeb的在线考试系统&#xff0c;该系统包括三个角色&#xff1a;管理员、老师和学生。管理员拥有菜…

ubuntu2004自动更新内核导致nvidia驱动无法正常启动的问题

症状 开机后&#xff0c;nvidia-smi无法正常显示显卡状态&#xff0c;另外无法连接多个显示屏 解决 参考这个文章&#xff1a; ls /usr/src可以看到已安装的nvidia驱动版本是nvidia-535.54.03 然后运行下面的指令&#xff1a; sudo apt-get install dkmssudo dkms instal…

Mimikatz介绍

一、Mimikatz定义 mimikatz是benjamin使用C语言编写的一款非常强大的安全工具&#xff0c;它可以从机器内存中提取明文密码、密码Hash、PIN码和Kerberos票据等。它的功能非常强大&#xff0c;得到全球安全研究员的广泛使用。 Mimikatz 是一款功能强大的轻量级调试神器&#xff…

Java版直播商城免 费 搭 建:平台规划与常见营销模式,电商源码、小程序、三级分销及详解

【saas云平台】打造全行业全渠道全场景的saas产品&#xff0c;为经营场景提供一体化解决方案&#xff1b;门店经营区域化、网店经营一体化&#xff0c;本地化、全方位、一站式服务&#xff0c;为多门店提供统一运营解决方案&#xff1b;提供丰富多样的营销玩法覆盖所有经营场景…

在vue中使用echarts饼图示例

1.安装 npm install echarts --save 2.官方示例 option {title: {text: Referer of a Website,subtext: Fake Data,left: center},tooltip: {trigger: item},legend: {orient: vertical,left: left},series: [{name: Access From,type: pie,radius: 50%,data: [{ value: 104…

巧用cpl文件维权和免杀(下)

cpl文件的应用 bypass Windows AppLocker 什么是Windows AppLocker: AppLocker即“应用程序控制策略”&#xff0c;是Windows 7系统中新增加的一项安全功能。在win7以上的系统中默认都集成了该功能。 默认的Applocker规则集合,可以看到cpl并不在默认规则中: 开启Applocker规…

NVIDIA NIM 提供优化的推理微服务以大规模部署 AI 模型

NVIDIA NIM 提供优化的推理微服务以大规模部署 AI 模型 生成式人工智能的采用率显着上升。 在 2022 年 OpenAI ChatGPT 推出的推动下&#xff0c;这项新技术在几个月内就积累了超过 1 亿用户&#xff0c;并推动了几乎所有行业的开发活动激增。 到 2023 年&#xff0c;开发人员…

聊一聊常见的网络安全模型

目录 一、概述 二、基于时间的PDR模型 2.1 模型概念提出者 2.2 模型图 2.3 模型内容 2.3.1 Protection&#xff08;保护&#xff09; 2.3.2 Detection&#xff08;检测&#xff09; 2.3.3 Response&#xff08;响应&#xff09; 2.4 PDR模型思想 2.4.1 PDR模型假设 2…

【k8s】kubeasz 3.6.3 + virtualbox 搭建本地虚拟机openeuler 22.03 三节点集群 离线方案

kubeasz项目源码地址 GitHub - easzlab/kubeasz: 使用Ansible脚本安装K8S集群&#xff0c;介绍组件交互原理&#xff0c;方便直接&#xff0c;不受国内网络环境影响 拉取代码&#xff0c;并切换到最近发布的分支 git clone https://github.com/easzlab/kubeasz cd kubeasz gi…

【openGL4.x手册10】基元程序集和面部剔除

https://www.khronos.org/opengl/wiki/Face_Culling 一、说明 基元汇编是 OpenGL 渲染管道中的阶段&#xff0c;在该阶段&#xff0c;基元被划分为一系列单独的基本基元。经过一些小的处理后&#xff0c;如下所述&#xff0c;它们被传递到光栅器进行渲染。 二 早期原始组装 基…

Spring实例化Bean的三种方式

参考资料&#xff1a; Core Technologies 核心技术 spring实例化bean的三种方式 构造器来实例化bean 静态工厂方法实例化bean 非静态工厂方法实例化bean_spring中有参构造器实例化-CSDN博客 1. 构造函数 1.1. 空参构造函数 下面这样表示调用空参构造函数&#xff0c;使用p…

npm ERR! cb() never called!(已解决)

从仓库拉下来的代码&#xff0c;用npm install时报错 试了很多种方法&#xff0c;结果发现有一种可能是你的node版本过低导致的&#xff0c;可以升级node版本试一下。 node版本升级后&#xff0c;把上一次npm install错误的node_modules删除&#xff0c;重新npm install。

压力测试面试题及答案!

压力测试是软件测试中的一种测试方式&#xff0c;用于评估软件系统在各种压力条件下的性能表现。以下是常见的压力测试面试题及答案&#xff1a; 什么是压力测试&#xff1f; 压力测试是一种测试方式&#xff0c;用于模拟实际用户在正常和峰值负载条件下对软件系统施加的压力&…

java线程池原理浅析

问题与解决&#xff1a; 问题&#xff1a; 查询大数据量的时候&#xff0c;例如一次返回50w数据量的包&#xff0c;循环去查询发现读取会超时。 解决方案&#xff1a; 经过思考采用多线程去分页查询。使用线程池创建多个线程去查询分页后的数据最后汇总一下&#xff0c;解决…

双指针算法_盛水最多的容器

题目&#xff1a; 题目解析&#xff1a; 如图所示&#xff0c;一个数组内部存储的是高度&#xff0c;求数组中&#xff0c;能够组成最大容量的两个元素&#xff0c;需要注意的是容量是 高度*宽度&#xff0c;这里的宽度指的是两个数字之间的距离&#xff0c;且需要注意高度中&…

现代c++内存管理的方式有哪些?

在现代C编程实践中&#xff0c;内存管理是软件开发中的核心议题之一&#xff0c;直接影响着程序的性能、稳定性以及资源的有效利用。C提供了一系列丰富且灵活的内存管理机制&#xff0c;以适应不同场景的需求和应对潜在的内存问题&#xff0c;如内存泄漏、野指针和堆栈溢出等。…

VUE之首次加载项目缓慢

最近公司有个大型的项目&#xff0c;使用vue2开发的&#xff0c;但是最终开发完成之后&#xff0c;项目发布到线上&#xff0c;首次加载项目特别缓慢&#xff0c;有时候至少三十秒才能加载完成&#xff0c;加载太慢了&#xff0c;太影响用户体验了&#xff0c;最近研究了一下优…

java spirng和 mybatis 常用的注解有哪些

当在Java Spring和MyBatis中进行开发时&#xff0c;常用的注解对于简化配置和提高开发效率非常重要。以下是更多常用的注解以及它们的详细说明和用途&#xff1a; 在Spring中常用的注解&#xff1a; Component&#xff1a; 用途&#xff1a;表明一个类会作为组件被Spring容器管…
最新文章