CN114070733B - 一种基于区块链网络的共识方法、装置及*** - Google Patents

一种基于区块链网络的共识方法、装置及*** Download PDF

Info

Publication number
CN114070733B
CN114070733B CN202210046656.1A CN202210046656A CN114070733B CN 114070733 B CN114070733 B CN 114070733B CN 202210046656 A CN202210046656 A CN 202210046656A CN 114070733 B CN114070733 B CN 114070733B
Authority
CN
China
Prior art keywords
instruction
system configuration
node
consensus
blockchain network
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.)
Active
Application number
CN202210046656.1A
Other languages
English (en)
Other versions
CN114070733A (zh
Inventor
段斯斯
张海滨
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shandong Blockchain Research Institute
Tsinghua University
Original Assignee
Shandong Blockchain Research Institute
Tsinghua University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shandong Blockchain Research Institute, Tsinghua University filed Critical Shandong Blockchain Research Institute
Priority to CN202210046656.1A priority Critical patent/CN114070733B/zh
Publication of CN114070733A publication Critical patent/CN114070733A/zh
Priority to PCT/CN2022/111013 priority patent/WO2023134159A1/zh
Application granted granted Critical
Publication of CN114070733B publication Critical patent/CN114070733B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/08Configuration management of networks or network elements
    • H04L41/0803Configuration setting
    • H04L41/0813Configuration setting characterised by the conditions triggering a change of settings
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/16Arrangements for providing special services to substations
    • H04L12/18Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3247Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (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所示,为一种***配置信息的具体实施例。
Figure 292281DEST_PATH_IMAGE001
表1
其中,***配置编号以1为步长递增,例如,当节点P5加入区块链网络后,各个区块链网络中的成员节点将本地配置信息更新为如表2所示的信息。
Figure 953201DEST_PATH_IMAGE002
表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 Initialization
2 c {current configuration}
3 Mc {membership}
4 Chist {configuration history}
5 as a client/new replica
6 func ObtainConfig()
7 broadcast <DISCOVER, c> to Π
8 start a timer ∆
9 upon <CONF, c’, Mc’, chist’>
10 if chist’ is valid and c’ > c
11 chist ← chist’
12 c ← c’
13 Mc ← Mc’
14 upon timeout(∆)
15 return c, Mc
16 as a replica
17 upon <DISCOVER, c’>
reply with <CONF, c, Mc, chist>
上述伪代码中,其发生条件与具体操作如下:
1)节点pi运行ObtainConfig()函数,则:
a)Pi向全部可能的共识节点广播<DISCOVER, c>消息,c是pi已知的最新***配置。随后pi设置计时器,在计时器时间内持续等待。
若pi收到<CONF, c’, Mc’, chist’>消息,其中chist’是有效的***配置历史,且c’>c,则pi更新其本地配置历史chist, ***配置c及配置成员集合Mc。
计时器结束时,返回当前***配置c及配置成员集合Mc。
共识节点pi收到<DISCOVER, c’>消息,则向消息发送者返回<CONF, c, Mc,chist>消息。
另一种获取***配置信息的方式如下:
1 Initialization
2 c {current configuration}
3 Mc {membership}
4 Chist {configuration history}
5 as a client/new replica
6 func ObtainConfig()
7 return nil, Π
上述伪代码中,其发生条件与具体操作如下:
节点pi运行ObtainConfig()函数,则函数返回nil, Π。其中,nil为空,Π为网络环境中全部节点。
又一种获取***配置信息的方式如下:
1 Initialization
2 c {current configuration}
3 Mc {membership}
4 Chist {configuration history}
5 as a client/new replica
6 func ObtainConfig()
7 send <QUERY, cid> to cMaster
8 start a timer ∆
9 upon <CONF, c’, Mc’, chist’>
10 if chist’ is valid and c’ > c
11 chist ← chist’
12 c ← c’
13 Mc ← Mc’
14 return c, Mc
15 upon timeout(∆)
16 return ObtainConfig()
17 as a configuration master
18 upon <QUERY, j>
19 send <CONF, c, Mc, chist> to cid
20 upon M = 2fc + 1< COMMIT, v, c, s, h(batch)>
21 chist ← chist ∪ M
update c and Mc
上述伪代码中,其发生条件与具体操作如下:
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。
对于指令发起节点而言,其发送指令和接收成员节点返回消息后的处理方式的伪代码如下:
1 Initialization
2 c {current configuration}
3 func submit()
4 to join {new replica}
5 c,Mc←ObtainConfig()
6 broadcast <SUBMIT, c, <JOIN, pk>> to Mc
7 start timer ∆
8 upon receiving <CONF,c’, Mc’ , chist’> {configuration notification}
9 if chist’ is valid and c’ > c
10 c ← c’
11 Mc ← Mc’
12 upon receiving 2fc + 1 <HISTORY, s, h, C, P>
13 stop ∆, complete the request
14 to leave {existing replica}
15 broadcast <SUBMIT, c, <LEAVE, i>> to Mc
16 start timer ∆
17 upon deliver(batch) where <REMOVE, j, m> ∈ batch
18 stop ∆, complete the request
19 to submit a regular request {client}
20 c, Mc ← ObtainConfig()
21 broadcast <SUBMIT, c, <REQUEST, cid, o, ts>> to Mc
22 start timer ∆
23 upon fc + 1 matching <REPLY, c, re> from Mc
24 stop ∆, complete the request
25 upon fc’ + 1 matching <REPLY, c’, re, chist’> from pj ∈ Mc’
26 stop ∆, complete the request
27 upon timeout(∆)
repeat submit()
指令发起节点发起指令后,后续流程根据指令发起节点发出的指令不同分为以下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’为指令发起方发送的***配置历史信息。
对于区块链网络中的成员节点而言,其执行的伪代码如下:
用户指令处理过程:
Initialization
C {configuration number}
M {members in the current configuration}
TM {temporary members in the consensus oracle}
chist {confiugration history}
1 events
2 upon receiving m = <SUBMIT, c’, <REQUEST, cid, o, ts>>
3 if m has been delivered
4 send <REPLY, c, re, chist> to client cid
5 else
6 if c = c’, forward m to leader
7 else if c > c’, forward m to Mc
8 add m to queue
9 as a leader
10 upon non-empty queue
11 batch ← regular requsts in queue
12 for each m = <SUBMIT, c’, <JOIN, pk>> in the queue
13 j ← AssignID()
14 batch ← batch ∪ <ADD, j, m>
15 TM ← TM ∪ {pj}
16 for each m = <SUBMIT, c’, <LEAVE, j>> in the queue
17 batch ← batch ∪ <REMOVE, j, m>
18 broadcast <PRE-PREPARE, v, c, s, batch> to TM
上述伪代码中,区块链中任一节点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。
共识过程:
Initialization
v {view number}
c {current configuration}
M {membership}
TM {temporary membership}
1 events
2 upon receiving a valid m =<PRE-PREPARE, v’, c’, s, batch>
3 if <ADD, j, m> ∈ batch
4 TM ← TM ∪ {pj}
5 if c > c’
6 send <CONF, c, Mc, chist> to pj
7 broadcast <PREPARE, v, c, s, h(batch)> to TM
8 upon receiving 2fc + 1 matching <PREPARE, v, c, s, δ>
9 store the certificate
10 broadcast <COMMIT, v, c, s, δ> to TM
11 upon receiving fc + 1 matching <COMMIT, v, c, s, δ>
12 store the certificate
13 broadcast <COMMIT, v, c, s, δ> to TM
14 upon receiving 2fc + 1 matching <COMMIT, v, c, s, δ>
15 deliver(batch) where h(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,其执行的伪代码如下:
1 upon timeout
2 c, Mc ← ObtainConfig()
3 if c’ = c
4 view-change()
5 else
6 broadcast <UPDATE, s, c, i> to Mc
7 start timer ∆
8 upon fc’ + 1 matching <RESULT, hist>
9 deliver requests in hist
10 upon <UPDATE, s, c’, j>
11 if pj ∈ Mc’ and c > c’
12 send <RESULT, hist> to pj {execution history greater than s}
上述伪代码中,区块链中节点pi若发生超时,首先运行ObtainConfig()函数获得当前最新***配置c’,Mc’。 (ObtainConfig()是黑盒实现的,具体函数不确定。随后pi设置计时器并持续等待,有以下三种情况:
a) c’=c,此时pi运行viewchange()
b)否则,pi向Mc’<UPDATE, s, c, i>消息并等待,若计时器时间内收到1/3个相同的 <RESULT, hist>,则结束计时器,对hist中的全部指令运行deliver函数。
若pi发生超时,重新运行超时时的协议。
成员节点若收到<UPDATE, s, c’, j>消息,若pj ∈ Mc’ 且 c > c’,pi向pj发送<RESULT, hist> 消息。
指令执行过程:
1 func deliver(batch)
2 for m = <SUBMIT, c’, <REQUEST, cid, o, ts>> in batch
3 if c > c’, send <REPLY, c, re, chist> to cid
4 else, send <REPLY, c, re> to cid
5 if there are membership requests
6 c ← c + 1
7 for <ADD, j, m> in batch
8 M ← M ∪ pj
9 for <REMOVE, j, m> in batch
10 M ← M – pj
11 send <HISTORY, s, h, C, P> to Mc/Mc−1
chist ← chist ∪ batch
上述过程中,副本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消息。
视图切换过程如下:
Initialization
v {view number}
c {configuration number}
1 as a replica
2 func view-change()
3 v ← v + 1
4 broadcast m’ = <VIEW-CHANGE, v, c, C, P, PP, i>
5 upon receiving m = <VIEW-CHANGE, v, c’, C, P, PP, j>
6 if c’ < c
7 send m to Mc/Mc’
8 if c’ > c and Verify(PP, P)
9 Mc ← Mc’
10 send <VIEW-CHANGE, v, c, C, P, PP, i> to Mc’/Mc
11 as the new leader
12 upon receiving Qc <VIEW-CHANGE, v, c’,C,P,j>
broadcast <NEW-VIEW,v,c,V,O>
区块链网络中节点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 (19)

