CN114760198A - 一种基于区块链网络的共识方法、装置及系统 - Google Patents
一种基于区块链网络的共识方法、装置及系统 Download PDFInfo
- Publication number
- CN114760198A CN114760198A CN202210135089.7A CN202210135089A CN114760198A CN 114760198 A CN114760198 A CN 114760198A CN 202210135089 A CN202210135089 A CN 202210135089A CN 114760198 A CN114760198 A CN 114760198A
- Authority
- CN
- China
- Prior art keywords
- system configuration
- instruction
- node
- consensus
- configuration information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/08—Configuration management of networks or network elements
- H04L41/0803—Configuration setting
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/08—Configuration management of networks or network elements
- H04L41/0803—Configuration setting
- H04L41/0813—Configuration setting characterised by the conditions triggering a change of settings
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种基于区块链网络的共识方法,区块链网络中的任一共识节点在本地维护系统配置信息,系统配置信息包括成员节点集合,方法包括:指令发起节点获取系统配置信息,根据获取的系统配置信息对本地系统配置信息进行更新,并根据更新后的系统配置信息向区块链网络中的至少部分成员节点广播指令,以使区块链网络生成包括所述指令的共识提议并对所述共识提议进行共识处理;区块链网络中任一成员节点在确定针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的系统配置信息。
Description
技术领域
本申请涉及计算机技术领域,具体地,涉及一种基于区块链网络的共识方法、装置及系统。
背景技术
在区块链网络中各个共识节点为了保证数据的一致性,通常需要通过各种共识方法进行共识,当区块链网络中的共识节点想要退出区块链网络,或者区块链网络外的节点想要加入区块链网络,通常区块链网络的共识过程会被停止,开始执行节点加入或退出过程,等到相应的节点加入或退出后才继续进行共识过程,这大大降低了区块链网络的共识效率。
发明内容
根据本申请实施例的第一个方面,本申请实施例中提供了一种基于区块链网络的共识方法,其特征在于,所述区块链网络中的任一共识节点在本地维护系统配置信息,所述系统配置信息包括成员节点集合以及用于标识系统配置的系统配置编号;所述方法包括:
指令发起节点获取系统配置信息;
指令发起节点根据获取的系统配置信息对本地系统配置信息进行更新,并根据更新后的系统配置信息向区块链网络中的至少部分成员节点广播指令,以使区块链网络生成包括所述指令的共识提议并对所述共识提议进行共识处理;其中,指令包括成员配置指令或常规指令,成员配置指令用于指示将所述指令发起节点加入或退出所述区块链网络;
区块链网络中任一成员节点在确定针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的系统配置信息。
根据本申请实施例的第二个方面,本申请实施例中提供了一种基于区块链网络的共识系统,其特征在于,所述区块链网络中的任一共识节点在本地维护系统配置信息,所述系统配置信息包括所述区块链网络的成员节点集合以及用于标识系统配置的系统配置编号;所述系统包括:
指令发起节点,用于获取系统配置信息;
所述指令发起节点,还用于根据获取的系统配置信息对本地系统配置信息进行更新,并根据更新后的系统配置信息向区块链网络中的至少部分成员节点广播指令,以使区块链网络生成包括所述指令的共识提议并对所述共识提议进行共识处理;其中,指令包括成员配置指令或常规指令,成员配置指令用于指示将所述指令发起节点加入或退出所述区块链网络;
区块链网络中任一成员节点,用于在确定针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的系统配置信息。
根据本申请实施例的第三个方面,本申请实施例中提供了一种基于区块链网络的共识装置,其特征在于,所述区块链网络中的任一共识节点在本地维护系统配置信息,所述系统配置信息包括成员节点集合以及用于标识系统配置的系统配置编号;所述装置包括:
获取模块,用于获取系统配置信息;
广播模块,根据获取的系统配置信息对本地系统配置信息进行更新,并根据更新后的系统配置信息向区块链网络中的至少部分成员节点广播指令,以使区块链网络生成包括所述指令的共识提议并对所述共识提议进行共识处理;其中,指令包括成员配置指令或常规指令,成员配置指令用于指示将所述指令发起节点加入或退出所述区块链网络。
根据本申请实施例的第四个方面,本申请实施例中提供了一种基于区块链网络的共识装置,其特征在于,所述区块链网络中的任一共识节点在本地维护系统配置信息,所述系统配置信息包括成员节点集合以及用于标识系统配置的系统配置编号;所述装置包括:
转发模块,用于在接收到指令发起节点的发送的指令后,对该指令进行转发处理;其中所述指令包括成员配置指令或常规指令;
共识模块,用于针对包括所述指令的共识提议进行共识处理;
更新模块,用于在针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的系统配置信息。
根据本申请实施例的第五个方面,本申请实施例中提供了一种基于区块链网络的共识装置,其特征在于,所述区块链网络中的任一共识节点在本地维护系统配置信息,所述系统配置信息包括成员节点集合以及用于标识系统配置的系统配置编号;所述装置包括:
共识模块,用于在接收到指令发起节点的发送的指令,且生成包括所述指令的共识提议后,协调其他节点对所述共识提议进行共识处理;其中所述指令包括成员配置指令或常规指令;
更新模块,用于在针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的系统配置信息。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本说明书实施例的一种网络架构拓扑结构示意图;
图2为本说明书实施例的一种基于区块链网络的共识方法的流程示意图;
图3为本说明书实施例的一种将节点加入区块链网络的示意图;
图4为本说明书实施例的一种基于区块链网络的共识方法的示意图;
图5为本说明书实施例的一种系统配置历史信息的结构示意图;
图6为本说明书实施例的一种视图切换消息转发的示意图;
图7为本说明书实施例的另一种视图切换消息转发的示意图;
图8为本说明书实施例的一种基于区块链网络的共识装置的结构示意图;
图9为本说明书实施例的另一种基于区块链网络的共识装置的结构示意图;
图10为本说明书实施例的又一种基于区块链网络的共识装置的结构示意图;
图11是用于配置本说明书实施例装置的一种设备的结构示意图。
具体实施方式
区块链网络作为分布式数据存储网络,区块链网络中的各个节点需要保证数据的一致性,各个节点需要通过各种共识方法进行共识,其中共识是指各个节点达成数据一致的过程。
当区块链网络中的共识节点想要退出区块链网络,或者区块链网络外的节点想要加入区块链网络时,通常情况下区块链网络的共识过程会被停止,开始执行节点加入或退出的过程,等到相应的节点加入或退出后才继续进行共识过程,这大大降低了区块链网络的共识效率。其中,共识过程通常是指对常规指令的共识。
针对上述问题,本申请实施例中提供了一种基于区块链网络的共识方法,当节点需要加入或退出区块链网络时,可以向区块链网络广播成员配置指令,该指令用于指示将该节点加入或退出区块链网络,区块链网络中的共识节点将该成员配置指令与常规指令一同作为共识提议进行共识,各个共识节点在基于共识提议达成共识后,即可以执行该成员配置指令,不需要将成员配置指令与常规指令分别处理,即不需要将对于常规指令的共识过程停止就可以处理成员配置过程,因此大大提升了区块链网络的共识效率。
本申请实施例中的方案可以采用各种计算机语言实现,例如,面向对象的程序设计语言Java和直译式脚本语言JavaScript等。
为了使本申请实施例中的技术方案及优点更加清楚明白,以下结合附图对本申请的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本申请的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
为了使本领域人员更为清楚的了解本方案,下面对本说明书中出现的一些名称内容进行解释说明:
在本说明书中,区块链网络中的节点包括1个主节点和N个从节点,主节点用于在共识过程中生成共识提议以及发起共识,从节点参与共识过程。
共识提议为主节点从本地指令池中获取的预设数量的指令。
在本说明书中,区块链的成员节点是指区块链网络中参与共识的共识节点,即主节点和从节点均称为成员节点,各个成员节点均维护有系统配置信息,系统配置信息具体是指区块链网络的成员节点集合,以及用于标识系统配置的系统配置编号,其中在有成员节点从区块链网络中退出,或有其他节点加入区块链网络成为成员节点的情况下,对该系统配置编号进行更新,一种具体的实施方式可以是将该系统配置编号以1为步长递增。
如表1所示,为一种系统配置信息的具体实施例。
系统配置编号 | 成员节点集合 |
1 | P<sub>1</sub>、P<sub>2</sub>、P<sub>3</sub>、P<sub>4</sub> |
表1
其中,系统配置编号以1为步长递增,例如,当节点P5加入区块链网络后,各个区块链网络中的成员节点将本地配置信息更新为如表2所示的信息。
系统配置编号 | 成员节点集合 |
2 | P<sub>1</sub>、P<sub>2</sub>、P<sub>3</sub>、P<sub>4</sub>、P<sub>5</sub> |
表2
本说明书中,区块链网络具体是遵循BFT(Byzantine Fault Tolerance)拜占庭容错的区块链网络,即该区块链网络包括M个共识节点,其中最多允许存在f个恶意节点,M≥3f+1,f和M均为大于0的整数。
如图1所示,为本说明书提出一种网络拓扑的结构示意图,图中节点P1-P4组成区块链网络,P5是指欲加入区块链网络的其他节点,其需要向节点P1-P4组成的区块链网络发送成员配置指令以加入区块链网络,另外,区块链网络中的任一节点如果想要退出区块链网络,则需要向区块链网络广播成员配置指令以从区块链网络退出。
在本说明书中,常规指令是指对数据进行增删改查等不涉及对区块链网络的成员节点进行更改的指令,成员配置指令是指指令发起节点发出的、用于指示将其自身加入或退出区块链网络的指令。
在本说明书中各个节点可以是服务器、移动终端等具有处理功能的硬件设备,本说明书对此不进行限定。
如图2所示,基于以上说明,本说明书提出的一种基于区块链的共识方法,所述区块链网络中的任一共识节点在本地维护系统配置信息,所述系统配置信息包括区块链网络中的成员节点集合以及用于标识系统配置的系统配置编号;该方法包括:
S201,指令发起节点向区块链网络中的至少部分成员节点广播指令,以使区块链网络生成包括所述指令的共识提议并对所述共识提议进行共识处理;其中,所述指令包括成员配置指令或常规指令,成员配置指令用于指示将所述指令发起节点加入或退出所述区块链网络;
基于图1所示的网络拓扑图,可以理解的是,指令发起节点可以是区块链网络中的任一节点或不为区块链网络的其他节点,其可以向区块链网络发送指令,在区块链网络中,指令还可以称为交易,本说明书对此不进行限定。
具体的,当指令发起节点是区块链网络以外的其他节点时,其可以发送常规指令,以及用于指示将其自身加入到区块链网络的成员配置指令;
当指令发起节点是区块链网络中的成员节点时,其可以发送常规指令以及用于指示将其自身从区块链网络退出的成员配置指令。
当指令发起节点如果是区块链网络以外的节点,其可以预先通过相应的渠道和方式获取区块链网络的系统配置信息,进而根据配置信息可以确定区块链网络中的成员节点,进而可以向成员节点发送指令。关于获取系统配置信息的具体内容可以参照下文的描述,这里先不进行详述。
区块链网络中成员节点在接收到该指令后,可以生成包括该指令的共识提议,并基于该共识提议进行共识处理。
S202,区块链网络中任一成员节点在针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的系统配置信息。
区块链网络中的共识节点在针对该共识提议达成共识后,可以执行该共识提议,其中如果共识提议中包括成员配置指令,则根据成员配置指令更新本地维护的系统配置信息,以在各个共识节点中同步系统配置信息,即可以根据成员配置指令对本地维护的系统配置信息中的成员节点集合进行更新,并对系统配置编号进行更新。如上述将表1更改为表2的操作。
采用上述方案,需要加入或退出区块链网络的节点,可以向区块链网络广播成员配置指令,该指令用于指示将该节点加入或移除区块链网络,区块链网络中的成员节点将该成员配置指令与常规指令一同作为共识提议进行共识,各个共识节点在基于共识提议达成共识后,即可以执行该成员配置指令,不需要将成员配置指令与常规指令分别处理,即不需要将共识过程停止就可以执行成员配置过程,因此大大提升了区块链网络的共识效率。
上文提出,在执行上述S201前,指令发起节点如果是区块链网络以外的节点,其还需要获取区块链网络的系统配置信息,进而可以根据系统配置信息知晓区块链网络中的成员节点信息,进一步可以向区块链网络中的成员节点广播指令,下面对指令发起节点获取区块链网络的系统配置信息的方式进行说明。
在一个实施例中,由于指令发起节点通常是具有处理能力的服务器或者客户端,因此,其可以直接基于管理人员的输入获取系统配置信息,即管理人员直接将系统配置信息在该指令发起节点中进行配置。
在另一个实施例中,指令发起节点还可以向信息存储节点发送系统配置获取请求;信息存储节点在接收到系统配置获取请求后,可以向指令发起节点返回系统配置信息,指令发起节点根据该系统配置信息对本地系统配置信息进行更新,进而可以根据更新后的系统配置信息向区块链网络广播指令。
在本实施例中,由于区块链网络中的成员节点均维护有系统配置信息,因此,区块链网络中的成员节点均可以作为信息存储节点,任一成员节点在接收到该系统配置获取请求后,均可以向指令发起节点返回系统配置信息,另外,由于该指令发起节点并不知道区块链网络中的成员节点有哪些,因此,其需要向可能是区块链网络中的全部节点广播系统配置获取请求,以获取系统配置请求,具体的,其需要向包括至少一个区块链网络成员节点的节点集合广播系统配置获取请求,才能获取到相应的系统配置信息,这里可以理解为指令发起节点向其知晓的网络环境中所有节点广播系统配置获取请求。
另外,一方面考虑到区块链网络中的成员节点随时在变化,作为区块链网络以外的节点,不可能也不需要知悉区块链网络当前包括的成员节点,因此,其需要向所有可能为区块链网络成员节点广播系统配置获取请求,这无疑增加了网络带宽的消耗;另一方面,区块链网络中的成员节点随时都在进行着共识过程,如果成员节点还均需要响应指令发起节点发起的系统配置获取请求,无疑是增加了区块链网络中成员节点的负担。
因此,在一个实施例中,还可以预先规定一个指定节点,由该指定节点专用于响应指令发起节点发起的系统配置获取请求。
例如,该信息存储节点包括区块链网络中或区块链网络外任一指定节点;当区块链网络以外的指令发起节点需要获取区块链网络的系统配置信息时,其可以向该指定节点发送系统配置获取请求,由该指定节点向指令发起节点返回系统配置信息。另外,当指定的信息存储节点是区块链网络以外的节点时,其可以在区块链网络中的成员节点同步更新了系统配置信息时,也接收成员节点发送的信息,进而同步更新本地的系统配置信息。采用这种方式,指令发起节点只需要知晓信息存储节点一个节点的通信地址即可,同时指令发起节点不需要广播系统配置获取请求,因此,既减少了网络带宽的消耗,同时也减少了区块链网络中成员节点和指令发起节点的负担。
在一个实施例中,当指令发起节点是区块链网络中的节点时,由于网络原因,其也可能存在本地系统配置信息未更新的情况,因此在其需要向区块链网络发起指令时,其也可以向信息存储节点发送配置信息获取请求,本说明书对此不进行限定。
另外,在一些特殊的预定义网络环境中,例如,在一些节点较少、且全部节点身份公开的网络环境中,指令发起节点可以直接以该预定义网络中全部节点作为区块链网络的成员,即将预定义网络中的全部节点组成的集合作为系统配置信息中的成员节点集合,并且以预定义值作为系统配置编号,该预定义值可以为不为实际系统编号的任意预定义值,例如预定义值设置为nail。
为了确保系统配置信息的可信性,信息存储节点在向指令发起节点返回系统配置信息时,可以将系统配置历史信息一同发送给指令发起节点,进而,指令发起节点在接收到该获取请求响应消息后,可以根据该系统配置历史信息对该系统配置信息进行验证,在验证通过,且该系统配置信息中的系统配置编号大于本地维护的系统配置编号,则根据该系统配置信息对本地系统配置进行更新。
可以理解的是,指令发起节点如果是首次与区块链网络建立联系,其本地可能未存储有任何系统配置信息,则可以直接在验证通过后,将系统配置信息存储在本地,即可以视为本地系统配置信息编号为0,则接收到的系统配置信息无论如何也大于本地的系统配置信息编号。另外,指令发起节点可能是之前从区块链网络退出的节点,或者向该区块链网络发过指令的节点,因此其本地存储有系统配置信息,因此,指令发起节点在接收到系统配置信息后,如果接收到的系统配置编号大于本地的系统配置编号,则说明本地系统配置信息未更新,则可以对接收到的系统配置信息验证通过后,根据接收到的系统配置信息对本地系统配置进行更新。
例如,信息存储节点可以向指令发起节点返回消息<CONF,c’,Mc’,chist’>,其中CONF标识消息类型,c’为系统配置编号,Mc’为对应该系统配置编号的成员节点集合,即c’和Mc’为系统配置信息,chist’为系统配置历史信息,chist’的具体内容,以及利用系统配置历史信息对系统配置信息进行验证的方式可以参照下文,这里不进行详述。
可以理解的是,上述获取系统配置信息的方式不仅仅可以应用到本说明书提出的共识方法中,还可以应用到其他需要使用系统配置信息的共识方法,或其他需要使用系统配置信息的技术当中。
根据上述内容所述,指令发起节点获取了系统配置信息,因此在上述S201中,指令发起节点发起的指令中可以携带系统配置编号,用于标识所述指令所针对的系统配置版本;例如,其可以发送形如<SUBMIT,c,<JOIN,pk>>的指令,其中SUBMIT为指令类型标识,c为系统配置编号,pk为其公钥,JOIN表示该指令用于指示将该指令发起节点加入区块链网络。或者,其可以发送形如<SUBMIT,c,<LEAVE,i>>,其中,i为该指令发起节点在区块链网络中的成员节点编号,LEAVE表示该指令用于指示将该指令发起节点移除区块链网络,通常情况下,指令发起节点可以基于本地当前的系统配置编号发起指令。
根据上述内容可知,由于信息存储节点可以是指定的一个节点,也可以是区块链网络中的成员节点,当信息存储节点是区块链网络中的成员节点、或指定节点时,由于该节点更新本地系统配置信息不及时,因此其向指令发起节点返回的节点也可能少于区块链网络当前所拥有的全部成员节点。因此,在上述S201中,指令发起节点根据更新后的系统配置信息可以向当前区块链网络中的至少部分成员节点广播指令,在广播后,区块链网络中任一从节点在接收到该指令后,可以对该指令进行转发处理,即区块链网络中的从节点在接收到指令发起节点发送的指令后,可以将该指令转发至区块链网络中的其他节点,同时也将指令存储在本地的指令池中。区块链网络中的主节点在接收到所述指令,且生成包括所述指令的共识提议后,协调其他节点对所述共识提议进行共识处理。
区块链网络中的任一从节点在接收到该指令后,对该指令进行转发处理,具体可以为在本地未执行该指令的情况下,若确定该系统配置编号与本地存储的系统配置编号相同,则将所述成员配置指令转发至主节点;若确定该系统配置编号小于本地存储的系统配置编号,则将所述指令转发至本地维护的成员节点集合中的成员节点;
任一从节点在接收到指令后,如果确定本地未执行该指令,说明并未针对该指令达成共识,进一步,如果确定该系统配置编号与本地存储的系统配置编号相同,则说明指令发起节点的系统配置编号与本地的系统配置编号相同,则直接将指令转发至主节点。
如果确定该系统配置编号小于本地存储的系统配置编号,则说明指令发起节点的系统配置未更新,通过该指令发起节点广播的成员节点并不为最新的成员节点,因此需要将指令发起节点广播的指令转发至本地系统配置对应的全部成员节点。例如,指令发起节点发送的指令中携带系统配置编号为1,对应的成员节点集合中包括P1、P2、P3、P4四个节点。而本地系统配置编号为2,对应的成员节点集合中包括P1、P2、P3、P4、P5五个节点,因此可以向P1、P2、P3、P4、P5五个节点转发该指令,以使P5也可以接收到该指令。
在指令发起节点发起的指令中携带的系统配置编号为预定义值时,各个从节点可以将其视为与本地系统配置编号相同的值,也可以将其视为与小于本地系统配置编号的值,进而触发相应的转发处理,本说明书对此不进行限定。
另外,由于网络延迟等原因,某节点接收到指令发起节点发送的指令会较晚,此时该节点可能已经因为区块链网络中其他节点早已接收到了该指令,因此已经完成了对该指令的共识处理,并且已经执行了该指令。因此,可以将执行结果和配置历史消息返回给该指令发起节点。例如,可以发送<REPLY,c,re,chist>消息给指令发起节点。其中,REPLY是指消息类型标识,c是指系统配置编号,re是指执行结果,chist是指配置历史消息。这里先不对chist进行说明,具体内容可以参照下文。
在上述S201中,区块链网络中的主节点在接收到指令后,可以将指令存储在本地的指令池中,在达到预设共识周期或指令池中存储了预设数量的指令后,可以从指令池中获取一定数量的指令打包成为共识提议,主节点将成员配置指令以及常规指令均打包为共识提议进行处理,本说明书中对于主节点打包共识提议的触发机制以及打包方式不进行限定。
主节点在从指令池中获取预设数量的指令后,针对所述预设数量的指令中的任一成员配置指令,若确定该成员配置指令为用于指示将发起该指令的指令发起节点加入区块链网络,则为该指令发起节点分配成员节点序号,将成员节点序号以及所述成员配置指令组合为成员加入指令。例如,为该指令发起节点分配的成员节点序号为j,成员配置指令为m,则组合后的成员加入指令为<ADD,j,m>,其中,ADD是指成员加入指令的类型标识。
另外,若该成员配置指令用于指示将发起所述指令的指令发起节点从区块链网络退出,则将该指令发起节点的成员节点序号以及所述成员配置指令组合为成员退出指令。由于该指令发起节点为区块链网络中的节点,因此其具有成员节点序号,例如其成员节点序号为i,该指令为m,则组合后的成员退出指令为<REMOVE,i,m>,其中,REMOVE是指成员退出指令的类型标识。
主节点在对获取的预设数量指令中的成员配置指令进行处理后,可以将得到的成员加入指令、成员退出指令,以及未处理的常规指令打包为共识提议。例如,主节点从指令池中共获取了10条指令,其中第1、10条为成员配置指令,其他指令为常规指令,主节点在对第1、10条指令改造为成员加入指令或成员退出指令后,将改造后的第1、10条指令以及其他常规指令打包为共识提议。
另外,主节点在为指令发起节点分配成员序号后,还可以将该指令发起节点加入到临时成员集合中。临时成员集合可以理解为接收区块链网络中的共识消息,但是不参加共识过程的节点。
如图3所示,主节点维护的系统配置中,存在PA、PB、PC、PD四个节点,节点PE想要加入区块链网络,主节点为节点PE分配成员节点序号E后将E添加到临时成员集合TM中,图中M表示当前系统配置对应的成员节点集合,configuration c表示系统配置c,如果针对该成员配置指令达成共识并执行了该指令(对应图中Deliver递送分支),则将E添加到成员节点集合中,如果针对该成员配置指令未达成共识(对应图中FailToDeliver分支),则将E从临时成员节点集合中移除。
在将该指令发起节点加入到临时成员集合中,并打包了共识提议后,主节点即可以协调其他节点对共识提议进行共识处理,其可以基于共识提议向临时成员集合中的成员节点广播预准备消息,即向临时成员集合中的成员节点广播携带共识提议的预准备消息,这样临时成员集合中的全部节点均可以接收到预准备消息;其中,预准备消息中携带主节点的签名。预准备消息可以是形如<PRE-PREPARE,v,c,s,batch>的消息,其中,PRE-PREPARE为消息类型标识、v表示当前视图、c标识主节点存储的系统配置编号、s为当前共识提议的编号、batch为共识提议。
区块链网络中的从节点,也即主节点维护的系统配置中的成员节点集合中除主节点以为的其他节点,在接收到预准备消息后,针对该共识提议中的成员加入指令,将该成员加入指令中的成员节点序号加入到本地的临时成员集合中,并向本地临时成员集合中的节点广播针对所述共识提议的准备消息;其中,准备消息中携带该从节点的签名,准备消息可以是形如<PREPARE,v,c,s,h(batch)>的消息,其中,PREPARE为消息类型标识、h(batch)为对共识提议的hash值。
可以理解的是区块链网络的全部从节点均会执行上述操作,即全部从节点在接收到预准备消息后均会发出针对该共识提议的准备消息。
任一节点包括主节点或从节点,在接收到本地系统配置的成员节点集合中2/3成员节点广播的准备消息后,将接收到的准备消息的签名作为该共识提议的证明进行存储,并广播针对所述共识提议的承诺消息;所述承诺消息中携带所述节点的签名,其中,承诺消息可以是形如<COMMIT,v,c,s,δ>的消息,其中,COMMIT为消息类型标识、δ也表示对共识提议的hash值。
由于在本说明书中,区块链网络中的恶意节点小于全部节点1/3,因此,在2/3成员节点广播的针对所述共识提议的准备消息后,可以认为是正确节点发送的准备消息,因此可以广播针对所述共识提议的承诺消息,并在承诺消息中存储自身的签名信息,同时将接收到的准备消息的签名作为该共识提议的证明进行存储。
另外,任一从节点可能因为网络延迟等原因未接收到2/3成员节点广播的针对所述共识提议的准备消息,但是接收到了本地系统配置的成员节点集合中1/3成员节点广播的针对所述共识提议的承诺消息,则也说明超过恶意节点数量的节点广播了该承诺消息,可以认为该承诺消息是正确节点发出的,因此从节点也可以发送针对所述共识提议的承诺消息。
从节点在接收到当前配置中超过2/3成员节点的承诺消息后,确定针对该共识提议达成共识,执行所述共识提议。
另外,当信息存储节点为区块链网络外的指定节点时,区块链网络中任一成员节点在确定针对共识提议达成共识后,会将共识消息发送给所述信息存储节点,以使所述信息存储节点更新本地的系统配置信息以及系统配置历史信息。
具体的,区块链网络中的成员节点在每次共识完成后,会将承诺消息额外发送给该信息存储节点,由信息存储节点根据接收到的承诺消息,对本地维护的配置信息进行更新,并对系统配置历史信息进行更新,其中该信息存储节点也可以是在接收到2/3成员节点发送的承诺消息后,对本地维护的配置信息进行更新,同时对系统配置历史信息进行更新。
如图4所示,为本说明书提出的对于常规指令进行共识过程的示意图,图中c为不为区块链网络中的节点,即指令发起节点,其向区块链网络中的至少部分成员节点广播指令,如图4中,其向成员节点0发送指令,成员节点0为主节点,其向其他成员节点,即节点1、2和3发送pre-prepare消息(预准备消息),图中节点3为恶意节点,节点0、1、2为正确节点,因此节点3接收到消息后不发送prepare消息(准备消息),节点1、节点2向区块链网络中的其他节点广播prepare消息,节点0、节点1、节点2在接收到足够数量的prepare消息后,发送commit消息(承诺消息),在接收到足够数量的commit消息后,确定针对该共识提议达成共识向指令发起节点返回执行结果,即reply消息。
可以理解的是,图4所描述的是对于常规指令的共识示意图,对于成员配置指令的共识过程部分如图4所示,具体区别可以参照下文。
在一个实施例中,任一从节点,在接收到主节点发送的预准备消息后,针对共识提议中的成员加入指令,将成员节点序号加入到临时成员组后,在该成员加入指令中携带的系统配置编号小于本地系统配置编号的情况下,可以向该成员节点序号对应的指令发起节点发送本地系统配置信息以及系统配置历史信息。例如,其可以向指令发起节点发送形如<CONF,c,Mc,chist>,其中c和Mc是当前的系统配置信息,chist为系统配置历史信息,CONF为消息类型标识。
即如果该成员加入指令中携带的系统配置编号小于本地系统配置编号,则说明该指令发起节点的系统配置编号未更新,因此需要将配置历史信息发送至该成员节点序号,即该指令发起节点。
所述指令发起节点在接收到该系统配置信息以及系统配置历史信息后,可以根据该配置信息对本地系统配置信息进行更新。考虑到系统配置信息的安全性和可信性,指令发起节点可以对系统配置信息进行验证,在验证通过后,再根据该系统配置信息对本地系统配置信息进行更新。具体的可以根据系统配置历史信息对该系统配置信息进行验证,其中,该系统配置历史信息为目标共识提议组成的集合,目标共识提议为包括成员加入指令或成员退出指令的共识提议。即该系统配置历史信息中记录有全部成员加入指令或成员退出指令。另外,由于在共识过程中,各个节点存储了共识提议的证明,因此可以直接将目标共识提议的证明也作为系统配置历史信息的一部分发给指令发起节点,指令发起节点基于所述系统配置历史信息中的各个证明对各个目标提议进行验证,在对全部目标提议验证通过的情况下,确定所述系统配置历史信息是正确且安全的,又由于该系统配置信息是基于该系统配置历史信息演进而来的,因此可以确定该系统配置信息通过验证。
如图5所示,为本说明书提出的一种系统配置历史信息的结构示意图,其中,系统配置历史信息中包括三个目标共识提议,分别为共识提议1、共识提议3,共识提议7,每个目标共识提议中均包含成员加入指令或成员退出指令,且由于区块链网络在基于目标共识提议进行共识和处理后,会对系统配置编号进行更新,因此各个目标提议对应的系统配置编号是递增的,例如共识提议1对应系统配置编号为1,共识提议3对应系统配置编号为2,共识提议7对应系统配置编号为3,指令发起节点在基于每个目标共识提议对应的证明分别对系统配置历史信息中各个目标共识提议进行验证后,可以确定该系统配置历史信息是正确的,而且该系统配置历史中记录的最新共识提议7的系统配置编号3即为当前的系统配置编号、当前的系统配置信息中的成员节点集合也是基于该系统配置历史信息中的目标共识提议演进而来的,因此,在确定该系统配置历史信息通过验证的情况下,即可以确定该获取的系统配置信息通过验证。
进而可以基于系统配置信息对本地系统配置信息进行更新。
结合上述描述的内容,在上述S202中,区块链网络中任一节点具体可以是在针对所述共识提议达成共识后,针对所述共识提议中的任一成员加入指令,将所述节点接入指令中的成员节点序号加入到本地维护的系统配置信息中的成员节点集合中;针对所述共识提议中的任一成员退出指令,将所述成员退出指令中的成员节点序号,从到本地维护的系统配置信息中的成员节点集合中移除;将系统配置编号进行更新,如将系统配置编号加1。
另外在上述S202之后,在该共识提议中包括成员加入指令或成员退出指令的情况下,还需要将该共识提议添加到系统配置历史信息中,以对系统配置历史信息进行更新。并且还需要在对全部编号低于该提议的共识提议都完成共识后,向所述共识提议中包括的成员加入指令对应的指令发起节点返回成员配置处理结果,即向成员配置指令的指令发起节点返回该成员配置处理结果。
该指令的发起节点在接收到2/3成员节点发送的配置处理结果后,可以确定指令执行完毕,并确定本地加入到区块链网络。
例如,各个成员节点可以在对某个共识提议达成共识,且该共识提议中包括成员加入指令时,对全部编号低于该提议的共识提议都完成共识后,向指令发起节点返回形如<HISTORY,s,h,C,P>的消息,其中,HISTORY为消息类型标识,s为共识提议的编号,h为共识提议的hash值,C为本地最新检查点,P为本地存储的序号高于C中全部共识提议的证明。
对于指令发起节点,其在收到2/3成员节点发送的<HISTORY,s,h,C,P>的消息后,确定本地加入区块链网络,并参与区块链网络后续的共识过程。
另外,为了提升指令发起节点加入区块链网络的效率,其也可以在确定包括本地发送的成员加入指令的共识提议已被达成共识,但还未收到足够多,即还未收到即2/3成员节点的配置处理结果的情况下,就加入区块链网络并参与共识投票。
对于任一成员配置指令的指令发起节点,将共识提议的证明进行存储后,若所述成员配置指令包含在所述共识提议中,且所述成员配置指令用于指示将所述指令发起节点从所述区块链网络退出,则确定本地从所述区块链网络退出。
即,如果该成员发起节点发送的成员配置指令,用于将该指令发起节点从区块链网络中退出,其在共识过程中如果收集到了共识提议的证明,且本地发送的成员配置指令在该共识提议中,则可以确定该共识提议已经被大部分节点所接收,因此可以从区块链网络退出,不再参与共识过程,或接收共识消息。
考虑到安全性问题,该成员节点也可以是在完成对该共识提议的共识处理后,且执行了该共识提议后,再从区块链网络退出。
即任一成员配置指令的指令发起节点,在确定共识提议被执行,且所述成员配置指令包含在所述共识提议中,其中,所述成员配置指令用于指示将所述指令发起节点从所述区块链网络退出,则确定本地从所述区块链网络退出。。
另外,在上述S202之后,任一节点针对共识提议中的任一常规指令,在本地执行完成后,若确定该指令中的系统配置编号与本地的系统配置编号相同,则向该指令的指令发起节点返回处理结果,如图4所示,该指令发起节点接收到2/3本地系统配置对应的成员节点发送的处理结果确定指令执行完毕。
若确定该指令中的系统配置编号小于本地的系统配置编号,则向该指令的指令发起节点返回处理结果以及系统配置信息,该指令发起节点接收到更新后的系统配置中的2/3成员节点发送的处理结果确定指令执行完毕,并根据系统配置信息对本地系统配置信息进行更新。同样的,为了确定系统配置信息的可信性,也可以将系统配置历史信息返回给指令发起节点,指令发起节点基于该系统配置历史信息对该系统配置信息进行验证。
在一个实施例中,考虑到在主节点宕机或作恶的情况下,主节点不发起提议、或发起错误的提议会导致各节点无法达成共识,因此需要切换主节点,即视图切换。
因此,任一从节点在检测到满足视图切换条件的情况下,可以向本地维护的成员节点集合中的成员节点广播视图切换指令;所述视图切换消息中携带目标系统配置编号。其中,视图切换条件可以是检测到足够长的时间内没有检测到主节点的心跳、或在指定的时间内没有完成共识过程。本说明书对此不进行限定,相关内容可以参照PBFT共识方法。
任一从节点在接收到其他节点广播的视图切换消息后,根据所述目标系统配置编号对该视图切换消息进行转发;
具体可以是:任一从节点在接收到其他节点广播的视图切换消息后,若确定该视图切换消息中的目标系统配置编号小于本地系统配置编号,且本地系统配置编号对应的成员节点多于该目标系统配置编号对应的成员节点,则向第一节点转发所述视图切换消息;其中所述第一节点包括在本地系统配置的成员节点集合中,但不在目标系统配置的成员节点集合中的节点;
如图6所示,例如,目标系统配置编号为MC’,本地系统配置编号为Mc,且本地系统配置编号对应的成员节点为A、B、C、D、E、F、G。目标系统配置编号对应的成员节点为A、B、C、D,则向E、F、G转发所述视图切换消息,以使未收到视图切换消息的E、F、G也可以接收到该视图切换消息从而进入视图切换状态。
若确定该视图切换消息中的目标系统配置编号大于本地系统配置编号,则将本地系统配置更新至所述目标系统配置编号对应的系统配置,在本地本轮已发送过视图切换消息的情况下,将该视图切换消息转发至第二节点,所述第二节点为包括在目标系统配置的成员节点集合中,但不在本地系统配置的成员节点集合中的节点;
在本地未发送过视图切换消息的情况下,将所述视图切换消息转发至目标系统配置编号对应的节点。
如图7所示,例如,目标系统配置编号为MC’,本地系统配置编号为MC,且目标系统配置编号对应的成员节点为A、B、C、D、E、F、G。本地系统配置编号对应的成员节点为A、B、C、D,则将本地系统配置更新后,如果本地未发送过针对当前主节点的视图切换的消息,则向A、B、C、D、E、F、G发送视图切换消息,如果发送过针对当前主节点的视图切换的消息,则向E、F、G发送视图切换消息,以使E、F、G也可以接收到视图切换的消息。
主节点在接收到本地维护的系统配置中成员节点集合中2/3的节点发送的视图切换消息的情况下,向本地维护的系统配置中的全部成员节点广播新视图消息,以使所述系统配置的成员节点集合中的节点进入新视图。可以理解的是,这里的主节点是指筛选出的新的主节点而非原来的主节点,例如可以是对各个节点排序,按序切换主节点,如果上一视图中节点1为主节点,则当前将节点2作为新的主节点。
即主节点在接收到超过足够多的成员节点广播的视图切换消息后,向成员节点广播新视图消息。当然为了确定新视图消息的合法性,各个从节点需要验证新视图消息,具体的验证过程也可以参照PBFT共识方法,这里不进行详述。
在一个实施例中,在视图切换条件还可以包括:在针对共识提议达成共识后,且所述共识提议中包括成员配置指令。即每当各个共识节点对本地系统配置信息进行更新后,则进行视图切换。采用这种方式的同时,由于重新选择出的主节点会向新视图中的各个节点返回新视图消息,其中携带新系统配置信息,各个节点可以根据主节点发送的系统配置信息更新本地的系统配置信息,因此,在上述共识过程中,各个成员节点在确定对共识提议达成共识后,可以不向本次更新新增加的节点返回系统配置历史消息,而是等到视图切换后,由主节点向新视图中的节点发送历史消息,同时由于每次有成员增减均进行视图切换,因此也不需要设立临时成员组,即不需要将共识消息发送给临时成员,进一步简化了对于成员配置指令的共识过程,提升了共识效率。
在一个实施例中,任一从节点在共识过程中,若确定满足视图切换条件,则获取系统配置信息。其中,该从节点获取系统配置消息的方式可以参照上文描述的内容,即可以向信息存储节点获取,本说明书对此不进行限定。
进一步比较获取的系统配置信息中的系统配置编号与本地维护的系统配置编号,若获取的系统配置编号与本地维护的系统配置编号相同,则执行视图切换过程,即可以向本地维护的成员节点集合中的成员节点广播视图切换指令。若获取的系统配置编号大于本地维护的系统配置编号,则进一步向获取的系统配置编号对应的成员节点集合中的成员节点广播历史数据获取消息<UPDATE,s,c,i>,该历史数据获取消息中携带该节点本地维护的系统配置编号c。
该成员节点集合中的任一成员节点,在接收到历史数据获取消息后,若确定其中携带的系统配置编号小于本地系统配置编号,且发送该历史数据获取消息的节点为本地维护的成员节点集合中的节点,则向该节点返回针对该历史数据获取消息的响应消息<RESULT,hist>,其中该响应消息中携带该成员节点执行的所有共识提议hist,即该消息中RESULT为消息类型标识,hist为该成员节点的执行历史,即该成员节点执行的全部共识提议。
该从节点在接收到该成员节点集合中1/3个成员节点返回的响应消息,且响应消息中携带的信息相同时,则根据响应消息对本地数据进行更新,即可以执行响应消息中的共识提议。
本实施例中,在任一从节点若确定满足视图切换条件,首先,先要判断是否是自身的网络故障原因,而非其他节点的问题,因此其需要获取系统配置信息,如果本地系统配置信息与获取的系统配置信息一致,则说明并非是自身的问题,直接开始视图切换过程。如果获取的系统配置编号高于本地系统配置编号,则说明自己本地的数据已经落后于系统中的其他节点,则向系统中的其他节点获取历史数据对本地数据进行更新,在更新后可以继续参与共识过程,采用上述方式可以增强各节点的数据一致性,同时也可以有效减少进行视图切换的次数,进而节省了网络带宽。
在目前通用的各种共识方法中,在成员节点动态变化的情况下,无法保证各个节点在共识阶段能够就共识提议顺利达成共识(因为各个节点维护的当前网络中的成员节点无法达成一致,也就无法接收到满足数量要求的共识消息),同理也无法保证在视图切换阶段可以顺利完成视图切换,即无法保证共识阶段以及视图切换阶段的活性。
本说明书中,引入系统配置信息以及系统配置历史信息,能够让各个节点获知当前区块链网络中的最新的成员节点信息,共识过程中可以保证系统配置中的正确节点都拥有一致的状态,因此,可以在成员节点动态变化时,保证视图切换阶段以及共识阶段的活性。
若一个正确节点提交了指令m,该正确节点可以根据有效的系统配置历史验证当前系统配置,从而判定是否有足够多的共识节点接收了m,关于m的共识是否达成。
上述两者结合,确保该正确节点可以获得关于m的正确回复。因此协议可实现一致接收性(consistent delivery),并在成员节点动态变化时,保证视图切换阶段以及共识阶段的安全性与活性。其中,一致接收性(consistent delivery)是指如果一个正确的节点提交一个指令m,那么这个节点一定会收到关于m的回复,且该回复与m被处理的那个系统配置中产生的回复一致。例如,某个节点在系统配置编号为c的区块链网络中发送了指令m,在系统配置编号为c’中的节点返回的回复,与系统配置编号为c中节点返回的回复是一致的。
为了更为清楚的了解本方案,下面从单侧的角度对本说明书提出的共识方法进行说明,对于指令发起节点而言,其主要执行的任务如下:
获取系统配置信息;
根据获取的系统配置信息对本地系统配置信息进行更新,并根据更新后的系统配置信息向区块链网络中的至少部分成员节点广播指令,以使区块链网络生成包括所述指令的共识提议并对所述共识提议进行共识处理;其中,指令包括成员配置指令或常规指令,成员配置指令用于指示将所述指令发起节点加入或退出所述区块链网络。
对于区块链网络中的主节点,其主要执行的任务包括:
在接收到指令发起节点发送的指令,且生成包括所述指令的共识提议后,协调其他节点对所述共识提议进行共识处理;其中所述指令包括成员配置指令或常规指令;
在针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的系统配置信息。
对于区块链网络中的从节点,其主要执行的任务包括:
在接收到指令发起节点发送的指令后,对该指令进行转发处理;其中所述指令包括成员配置指令或常规指令;
针对包括所述指令的共识提议进行共识处理;
在针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的系统配置信息。
下面从伪代码实现的角度,对本说明书提出的共识方法进行说明,本说明书中将上述共识方法命名为动态BFT共识方法Dyno。
在以下伪代码中,各字符所表示的含义如下:
pk:副本公钥、c:系统配置编号、fc:当前系统中1/3个节点、MC:系统配置成员节点集合、TM:临时成员节点集合、C:本地最新固定检查点、v:当前视图序号、s:共识提议的序号、P:本地存储的、序号高于C中最新指令的全部包的certificate,certificate:某共识提议被处理的有效证明或新提出指令的有效性证明,其中,针对某指令包即共识提议的certificate具体有两种可能:(1)某系统配置中超过2/3个节点对<PREPARE(准备),v,c,s,h(batch)>的消息签名;(2)某系统配置中超过1/3个节点对<COMMIT(保证),v,c,s,δ>的消息签名δ=h(batch)。PP:成员关系指令集合、ts:时间戳、o:指令发起节点提出的操作、re:指令执行结果、V:viewchange消息集合、O:指令集合、h(batch):batch(共识提议)的hash值,有时也简记为δ、Π:共识系统中全部可能的共识节点(包含尚未加入或已退出的共识节点)、Chist:系统配置历史。Chist定义为一组按系统配置递增顺序排列的包含成员关系指令的batch。具体说来,Chist是全部共识batch集合的子集,只包含那些含有至少一个成员关系指令的batch。Chist中每一个batch对应的系统配置是递增的,且间隔为1。每一个replica(共识节点)针对chist中的每个batch都存储相应的certificate并包含在chist中。因此一个Chist的有效性可以被任意已知系统初始状态的副本或客户验证。Deliver(<TYPE>):某成员关系指令被递送。在BFT协议中,这一事件代表某副本完成了一轮共识,本地commit该指令。
FailToDeliever(<TYPE>):某成员关系指令递送失败。在BFT协议中,这一事件代表在该指令被递送前,共识系统中发生了视图切换。
对于指令发起节点而言,其获取系统配置信息时的伪代码如下:
一种获取方式如下:
上述伪代码中,其发生条件与具体操作如下:
1)节点pi运行ObtainConfig()函数,则:
a)Pi向全部可能的共识节点广播<DISCOVER,c>消息,c是pi已知的最新系统配置。随后pi设置计时器,在计时器时间内持续等待。
b)若pi收到<CONF,c’,Mc’,chist’>消息,其中chist’是有效的系统配置历史,且c’>c,则pi更新其本地配置历史chist,系统配置c及配置成员集合Mc。
c)计时器结束时,返回当前系统配置c及配置成员集合Mc。
2)共识节点pi收到<DISCOVER,c’>消息,则向消息发送者返回<CONF,c,Mc,chist>消息。
另一种获取系统配置信息的方式如下:
上述伪代码中,其发生条件与具体操作如下:
节点pi运行ObtainConfig()函数,则函数返回nil,Π。其中,nil为空,Π为网络环境中全部节点。
又一种获取系统配置信息的方式如下:
上述伪代码中,其发生条件与具体操作如下:
1)共识节点pi运行ObtainConfig()函数,则:
a)Pi向配置管理器cMaster发送<QUERY,cid>消息,随后pi设置计时器,在计时器时间内持续等待。
b)若pi收到<CONF,c’,Mc’,chist’>消息,其中chist’是有效的系统配置历史,且c’>c,则pi更新其本地配置历史chist,系统配置c及配置成员集合Mc,函数返回c,Mc。
c)Pi发生超时,则再次运行ObtainConfig()函数。
2)cMaster收到<QUERY,j>消息,则向消息发送者返回<CONF,c,Mc,chist>消息。
3)cMaster收到2/3个<COMMIT,v,c,s,h(batch)>消息,则令chist←chist∪M,依照batch中包含的成员关系指令(如果有)更新系统配置c和Mc。
对于指令发起节点而言,其发送指令和接收成员节点返回消息后的处理方式的伪代码如下:
指令发起节点发起指令后,后续流程根据指令发起节点发出的指令不同分为以下3种:
1)加入指令:指令发起节点pi通过ObtainConfig()函数获得当前最新系统配置(ObtainConfig()是黑盒实现的,具体函数不确定。此处可简单设置为输出(0,Π)),向该系统配置中全部节点广播其签名的<SUBMIT,c,<JOIN,pk>>指令并设置计时器。pi在计时器时间内持续等待,有以下三种情况:
a)pi收到<CONF,c’,Mc’,chist’>,c<c’且chist’是有效的,则pi更新其系统配置。其中,CONF标识该指令类型,c’为该指令的发送方的系统配置编号,Mc’为该指令的发送方的系统配置成员节点集合,chist’为该指令的发送方的系统配置历史信息。
b)指令发起节点收到当前配置中超过2/3共识节点的<HISTORY,s,h,C,P>消息,状态传输完成。该客户加入当前系统配置,成为共识节点。计时器结束。
其中,<HISTORY,s,h,C,P>消息即为成员配置处理结果。HISTORY,标识该指令的类型,s用于标识共识提议,h为该共识提议的hash值,C为本地最新固定检查点,P为本地存储的,序号高于C中最新共识提议的全部提议的certificate,其中certificate为共识提议的证明。
c)超时,初始化运行上述过程。
2)离开指令:指令发起节点pi向当前系统配置中全部节点广播签名的<SUBMIT,c,<LEAVE,i>>指令并设置计时器,在计时器时间内持续等待,有以下两种情况:
a)指令发起节点Pi收集某指令集合共识提议batch的certificate,而且<REMOVE,i,m>∈batch,则pi离开共识系统,计时器结束。
b)超时,初始化运行上述过程。
3)常规指令:指令发起节点pi通过ObtainConfig()函数获得当前最新系统配置(ObtainConfig()是黑盒实现的,具体函数不确定。此处可简单设置为输出(0,Π);向该系统配置中全部节点广播其签名的指令m=<SUBMIT,c,<REQUEST,cid,o,ts>>,cid是用户id,o是操作,ts是时间戳;并设置计时器。pi在计时器时间内持续等待,有以下三种情况:
a)pi收到本地系统配置中1/3节点返回的<REPLY,c,re>,则确定指令执行结束。其中REPLY标识消息类型,re为执行结果。
b)pi收到本地系统配置中1/3节点返回的<REPLY,c’,re,chist’>,则确定指令执行结束。其中,chist’为指令发起方发送的系统配置历史信息。
对于区块链网络中的成员节点而言,其执行的伪代码如下:
用户指令处理过程:
上述伪代码中,区块链中任一节点pi收到包含用户cid指令的submit消息m=<SUBMIT,c’,<REQUEST,cid,o,ts>>后开始执行以下操作。此时有三种情况:
1)m已经被pi递送即处理了:则pi将包含当前状态的<REPLY,c,re,chist>消息发送给用户cid,re是最新执行结果。
2)m没有被pi递送,c=c’;则pi将m发送给当前主节点leader,并将m存在指令队列queue即指令池中。
3)m没有被pi递送,c>c’:则pi将m发送给当前系统配置中全部成员,并将m存在指令队列queue中。
若pi是leader,pi需要额外打包queue中的用户指令成batch,并向临时成员组TM中全部成员广播预准备消息<PRE-PREPARE,v,c,s,batch>,v是当前视图序号。
a)对任意queue中的常规指令,直接存入共识提议batch中。
b)对任意queue中的加入指令m=<SUBMIT,c’,<JOIN,pk>>,为公钥为pk的节点分配成员序号j,生成成员加入指令<ADD,j,m>,将其存入batch,并将客户j存入TM。
c)对任意queue中的加入指令m=<SUBMIT,c’,<LEAVE,j>>,生成节点移除指令<REMOVE,j,m>,将其存入batch。
共识过程:
上述伪代码中,区块链中节点pi收到有效的pre-prepare消息m=<PRE-PREPARE,v,c,s,batch>。后开始运行共识过程,pi随后进行如下操作:
1)对任意batch中的<ADD,j,m’>指令,pi将pj存入TM,如果c>c’,向pj发送<CONF,c,Mc,chist>消息。
2)向TM广播<PREPARE,v,c,s,h(batch)>消息并持续等待。有以下三种情况:
a)pi收到当前配置中超过2/3共识节点的<PREPARE,v,c,s,h(batch)>消息,将这些消息签名作为m的certificate存储下来,向TM广播<commit,v,c,s,δ>其中,δ为共识提议的hash值。
b)pi收到当前配置中超过1/3共识节点的<COMMIT,v,c,s,δ>消息,将这些消息签名作为batch的certificate存储下来,向TM广播<COMMIT,v,c,s,δ>
c)pi收到当前配置中超过2/3共识节点的<COMMIT,v,c,s,δ>消息,运行deliver(batch)。
在一个实施例中,上述共识过程中任一从节点,若确定超时,执行的共识方法本说明书命名为Dyno-A,其执行的伪代码如下:
上述伪代码中,区块链中节点pi若发生超时,首先运行ObtainConfig()函数获得当前最新系统配置c’,Mc’。(ObtainConfig()是黑盒实现的,具体函数不确定。随后pi设置计时器并持续等待,有以下三种情况:
a)c’=c,此时pi运行viewchange()
b)否则,pi向Mc’<UPDATE,s,c,i>消息并等待,若计时器时间内收到1/3个相同的<RESULT,hist>,则结束计时器,对hist中的全部指令运行deliver函数。
c)若pi发生超时,重新运行超时时的协议。
成员节点若收到<UPDATE,s,c’,j>消息,若pj∈Mc’且c>c’,pi向pj发送<RESULT,hist>消息。
指令执行过程:
上述过程中,副本pi运行指令执行协议始于其运行deliver(batch)。pi随后进行如下操作:
1)对任意batch中的指令m,m’=m=<SUBMIT,c’,<REQUEST,cid,o,ts>>,如果c>c’,向cid发送<REPLY,c,re,chist>消息,否则向cid发送<REPLY,c,re>消息。
2)如果batch中存在成员关系指令,更新pi本地系统配置c为c+1,并进行下述操作:
a)对任意queue中的加入指令m=<ADD,j,m>,令Mc=Mc+pj
b)对任意queue中的离开指令m=<REMOVE,j,m>,令Mc=Mc-pj
c)更新chist为chist∪batch
d)向Mc-Mc-1中的全部节点发送<HISTORY,s,h,C,P>消息,其中C是最新固定检查点;P是pi存储的,序号高于C中最新包即共识提议的全部包的certificate。此处要求副本pi将序号低于batch的全部指令区块都commit才发送History消息。
视图切换过程如下:
区块链网络中节点pi运行视图切换过程有三种情况:
1)pi在发生超时时(即它在足够长的时间内没有递送新消息)或在接收到至少1/3个节点发送的有效的视图切换消息时触发视图切换指令。
此时,pi更新其视图v=v+1,并向Mc广播m=m’=<VIEW-CHANGE,v,c,C,P,PP,i>其中,PP为成员关系指令集合。
2)Pi收到m’=<VIEW-CHANGE,v,c’,C,P,PP,j>消息:
若c’<c,pi将这一消息转发给Mc-Mc’中的全部副本。
若c’>c,pi更新其系统配置c与M,随后有两种情况:若pi在当前轮发送过视图切换消息,则额外将其视图切换消息发送给Mc-Mc’中全部节点,或者,若pi未发送过视图切换消息,将发送视图切换消息给Mc的中全部节点。
3)Pi收到当前系统配置中超过2/3的<VIEW-CHANGE,v,c’,C,P,j>消息,且pi是这些消息中最新系统配置中的领导人,则pi将向Mc所有副本发送<NEW-VIEW,v,c,V,O>消息,并进入新视图。
可以理解的是,本说明书提出的共识方法不仅可以应用到区块链网络中,还可以应用到其他应用场景中,如,有固定数量服务器节点的系统中,用于系统恢复和重新配置,当系统中某些服务器死机、出错或者受到了攻击时,或者系统需要维护时,可以通过上述共识方法创建一个新的节点或移除一个旧的节点来实现。
当在需要主动恢复时,也可以使用上述方式,例如当系统中的多个节点受病毒的影响无法去除掉时,可以采用上述方式引入新的节点,因为新的节点都是新的操作系统和环境,没有被病毒感染,也可以利用上述方式去除掉一些旧的节点。
在联盟链网络中,各个联盟成员在需要动态变化时,如A公司退出,B公司加入也可以采用上述共识方法,同样在混合链中也可以采用上述共识方法。
与前述一种基于区块链网络的共识方法相对应,本说明书还提供了一种基于区块链网络的共识系统,所述区块链网络中的任一共识节点在本地维护系统配置信息,所述系统配置信息包括所述区块链网络的成员节点集合以及用于标识系统配置的系统配置编号;所述系统包括:
指令发起节点,用于获取系统配置信息;
所述指令发起节点,还用于根据获取的系统配置信息对本地系统配置信息进行更新,并根据更新后的系统配置信息向区块链网络中的至少部分成员节点广播指令,以使区块链网络生成包括所述指令的共识提议并对所述共识提议进行共识处理;其中,指令包括成员配置指令或常规指令,成员配置指令用于指示将所述指令发起节点加入或退出所述区块链网络;
区块链网络中任一成员节点,用于在确定针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的系统配置信息。
在一个实施例中,指令发起节点,用于向信息存储节点发送系统配置获取请求;
信息存储节点,用于向指令发起节点返回系统配置信息。
在一个实施例中,所述信息存储节点包括区块链网络中的成员节点;
指令发起节点,具体用于向包括至少一个区块链网络成员节点的节点集合广播系统配置获取请求。
在一个实施例中,所述信息存储节点包括区块链网络中或区块链网络外一指定节点;所述指令发起节点,具体用于向所述指定节点发送系统配置信息获取请求。
在一个实施例中,所述信息存储节点,用于向指令发起节点返回获取请求响应消息,所述响应消息中携带系统配置信息以及系统配置历史信息。
在本实施例中,所述指令发起节点,用于根据该系统配置历史信息对获取的系统配置信息进行验证,在验证通过,且获取的系统配置信息中的系统配置编号大于本地维护的系统配置编号,则根据获取的系统配置信息对本地系统配置进行更新。
在一个实施例中,所述指令发起节点以预定义网络中的全部节点组成的集合作为系统配置信息中的成员节点集合,并以预定义值作为系统配置编号。
在一个实施例中,所述区块链网络中的任一从节点,用于在接收到该指令后,对该指令进行转发处理;
所述区块链网络中的主节点,用于在接收到所述指令,且生成包括所述指令的共识提议后,协调其他节点对所述共识提议进行共识处理。
在一个实施例中,所述指令中携带系统配置编号,用于标识所述指令所针对的系统配置;所述区块链网络中任一从节点,用于在本地未执行该指令的情况下,若确定该系统配置编号与本地存储的系统配置编号相同,则将所述成员配置指令转发至主节点;若确定该系统配置编号小于本地存储的系统配置编号,则将所述指令转发至本地维护的成员节点集合中的成员节点;在本地执行了该指令的情况下,将执行结果以及系统配置历史信息返回给该指令发起节点。
在一个实施例中,所述主节点,还用于在接收到指令后,将指令在本地指令池中进行存储;从本地指令池中获取预设数量的指令;针对所述预设数量的指令中的任一成员配置指令,若所述成员配置指令用于指示将发起所述指令的指令发起节点加入区块链网络,则为该指令发起节点分配成员节点序号,将所述成员节点序号以及所述成员配置指令组合为成员加入指令;若所述成员配置指令用于指示将发起所述指令的指令发起节点从区块链网络退出,则将该指令发起节点的成员节点序号以及所述成员配置指令组合为成员退出指令;针对所述预设数量的指令,将成员加入指令、成员退出指令和常规指令打包为共识提议。
在一个实施例中,所述主节点,还用于在为该指令发起节点分配成员序号后,将该指令发起节点加入到临时成员集合中;所述临时成员集合中包括本地系统配置中的全部成员节点;基于所述共识提议向临时成员集合中的节点广播预准备消息;
任一从节点,用于在接收到有效的预准备消息后,针对所述共识提议中的成员加入指令,将该成员加入指令中的成员节点序号加入到本地的临时成员集合中,并向本地临时成员集合中的节点广播针对所述共识提议的准备消息;所述准备消息中携带所述从节点的签名;
任一成员节点,用于在接收到本地系统配置的成员节点集合中2/3成员节点广播的针对所述共识提议的准备消息后,将接收到的准备消息的签名作为该共识提议的证明进行存储,并广播针对所述共识提议的承诺消息,或,在接收到本地系统配置的成员节点集合中1/3成员节点广播的针对所述共识提议的承诺消息后,将接收到的承诺消息的签名作为该共识提议的证明进行存储,并广播针对所述共识提议的承诺消息;其中,所述承诺消息中携带所述节点的签名;在收到本地系统配置的成员节点集合中2/3成员节点广播的针对所述共识提议的承诺消息后,确定针对所述共识提议达成共识,执行所述共识提议。
在一个实施例中,任一从节点还用于,将成员加入指令中的成员节点序号加入到临时成员组后,在成员加入指令中携带的系统配置编号小于本地系统配置号的情况下,向该成员节点序号对应的指令发起节点发送本地系统配置信息以及系统配置历史信息;
所述指令发起节点,还用于在接收到该系统配置信息以及系统配置历史信息后,根据该系统配置历史信息对接收到的系统配置信息进行验证,并在验证通过后,根据接收到的系统配置历史信息对本地系统配置信息进行更新;所述系统配置历史信息为目标共识提议组成的集合,其中,目标共识提议为包括成员加入指令或成员退出指令的共识提议。
在一个实施例中,所述系统配置历史信息中包括每个目标共识提议的证明;
所述指令发起节点,具体用于基于所述系统配置历史信息中的证明对目标提议进行验证,在对全部目标提议验证通过的情况下,确定所述系统配置历史信息以及所述系统配置信息通过验证。
在一个实施例中,区块链网络中任一节点,用于在针对所述共识提议达成共识后,针对所述共识提议中的任一成员加入指令,将所述成员加入指令中的成员节点序号加入到本地维护的系统配置信息中的成员节点集合中;针对所述共识提议中的任一成员退出指令,将所述成员退出指令中的成员节点序号,从到本地维护的系统配置信息中的成员节点集合中移除;将系统配置编号进行更新。
在一个实施例中,区块链网络中任一节点,还用于将所述共识提议添加到系统配置历史信息中;向所述共识提议中包括的成员配置指令对应的发起节点返回成员配置处理结果;其中,所述成员配置指令用于指示将所述指令的指令发起节点加入到区块链网络中;
任一成员配置指令的指令发起节点,还用于在接收到2/3成员节点发送的配置处理结果后,可以确定该指令执行完毕,确定本地加入所述区块链网络。
在一个实施例中,任一成员配置指令的指令发起节点,还用于在共识过程中将共识提议的证明进行存储后,若所述成员配置指令包含在所述共识提议中,其中,所述成员配置指令用于指示将所述指令发起节点从所述区块链网络退出,则确定本地从所述区块链网络退出。
在一个实施例中,任一成员配置指令的指令发起节点,还用于在确定共识提议被执行,且所述成员配置指令包含在所述共识提议中,其中,所述成员配置指令用于指示将所述指令发起节点从所述区块链网络退出,则确定本地从所述区块链网络退出。
在一个实施例中,区块链网络中任一节点,还用于针对所述共识提议中的任一常规指令,在本地执行完成后,若确定该指令中的系统配置编号与本地的系统配置编号相同,则向该指令的指令发起节点返回处理结果;若确定该指令中的系统配置编号小于本地的系统配置编号,则向该指令的指令发起节点返回处理结果以及系统配置历史信息。
在一个实施例中,任一从节点,还用于在检测到满足视图切换条件的情况下,获取系统配置信息;若获取的系统配置编号与本地维护的系统配置编号相同,则向本地维护的成员节点集合中的成员节点广播视图切换指令;若获取的系统配置编号大于本地维护的系统配置编号,则向获取的系统配置编号对应的成员节点集合中的成员节点广播历史数据获取消息;其中,所述历史数据获取消息中携带本地维护的系统配置编号;
所述成员节点集合中的任一成员节点,还用于在接收到历史数据获取消息后,若确定其中携带的系统配置编号小于本地系统配置编号,且发送该历史数据获取消息的节点为本地维护的成员节点集合中的节点,则向该节点返回针对该历史数据获取消息的响应消息;其中,响应消息中携带该成员节点执行的所有共识提议;
该从节点,还用于在接收到该成员节点集合中1/3个成员节点返回的响应消息,且响应消息中携带的信息相同时,则根据响应消息对本地数据进行更新。
在一个实施例中,任一从节点,还用于在检测到满足视图切换条件的情况下,向本地维护的成员节点集合中的成员节点广播视图切换指令;所述视图切换消息中携带目标系统配置编号;在接收到其他节点广播的视图切换消息后,根据所述目标系统配置编号对该视图切换消息进行转发;
主节点,还用于在接收到本地维护的系统配置的成员节点集合中2/3的节点发送的视图切换消息的情况下,向本地维护的系统配置的全部成员节点广播新视图消息,以使所述系统配置的成员节点集合中的节点进入新视图。
在一个实施例中,任一从节点,还用于在接收到其他节点广播的视图切换消息后,若确定该视图切换消息中的目标系统配置编号小于本地系统配置编号,且本地系统配置编号对应的成员节点多于该目标系统配置编号对应的成员节点,则向第一节点转发所述视图切换消息;其中所述第一节点包括在本地系统配置的成员节点集合中,但不在目标系统配置的成员节点集合中的节点;若确定该视图切换消息中的目标系统配置编号大于本地系统配置编号,则将本地系统配置更新至所述目标系统配置编号对应的系统配置,在本地本轮已发送过视图切换消息的情况下,将该视图切换消息转发至第二节点,所述第二节点为包括在目标系统配置的成员节点集合中,但不在本地系统配置的成员节点集合中的节点;在本地本轮未发送过视图切换消息的情况下,将所述视图切换消息转发至目标系统配置编号对应的全部节点。
在一个实施例中,所述视图切换条件包括在针对共识提议达成共识后,且所述共识提议中包括成员配置指令。
如图8所示,与前述一种基于区块链网络的共识方法相对应,本说明书还提供了一种基于区块链网络的共识装置,应用于指令发起节点,所述区块链网络中的任一共识节点在本地维护系统配置信息,所述系统配置信息包括所述区块链网络的成员节点集合以及用于标识系统配置的系统配置编号;所述装置包括:
获取模块810,用于获取系统配置信息;
广播模块820,根据获取的系统配置信息对本地系统配置信息进行更新,并根据更新后的系统配置信息向区块链网络中的至少部分成员节点广播指令,以使区块链网络生成包括所述指令的共识提议并对所述共识提议进行共识处理;其中,指令包括成员配置指令或常规指令,成员配置指令用于指示将所述指令发起节点加入或退出所述区块链网络。
如图9所示,与前述一种基于区块链网络的共识方法相对应,本说明书还提供了一种基于区块链网络的共识装置,应用于区块链网络中的从节点,所述区块链网络中的任一共识节点在本地维护系统配置信息,所述系统配置信息包括所述区块链网络的成员节点集合以及用于标识系统配置的系统配置编号;所述装置包括:
转发模块910,用于在接收到指令发起节点的发送的指令后,对该指令进行转发处理;其中所述指令包括成员配置指令或常规指令;
共识模块920,用于针对包括所述指令的共识提议进行共识处理;
更新模块930,用于在针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的系统配置信息。
如图10所示,与前述一种基于区块链网络的共识方法相对应,本说明书还提供了一种基于区块链网络的共识装置,应用于区块链网络中的主节点,所述区块链网络中的任一共识节点在本地维护系统配置信息,所述系统配置信息包括所述区块链网络的成员节点集合以及用于标识系统配置的系统配置编号;所述装置包括:
共识模块1110,用于在接收到指令发起节点的发送的指令,且生成包括所述指令的共识提议后,协调其他节点对所述共识提议进行共识处理;其中所述指令包括成员配置指令或常规指令;
更新模块1120,用于在针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的系统配置信息。
上述装置中各个部件的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现前述的方法。该方法至少包括上述指令发起节点、区块链网络中的从节点或区块链网络中的主节点所执行的方法。
图11示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(CeNtral ProcessiNg UNit,中央处理器)、微处理器、应用专用集成电路(ApplicatioN Specific INtegrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read ONly Memory,只读存储器)、RAM(RaNdom AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述的方法。该方法至少包括上述指令发起节点、区块链网络中的从节点、或区块链网络中的主节点所执行方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(traNsitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。
Claims (17)
1.一种基于区块链网络的共识方法,其特征在于,所述区块链网络中的任一共识节点在本地维护系统配置信息,所述系统配置信息包括成员节点集合以及用于标识系统配置的系统配置编号;所述方法包括:
指令发起节点获取系统配置信息;
指令发起节点根据获取的系统配置信息对本地系统配置信息进行更新,并根据更新后的系统配置信息向区块链网络中的至少部分成员节点广播指令,以使区块链网络生成包括所述指令的共识提议并对所述共识提议进行共识处理;其中,所述指令包括成员配置指令或常规指令,成员配置指令用于指示将所述指令发起节点加入或退出所述区块链网络;
区块链网络中任一成员节点在确定针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的系统配置信息。
2.根据权利要求1所述的方法,其特征在于,所述指令发起节点获取系统配置信息,包括:
指令发起节点向信息存储节点发送系统配置获取请求;
信息存储节点向指令发起节点返回系统配置信息。
3.根据权利要求2所述的方法,其特征在于,所述信息存储节点包括区块链网络中的成员节点;
所述指令发起节点向信息存储节点发送系统配置获取请求,包括:
指令发起节点向包括至少一个区块链网络成员节点的节点集合广播系统配置获取请求。
4.根据权利要求2所述的方法,其特征在于,所述信息存储节点包括区块链网络中或区块链网络外一指定节点;
所述指令发起节点向信息存储节点发送系统配置获取请求,包括:
所述指令发起节点向所述指定节点发送系统配置信息获取请求。
5.根据权利要求4所述的方法,其特征在于,所述信息存储节点为区块链网络外一指定节点,所述方法还包括:
区块链网络中任一成员节点在确定针对所述共识提议达成共识后,将共识消息发送给所述信息存储节点,以使所述信息存储节点更新本地的系统配置信息以及系统配置历史信息。
6.根据权利要求2所述的方法,其特征在于,所述信息存储节点向指令发起节点返回系统配置信息,包括:
信息存储节点向指令发起节点返回获取请求响应消息,所述响应消息中携带系统配置信息以及系统配置历史信息。
7.根据权利要求6所述的方法,其特征在于,所述根据获取的系统配置信息对本地系统配置信息进行更新,包括:
根据该系统配置历史信息对获取的系统配置信息进行验证,若验证通过,且获取的系统配置信息中的系统配置编号大于本地维护的系统配置编号,则根据获取的系统配置信息对本地系统配置进行更新。
8.根据权利1所述的方法,其特征在于,所述指令发起节点获取系统配置信息,包括:
指令发起节点以预定义网络中的全部节点组成的集合作为系统配置信息中的成员节点集合,并以预定义值作为系统配置编号。
9.一种基于区块链网络的共识方法,其特征在于,所述区块链网络中的任一共识节点在本地维护系统配置信息,所述系统配置信息包括成员节点集合以及用于标识系统配置的系统配置编号;所述方法包括:
获取系统配置信息;
根据获取的系统配置信息对本地系统配置信息进行更新,并根据更新后的系统配置信息向区块链网络中的至少部分成员节点广播指令,以使区块链网络生成包括所述指令的共识提议并对所述共识提议进行共识处理;其中,指令包括成员配置指令或常规指令,成员配置指令用于指示将所述指令发起节点加入或退出所述区块链网络。
10.一种基于区块链网络的共识方法,其特征在于,所述区块链网络中的任一共识节点在本地维护系统配置信息,所述系统配置信息包括成员节点集合以及用于标识系统配置的系统配置编号;所述方法包括:
在接收到指令发起节点发送的指令后,对该指令进行转发处理;其中所述指令包括成员配置指令或常规指令;
针对包括所述指令的共识提议进行共识处理;
在针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的系统配置信息。
11.一种基于区块链网络的共识方法,其特征在于,所述区块链网络中的任一共识节点在本地维护系统配置信息,所述系统配置信息包括成员节点集合以及用于标识系统配置的系统配置编号;所述方法包括:
在接收到指令发起节点发送的指令,且生成包括所述指令的共识提议后,协调其他节点对所述共识提议进行共识处理;其中所述指令包括成员配置指令或常规指令;
在针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的系统配置信息。
12.一种基于区块链网络的共识系统,其特征在于,所述区块链网络中的任一共识节点在本地维护系统配置信息,所述系统配置信息包括所述区块链网络的成员节点集合以及用于标识系统配置的系统配置编号;所述系统包括:
指令发起节点,用于获取系统配置信息;
所述指令发起节点,还用于根据获取的系统配置信息对本地系统配置信息进行更新,并根据更新后的系统配置信息向区块链网络中的至少部分成员节点广播指令,以使区块链网络生成包括所述指令的共识提议并对所述共识提议进行共识处理;其中,指令包括成员配置指令或常规指令,成员配置指令用于指示将所述指令发起节点加入或退出所述区块链网络;
区块链网络中任一成员节点,用于在确定针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的系统配置信息。
13.一种基于区块链网络的共识装置,其特征在于,所述区块链网络中的任一共识节点在本地维护系统配置信息,所述系统配置信息包括成员节点集合以及用于标识系统配置的系统配置编号;所述装置包括:
获取模块,用于获取系统配置信息;
广播模块,根据获取的系统配置信息对本地系统配置信息进行更新,并根据更新后的系统配置信息向区块链网络中的至少部分成员节点广播指令,以使区块链网络生成包括所述指令的共识提议并对所述共识提议进行共识处理;其中,指令包括成员配置指令或常规指令,成员配置指令用于指示将所述指令发起节点加入或退出所述区块链网络。
14.一种基于区块链网络的共识装置,其特征在于,所述区块链网络中的任一共识节点在本地维护系统配置信息,所述系统配置信息包括成员节点集合以及用于标识系统配置的系统配置编号;所述装置包括:
转发模块,用于在接收到指令发起节点的发送的指令后,对该指令进行转发处理;其中所述指令包括成员配置指令或常规指令;
共识模块,用于针对包括所述指令的共识提议进行共识处理;
更新模块,用于在针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的系统配置信息。
15.一种基于区块链网络的共识装置,其特征在于,所述区块链网络中的任一共识节点在本地维护系统配置信息,所述系统配置信息包括成员节点集合以及用于标识系统配置的系统配置编号;所述装置包括:
共识模块,用于在接收到指令发起节点的发送的指令,且生成包括所述指令的共识提议后,协调其他节点对所述共识提议进行共识处理;其中所述指令包括成员配置指令或常规指令;
更新模块,用于在针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的系统配置信息。
16.一种计算机设备,其特征在于,包括存储器、处理器、通信接口及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如权利要求9至11任一项所述的方法。
17.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,该程序被处理器执行时实现如权利要求9至11任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210135089.7A CN114760198B (zh) | 2022-01-17 | 2022-01-17 | 一种基于区块链网络的共识方法、装置及系统 |
PCT/CN2022/111017 WO2023134160A1 (zh) | 2022-01-17 | 2022-08-09 | 一种基于区块链网络的共识方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210135089.7A CN114760198B (zh) | 2022-01-17 | 2022-01-17 | 一种基于区块链网络的共识方法、装置及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114760198A true CN114760198A (zh) | 2022-07-15 |
CN114760198B CN114760198B (zh) | 2023-03-24 |
Family
ID=82326130
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210135089.7A Active CN114760198B (zh) | 2022-01-17 | 2022-01-17 | 一种基于区块链网络的共识方法、装置及系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114760198B (zh) |
WO (1) | WO2023134160A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115334038A (zh) * | 2022-08-20 | 2022-11-11 | 信通院(江西)科技创新研究院有限公司 | 一种基于区块链的appid申请管理方法和系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107450981A (zh) * | 2017-05-31 | 2017-12-08 | 阿里巴巴集团控股有限公司 | 一种区块链共识方法及设备 |
CN108833081A (zh) * | 2018-06-22 | 2018-11-16 | 中国人民解放军国防科技大学 | 一种基于区块链的设备组网认证方法 |
WO2020011284A2 (en) * | 2019-09-05 | 2020-01-16 | Alibaba Group Holding Limited | System and method for adding node in blockchain network |
WO2020011283A2 (en) * | 2019-09-05 | 2020-01-16 | Alibaba Group Holding Limited | System and method for deleting node in blockchain network |
CN112286945A (zh) * | 2020-09-21 | 2021-01-29 | 杭州趣链科技有限公司 | 基于pbft算法的配置变更方法、系统、设备及介质 |
CN112837162A (zh) * | 2021-03-12 | 2021-05-25 | 中国工商银行股份有限公司 | 一种基于区块链的数据交互方法、节点及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11250021B2 (en) * | 2020-04-17 | 2022-02-15 | International Business Machines Corporation | Faster view change for blockchain |
-
2022
- 2022-01-17 CN CN202210135089.7A patent/CN114760198B/zh active Active
- 2022-08-09 WO PCT/CN2022/111017 patent/WO2023134160A1/zh unknown
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107450981A (zh) * | 2017-05-31 | 2017-12-08 | 阿里巴巴集团控股有限公司 | 一种区块链共识方法及设备 |
CN108833081A (zh) * | 2018-06-22 | 2018-11-16 | 中国人民解放军国防科技大学 | 一种基于区块链的设备组网认证方法 |
WO2020011284A2 (en) * | 2019-09-05 | 2020-01-16 | Alibaba Group Holding Limited | System and method for adding node in blockchain network |
WO2020011283A2 (en) * | 2019-09-05 | 2020-01-16 | Alibaba Group Holding Limited | System and method for deleting node in blockchain network |
CN111183625A (zh) * | 2019-09-05 | 2020-05-19 | 阿里巴巴集团控股有限公司 | 用于在区块链网络中删除节点的系统和方法 |
CN111480157A (zh) * | 2019-09-05 | 2020-07-31 | 阿里巴巴集团控股有限公司 | 用于在区块链网络中添加节点的系统和方法 |
CN112286945A (zh) * | 2020-09-21 | 2021-01-29 | 杭州趣链科技有限公司 | 基于pbft算法的配置变更方法、系统、设备及介质 |
CN112837162A (zh) * | 2021-03-12 | 2021-05-25 | 中国工商银行股份有限公司 | 一种基于区块链的数据交互方法、节点及系统 |
Non-Patent Citations (2)
Title |
---|
WENYU LI: "A Scalable Multi-Layer PBFT Consensus for Blockchain", 《IEEE TRANSACTIONS ON PARALLEL AND DISTRIBUTED SYSTEMS 》 * |
刘宇等: "检测型的联盟区块链共识算法d-PBFT", 《计算机应用》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115334038A (zh) * | 2022-08-20 | 2022-11-11 | 信通院(江西)科技创新研究院有限公司 | 一种基于区块链的appid申请管理方法和系统 |
CN115334038B (zh) * | 2022-08-20 | 2024-03-26 | 信通院(江西)科技创新研究院有限公司 | 一种基于区块链的appid申请管理方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN114760198B (zh) | 2023-03-24 |
WO2023134160A1 (zh) | 2023-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114070733B (zh) | 一种基于区块链网络的共识方法、装置及系统 | |
CN107888562B (zh) | 一种平行链接入互联链的数据验证和收发方法、节点及系统 | |
KR102469267B1 (ko) | 블록 체인 합의 방법, 어카운팅 노드 및 노드 | |
CN110049087B (zh) | 一种联盟链的可信度验证方法、系统、装置及设备 | |
CN113783935B (zh) | 一种拜占庭容错方法及装置 | |
US20230037932A1 (en) | Data processing method and apparatus based on blockchain network, and computer device | |
CN113794694B (zh) | 一种基于可靠广播的二元共识方法及装置 | |
CN109981279B (zh) | 一种区块链系统、通信方法、装置、设备及介质 | |
CN111163173B (zh) | 集群配置方法、装置、服务器及可读存储介质 | |
CN113810465B (zh) | 一种异步二元共识方法及装置 | |
CN112492016B (zh) | 一种跨进程可扩展的共识方法及系统 | |
CN114760198B (zh) | 一种基于区块链网络的共识方法、装置及系统 | |
CN111401904B (zh) | 联盟链中的共识方法和系统 | |
CN113794576B (zh) | 一种可再投票的二元共识方法及装置 | |
CN113259326B (zh) | 基于联盟链网络的共识优化方法、装置和计算机设备 | |
CN114374699A (zh) | 跨链交互方法和跨链交互的审计方法 | |
CN109936609B (zh) | 终端链式升级方法、装置及升级管理服务器 | |
CN113794566B (zh) | 一种可再投票的二元共识方法、装置、及存储介质 | |
CN108933681B (zh) | 一种云计算系统配置更新方法、控制中心及云计算节点 | |
CN111340491B (zh) | 一种松散耦合的区块链自主交易方法、装置和系统 | |
CN115314375A (zh) | 区块链网络跨域组网方法、设备、存储介质及程序产品 | |
CN113765671A (zh) | 一种区块链节点热重启的方法及装置 | |
CN113783946A (zh) | 一种基于门限签名的可再投票二元共识方法及装置 | |
WO2020037607A1 (zh) | 一种传输数据的方法和装置 | |
CN111190754A (zh) | 一种区块链事件通知方法及区块链系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40077147 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |