CN113541968B - 共识方法、装置及区块链*** - Google Patents
共识方法、装置及区块链*** Download PDFInfo
- Publication number
- CN113541968B CN113541968B CN202111085505.9A CN202111085505A CN113541968B CN 113541968 B CN113541968 B CN 113541968B CN 202111085505 A CN202111085505 A CN 202111085505A CN 113541968 B CN113541968 B CN 113541968B
- Authority
- CN
- China
- Prior art keywords
- transaction
- node
- verification result
- blockchain system
- unverified
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic 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/3236—Cryptographic 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 using cryptographic hash functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Computer Security & Cryptography (AREA)
- Technology Law (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Economics (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Development Economics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
本申请实施例提供一种共识方法、装置及区块链***。其中,主节点直接在***中广播包括至少一个未验证交易的哈希值的交易哈希列表,以使随从节点和主节点同步对至少一个未验证交易进行验证,随从节点保存验证所得的第一验证结果以及至少一个未验证交易的第一哈希值。主节点则在完成验证后将所得的第二验证结果和至少一个未验证交易的第二哈希值携带在预准备消息中广播出去,以使随从节点基于第二哈希值查找第一验证结果,并在第二验证结果和查找到的第一验证结果相同时,广播准备消息,以进入后续的共识阶段,完成共识处理。如此,主节点和随从节点可以同步对本轮共识中需上链交易进行验证,加快了共识进程,提升了共识效率。
Description
技术领域
本申请涉及区块链技术领域,具体而言,涉及一种共识方法、装置及区块链***。
背景技术
实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)算法,可以在***中作恶节点少于三分之一的情况下,确保区块链***的正确性(例如,避免分叉)。在采用PBFT算法的区块链***中,每产生一个区块,都需经历一轮共识。每一轮共识是由区块发起者生成区块,并在***中广播,其他区块验证者会对区块进行验证,以完成共识流程。其中,区块发起者又可以称为“主节点(primary)”,其余区块验证者又可以称为“随从节点(backup)”。
每轮共识的主节点需要在本节点进行区块的验证,验证未完成后才能进行预准备(pre-prepare)消息的广播。随从节点在接收到主节点广播的预准备消息后,仍然要先进行区块的验证才能广播准备(prepare)消息,完成剩余共识流程。整个过程中,主节点和随从节点针对区块的验证是串行的,共识效率很差。
发明内容
本申请实施例提供了一种共识方法、装置及区块链***,用于解决将PBFT算法应用于区块链***时,由于主节点和随从节点按照串行方式进行区块验证所导致的共识效率差的问题。
根据本申请实施例的一个方面,提供了一种共识方法,应用于区块链***中的主节点,所述方法包括:
在所述区块链***中广播交易哈希(hash)列表,所述交易哈希列表包括至少一个未验证交易的哈希值,使所述区块链***中的随从节点接收所述交易哈希列表,基于所述交易哈希列表查找所述至少一个未验证交易,验证所述至少一个未验证交易得到第一验证结果,基于所述至少一个未验证交易得到第一哈希值,并保存所述第一验证结果和所述第一哈希值的对应关系;
基于所述交易哈希列表查找所述至少一个未验证交易,验证所述至少一个未验证交易得到第二验证结果,以及基于所述至少一个未验证交易得到第二哈希值;
在所述区块链***中广播预准备消息,所述预准备消息包括所述第二验证结果以及所述第二哈希值,使所述随从节点基于所述对应关系查找与所述第二哈希值对应的第一验证结果,若查找到的第一验证结果与所述第二验证结果相同,则在所述区块链***中广播准备消息,所述准备消息用于供所述主节点以及所述区块链***中的随从节点进行共识处理。
根据本申请实施例的另一个方面,提供了一种共识方法,应用于区块链***中的第一随从节点,所述区块链***还包括主节点和第二随从节点,所述第二随从节点是与所述第一随从节点不同的随从节点;所述方法包括:
接收所述主节点广播的交易哈希列表,所述交易哈希列表包括至少一个未验证交易的哈希值;
基于所述交易哈希列表查找所述至少一个未验证交易,验证所述至少一个未验证交易得到第一验证结果,基于所述至少一个未验证交易得到第一哈希值,并保存所述第一验证结果和所述第一哈希值的对应关系;
接收所述主节点广播的预准备消息,所述预准备消息包括所述主节点验证所述至少一个未验证交易得到的第二验证结果以及基于所述至少一个未验证交易得到的第二哈希值;
基于所述对应关系查找与所述预准备消息中的第二哈希值对应的第一验证结果,若查找到的第一验证结果与所述第二验证结果相同,则在所述区块链***中广播准备消息,所述准备消息用于供所述主节点以及所述区块链***中的随从节点进行共识处理。
根据本申请实施例的另一个方面,提供了一种共识装置,应用于区块链***中的主节点,所述装置包括广播模块和验证模块;
其中,广播模块用于在所述区块链***中广播交易哈希列表,所述交易哈希列表包括至少一个未验证交易的哈希值,使所述区块链***中的随从节点接收所述交易哈希列表,基于所述交易哈希列表查找所述至少一个未验证交易,验证所述至少一个未验证交易得到第一验证结果,基于所述至少一个未验证交易得到第一哈希值,并保存所述第一验证结果和所述第一哈希值的对应关系;
验证模块用于基于所述交易哈希列表查找所述至少一个未验证交易,验证所述至少一个未验证交易得到第二验证结果,以及基于所述至少一个未验证交易得到第二哈希值;
所述广播模块还用于在所述区块链***中广播预准备消息,所述预准备消息包括所述第二验证结果以及所述第二哈希值,使所述随从节点基于所述对应关系查找与所述第二哈希值对应的第一验证结果,若查找到的第一验证结果与所述第二验证结果相同,则在所述区块链***中广播准备消息,所述准备消息用于供所述主节点和所述区块链***中的随从节点进行共识处理。
根据本申请实施例的另一个方面,提供了一种共识装置,应用于区块链***中的第一随从节点,所述区块链***还包括主节点和第二随从节点,所述第二随从节点是与所述第一随从节点不同的随从节点;所述装置包括接收模块、验证模块以及验证结果比较模块;
其中,接收模块用于接收所述主节点广播的交易哈希列表,所述交易哈希列表包括至少一个未验证交易的哈希值;
验证模块用于基于所述交易哈希列表查找所述至少一个未验证交易,验证所述至少一个未验证交易得到第一验证结果,基于所述至少一个未验证交易得到第一哈希值,并保存所述第一验证结果和所述第一哈希值的对应关系;
所述接收模块还用于接收所述主节点广播的预准备消息,所述预准备消息包括所述主节点验证所述至少一个未验证交易得到的第二验证结果以及基于所述至少一个未验证交易得到的第二哈希值;
验证结果比较模块用于基于所述对应关系查找与所述预准备消息中的第二哈希值对应的第一验证结果,若所述第一验证结果与所述第二验证结果相同,则在所述区块链***中广播准备消息,所述准备消息用于供所述主节点和所述区块链***中的各随从节点进行共识处理。
根据本申请实施例的又一个方面,提供了一种区块链***,包括主节点、第一随从节点以及第二随从节点,第一随从节点是所述区块链***中的任意一个随从节点,第二随从节点是与所述第一随从节点不同的随从节点;
所述主节点用于在所述区块链***中广播交易哈希列表,所述交易哈希列表包括至少一个未验证交易的哈希值;
所述第一随从节点用于接收所述交易哈希列表,基于所述交易哈希列表查找所述至少一个未验证交易;验证所述至少一个未验证交易得到第一验证结果,基于所述至少一个未验证交易得到第一哈希值,并保存所述第一验证结果和所述第一哈希值的对应关系;
所述主节点还用于基于所述交易哈希列表查找所述至少一个未验证交易,验证所述至少一个未验证交易得到第二验证结果;基于所述至少一个未验证交易得到第二哈希值,并在所述区块链***中广播携带所述第二验证结果和所述第二哈希值的预准备消息;
所述第一随从节点还用于接收所述预准备消息,基于所述对应关系查找与所述预准备消息中的所述第二哈希值对应的第一验证结果,若查找到的第一验证结果与所述预准备消息中的第二验证结果相同,则在所述区块链***中广播准备消息,所述准备消息用于供所述主节点和所述区块链***中的各随从节点进行共识处理。
根据本申请实施例的再一个方面,提供了一种计算机可读存储介质,其上存储有程序代码,所述程序代码可被处理器调用执行以实现本申请上述实施例中任意一项提供的共识方法。
本申请实施例提供的方案中,主节点直接在区块链***中广播包括至少一个未验证交易的哈希值的交易哈希列表,以使随从节点和主节点同步对至少一个未验证交易进行验证,随从节点保存验证所得的第一验证结果以及至少一个未验证交易的第一哈希值。主节点则在完成验证后将所得的第二验证结果和至少一个未验证交易的第二哈希值携带在预准备消息中广播出去,以使随从节点基于第二哈希值查找第一验证结果,并在第二验证结果和查找到的第一验证结果相同时,广播准备消息,以进入后续的共识阶段,完成共识处理。如此,主节点和随从节点可以并行地对本轮共识中需上链交易进行验证,加快了共识进程,提升了共识效率。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为相关技术中的实用拜占庭容错算法的共识过程示意图;
图2为本申请实施例提供的一种区块链***的架构示意图;
图3为本申请实施例提供的一种共识方法的流程示意图之一;
图4为本申请实施例提供的共识方法的流程示意图之二;
图5为图4所示步骤S111的一种子步骤示意图;
图6为本申请实施例提供的共识方法的流程示意图之三;
图7为本申请实施例提供的区块链***的共识过程示意图;
图8为本申请实施例提供的区块链***的共识过程时序图;
图9为本申请实施例提供的一种共识装置的框图;
图10为本申请实施例提供的另一种共识装置的框图;
图11为本申请实施例提供的一种区块链节点的框架示意图。
具体实施方式
拜占庭将军问题提出后,有很多的算法被提出用以解决该问题。这类算法统称为拜占庭容错算法(Byzantine Fault Tolerance,BFT),PBFT算法是一种典型的拜占庭容错算法。
一个示例中,拜占庭***包括节点0、1、2和3。其中,节点3是拜占庭节点,拜占庭节点可以理解成恶意节点或故障节点。节点0、1和2是非拜占庭节点。拜占庭***中的每个节点可以称为replica(副本节点),用于提供副本复制服务。拜占庭***的每轮共识对应一个视图,每个视图包括主节点和多个从节点。一轮共识包括request(请求)、pre-prepare(预准备)、prepare(准备)、commit(确认)、reply(响应)共5个阶段。下面结合图1,对PBFT共识过程进行介绍。
1、在一轮共识开始前,首先需要指定一个区块验证者集合,其中包括多个区块验证者,每个区块验证者又可以称为随从节点或副本节点。然后,从区块验证者集合中选择一个区块发起者,区块发起者又可以称为主节点。选择区块发起者的规则是:使用当前视图序号(view number)与区块验证者集合中区块验证者的数量(backup number)做模运算,并将得到的结果作为目标索引,使用这个目标索引从区块验证者集合中选出一个区块验证者作为本轮共识的区块发起者。换言之,将具有前述目标索引的区块验证者确定为本轮共识(当前视图)的区块发起者。
值得说明的是,图1示出的是节点0为区块发起者(即主节点),而节点1、2、3均为区块验证者(即随从节点)的情况。还值得说明的是,当主节点故障或者从节点怀疑主节点有问题时,将会触发视图更换(view change),从而重新选择主节点,并进入新的视图。
2、主节点0接收客户端(client)发送的请求,生成区块,并在区块链***中广播预准备(pre-prepare)消息,然后进入准备(prepared)状态,等待收集第一额定数量的准备(prepare)消息。
3、随从节点1、2和3收到主节点0广播的pre-prepare消息并验证消息的正确性后,广播prepare消息,然后进入prepared状态,等待并收集第一额定数量的prepare消息。
4、非拜占庭节点0、1和2收到第一额定数量的prepare消息后,广播确认(commit)消息,然后进入确认(committed)状态。
5、非拜占庭节点0、1和2收到第二额定数量的commit消息后,确定达成本轮共识,向客户端返回reply(响应);否则启动视图更换(view change),更换区块发起者并重新开始共识。
值得说明的是,当在区块链***中应用上述PBFT算法时,client(客户端)角色可以被删除,在此情况下,区块链节点既充当副本节点,又充当client。相应地,上述5个阶段中的request阶段和reply阶段也可以省略,而是采用打包区块指令进行替代。换言之,主节点可以在每轮共识后,定时产生打包区块指令,从而自动开启一轮共识。
经研究发现,上述共识过程的缺陷是:每轮共识的主节点)需要在本节点对区块进行验证,验证完成后才能进行pre-prepare消息的广播。对应地,随从节点在接收到区块发起者广播的pre-prepare消息后,仍需进行区块的验证才能发出prepare消息,完成剩余共识流程。整个共识过程中,主节点和随从节点对于区块的验证是串行执行的,严重影响了共识的效率。
针对上述问题,本申请实施例提供了一种共识方法、装置及区块链***, 主节点直接在区块链***中广播包括至少一个未验证交易的哈希值的交易哈希列表,以使随从节点和主节点并行地对所述至少一个未验证交易进行验证,随从节点保存验证所得的第一验证结果以及至少一个未验证交易的第一哈希值。主节点则在完成验证后将所得的第二验证结果和至少一个未验证交易的第二哈希值携带在预准备消息中广播出去,以使随从节点基于第二哈希值查找第一验证结果,并在第二验证结果和查找到的第一验证结果相同时,广播准备消息,以进入后续的共识阶段,完成共识处理。如此,主节点和随从节点可以同步(也就是并行)对本轮共识中需上链交易进行验证,加快了共识进程,提升了共识效率。
值得说明的是,针对以上方法所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本申请针对上述问题所提出的解决方案,都应该是发明人在发明过程中对本申请做出的贡献。
为了使本申请实施例中的技术方案及优点更加清楚明白,以下结合附图对本申请的示例性实施例进一步的说明,显然,所描述的实施例仅是本申请的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
图2是本申请实施例提供的一种区块链***10的架构示意图,其中包括多个区块链节点,例如区块链节点100、101、102以及103。区块链***10中的区块链节点的数量为3f+1,其中f表示的是区块链***10中的拜占庭节点的数量,即恶意或故障节点的数量。换句话说,区块链***10中至少存在2f+1个非拜占庭节点,这些节点可以按照本申请实施例提供的共识方法进行每轮共识处理。区块链***10中的随从节点均为对等节点,两两之间可以通信。可以理解,本申请实施例中提及的区块链节点,例如可以是终端设备(如,平板电脑、笔记本电脑、个人计算机)或服务器,这里的服务器例如可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群,还可以是提供云计算、大数据等基础云计算服务的云服务器。本申请实施例对此没有限制。
图3为本申请实施例提供的一种共识方法的流程示意图,可以应用于图2所示的区块链***10。在一轮共识中,区块链***10中的多个区块链节点中的一者将被选为主节点(即区块链发起者),其余区块链节点则作为随从节点(即区块验证者)。为了便于理解,本实施例将以区块链节点100被选为主节点、区块链节点101、102和103作为随从节点为例,对本实施例提供的共识方法进行介绍,具体包括以下步骤。
S120,主节点在区块链***中广播交易哈希列表,所述交易哈希列表包括至少一个未验证交易的哈希值。
实施过程中,主节点(如区块链节点100)可以从本地交易池捞取需要打包进入区块的一个或多个交易的哈希值,所捞取的哈希值组成S120中的交易哈希列表。这里,需要打包进入区块的交易是指本轮共识需要上链的交易,主节点在对需要打包进入区块的交易进行验证之前,就将交易哈希列表广播到区块链***10中,基于此,本实施例将需要打包进入区块的交易称为“未验证交易”。
示例性地,本实施例中,交易哈希列表可以携带在pre-block(未验证区块)消息中广播出去,相应地,广播pre-block消息的阶段可以称为pre-block阶段。换句话说,本申请实施例提供的共识方法,在PBFT共识过程所包含的pre-prepare阶段、prepare阶段和commit阶段的基础上,增加了pre-block阶段。并且,在pre-prepare阶段,主节点广播的预准备消息与原PBFT共识过程中的预准备消息携带的内容是有所不同的。具体参照下文相关介绍。
主节点广播的pre-block消息可以被***10中的随从节点接收到。换言之,主节点在区块链***10中广播交易哈希列表,可以使得区块链***10中的随从节点作为第一随从节点执行下文描述的S140。
S140,区块链***中的第一随从节点接收所述交易哈希列表,基于所述交易哈希列表查找所述至少一个未验证交易,验证所述至少一个未验证交易得到第一验证结果,基于所述至少一个未验证交易得到第一哈希值,并保存所述第一验证结果和所述第一哈希值的对应关系。
值得说明的是,本实施例中,各个随从节点的处理流程是基本类似的。区块链***10中的任意一个随从节点均可以作为第一随从节点,并且当一个随从节点被视为第一随从节点时,其余随从节点均可被视为第二随从节点。例如,当以图2所示的区块链节点101为第一随从节点时,区块链节点102和103均可视为第二随从节点。又例如,当以图2所示的区块链节点102为第一随从节点时,区块链节点101和103均可视为第二随从节点。
第一随从节点接收到pre-block消息后,可以获得pre-block消息中的交易哈希列表,交易哈希列表中的每个哈希值对应一个未验证交易。举例来说,未验证交易tx-1与哈希值hs-1对应,表示对tx-1进行哈希计算,可以得到hs-1。
针对交易哈希列表中的每个哈希值,第一随从节点可以从本地交易池捞取该哈希值对应的未验证交易,如此可以得到本轮共识需要上链的各未验证交易的原始交易数据。第一随从节点可以将捞取的未验证交易拼接成交易列表,在本地发起对该交易列表发起验证,确定出其中的不合法交易,这里的不合法交易具体可以理解为超时交易、无效交易等。例如,可能由于区块链节点的性能问题,导致部分交易执行结果一致性出现问题,这些交易可以称为超时交易。又例如,可能出现某笔交易余额不足,导致该交易无法执行,则该条交易以及该条交易的源账户的后续交易都可以属于无效交易。
验证完成后,第一随从节点可以生成不合法交易的校验结果信息,进而得到第一验证结果,第一验证结果至少包括第一随从节点生成的所述不合法交易的校验结果信息。
第一随从节点还可以对本次捞取的各未验证交易进行哈希计算,得到第一哈希值。可以理解,第一哈希值是第一随从节点捞取的所有未验证交易整体的哈希值。然后,可以在本地保存第一哈希值和第一验证结果的对应关系,具体而言,可以以第一哈希值为键(key)、以第一验证结果为值(value)形成键值对,在本地保存该键值对。
S160,所述主节点基于所述交易哈希列表查找所述至少一个未验证交易,验证所述至少一个未验证交易得到第二验证结果;基于所述至少一个未验证交易得到第二哈希值,并在所述区块链***中广播携带所述第二验证结果和所述第二哈希值的预准备消息。
本实施例中,S160与S140可以是并行执行的。
实施过程中,主节点在广播pre-block消息后,再进入预准备阶段。在本实施例中,主节点在预准备阶段可以根据交易哈希列表中的每个哈希值,从本地交易池捞取对应的未验证交易的原始交易数据,并对所捞取的各个未验证交易进行验证。验证的具体流程与第一随从节点针对未验证交易的验证流程类似。
主节点在从所捞取的未验证交易中确定出不合法交易后,可以生成该不合法交易的校验结果信息,进而得到第二验证结果,其中,第二验证结果包括主节点生成的该不合法交易的校验结果信息。主节点还可以对所捞取的未验证交易整体进行哈希计算,得到第二哈希值。
然后,主节点可以在区块链***10中广播预准备消息,所述预准备消息包括第二验证结果和第二哈希值。该预准备消息可以被区块链***10中的随从节点接收到。换言之,主节点在区块链***10中广播预准备消息,可以使得区块链***10中的随从节点作为第一随从节点执行下文描述的S180。
S180,所述第一随从节点接收所述预准备消息,基于所述对应关系查找与所述预准备消息中的所述第二哈希值对应的第一验证结果,若查找到的第一验证结果与所述预准备消息中的第二验证结果相同,则在所述区块链***中广播准备消息,所述准备消息用于供所述主节点和所述区块链***中的各随从节点进行共识处理。
本实施例中,第一随从节点和主节点最终获取的未验证交易应当是相同的,对应地,第一哈希值和第二哈希值也应当是相同的。因此,第一随从节点在接收主节点发出的预准备消息后,可以从本地查找目标键值对,目标键值对以该预准备消息中的第二哈希值为键,或者可以理解成,目标键值对的键(即第一哈希值)与该预准备消息中的第二哈希值是相同的。
如果查找到目标键值对,则可以取出目标键值对中的值(即第一验证结果)。然后,将从目标键值对取出的第一验证结果与预准备消息中的第二验证结果进行比较,即比较主节点和第一随从节点对于本轮共识需上链的交易的验证结果是否一致。如果是,则表示验证通过,第一随从节点可以在区块链***10中广播准备消息,各随从节点作为第一随从节点广播出去的准备消息可以用于后续的共识处理。
可选地,主节点广播的预准备消息还可以包括不合法交易列表,该不合法交易列表可以是所述至少一个未验证交易中的不合法交易拼接而成的列表。
实施过程中,若第一随从节点基于所述对应关系,无法查找到与预准备消息中的第二哈希值对应的第一验证结果,即无法查找到所述目标键值对,第一随从节点可以对预准备消息中的不合法交易列表进行验证,得到第三验证结果。若第三验证结果和预准备消息中的第二验证结果相同,则第一随从节点可以在区块链***10中广播准备消息。
通过图3所示的共识方法,每轮共识过程中,区块链***中的主节点和各随从节点可以并行地进行区块中交易的验证,并由主节点在预准备阶段通过预准备消息将本节点的第二验证结果广播给随从节点,随从节点在第二验证结果与本节点的第一验证结果相同的情况下,再对外广播准备消息,进入prepared阶段,进行后续共识处理,从而可以在加快共识进程、提升共识效率的基础上,确保主节点和随从节点各自对区块中交易的验证结果的一致性。
进一步地,在上述实施例的S180中,第一随从节点在所述区块链***中广播准备消息具体可以通过以下步骤实现:
从所述至少一个未验证交易中剔除所述不合法交易,并针对所述至少一个未验证交易中的合法交易在区块链***中广播所述准备消息。
在广播准备消息后,第一随从节点进入准备(prepared)阶段,在准备阶段等待并收集准备消息;若收集的准备消息达到第一额定数量,则在所述区块链***10中广播确认(commit)消息,并进入确认(committed)阶段;在确认阶段等待并收集确认消息;若收集的确认消息达到第二额定数量,则确定区块链***10针对所述至少一个未验证交易中的合法交易达成共识,将基于所述合法交易形成的区块追加到本地区块链(可以理解成“落盘”)。
本申请实施例中,第一额定数量可以是2f,第二额定数量可以是2f+1。值得说明的是,第一随从节点收集的准备消息可以包含第二随从节点广播的准备消息,此外,还可以包含第一随从节点自身广播出去的准备消息。类似地,第一随从节点收集的确认消息可以包含主节点广播的确认消息、第二随从节点广播的确认消息,还可以包含第一随从节点自身广播的确认消息。
本实施例中,主节点通过验证可以从所述至少一个未验证交易中剔除所述不合法交易。并且,主节点在广播预准备消息后,进入预准备(pre-prepared)阶段,并在预准备阶段等待并收集各随从节点作为第一随从节点广播的准备消息,若收集的准备消息达到所述额定数量,则针对所述至少一个未验证交易中的合法交易在区块链***10中广播确认消息,从而进入确认阶段。主节点在确认阶段等待并收集确认消息,若收集的确认消息达到所述额定数量,则确定区块链***10针对所述至少一个未验证交易中的合法交易达成共识,将所述合法交易形成的区块追加到本地区块链(即“落盘”)。
这里,主节点在确认阶段收集的确认消息可以包括各随从节点在区块链***10中广播的确认消息,还可以包括主节点自身广播的确认消息。
发明人经研究发现,一方面,在网络状态(也可以理解成网络质量)较好的情况下,一个交易会被广播给区块链***10中的各个区块链节点,换言之,每个区块链节点的本地交易池是基本一致的。再换句话说,关于主节点所捞取的至少一个未验证交易,各个随从节点均可以从本地交易池获得,即可以基于交易哈希列表从本地交易池捞取所述至少一个未验证交易。另一方面,在网络状态较好的情况下,随从节点等待主节点验证结果的时间远大于区块在网络中传输的时间。基于此,在执行S120之前,本实施例提供的共识方法还可以包括图4所示步骤S110、 S111以及S200。
S110,主节点获取区块链***的当前网络状态。
S111,主节点判断区块链***的当前网络状态是否符合预设条件。若是,则主节点触发执行所述S120。若否,则主节点可以执行S200。
本实施例中,“触发执行”某个步骤,可以理解成跳转至该步骤。
这样,如上所述,基本可以确保随从节点可以从本地交易池捞取所述至少一个未验证交易。
可选地,S110可以通过图5所示的子步骤实现。详细介绍如下。
S111-1,获取当前累计的第一次数和第二次数,所述第一次数是所述区块链***当前的视图更换总次数,所述第二次数是所述区块链***在当前共识区块高度发生的视图更换次数。
S111-2,若所述第二次数与所述第一次数的比值没有超过第一阈值,则所述主节点确定所述区块链***的当前网络状态符合所述预设条件。
S111-3,若所述第二次数与所述第一次数的比值超过第一阈值,则所述主节点确定所述区块链***的当前网络状态不符合所述预设条件。
本实施例中,当主节点故障或者随从节点怀疑主节点有问题时,会触发视图更换。主节点可以对视图切换的总次数进行累计,例如,每发生一次视图切换,则将第一次数累加1。主节点还可以针对每一共识区块高度,累计在该共识区块高度发生的视图更换次数,具体而言,在当前共识区块高度下,每发生一次视图更换,则将第二次数累加1。
实施过程中,主节点在需要判断区块链***10的当前网络状态时,获取当前累计的第一次数和第二次数,计算两者的比值。该比值可以表征区块链***10的当前网络状态。
如果第二次数与第一次数的比值没有超过第一阈值,则表示区块链***10的当前网络状态良好,即符合预设条件,从而可以执行S120。
S200,清空当前累计的第一次数和第二次数。
如果第二次数与第一次数的比值超过第一阈值,表示区块链***10的当前网络状态较差,即不符合预设条件。此时,主节点可以清空当前累计的第一次数和第二次数,即重新开始累计第一次数和第二次数。并且,可以按照传统的PBFT算法的共识流程进行共识处理。
可选地,在本实施例中,可以设置有进行网络状态检查的条件,即当满足该条件时,主节点再执行S110。基于此,在执行S110之前,本实施例提供的共识方法还可以包括图6所示的步骤S109和S201。
S109,确定当前共识区块高度,判断所述当前共识区块高度对第二阈值取余的结果是否为0。若是,则触发执行S110;如否,则执行S201和S111。
这里的第二阈值是网络判断阈值,可以根据需要灵活设置,也可以通过统计测试确定。本实施例对此没有限制。
S201,将上一次获取的所述区块链***的网络状态,确定为所述区块链***的当前网络状态。
通过上述设计,可以尽可能地减少随从节点从其他随从节点处获取未验证交易的原始交易数据的情况,减少网络传输。
可选地,即便是在网络状态较好的情况下,即符合预设条件的情况下,还是可能出现主节点广播的交易哈希列表中哈希值所对应未验证交易,在第一随从节点的本地交易池中不存在的情况。基于此,本实施例提供的共识方法还可以包括如下步骤:
若第一随从节点基于所述交易哈希列表无法查找到任意一个所述未验证交易,向所述主节点或者任意一个第二随从节点请求所述未验证交易。
换言之,当第一随从节点基于交易哈希列表中的哈希值,从本地交易池无法捞取到对应的未验证交易时,向主节点或者第二随从节点发送针对该未验证交易的获取请求,该获取请求可以携带该未验证交易的哈希值。这样,主节点或第二随从节点可以向第一随从节点提供该未验证交易的原始交易数据,以供第一随从节点进行后续验证。
为了便于本领域技术人员理解,以区块链***10中的区块链节点100是主节点,区块链节点101、102和103是随从节点,且区块链节点103是拜占庭节点为例,进行举例说明。
1)共识网络状态判断
主节点100判断当前共识区块高度是否是网络状态检查点:具体可以将当前共识区块高度对预设的网络判断阈值取余,若所得的结果为0,则确定当前共识区块高度是网络状态检查点;否则确定当前共识区块高度不是网络状态检查点。
若当前共识区块高度不是网络状态检查点,则累计当前共识区块高度到下一网络检查点之间的视图更换次数V1以及当前共识区块高度下发生的视图更换次数V2;并沿用上一次的网络状态判断结果。
若当前共识区块高度是网络状态检查点,则获取当前累计的V1和V2,计算V1/V2;判断V1/V2是否超过网络状态判断阈值;若是,则表示当前网络状态较差;若是,则表示当前网络状态良好。获取网络状态完成后清空累计的V1和V2。
2)本申请实施例的共识方法对应的共识过程包括pre-block阶段、pre-prepare阶段、prepare阶段和commit阶段,具体包括以下流程。
请一并参照图7和图8,图7示出了在区块链***10中应用本申请实施例提供的共识方法的共识过程示意图,图8示出了作为主节点的区块链节点100与第一随从节点(例如,区块链节点101、102或103)的时序图。下面结合图7和图8进行介绍。
第一步,生成未验证区块消息pre-block:
1、从区块验证者集合中选择一个区块发起者,选择的规则如下,使用当前视图序号(view number)与区块链节点数量(backup number)做模运算,并将得到的结果作为区块验证者的索引,使用这个索引从区块验证者集合中选出的区块验证者即为本轮共识的主节点(primary);
2、主节点从交易池获取交易hash列表,生成原始请求区块,并使用pre-block消息将交易哈希列表广播出去。其中,交易hash列表包括本轮需要打包进区块的一个或多个未验证交易的交易hash。
第二步,验证主节点生成的pre-block区块:
1、主节点在广播pre-block消息后,根据交易哈希列表中的交易hash,顺序从本地交易池捞取交易,并将捞取的交易拼接成pre-block交易列表,并对pre-block交易列表中的交易进行验证;验证完成后,从pre-block交易列表中剔除不合法交易,得到pre-prepare交易列表;并生成不合法交易列表的校验(validation)数据(可以充当上述实施例中的第二验证结果);重新生成pre-prepare消息,该消息携带有不合法交易列表、校验数据以及原始的pre-block交易列表的哈希值(可以充当上述实施例中的第二哈希值),广播pre-prepare消息。主节点进入pre-prepared状态,等待随从节点发出的prepare消息。
2、第一随从节点(backup)在收到pre-block消息后,根据pre-block消息中的交易哈希列表中的每个交易hash,从本地交易池捞取对应的未验证交易,若从本地交易池无法捞取到,则从其他节点(如主节点或第二随从节点)请求该交易hash对应的未验证交易。
如图8所示,第一随从节点可以将无法从本地交易池捞取的未验证交易所对应的交易hash携带在请求中,发送给主节点(primary),主节点可以基于该交易hash查找相应的未验证交易的原始交易数据,并发送给第一随从节点。第一随从节点再将主节点发送的未验证交易拼接到pre-block交易列表中,并对pre-block交易列表进行验证。
验证完成后,第一随从节点从pre-block交易列表中剔除不合法交易,生成不合法交易列表的校验(validation)数据(可以充当上述实施例中的第一验证结果)。以原始的pre-block交易列表的哈希值(可以充当上述实施例中的第一哈希值)为键、以该校验数据为值形成键值对,并将键值对缓存在本地。
第三步,验证主节点生成的pre-prepare区块:第一随从节点在收到主节点发送的pre-prepare消息后,根据pre-prepare消息中的哈希值,从本地缓存中查找对应的校验数据。
1、若从本地缓存找到对应的校验数据,则将找到的校验数据与pre-prepare消息中携带的不合法交易列表的校验数据进行比对,若一致,则确定验证通过。
2、若从本地缓存中未找到对应的校验数据,则按照pre-prepare消息中的交易列表进行验证,得到不合法交易列表校验数据,将其与pre-prepare消息中的校验数据进行比对,若一致,则确定验证通过。
3、若验证通过,则第一随从节点广播并收集其它节点的prepare消息,若收集到额定数量的prepare消息,进入prepared状态,广播commit消息并收集其它节点广播的commit消息。
第四步,主节点和每个随从节点,各自在收集额定数量的commit消息后,将区块写入数据库(即数据落盘),本轮共识结束。
请参照图9,其中示出了本申请实施例提供的一种共识装置900,该共识装置900可以应用于图2所示的区块链***10中的主节点。共识装置900可以包括广播模块910和验证模块920。
其中,广播模块910用于在所述区块链***10中广播交易哈希列表,所述交易哈希列表包括至少一个未验证交易的哈希值,使所述区块链***10中的随从节点接收所述交易哈希列表,基于所述交易哈希列表查找所述至少一个未验证交易,验证所述至少一个未验证交易得到第一验证结果,基于所述至少一个未验证交易得到第一哈希值,并保存所述第一验证结果和所述第一哈希值的对应关系。
验证模块920用于基于所述交易哈希列表查找所述至少一个未验证交易,验证所述至少一个未验证交易得到第二验证结果,以及基于所述至少一个未验证交易得到第二哈希值。
所述广播模块910还用于在所述区块链***10中广播预准备消息,所述预准备消息包括所述第二验证结果以及所述第二哈希值,使所述随从节点基于所述对应关系查找与所述第二哈希值对应的第一验证结果,若查找到的第一验证结果与所述第二验证结果相同,则在所述区块链***中广播准备消息,所述准备消息用于供所述主节点和所述区块链***10中的随从节点进行共识处理。
可选地,共识装置900还可以包括网络状态判断模块930。
网络状态判断模块930用于在广播模块910所述区块链***10中广播交易哈希列表之前,获取所述区块链***10的当前网络状态,并判断所述当前网络状态是否符合预设条件;若是,则触发所述广播模块910在所述区块链***10中广播交易哈希列表。
可选地,网络状态判断模块930可以通过以下方式判断所述区块链***10的当前网络状态是否符合预设条件:
获取当前累计的第一次数和第二次数,所述第一次数是所述区块链***10当前的视图更换总次数,所述第二次数是所述区块链***10在当前共识区块高度发生的视图更换次数;若所述第二次数与所述第一次数的比值没有超过第一阈值,则确定所述当前网络状态符合所述预设条件,并清空当前累计的所述第一次数和所述第二次数。
可选地,共识装置900还可以包括传统PBFT共识模块940。
传统PBFT(实用拜占庭)共识模块940用于在区块链***10的当前网络状态不符合所述预设条件的情况下,按照传统PBFT算法的共识流程进行共识处理,并清空当前累计的第一次数和第二次数。
可选地,所述网络状态判断模块930在判断所述区块链***10的当前网络状态是否符合条件之前,还可以用于:
确定当前共识区块高度;若所述当前共识区块高度对第二阈值取余得到结果为0,则触发执行所述判断所述区块链***10的当前网络状态是否符合条件。
可选地,所述共识装置900还可以包括共识处理模块950。
共识处理模块950用于:接收所述区块链***10中的随从节点广播的准备消息,若所接收的准备消息达到额定数量,在所述区块链***10中广播确认消息;接收所述区块链***10中的随从节点广播的确认消息,若所接收的确认消息达到所述额定数量,将基于所述至少一个未验证交易中的合法交易的区块追加到本地区块链。
关于上述功能模块的具体实现过程可以参照上文对于相关方法步骤的详细阐述,在此不再赘述。
请参照图10,其中示出了本申请实施例提供的一种共识装置100,共识装置1000应用于图2所示区块链***10中的第一随从节点,可以理解,第一随从节点是区块链***10中的任意一个随从节点,除此以外,区块链***10还包括主节点和第二随从节点,第二随从节点是与第一随从节点不同的随从节点。
共识装置1000可以包括接收模块1010、验证模块1020以及验证结果比较模块1030。
接收模块1010用于接收所述主节点广播的交易哈希列表,所述交易哈希列表包括至少一个未验证交易的哈希值。
验证模块1020用于基于所述交易哈希列表查找所述至少一个未验证交易,验证所述至少一个未验证交易得到第一验证结果,基于所述至少一个未验证交易得到第一哈希值,并保存所述第一验证结果和所述第一哈希值的对应关系。
所述接收模块1010还用于接收所述主节点广播的预准备消息,所述预准备消息包括所述主节点验证所述至少一个未验证交易得到的第二验证结果以及基于所述至少一个未验证交易得到的第二哈希值。
验证结果比较模块1030用于基于所述对应关系查找与所述预准备消息中的第二哈希值对应的第一验证结果,若所述第一验证结果与所述第二验证结果相同,则在所述区块链***中广播准备消息,所述准备消息用于供所述主节点和所述区块链***中的各随从节点进行共识处理。
可选地,所述验证模块1020还可以用于:
在基于所述交易哈希列表无法查找到任意一个所述未验证交易的情况下,向所述主节点或者任意一个第二随从节点请求所述未验证交易。
可选地,所述预准备消息还包括不合法交易列表,所述合法交易列表包括所述至少一个未验证交易中的不合法交易。对应地,所述验证结果比较模块1030还可以用于:
在基于所述对应关系无法查找到与所述预准备消息中的第二哈希值对应的第一验证结果的情况下,验证所述不合法交易列表得到第三验证结果;若所述第三验证结果与所述预准备消息中的第二验证结果相同,则在区块链***10中广播准备消息。
关于上述功能模块的详细实现过程,具体可以参照上文对相应方法步骤的详细阐述,在此不再赘述。
请参照图11,其中以区块链节点100为例示出了本申请实施例提供的一种区块链节点的硬件架构示意图。区块链节点100可以包括上述的共识装置900和1000、处理器110以及计算机可读存储介质120。
处理器110和计算机可读存储介质120可以通过***总线130进行通信。共识装置900和1000包括的软件功能模块可以以机器可执行指令的形式存储于机器可读存储介质120中。处理器110通过调用并读取计算机可读存储介质120中的机器可执行指令,可以实现本申请实施例提供的共识方法。
值得说明的是,图11所示的架构仅为示意。本申请实施例提供的区块链节点100还可以包括比图11所示更多或更少的组件,比如,还可以包括通信单元,或者具有与图11所示完全不同的匹配值,本实施例对此没有限制。此外,图11所示组件可以通过硬件、软件或其组合来实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、装置、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有机器可执行指令的机器可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、装置(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由机器可执行指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些机器可执行指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些机器可执行指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的机器可读存储介质中,使得存储在该机器可读存储介质中的指令产生包括指令装置(如,上述的共识装置900和1000)的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些机器可执行指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在本申请的描述中,需要理解的是,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (22)
1.一种共识方法,其特征在于,应用于区块链***中的主节点,所述方法包括:
在所述区块链***中广播交易哈希列表,所述交易哈希列表包括至少一个未验证交易的哈希值,使所述区块链***中的随从节点接收所述交易哈希列表,基于所述交易哈希列表查找所述至少一个未验证交易,验证所述至少一个未验证交易得到第一验证结果,基于所述至少一个未验证交易得到第一哈希值,并保存所述第一验证结果和所述第一哈希值的对应关系;
基于所述交易哈希列表查找所述至少一个未验证交易,验证所述至少一个未验证交易得到第二验证结果,以及基于所述至少一个未验证交易得到第二哈希值;
在所述区块链***中广播预准备消息,所述预准备消息包括所述第二验证结果以及所述第二哈希值,使所述随从节点基于所述对应关系查找与所述第二哈希值对应的第一验证结果,若查找到的第一验证结果与所述第二验证结果相同,则在所述区块链***中广播准备消息,所述准备消息用于供所述主节点以及所述区块链***中的随从节点进行共识处理。
2.根据权利要求1所述的共识方法,其特征在于,在所述区块链***中广播交易哈希列表之前,所述方法还包括:
获取所述区块链***的当前网络状态,并判断所述当前网络状态是否符合预设条件;
若是,则触发执行在所述区块链***中广播交易哈希列表的步骤。
3.根据权利要求2所述的共识方法,其特征在于,所述判断所述区块链***的当前网络状态是否符合预设条件,包括:
获取当前累计的第一次数和第二次数,所述第一次数是所述区块链***当前的视图更换总次数,所述第二次数是所述区块链***在当前共识区块高度发生的视图更换次数;
若所述第二次数与所述第一次数的比值没有超过第一阈值,则确定所述当前网络状态符合所述预设条件,并清空当前累计的所述第一次数和所述第二次数。
4.根据权利要求3所述的共识方法,其特征在于,所述方法还包括:
若所述区块链***的当前网络状态不符合所述预设条件,则按照传统的实用拜占庭容错算法的共识流程进行共识处理,并清空当前累计的所述第一次数和所述第二次数。
5.根据权利要求2-4中任意一项所述的共识方法,其特征在于,在所述判断所述区块链***的当前网络状态是否符合条件之前,所述方法还包括:
确定当前共识区块高度;
若所述当前共识区块高度对第二阈值取余得到结果为0,则触发执行所述判断所述区块链***的当前网络状态是否符合条件的步骤。
6.根据权利要求1-4中任意一项所述的共识方法,其特征在于,所述第一验证结果包括所述随从节点对所述至少一个未验证交易中不合法交易的校验结果信息,所述第二验证结果包括所述主节点对所述至少一个未验证交易中不合法交易的校验结果信息。
7.根据权利要求1-4中任意一项所述的共识方法,其特征在于,在所述区块链***中广播准备消息之后,包括:
接收所述区块链***中的随从节点广播的准备消息,若所接收的准备消息达到第一额定数量,在所述区块链***中广播确认消息;
接收所述区块链***中的随从节点广播的确认消息,若所接收的确认消息达到第二额定数量,将基于所述至少一个未验证交易中的合法交易的区块追加到本地区块链。
8.一种共识方法,其特征在于,应用于区块链***中的第一随从节点,所述区块链***还包括主节点和第二随从节点,所述第二随从节点是与所述第一随从节点不同的随从节点;所述方法包括:
接收所述主节点广播的交易哈希列表,所述交易哈希列表包括至少一个未验证交易的哈希值;
基于所述交易哈希列表查找所述至少一个未验证交易,验证所述至少一个未验证交易得到第一验证结果,基于所述至少一个未验证交易得到第一哈希值,并保存所述第一验证结果和所述第一哈希值的对应关系;
接收所述主节点广播的预准备消息,所述预准备消息包括所述主节点验证所述至少一个未验证交易得到的第二验证结果以及基于所述至少一个未验证交易得到的第二哈希值;
基于所述对应关系查找与所述预准备消息中的第二哈希值对应的第一验证结果,若查找到的第一验证结果与所述第二验证结果相同,则在所述区块链***中广播准备消息,所述准备消息用于供所述主节点以及所述区块链***中的随从节点进行共识处理。
9.根据权利要求8所述的共识方法,其特征在于,所述方法还包括:
若所述第一随从节点基于所述交易哈希列表无法查找到任意一个所述未验证交易,向所述主节点或者任意一个第二随从节点请求所述未验证交易。
10.根据权利要求8或9所述的方法,其特征在于,所述预准备消息还包括不合法交易列表,所述合法交易列表包括所述至少一个未验证交易中的不合法交易;所述方法还包括:
若基于所述对应关系无法查找到与所述预准备消息中的第二哈希值对应的第一验证结果,则验证所述不合法交易列表得到第三验证结果;
若所述第三验证结果与所述预准备消息中的第二验证结果相同,则在所述区块链***中广播准备消息。
11.一种共识装置,其特征在于,应用于区块链***中的主节点,所述装置包括:
广播模块,用于在所述区块链***中广播交易哈希列表,所述交易哈希列表包括至少一个未验证交易的哈希值,使所述区块链***中的随从节点接收所述交易哈希列表,基于所述交易哈希列表查找所述至少一个未验证交易,验证所述至少一个未验证交易得到第一验证结果,基于所述至少一个未验证交易得到第一哈希值,并保存所述第一验证结果和所述第一哈希值的对应关系;
验证模块,用于基于所述交易哈希列表查找所述至少一个未验证交易,验证所述至少一个未验证交易得到第二验证结果,以及基于所述至少一个未验证交易得到第二哈希值;
所述广播模块,还用于在所述区块链***中广播预准备消息,所述预准备消息包括所述第二验证结果以及所述第二哈希值,使所述随从节点基于所述对应关系查找与所述第二哈希值对应的第一验证结果,若查找到的第一验证结果与所述第二验证结果相同,则在所述区块链***中广播准备消息,所述准备消息用于供所述主节点和所述区块链***中的随从节点进行共识处理。
12.一种共识装置,其特征在于,应用于区块链***中的第一随从节点,所述区块链***还包括主节点和第二随从节点,所述第二随从节点是与所述第一随从节点不同的随从节点;所述装置包括:
接收模块,用于接收所述主节点广播的交易哈希列表,所述交易哈希列表包括至少一个未验证交易的哈希值;
验证模块,用于基于所述交易哈希列表查找所述至少一个未验证交易,验证所述至少一个未验证交易得到第一验证结果,基于所述至少一个未验证交易得到第一哈希值,并保存所述第一验证结果和所述第一哈希值的对应关系;
所述接收模块,还用于接收所述主节点广播的预准备消息,所述预准备消息包括所述主节点验证所述至少一个未验证交易得到的第二验证结果以及基于所述至少一个未验证交易得到的第二哈希值;
验证结果比较模块,用于基于所述对应关系查找与所述预准备消息中的第二哈希值对应的第一验证结果,若所述第一验证结果与所述第二验证结果相同,则在所述区块链***中广播准备消息,所述准备消息用于供所述主节点和所述区块链***中的各随从节点进行共识处理。
13.一种区块链***,其特征在于,包括主节点、第一随从节点以及第二随从节点,第一随从节点是所述区块链***中的任意一个随从节点,第二随从节点是与所述第一随从节点不同的随从节点;
所述主节点,用于在所述区块链***中广播交易哈希列表,所述交易哈希列表包括至少一个未验证交易的哈希值;
所述第一随从节点,用于接收所述交易哈希列表,基于所述交易哈希列表查找所述至少一个未验证交易;验证所述至少一个未验证交易得到第一验证结果,基于所述至少一个未验证交易得到第一哈希值,并保存所述第一验证结果和所述第一哈希值的对应关系;
所述主节点,还用于基于所述交易哈希列表查找所述至少一个未验证交易,验证所述至少一个未验证交易得到第二验证结果;基于所述至少一个未验证交易得到第二哈希值,并在所述区块链***中广播携带所述第二验证结果和所述第二哈希值的预准备消息;
所述第一随从节点,还用于接收所述预准备消息,基于所述对应关系查找与所述预准备消息中的所述第二哈希值对应的第一验证结果,若查找到的第一验证结果与所述预准备消息中的第二验证结果相同,则在所述区块链***中广播准备消息,所述准备消息用于供所述主节点和所述区块链***中的各随从节点进行共识处理。
14.根据权利要求13所述的***,其特征在于,在所述区块链***中广播交易哈希列表之前,所述主节点还用于判断所述区块链***的当前网络状态是否符合预设条件,若是,则触发执行所述在所述区块链***中广播交易哈希列表。
15.根据权利要求14所述的***,其特征在于,所述主节点通过以下方式判断所述区块链***的当前网络状态是否符合预设条件:
获取当前累计的第一次数和第二次数,所述第一次数是所述区块链***当前的视图更换总次数,所述第二次数是所述区块链***在当前共识区块高度发生的视图更换次数;若所述第二次数与所述第一次数的比值没有超过第一阈值,则所述主节点确定所述当前网络状态符合所述预设条件。
16.根据权利要求15所述的***,其特征在于,所述主节点还用于在所述区块链***的当前网络状态不符合所述预设条件的情况下,清空当前累计的所述第一次数和所述第二次数。
17.根据权利要求14-16中任意一项所述的***,其特征在于,在所述判断所述区块链***的当前网络状态是否符合预设条件之前,所述主节点还用于:
确定当前共识区块高度,判断所述当前共识区块高度对第二阈值取余的结果是否为0;若是,则触发执行所述判断所述区块链***的当前网络状态是否符合预设条件之前。
18.根据权利要求13-16中任意一项所述的***,其特征在于,所述第一验证结果包括所述随从节点对所述至少一个未验证交易中不合法交易的校验结果信息;所述第二验证结果包括所述主节点对所述至少一个未验证交易中不合法交易的校验结果信息。
19.根据权利要求18所述的***,其特征在于,所述第一随从节点在所述区块链***中广播准备消息的方式为:从所述至少一个未验证交易中剔除所述不合法交易,并针对所述至少一个未验证交易中的合法交易在所述区块链***中广播所述准备消息;
所述第一随从节点,还用于在广播所述准备消息后,等待并收集准备消息,若收集的准备消息达到第一额定数量,则在所述区块链***中广播确认消息;等待并收集确认消息,若收集的确认消息达到第二额定数量,则确定所述区块链***对所述至少一个未验证交易中的合法交易形成的区块达成共识;
所述主节点,还用于从所述至少一个未验证交易中剔除所述不合法交易;在广播所述预准备消息后,等待并收集准备消息,若收集的准备消息达到所述第一额定数量,则在所述区块链***中广播确认消息;等待并收集确认消息,若收集的确认消息达到所述第二额定数量,则确定所述区块链***对所述至少一个未验证交易中的合法交易形成的区块达成共识。
20.根据权利要求13-16中任意一项所述的***,其特征在于,所述随从节点为第一随从节点,所述区块链***还包括与所述第一随从节点不同的第二随从节点;
所述第一随从节点还用于:在基于所述交易哈希列表无法查找到任意一个所述未验证交易时,向所述主节点或者任意一个第二随从节点请求所述未验证交易。
21.根据权利要求13-16中任意一项所述的***,其特征在于,所述预准备消息还包括不合法交易列表,所述不合法交易列表包括所述至少一个未验证交易中的不合法交易;所述第一随从节点还用于:
基于所述对应关系无法查找到与所述预准备消息中的所述第二哈希值对应的第一验证结果时,验证所述不合法交易列表得到第三验证结果;若所述第三验证结果与所述预准备消息中的第二验证结果相同,则在所述区块链***中广播准备消息。
22.一种计算机可读存储介质,其上存储有程序代码,其特征在于,所述程序代码可被处理器调用执行以实现权利要求1-10中任意一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111085505.9A CN113541968B (zh) | 2021-09-16 | 2021-09-16 | 共识方法、装置及区块链*** |
PCT/CN2022/097230 WO2023040364A1 (zh) | 2021-09-16 | 2022-06-06 | 共识方法、装置及区块链*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111085505.9A CN113541968B (zh) | 2021-09-16 | 2021-09-16 | 共识方法、装置及区块链*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113541968A CN113541968A (zh) | 2021-10-22 |
CN113541968B true CN113541968B (zh) | 2021-11-26 |
Family
ID=78092714
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111085505.9A Active CN113541968B (zh) | 2021-09-16 | 2021-09-16 | 共识方法、装置及区块链*** |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN113541968B (zh) |
WO (1) | WO2023040364A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113541968B (zh) * | 2021-09-16 | 2021-11-26 | 中国信息通信研究院 | 共识方法、装置及区块链*** |
CN113850600B (zh) * | 2021-12-01 | 2022-04-26 | 深圳前海微众银行股份有限公司 | 基于区块链的交易共识方法、装置、设备及存储介质 |
CN114928650B (zh) * | 2022-04-26 | 2023-06-30 | 成都质数斯达克科技有限公司 | 一种区块链数据共识方法、装置、设备及可读存储介质 |
CN115481446A (zh) * | 2022-08-31 | 2022-12-16 | 北京大学 | 一种泛在环境下的数字对象访问事务存证方法和装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107392608A (zh) * | 2017-07-11 | 2017-11-24 | 北京博晨技术有限公司 | 基于区块链***的数字资产交易方法及区块链*** |
CN109379397A (zh) * | 2018-08-31 | 2019-02-22 | 阿里巴巴集团控股有限公司 | 基于区块链的交易共识处理方法及装置、电子设备 |
CN110800258A (zh) * | 2019-03-18 | 2020-02-14 | 阿里巴巴集团控股有限公司 | 用于结束视图更改协议的***和方法 |
CN111522822A (zh) * | 2020-07-03 | 2020-08-11 | 支付宝(杭州)信息技术有限公司 | 一种区块链共识方法、装置及电子设备 |
CN111555858A (zh) * | 2020-03-20 | 2020-08-18 | 北京邮电大学 | 一种基于块链式存储的实用拜占庭容错共识方法 |
EP3542514B1 (en) * | 2018-11-07 | 2021-02-17 | Advanced New Technologies Co., Ltd. | Facilitating practical byzantine fault tolerance blockchain consensus and node synchronization |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10204341B2 (en) * | 2016-05-24 | 2019-02-12 | Mastercard International Incorporated | Method and system for an efficient consensus mechanism for permissioned blockchains using bloom filters and audit guarantees |
CN113541968B (zh) * | 2021-09-16 | 2021-11-26 | 中国信息通信研究院 | 共识方法、装置及区块链*** |
-
2021
- 2021-09-16 CN CN202111085505.9A patent/CN113541968B/zh active Active
-
2022
- 2022-06-06 WO PCT/CN2022/097230 patent/WO2023040364A1/zh unknown
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107392608A (zh) * | 2017-07-11 | 2017-11-24 | 北京博晨技术有限公司 | 基于区块链***的数字资产交易方法及区块链*** |
CN109379397A (zh) * | 2018-08-31 | 2019-02-22 | 阿里巴巴集团控股有限公司 | 基于区块链的交易共识处理方法及装置、电子设备 |
EP3542514B1 (en) * | 2018-11-07 | 2021-02-17 | Advanced New Technologies Co., Ltd. | Facilitating practical byzantine fault tolerance blockchain consensus and node synchronization |
CN110800258A (zh) * | 2019-03-18 | 2020-02-14 | 阿里巴巴集团控股有限公司 | 用于结束视图更改协议的***和方法 |
CN111555858A (zh) * | 2020-03-20 | 2020-08-18 | 北京邮电大学 | 一种基于块链式存储的实用拜占庭容错共识方法 |
CN111522822A (zh) * | 2020-07-03 | 2020-08-11 | 支付宝(杭州)信息技术有限公司 | 一种区块链共识方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
WO2023040364A1 (zh) | 2023-03-23 |
CN113541968A (zh) | 2021-10-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113541968B (zh) | 共识方法、装置及区块链*** | |
US11410171B2 (en) | Blockchain consensus method and device and electronic equipment | |
CN110730225A (zh) | 基于区块链的物联网的数据处理方法、物联网及存储介质 | |
US11728976B1 (en) | Systems and methods for efficiently serving blockchain requests using an optimized cache | |
Ding et al. | Centiman: elastic, high performance optimistic concurrency control by watermarking | |
CN112527901A (zh) | 数据存储***、方法、计算设备及计算机存储介质 | |
CN106407395A (zh) | 数据查询的处理方法及装置 | |
EP3093789A1 (en) | Storing structured information | |
CN108200157B (zh) | 主节点触发回退的日志同步方法及装置 | |
CN110417833B (zh) | 基于区块链的数据处理方法、装置及存储介质 | |
CN112436962B (zh) | 区块链共识网络动态扩展方法、电子设备、***及介质 | |
EP2760178B1 (en) | Method, apparatus and system for obtaining object | |
CN111708835B (zh) | 区块链数据存储方法及装置 | |
CN113254526A (zh) | 区块链共识方法、装置及*** | |
CN108924240B (zh) | 基于一致性协议的分布式处理方法、装置及存储介质 | |
CN114466004A (zh) | 一种文件传输方法、***、电子设备及存储介质 | |
CN114666411A (zh) | 请求处理方法、装置、服务器、存储介质及产品 | |
CN113610529A (zh) | 联盟链的区块存储、获取方法、装置、节点和存储介质 | |
CN113765671A (zh) | 一种区块链节点热重启的方法及装置 | |
CN110363515B (zh) | 权益卡账户信息查询方法、***、服务器及可读存储介质 | |
CN111046055A (zh) | 一种区块链全局配置的变更方法、设备和存储介质 | |
CN107710165A (zh) | 用于存储节点同步业务请求的方法和装置 | |
CN105765908A (zh) | 一种多站点自动更新方法、客户端和*** | |
CN106878040B (zh) | 一种记录加载方法和装置 | |
CN114254050B (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 |