1.一种基于区块链网络的共识方法,其特征在于,所述区块链网络中的任一共识节点在本地维护***配置信息,所述***配置信息包括成员节点集合以及用于标识成员节点集合的***配置编号;其中,在成员节点集合更新的情况下,该***配置编号以1为步长进行递增;所述方法包括:
指令发起节点向区块链网络中的至少部分成员节点广播携带***配置编号的指令;其中,所述指令包括成员配置指令或常规指令,成员配置指令用于指示将所述指令发起节点加入或移除所述区块链网络;
区块链网络中的任一从节点在本地未执行该指令的情况下,若确定该***配置编号与本地存储的***配置编号相同,则将所述成员配置指令转发至主节点;若确定该***配置编号小于本地存储的***配置编号,则将所述指令转发至本地维护的成员节点集合中的成员节点;区块链网络中的主节点在接收到所述指令,且生成包括所述指令的共识提议后,协调其他节点根据本地的***配置信息对所述共识提议进行共识处理;所述共识提议中包括成员配置指令和/或常规指令;
区块链网络中任一成员节点在确定针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的成员节点集合以及***配置编号将成员配置指令对应的指令发起节点加入或移除所述区块链网络,以在无需执行视图切换即在不打断常规指令共识过程的情况下,完成成员节点的加入或移除。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
主节点在接收到指令后,将指令在本地指令池中进行存储;
所述生成包括所述指令的共识提议,包括:
从本地指令池中获取预设数量的指令;
针对所述预设数量的指令中的任一成员配置指令,若所述成员配置指令用于指示将发起所述指令的指令发起节点加入区块链网络,则为该指令发起节点分配成员节点序号,将所述成员节点序号以及所述成员配置指令组合为成员加入指令;若所述成员配置指令用于指示将发起所述指令的指令发起节点从区块链网络退出,则将该指令发起节点的成员节点序号以及所述成员配置指令组合为成员退出指令;
针对所述预设数量的指令,将成员加入指令、成员退出指令和常规指令打包为共识提议。
3.根据权利要求2所述的方法,其特征在于,还包括:
在为该指令发起节点分配成员序号后,将该指令发起节点加入到临时成员集合中;所述临时成员集合中包括本地***配置中的全部成员节点;
所述协调其他节点根据本地的***配置信息对所述共识提议进行共识处理,包括:
基于所述共识提议向临时成员集合中的节点广播预准备消息;
任一从节点,在接收到有效的预准备消息后,针对所述共识提议中的成员加入指令,将该成员加入指令中的成员节点序号加入到本地的临时成员集合中,并向本地临时成员集合中的节点广播针对所述共识提议的准备消息;所述准备消息中携带所述从节点的签名;
任一成员节点,在接收到本地***配置的成员节点集合中2/3成员节点广播的针对所述共识提议的准备消息后,将接收到的准备消息的签名作为该共识提议的证明进行存储,并广播针对所述共识提议的承诺消息,或,在接收到本地***配置的成员节点集合中1/3成员节点广播的针对所述共识提议的承诺消息后,将接收到的承诺消息的签名作为该共识提议的证明进行存储,并广播针对所述共识提议的承诺消息;其中,所述承诺消息中携带所述节点的签名;
在收到本地***配置的成员节点集合中2/3成员节点广播的针对所述共识提议的承诺消息后,确定针对所述共识提议达成共识,执行所述共识提议。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
任一从节点,将成员加入指令中的成员节点序号加入到临时成员组后,在成员加入指令中携带的***配置编号小于本地***配置号的情况下,向该成员节点序号对应的指令发起节点发送本地***配置信息以及***配置历史信息;
所述指令发起节点在接收到该***配置信息以及***配置历史信息后,根据该***配置历史信息对接收到的***配置信息进行验证,并在验证通过后,根据接收到的***配置历史信息对本地***配置信息进行更新;所述***配置历史信息为目标共识提议组成的集合,其中,目标共识提议为包括成员加入指令或成员退出指令的共识提议。
5.根据权利要求4所述的方法,其特征在于,所述***配置历史信息中包括每个目标共识提议的证明;
所述根据该***配置历史信息对接收到的***配置信息进行验证包括:
基于所述***配置历史信息中的证明对目标提议进行验证,在对全部目标提议验证通过的情况下,确定所述***配置历史信息以及所述***配置信息通过验证。
6.根据权利要求2所述的方法,其特征在于,所述根据所述成员配置指令更新本地维护的成员节点集合以及***配置编号,包括:
区块链网络中任一节点在针对所述共识提议达成共识后,针对所述共识提议中的任一成员加入指令,将所述成员加入指令中的成员节点序号加入到本地维护的***配置信息中的成员节点集合中;
针对所述共识提议中的任一成员退出指令,将所述成员退出指令中的成员节点序号,从到本地维护的***配置信息中的成员节点集合中移除;
将***配置编号进行更新。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
区块链网络中任一节点将所述共识提议添加到***配置历史信息中;
向所述共识提议中包括的成员配置指令对应的发起节点返回成员配置处理结果;其中,所述成员配置指令用于指示将所述指令的指令发起节点加入到区块链网络中;
任一成员配置指令的指令发起节点在接收到2/3成员节点发送的配置处理结果后,可以确定该指令执行完毕,确定本地加入所述区块链网络。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
任一成员配置指令的指令发起节点,在共识过程中将共识提议的证明进行存储后,若所述成员配置指令包含在所述共识提议中,其中,所述成员配置指令用于指示将所述指令发起节点从所述区块链网络退出,则确定本地从所述区块链网络退出。
9.根据权利要求7所述的方法,其特征在于,所述方法还包括:
任一成员配置指令的指令发起节点,在确定共识提议被执行,且所述成员配置指令包含在所述共识提议中,其中,所述成员配置指令用于指示将所述指令发起节点从所述区块链网络退出,则确定本地从所述区块链网络退出。
10.根据权利要求8或9任一项所述的方法,其特征在于,所述方法还包括:
区块链网络中任一节点针对所述共识提议中的任一常规指令,在本地执行完成后,若确定该指令中的***配置编号与本地的***配置编号相同,则向该指令的指令发起节点返回处理结果;
若确定该指令中的***配置编号小于本地的***配置编号,则向该指令的指令发起节点返回处理结果以及***配置历史信息。
11.一种基于区块链网络的共识方法,其特征在于,所述区块链网络中的任一共识节点在本地维护***配置信息,所述***配置信息包括所述区块链网络的成员节点集合以及用于标识成员节点集合的***配置编号;其中,在成员节点集合更新的情况下,该***配置编号以1为步长进行递增;所述方法包括:向区块链网络中的至少部分成员节点广播携带***配置编号的指令,以使区块链网络中的任一从节点在本地未执行该指令的情况下,若确定该***配置编号与本地存储的***配置编号相同,则将成员配置指令转发至主节点;若确定该***配置编号小于本地存储的***配置编号,则将所述指令转发至本地维护的成员节点集合中的成员节点;区块链网络中的主节点在接收到所述指令,且生成包括所述指令的共识提议后,协调其他节点根据本地的***配置信息对所述共识提议进行共识处理;所述共识提议中包括成员配置指令和/或常规指令;区块链网络中任一成员节点在确定针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的成员节点集合以及***配置编号将成员配置指令对应的指令发起节点加入或移除所述区块链网络,以在无需执行视图切换即在不打断常规指令共识过程的情况下,完成成员节点的加入或移除。
12.一种基于区块链网络的共识方法,其特征在于,所述区块链网络中的任一共识节点在本地维护***配置信息,所述***配置信息包括成员节点集合以及用于标识成员节点集合的***配置编号;其中,在成员节点集合更新的情况下,该***配置编号以1为步长进行递增;所述方法包括:
在接收到指令发起节点发送的指令后,在本地未执行该指令的情况下,若确定该***配置编号与本地存储的***配置编号相同,则将成员配置指令转发至主节点;若确定该***配置编号小于本地存储的***配置编号,则将所述指令转发至本地维护的成员节点集合中的成员节点;
针对包括所述指令的共识提议根据本地的***配置信息进行共识处理;所述共识提议中包括成员配置指令和/或常规指令;
在针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的成员节点集合以及***配置编号将成员配置指令对应的指令发起节点加入或移除所述区块链网络,以在无需执行视图切换即在不打断常规指令共识过程的情况下,完成成员节点的加入或移除。
13.一种基于区块链网络的共识方法,其特征在于,所述区块链网络中的任一共识节点在本地维护***配置信息,所述***配置信息包括成员节点集合以及用于标识成员节点集合的***配置编号;其中,在成员节点集合更新的情况下,该***配置编号以1为步长进行递增;所述方法包括:
在接收到指令发起节点发送的指令,且生成包括所述指令的共识提议后,协调其他节点根据本地的***配置信息对所述共识提议进行共识处理;其中所述指令包括成员配置指令或常规指令;所述共识提议中包括成员配置指令和/或常规指令;
在针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的成员节点集合以及***配置编号将成员配置指令对应的指令发起节点加入或移除所述区块链网络,以在无需执行视图切换即在不打断常规指令共识过程的情况下,完成成员节点的加入或移除。
14.一种基于区块链网络的共识***,其特征在于,所述区块链网络中的任一共识节点在本地维护***配置信息,所述***配置信息包括成员节点集合以及用于标识成员节点集合的***配置编号;其中,在成员节点集合更新的情况下,该***配置编号以1为步长进行递增;所述***包括:
指令发起节点,用于向区块链网络中的至少部分成员节点广播携带***配置编号的指令;其中,所述指令包括成员配置指令或常规指令,成员配置指令用于指示将所述指令发起节点加入或移除所述区块链网络;
区块链网络中的任一从节点,在本地未执行该指令的情况下,若确定该***配置编号与本地存储的***配置编号相同,则将所述成员配置指令转发至主节点;若确定该***配置编号小于本地存储的***配置编号,则将所述指令转发至本地维护的成员节点集合中的成员节点;
区块链网络中的主节点,用于在接收到所述指令,且生成包括所述指令的共识提议后,协调其他节点根据本地的***配置信息对所述共识提议进行共识处理;所述共识提议中包括成员配置指令和/或常规指令;
区块链网络中任一节点,用于在确定针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的成员节点集合以及***配置编号将成员配置指令对应的指令发起节点加入或移除所述区块链网络,以在无需执行视图切换即在不打断常规指令共识过程的情况下,完成成员节点的加入或移除。
15.一种基于区块链网络的共识装置,其特征在于,所述区块链网络中的任一共识节点在本地维护***配置信息,所述***配置信息包括成员节点集合以及用于标识成员节点集合的***配置编号;其中,在成员节点集合更新的情况下,该***配置编号以1为步长进行递增;所述装置包括:
获取模块,用于获取***配置信息;
广播模块,根据获取的***配置信息对本地***配置信息进行更新,并根据更新后的***配置信息向区块链网络中的至少部分成员节点广播携带***配置编号的指令,以使区块链网络中的任一从节点在本地未执行该指令的情况下,若确定该***配置编号与本地存储的***配置编号相同,则将成员配置指令转发至主节点;若确定该***配置编号小于本地存储的***配置编号,则将所述指令转发至本地维护的成员节点集合中的成员节点;区块链网络中的主节点在接收到所述指令,且生成包括所述指令的共识提议后,协调其他节点根据本地的***配置信息对所述共识提议进行共识处理;所述共识提议中包括成员配置指令和/或常规指令;区块链网络中任一成员节点在确定针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的成员节点集合以及***配置编号将成员配置指令对应的指令发起节点加入或移除所述区块链网络,以在无需执行视图切换即在不打断常规指令共识过程的情况下,完成成员节点的加入或移除。
16.一种基于区块链网络的共识装置,其特征在于,所述区块链网络中的任一共识节点在本地维护***配置信息,所述***配置信息包括成员节点集合以及用于标识成员节点集合的***配置编号;其中,在成员节点集合更新的情况下,该***配置编号以1为步长进行递增;所述装置包括:
转发模块,用于在接收到指令发起节点的发送的指令后,在本地未执行该指令的情况下,若确定该***配置编号与本地存储的***配置编号相同,则将所述成员配置指令转发至主节点;若确定该***配置编号小于本地存储的***配置编号,则将指令转发至本地维护的成员节点集合中的成员节点;其中所述指令包括成员配置指令或常规指令;
共识模块,用于针对包括所述指令的共识提议根据本地的***配置信息进行共识处理;所述共识提议中包括成员配置指令和/或常规指令;
更新模块,用于在针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的成员节点集合以及***配置编号将成员配置指令对应的指令发起节点加入或移除所述区块链网络,以在无需执行视图切换即在不打断常规指令共识过程的情况下,完成成员节点的加入或移除。
17.一种基于区块链网络的共识装置,其特征在于,所述区块链网络中的任一共识节点在本地维护***配置信息,所述***配置信息包括成员节点集合以及用于标识成员节点集合的***配置编号;其中,在成员节点集合更新的情况下,该***配置编号以1为步长进行递增;所述装置包括:
共识模块,用于在接收到指令发起节点的发送的指令,且生成包括所述指令的共识提议后,协调其他节点根据本地的***配置信息对所述共识提议进行共识处理;其中所述指令包括成员配置指令或常规指令;所述共识提议中包括成员配置指令和/或常规指令;
更新模块,用于在针对所述共识提议达成共识后,若所述共识提议中包括成员配置指令,则根据所述成员配置指令更新本地维护的成员节点集合以及***配置编号将成员配置指令对应的指令发起节点加入或移除所述区块链网络,以在无需执行视图切换即在不打断常规指令共识过程的情况下,完成成员节点的加入或移除。
18.一种计算机设备,其特征在于,包括存储器、处理器、通信接口及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如权利要求11至13任一项所述的方法。
19.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,该程序被处理器执行时实现如权利要求11至13任一项所述的方法。
CN202210046656.1A 2022-01-17 2022-01-17 一种基于区块链网络的共识方法、装置及*** Active CN114070733B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202210046656.1A CN114070733B (zh) 2022-01-17 2022-01-17 一种基于区块链网络的共识方法、装置及***
PCT/CN2022/111013 WO2023134159A1 (zh) 2022-01-17 2022-08-09 一种基于区块链网络的共识方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210046656.1A CN114070733B (zh) 2022-01-17 2022-01-17 一种基于区块链网络的共识方法、装置及***

