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

news2024/11/19 6:28:10

#功能发布

长安链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.coloradmin.cn/o/1547850.html

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

相关文章

RabbitMQ 《简单消息》

package com.xzp.rabbitmq.simple; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.xzp.rabbitmq.util.ConnectionUtil; /** * "Hello World!" * 简单消息 * 消息发送者 - R - 发送消息&#xff08;生产者&#xff09; …

nandgame中的汇编语言(Assembler Language)

配置一个汇编器&#xff0c;将符号指令转换为二进制机器码。汇编器指令有三个部分&#xff1a;目标、计算和&#xff08;可选的&#xff09;跳转条件。目标是操作的输出写入的寄存器。计算是ALU操作。请参阅ALU级别的位模式。跳转条件是将触发跳转的条件。请参阅条件级别以获取…

初识云原生、虚拟化、DevOps

文章目录 K8S虚拟化DevOpsdevops平台搭建工具大数据架构 K8S master 主节点&#xff0c;控制平台&#xff0c;Master节点负责核心的调度、管理和运维&#xff0c;不需要很高性能&#xff0c;不跑任务&#xff0c;通常一个就行了&#xff0c;也可以开多个主节点来提高集群可用度…

AIGC工具系列之——基于OpenAI的GPT大模型搭建自己的AIGC工具

今天我们来讲讲目前非常火的人工智能话题“AIGC”&#xff0c;以及怎么使用目前的AI技术来开发&#xff0c;构建自己的AIGC工具 什么是AIGC&#xff1f; AIGC它的英文全称为(Artificial Intelligence Generated Content)&#xff0c;中文翻译过来就是“人工智能生成内容”&…

v4l2采集视频

Video4Linux2&#xff08;v4l2&#xff09;是用于Linux系统的视频设备驱动框架&#xff0c;它允许用户空间应用程序直接与视频设备&#xff08;如摄像头、视频采集卡等&#xff09;进行交互。 linux系统下一切皆文件&#xff0c;对视频设备的操作就像对文件的操作一样&#xff…

C语言------指针(2)

前面已经向大家介绍了指针的一些基本内容&#xff0c;接下来&#xff0c;就在再我来先大家讲解一下指针的其他内容。 1. 数组名的理解 int arr[10] { 1,2,3,4,5,6,7,8,9,10 }; 在学习数组的过程中&#xff0c;我们肯定会写过以上代码&#xff0c;我们知道 int 是该数组的数…

[BT]BUUCTF刷题第8天(3.26)

第8天 Web [CISCN2019 华北赛区 Day2 Web1]Hack World 题目明确提示flag在flag表里的flag列&#xff0c;这里先尝试1 返回&#xff1a;你好&#xff0c;glzjin想要一个女朋友。 再尝试1&#xff0c;返回bool(false) 到这里就感觉是布尔盲注的题目类型了&#xff08;虽然我没…

GPT提示词分享 —— 代码释义者

提示词&#x1f447; 我希望你能充当代码解释者&#xff0c;阐明代码的语法和语义。 3.5版本&#x1f447; free2gpt 4.0版本&#x1f447; gpt4

深入解析快速排序算法

深入解析快速排序算法 一、快速排序算法简介二、快速排序算法过程三、快速排序算法示例四、快速排序算法分析1. 时间复杂度&#xff1a;2. 空间复杂度&#xff1a;3. 稳定性&#xff1a; 五、快速排序算法优化1. 优化基准元素的选择&#xff1a;2. 优化小数组的排序&#xff1a…

[HackMyVM]靶场Crossbow

kali:192.168.56.104 靶机:192.168.56.136 端口扫描 # nmap 192.168.56.136 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-26 22:17 CST Nmap scan report for crossbow.hmv (192.168.56.136) Host is up (0.0057s latency). Not shown: 997 closed tcp…

Spring IOC 容器循环依赖解决(三级缓存)

对于循环依赖的解决&#xff0c;首先得了解Spring IOC 容器的创建过程&#xff0c;在加载过程中&#xff0c;Bean 的实例化和初始化是分开的&#xff0c;所以在解决循环依赖的问题时&#xff0c;也是基于Bean 的实例化和初始化分开执行这一特点。 我们将实例化后的Bean 叫 半成…

2024中国闪存市场观察:AI助推闪存全面起势?

过去两年&#xff0c;闪存市场一直处于低迷状态&#xff0c;但去年第四季度闪存颗粒资源的上涨&#xff0c;导致闪存产品价格一路上扬&#xff0c;市场遂发生反转。 2024年&#xff0c;中国闪存市场会彻底走向复苏&#xff0c;还是急转直下&#xff1f;中国AI热潮&#xff0c;…

JavaScript原型、原型对象、原型链系列详解(五)

(五)、JavaScript原型设计模式 什么是JavaScript原型设计模式&#xff1f; 为什么要使用JavaScript原型设计模式&#xff1f; JavaScript原型设计模式的实现方法有哪些&#xff1f; JavaScript原型设计模式的应用场景是什么&#xff1f; 什么是JavaScript原型设计模式&#xff…

Raft 共识算法

什么是木筏&#xff1f; Raft 是一种共识算法&#xff0c;旨在易于理解。它 在容错和性能方面与Paxos相当。不同之处在于 它被分解成相对独立的子问题&#xff0c;而且它干净利落 解决了实际系统所需的所有主要部分。我们希望 Raft 能使 更广泛的受众可以达成共识&#xff0c;并…

【网站项目】303老年人的景区订票系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

主流公链 - Cosmos

探索Cosmos区块链&#xff1a;构建互联的区块链网络 1. Cosmos简介 Cosmos是一个开放的区块链互联协议&#xff0c;旨在解决区块链之间的孤立性问题。它的愿景是构建一个可以互相通信和互操作的区块链网络&#xff0c;实现资产和数据的流动性。在Cosmos中&#xff0c;不同的区…

langchain调用语言模型chatglm4从智谱AI

目录 ​0.langchain agent 原理 ReAct 1.langchain agent使用chatgpt调用tools的源代码 2.自定义本地语言模型的代码 3.其他加速方法 背景&#xff1a;如果使用openai的chatgpt4进行语言问答&#xff0c;是需要从国内到国外的一个客户请求-->openai服务器response的一个…

使用Nginx1.25.4版本做负载均衡、搭建Nacos2.3.0服务集群

关于使用版本问题上&#xff0c;其实小白更喜欢使用新的版本&#xff0c;因为新的版本功能更多&#xff0c;肯定优化方面不言而喻&#xff0c;懂得都懂&#xff0c;但是新的版本&#xff0c;肯定使用起来更加的速度&#xff0c;性能&#xff0c;也是不言而喻的啊&#xff0c;那…

力扣--并查集684.冗余连接

思路分析&#xff1a; 首先定义了一个Solution类&#xff0c;包含了私有成员变量fa[1001]和n&#xff0c;以及三个私有成员函数find()、togother()和findRedundantConnection()。 find()函数用于查找节点的根节点&#xff08;即所在连通分量的代表节点&#xff09;&#xff0c…

2024最新华为OD机试试题库全 -【二叉树的广度搜索】- C卷

1. 🌈题目详情 1.1 ⚠️题目 有一棵二叉树,每个节点由一个大写字母标识(最多26个节点)。 现有两组字母,分别表示后序遍历(左孩子->右孩子->父节点)和中序遍历(左孩子->父节点->右孩子)的结果,请你输出层序遍历的结果。 1.2 🔣输入要求 每个输入文…