Publications (2)

Publication Number Publication Date
CN114070733A CN114070733A (zh) 2022-02-18
CN114070733B true CN114070733B (zh) 2023-01-31

Family

ID=80231020

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210046656.1A Active CN114070733B (zh) 2022-01-17 2022-01-17 一种基于区块链网络的共识方法、装置及***

Country Status (2)

Country Link
CN (1) CN114070733B (zh)
WO (1) WO2023134159A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114070733B (zh) * 2022-01-17 2023-01-31 清华大学 一种基于区块链网络的共识方法、装置及***
CN114625802A (zh) * 2022-03-15 2022-06-14 北京广元科技有限公司 基于能源区块链的高并发交易优化方法和***
WO2024011373A1 (en) * 2022-07-11 2024-01-18 Huawei Cloud Computing Technologies Co., Ltd. Membership service for microsecond applications

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110727731A (zh) * 2019-09-05 2020-01-24 阿里巴巴集团控股有限公司 区块链网络中加入节点的方法和区块链***
CN110730204A (zh) * 2019-09-05 2020-01-24 阿里巴巴集团控股有限公司 区块链网络中删除节点的方法和区块链***
CN110768798A (zh) * 2019-10-24 2020-02-07 中国人民解放军国防科技大学 面向物联网的轻量级区块链共识方法、***及介质
CN111865608A (zh) * 2020-07-02 2020-10-30 南京邮电大学 一种应用于联盟链的共识机制运行方法
CN113821569A (zh) * 2021-09-30 2021-12-21 广州智链未来科技有限公司 一种区块链的共识方法及区块链

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111523899B (zh) * 2020-07-03 2021-09-07 支付宝(杭州)信息技术有限公司 联盟链的共识方法、数据校验方法、装置及***
CN114070733B (zh) * 2022-01-17 2023-01-31 清华大学 一种基于区块链网络的共识方法、装置及***

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110727731A (zh) * 2019-09-05 2020-01-24 阿里巴巴集团控股有限公司 区块链网络中加入节点的方法和区块链***
CN110730204A (zh) * 2019-09-05 2020-01-24 阿里巴巴集团控股有限公司 区块链网络中删除节点的方法和区块链***
CN110768798A (zh) * 2019-10-24 2020-02-07 中国人民解放军国防科技大学 面向物联网的轻量级区块链共识方法、***及介质
CN111865608A (zh) * 2020-07-02 2020-10-30 南京邮电大学 一种应用于联盟链的共识机制运行方法
CN113821569A (zh) * 2021-09-30 2021-12-21 广州智链未来科技有限公司 一种区块链的共识方法及区块链

Also Published As

Publication number Publication date
CN114070733A (zh) 2022-02-18
WO2023134159A1 (zh) 2023-07-20

Similar Documents

Publication Publication Date Title
CN114070733B (zh) 一种基于区块链网络的共识方法、装置及***
CN107888562B (zh) 一种平行链接入互联链的数据验证和收发方法、节点及***
WO2023016428A1 (zh) 一种拜占庭容错方法、装置、电子设备及存储介质
CN102118263A (zh) 配置信息的发布方法及***
US20230037932A1 (en) Data processing method and apparatus based on blockchain network, and computer device
CN110597918B (zh) 一种账户管理方法、装置及计算机可读存储介质
CN113794694B (zh) 一种基于可靠广播的二元共识方法及装置
CN109173270B (zh) 一种游戏服务***和实现方法
CN113810465B (zh) 一种异步二元共识方法及装置
CN111163173B (zh) 集群配置方法、装置、服务器及可读存储介质
CN114760198B (zh) 一种基于区块链网络的共识方法、装置及***
CN111401904B (zh) 联盟链中的共识方法和***
CN113794576B (zh) 一种可再投票的二元共识方法及装置
CN111064813A (zh) 在区块链共识处理时进行处理消息同步的方法及装置
CN113259326B (zh) 基于联盟链网络的共识优化方法、装置和计算机设备
CN109936609B (zh) 终端链式升级方法、装置及升级管理服务器
CN114374699A (zh) 跨链交互方法和跨链交互的审计方法
CN113157450A (zh) 在区块链***中执行区块的方法及装置
CN107306289B (zh) 一种基于云计算的负载均衡方法及设备
CN113794566B (zh) 一种可再投票的二元共识方法、装置、及存储介质
WO2017000256A1 (zh) 一种定位方法及对应装置
CN111340491B (zh) 一种松散耦合的区块链自主交易方法、装置和***
CN115314375A (zh) 区块链网络跨域组网方法、设备、存储介质及程序产品
CN113783946A (zh) 一种基于门限签名的可再投票二元共识方法及装置
CN113765671A (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
GR01 Patent grant
GR01 Patent grant