CN116846907A - 一种共识方法、区块链节点 - Google Patents
一种共识方法、区块链节点 Download PDFInfo
- Publication number
- CN116846907A CN116846907A CN202310805116.1A CN202310805116A CN116846907A CN 116846907 A CN116846907 A CN 116846907A CN 202310805116 A CN202310805116 A CN 202310805116A CN 116846907 A CN116846907 A CN 116846907A
- Authority
- CN
- China
- Prior art keywords
- consensus
- message
- node
- transaction list
- nodes
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 147
- 230000004044 response Effects 0.000 claims abstract description 6
- 230000008569 process Effects 0.000 claims description 75
- 238000004422 calculation algorithm Methods 0.000 claims description 37
- 238000012163 sequencing technique Methods 0.000 claims description 8
- 230000003993 interaction Effects 0.000 description 29
- 230000000977 initiatory effect Effects 0.000 description 18
- 230000007246 mechanism Effects 0.000 description 17
- 230000008859 change Effects 0.000 description 15
- 238000010586 diagram Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 13
- 241000282344 Mellivora capensis Species 0.000 description 12
- 238000004891 communication Methods 0.000 description 12
- 238000003860 storage Methods 0.000 description 10
- 238000010276 construction Methods 0.000 description 8
- 230000006872 improvement Effects 0.000 description 8
- 238000012545 processing Methods 0.000 description 8
- 238000004590 computer program Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 7
- 235000013929 Psidium pyriferum Nutrition 0.000 description 4
- 244000236580 Psidium pyriferum Species 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000005266 casting Methods 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 210000003743 erythrocyte Anatomy 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 238000002360 preparation method Methods 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 108010001267 Protein Subunits Proteins 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 239000007795 chemical reaction product Substances 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 229920001296 polysiloxane Polymers 0.000 description 1
- 239000000047 product Substances 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 239000010979 ruby Substances 0.000 description 1
- 229910001750 ruby Inorganic materials 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- 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/104—Peer-to-peer [P2P] networks
-
- 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
- H04L12/00—Data switching networks
- H04L12/02—Details
- H04L12/16—Arrangements for providing special services to substations
- H04L12/18—Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
- H04L12/1854—Arrangements for providing special services to substations for broadcast or conference, e.g. multicast with non-centralised forwarding system, e.g. chaincast
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/12—Applying verification of the received information
-
- 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/3247—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 involving digital signatures
-
- 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/40—Network security protocols
-
- 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)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Business, Economics & Management (AREA)
- Finance (AREA)
- Accounting & Taxation (AREA)
- Development Economics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Computer Hardware Design (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer And Data Communications (AREA)
Abstract
本说明书一个或多个实施例提供一种共识方法、区块链节点,区块链系统采用的共识协议为基于区块标识来发起共识提议的目标区块的异步共识协议,该方法包括:接收共识节点发送的第一消息;其中,第一消息包含待共识的目标区块的区块标识;以及,共识节点针对目标区块提议的交易列表;响应于接收到的第一消息,确定区块链系统中的目标共识节点的数量是否达到阈值;其中,目标共识节点为针对目标区块提议的交易列表已作为共识结果进行了输出的共识节点;如果区块链系统中的目标共识节点的数量达到阈值,则广播第六消息至其它共识节点;其中,第六消息包含区块标识,用于声明不再接受除了目标共识节点以外的其它共识节点针对目标区块提议的交易列表。
Description
技术领域
本说明书实施例属于区块链技术领域,尤其涉及一种共识方法、区块链节点。
背景技术
区块链系统中,不同参与方通过部署的节点(Node)可以建立一个分布式的区块链网络。利用链式区块结构构造的去中心化(或称为多中心化)的分布式账本,保存于分布式的区块链网络中的每个节点(或大多节点上,如共识节点)上。这样的区块链系统需要解决去中心化(或多中心化)的多个节点上各自的账本数据的一致性和正确性的问题。每个节点上都运行着区块链程序,在一定容错需求的设计下,通过共识(consensus)机制保证所有忠诚节点具有相同的交易,从而保证所有忠诚节点对相同交易的执行结果一致,并将交易及执行结果打包生成区块。
当前主流的共识协议包括:工作量证明(Proof of Work,POW)、股权证明(Proofof Stake,POS)、委任权益证明(Delegated Proof of Stake,DPOS)、实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)算法,蜜獾拜占庭容错(HoneyBadgerBFT)算法等。
其中,以上列举的各种共识协议中,既包括异步共识协议,也包括非异步共识协议。例如,PBFT协议就属于半同步(partial synchronous)协议,而HoneyBadgerBFT算法属于一种异步(asynchronous)协议。
由于异步协议适用于异步网络,也就是这个网络中节点间的消息可以被任意延迟,但最终会达到,因此目前异步共识协议相对于非异步共识协议而言应用更加广泛。然而,目前的几种主流的异步共识协议,均存在一定的设计缺陷,对共识的轮次会存在不确定性,从而可能造成共识的延迟增加。
发明内容
本说明书提出一种区块链系统中的共识方法,其中所述区块链系统采用的共识协议为基于区块标识来发起共识提议的目标区块的异步共识协议,所述方法包括:
接收共识节点发送的第一消息;其中,所述第一消息包含待共识的目标区块的区块标识;以及,所述共识节点针对所述目标区块提议的交易列表;
响应于接收到的所述第一消息,确定所述区块链系统中的目标共识节点的数量是否达到阈值;其中,所述目标共识节点为针对所述目标区块提议的交易列表已作为共识结果进行了输出的共识节点;
如果所述区块链系统中的目标共识节点的数量达到阈值,则广播第六消息至其它共识节点;其中,所述第六消息包含所述区块标识,用于声明不再接受除了所述目标共识节点以外的其它共识节点针对所述目标区块提议的交易列表。
可选的,所述方法还包括:
响应于接收到的所述第一消息,运行所述区块链系统采用的所述异步共识协议对所述第一消息中包含的交易列表进行共识;
其中,运行所述区块链系统采用的所述异步共识协议对所述第一消息中包含的交易列表进行共识对应的共识过程,包括:
第一轮:接收到所述第一消息的共识节点广播第二消息至其它共识节点;所述第二消息中包含所述目标区块的区块标识以及针对所述交易列表的投票;
第二轮,接收到所述第二消息的共识节点收集来自于不同共识节点的针对所述交易列表的投票;如果收集到至少Quorum个来自不同共识节点的表示认可所述交易列表的投票,并且自身针对该交易列表未广播过不同的投票,则广播用于承诺不再更改针对所述交易列表的投票的第三消息至其它共识节点;其中,所述第三消息包含表示认可所述交易列表的投票;
如果任一共识节点收集到至少Quorum个来自于不同共识节点的包含表示认可所述交易列表的投票的所述第三消息,则将所述交易列表作为与所述区块标识对应的目标区块的至少一部分共识结果进行输出。
可选的,在所述第一轮中,如果接收到所述第一消息的共识节点确定所述区块链系统中的目标共识节点的数量达到阈值,则该共识节点广播的所述第二消息中包含表示不认可所述第一消息包含的所述交易列表的投票;反之,如果接收到所述第一消息的共识节点确定所述区块链系统中的目标共识节点的数量未达到阈值,则该共识节点广播的所述第二消息中包含表示认可所述第一消息包含的所述交易列表的投票。
可选的,所述第一轮还包括:
如果接收到了f+1不同共识节点发送的包含表示认可所述交易列表的投票的所述第二消息,并且自身未广播过包含表示不认可所述交易列表的投票的所述第三消息,则继续向其它共识节点广播包含表示认可所述交易列表的投票的第二消息;其中,所述f表示所述区块链系统采用的共识协议所支持的容错节点数。
可选的,所述第二轮还包括:
如果接收到所述第二消息的共识节点收集到至少Quorum个来自不同共识节点的表示认可所述交易列表的投票,并且自身针对该交易列表广播过不同的投票,则广播第四消息至其它共识节点;其中,所述第四消息不用于承诺不再更改针对所述交易列表的投票;所述第四消息包含表示认可所述交易列表的投票。
可选的,所述方法还包括:
如果任一共识节点收集到至少Quorum个来自于不同共识节点的消息中,除了包含所述第三消息以外还包含所述第四消息,则运行二元共识协议对所述至少Quorum个消息中包含的投票集合进行二元共识。
可选的,运行二元共识协议对所述至少Quorum个消息中包含的投票集合进行二元共识之前,还包括:
广播第五消息至其它共识节点;其中,所述第五消息包括所述至少Quorum个消息中包含的投票集合;
所述运行二元共识协议对所述至少Quorum个来自于不同共识节点的投票集合进行二元共识,包括:
收集其它的共识节点广播的所述第五消息;
如果收集到至少Quorum个来自于不同共识节点的所述第五消息,计算所述至少Quorum个所述第五消息中包含的投票集合的并集得到目标投票集合,并运行二元共识协议对所述目标投票集合进行二元共识。
可选的,所述二元共识协议为公共抛硬币算法。
可选的,所述第二消息、第三消息、第四消息以及所述第五消息中还包括针对所述交易列表进行共识的轮次;所述至少Quorum个来自于不同共识节点的消息,包括至少Quorum个来自于不同共识节点的包含的所述轮次相同的消息。
可选的,在针对所述交易列表进行共识的第一轮次,所述投票包括表示认可所述交易列表的该交易列表的摘要值;以及,表示不认可所述交易列表的第二预设取值;在针对所述交易列表进行共识的第一轮次以外的其它轮次,针对所述交易列表的投票包括表示认可所述交易列表的第一预设值;以及,表示不认可所述交易列表的第二预设值。
可选的,所述第六消息中包括,发送该第六消息的共识节点投票认可的由所述目标共识节点针对所述目标区块提议的交易列表;
所述方法还包括:
任一共识节点在收集到至少Quorum个来自于不同共识节点的第六消息后,不再处理未包含在所述至少Quorum个第六消息中的针对所述目标区块提议的交易列表;或者,将未包含在所述至少Quorum个第六消息中的针对所述目标区块提议的交易列表的共识结果输出为共识失败。
可选的,所述方法还包括:
任一共识节点在收集到至少Quorum个来自于不同共识节点的第六消息后,如果所述至少Quorum个第六消息中包含的针对所述目标区块提议的交易列表中,还存在尚未输出共识结果的目标交易列表,则广播包含表示认可所述目标交易列表的投票的所述第二消息至其它共识节点。
可选的,所述阈值为可配置的阈值;
所述区块链系统支持在保守模式和乐观模式之间进行切换;其中,如果所述区块链系统切换为乐观模式,所述阈值的取值范围为[1,f];如果所述区块链系统切换为保守模式,所述阈值的取值范围为[f+1,n-f];其中,所述f表示所述区块链系统采用的共识协议所支持的容错节点数;所述n表示所述区块链系统中的共识节点的总数量。
可选的,所述方法还包括:
获取作为共识结果输出的由各个共识节点针对所述目标区块提议的交易列表,并将获取到的交易列表汇总为用于构建所述目标区块的交易集合;
对所述交易集合中的交易进行排序,并基于对交易进行排序后的所述交易集合构建所述目标区块。
可选的,对所述交易集合中的交易进行排序,包括:
分别计算所述交易集合中的交易的hash值,并基于所述hash值对所述目标交易集合中的交易进行排序;或者,
将所述交易集合的交易分别和所述交易集合进行数据合并后计算hash值,并基于所述hash值对所述交易集合中的交易进行排序。
本说明书还提出一种区块链系统中的共识方法,包括:
第一轮:接收到第一消息的共识节点广播第二消息至其它共识节点;所述第一消息中包括待共识的目标区块的区块标识;以及,针对所述待共识的目标区块提议的交易列表;所述第二消息中包含所述目标区块的区块标识以及针对所述交易列表的投票;
第二轮,接收到所述第二消息的共识节点收集来自于不同共识节点的针对所述交易列表的投票;如果收集到至少Quorum个来自不同共识节点的表示认可所述交易列表的投票,并且自身针对该交易列表未广播过不同的投票,则广播用于承诺不再更改针对所述交易列表的投票的第三消息至其它共识节点;其中,所述第三消息包含所述目标区块的区块标识以及表示认可所述交易列表的投票;
如果任一共识节点收集到至少Quorum个来自于不同共识节点的包含表示认可所述交易列表的投票的所述第三消息,则将所述交易列表作为与所述区块标识对应的目标区块的至少一部分共识结果进行输出。
本说明书还提出一种区块链系统的节点设备,其中所述区块链系统采用的共识协议为基于区块标识来发起共识提议的目标区块的异步共识协议,包括:
接收模块,接收共识节点发送的第一消息;其中,所述第一消息包含待共识的目标区块的区块标识;以及,所述共识节点针对所述目标区块提议的交易列表;
确定模块,响应于接收到的所述第一消息,确定所述区块链系统中的目标共识节点的数量是否达到阈值;其中,所述目标共识节点为针对所述目标区块提议的交易列表已作为共识结果进行了输出的共识节点;
广播模块,如果所述区块链系统中的目标共识节点的数量达到阈值,则广播第六消息至其它共识节点;其中,所述第六消息包含所述区块标识,用于声明不再接受除了所述目标共识节点以外的其它共识节点针对所述目标区块提议的交易列表。
上述实施例中,在接收到某一共识节点针对目标区块提议的交易列表时,可以确定针对该目标区块提议的交易列表已作为共识结果进行了输出的目标共识节点的数量是否达到阈值,并在该数量达到阈值时,就可以通过发送包含该目标区块的区块标识的消息,来声明不再接受除了该目标共识节点以外的其它共识节点针对该目标区块提议的交易列表,而不需要等待其它共识节点针对该目标区块提议的交易列表共识完成,从而可以加快共识进程。
附图说明
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本说明书一实施例中实用拜占庭容错算法常规阶段的示意图;
图2是本说明书一实施例中实用拜占庭容错算法视图切换阶段的示意图;
图3是本说明书一实施例中蜜獾拜占庭容错算法的示意图;
图4是本说明书一实施例中的共识节点分布图;
图5是本说明书一实施例中的一种区块链系统中的共识方法的流程图;
图6是本说明书一实施例中共识协议的示意图;
图7是本说明书一实施例中共识协议的示意图;
图8是本说明书一实施例中共识协议的示意图;
图9是本说明书一实施例中共识协议的示意图;
图10是本说明书一实施例中的另一种区块链系统中的共识方法的流程图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
目前主流的共识协议中,通常可以包括异步共识协议和非异步共识协议两类。
例如,PBFT协议就属于半同步(partial synchronous)协议,而HoneyBadgerBFT算法属于一种异步(asynchronous)协议。
以PBFT为例,在PBFT算法中,所有的副本(replica)在一个被称为视图(View)的轮换过程(succession of configuration)中运行。在某个视图中,一个副本作为主节点(primary),其他的副本作为备份节点(backups)。视图是连续编号的整数。主节点由公式p=v mod|R|计算得到,这里v是视图编号,p是副本编号,|R|是副本集合的个数。该算法中假设,当最多存在f个副本(即节点)失效时,如果存在总数为至少3f+1个副本,就能保证在异步系统中提供安全性和活性。为了能够确保所有副本的数据一致性要求和容错要求,需要的一定数量副本的集合,一般是分布式系统中的大多数节点构成的集合,构成大多数(Quorum)。例如在总节点数n为3f+1(n=3f+2或n=3f的情况一般不会对容错效果带来提升)的情况下,Quorum为2f+1。这样,对于包含四个节点的分布式系统,任意三个节点可以构成一个Quorum。
PBFT包括Normal Case Phase和View Change Phase两个过程。
请参见图1,图1为Normal Case Phase(常规阶段)过程的流程图。
Normal Case Phase中主要包括PRE-PREPARE(预准备)、PREPARE(准备)和COMMIT(提交)三个阶段,其中3号节点例如可以表示宕机的节点(图1中以×表示)。当主节点失效的时候就需要启动视图更换(view change)过程,从而在系统存在故障时进行状态调整,更换新的主节点(如更换视图后Replica 1为主节点Primary)。
请参见图2,图2为View Change Phase(视图切换)的示意图。如果主节点掉线或者作恶而不广播客户端的请求等,客户端可以设置超时机制。如果超时的话,客户端可以向所有副本节点广播请求消息。副本节点检测出主节点作恶或者下线后,也可以发起ViewChange协议阶段,以更换主节点(经常简称为“换主”)。此外,也可能由于主节点发起错误的提议导致PRE-PREPARE、PREPARE和COMMIT三阶段共识过程失败,或者,PREPARE、COMMIT阶段可能达不成Quorum数量(如3f+1个节点中的2f+1个,也称为法定数量)的一致,也都无法完成共识。这些情况下也可能发起View Change协议阶段,以更换主节点。
PBFT协议属于半同步(partial synchronous)协议,其特点是假设网络一开始是异步的,但是能够从某一时刻开始同步。要在网络中让不同节点对同一提议达成共识,最简便的方式是设置主节点,由主节点来统一各个节点的意见。通过设置定时器,可以防止主节点出错。PBFT中,如果在有限时间内没有完成Normal Case Phase,会触发Backups发起ViewChange Phase,以更换主节点。PBFT将主节点固定在一个位置,所有请求都可以先发送到主节点,再由主节点广播到其他共识节点。除了引入额外的将请求发送到主节点的延迟之外,主节点的出入口带宽也可能成为性能瓶颈。
PBFT这类单主节点类型的协议,在同一次共识中只有主节点能够发起共识提议,其它节点没有能力发起共识提议。或者,如果其它节点也有提议,就需要将提议转发至主节点,由主节点代为发起提议。前者对于共识节点构造区块的权力是不公平的,后者虽然备份节点也可以提议,但是会增加主节点出口带宽的压力。对于大多共识节点都需要发起共识提议的情况,两者都不是特别适合。
与此相对的,HoneyBadgerBFT(也常简称为HBBFT)算法属于一种异步(asynchronous)协议。异步协议适用于异步网络,也就是这个网络中节点间的消息可以被任意延迟,但最终会到达。HoneyBadgerBFT中去掉了定时器,而是通过消息来驱动协议的执行。同时,HoneyBadgerBFT算法中所有节点都是对等的,没有主节点和备份节点之分,也就没有换主的过程。HBBFT等异步网络共识协议无主节点的概念,各节点都可提议请求,尝试构造区块,因此异步网络协议在一定程度上缓解了公平性和单节点瓶颈的问题。
请参见图2,图3为HoneyBadgerBFT算法单节点角度的流程图。
实际上,如前所述,HoneyBadgerBFT算法中所有节点都是对等的,也就是说,所有节点都可以执行图3所示的流程。如图3所示,从单节点的视角来看,HoneyBadgerBFT主要包括两个阶段,分别为可靠广播(Reliable BroadCast,RBC)和异步共识(AsynchronousBinary Agreement,ABA,异步二进制协议,也称为“01异步二元共识”)。此外,还有RBC和ABA之上的异步公共子集(Asynchronous Common Subset,ACS)协议。RBC阶段至少包括Rval、Echo、Ready三轮消息交互,ABA阶段至少包括BVAL、Aux和Coin三轮消息交互。RBC使用三轮消息交互保证可靠的提议广播。ABA首先进行两轮投票(BVAL和Aux消息),然后借助抛硬币(Coin)对各节点的提议统一认识,从而绕开半同步协议对网络同步的要求。
一次HoneyBadgerBFT共识,要经过RBC阶段和至少一次ABA阶段。在较佳的情况下,存在1/2的概率可以结束本次HoneyBadgerBFT共识过程,这样,需要经过6个轮次完成一次共识。此外,有1/4概率会进入再一次的ABA过程,如图3中第二次ABA过程(7、8、9轮次表示的ABA过程),有1/4概率会在第二轮结束,且存在至少1/4的概率可以结束本次HoneyBadgerBFT共识过程,这样,需要经过9个轮次完成一次共识。在第二次ABA过程后,整体上有1/8的概率会进入再一次的ABA过程……以此类推。
综上所述,HoneyBadgerBFT至少包括一次RBC(三轮)和一次ABA(三轮),如果ABA的投票结果与抛币结果不一致,协议进入新一轮的ABA(至少额外三轮)。
可见,HoneyBadgerBFT引入的抛币机制,给共识的轮次带来不确定性,从而可能造成共识的延迟增加。
另外,对于一个最终生成的区块(对应一个epoch)来说,一个节点可以运行一个ACS和n个RBC+n个ABA,n为共识节点个数,且其中1个RBC和ABA对应自身发起的共识提议,其它(n-1)个RBC和ABA对应其它(n-1)个节点发起的共识提议。也就是说,对于一个epoch来说,一个节点发起共识提议的同时,也会配合完成其它节点发起的共识提议。这样,对于一个节点来说,至少(n-f)个RBC结束后会将这些RBC已经完成的情况(通过Ready消息表示)发至ACS,进而由ACS为对应的ABA赋初值,启动对应的ABA过程。在至少(n-f)个共识提议完成ABA之后如果剩余的共识提议仍未完成RBC,则会被赋初值为0,进而执行该提议对应的ABA过程。从全局的视角来看,至少(n-f)个节点会执行相同的上述共识过程(至少(n-f)个不同节点发起提议的过程),并最终由ACS来收集各个提议的ABA结果后按照某种规则对ABA结果为1的提议排序后输出。
上述的过程中,与PBFT相反的,对各个参与共识的节点提出了较强的提议要求,即参与共识的节点需要在每一个epoch中都发起提议,不论这个节点是否真的有提议。如果这个节点实际上没有提议,也需要发起一个内容为空的提议请求(RBC中可以对这个空的提议请求加密,这样其他节点并不能确定这个提议的内容,以避免恶意节点因能看到提议中的内容而有选择的在BA过程中赋值输入或输出)。即使这个节点是失效节点,无法发出提议,那么在其他节点的ACS中仍然要给这个节点对应的提议留出位置。具体的,在其他节点中的每一个执行完至少Quorum个ABA且均共识为1(1表示投票认可)后,如果还没有收到这个节点的提议对应RBC阶段的Quorum个Ready消息,ACS需要给这个节点的提议对应的ABA初值赋为0(0表示投票不认可),进而进入ABA过程。这样,其它节点还需要配合完成这个失效节点对应提议的ABA过程。可见,以HoneyBadgerBFT为代表的传统的异步共识协议,通常采用的是以区块标识来明确待共识的区块,并由所有共识节点针对该区块标识对应的区块,共同发起提议的区块组建方式。
采用这种传统的区块组建方式,对于任意一个共识节点来说,自身针对该区块的提议的共识过程,需要等待、配合其它共识节点针对该区块的提议的共识完成。这可能就会导致部分网络通信时延较大的共识节点针对该区块的提议,无法快速高效的完成共识过程、输出共识结果,甚至可能会失去对该区块的构建权的问题。
例如,请参见图4,假设图4示出的联盟链中的4个共识节点分别部署于不同的国家,NodeUK位于英国,NodeDE位于德国,NodeFR位于法国,NodeCN位于中国。显然的,位于欧洲的NodeUK,NodeDE和NodeFR三个节点之间的通信时延较小,而这三个共识节点与位于亚洲的NodeCN通信时延较大。假设NodeUK,NodeDE和NodeFR三个共识节点之间的通信时延均为10ms,这三个欧洲节点与NodeCN的通信时延均为80ms。
如果该联盟链采用HoneyBadgerBFT共识协议,这4个共识节点中位于欧洲的3个节点即可以构成Quorum,且其在30ms多的时间内均能完成RBC过程,在另外的30ms多的时间内均能完成ABA过程,而NodeCN发起的提议由于需要等待、配合其它三个共识节点针对该区块的提议的共识完成,因此NodeCN的提议的RBC过程有较大概率在其它三个共识节点的ABA过程结束前仍然没有完成,导致NodeCN的提议在ABA赋初值中赋值为0,从而NodeCN的提议经常无法被纳入生成的区块中(按照抛币结果有大于1/2的概率),相当于NodeCN经常会由于网络通信延时较大而失去对该区块的构建权,无法向该区块中打包交易。而且,即使NodeCN拥有对区块的构造权,较大的延迟也会拖慢一次共识的过程。
为了应对以HoneyBadgerBFT为代表的传统的异步共识协议,采用上述传统的区块组建方式所面临的无法快速高效的完成共识过程、输出共识结果的问题,可以对这类异步共识协议的区块组建方式进行重新设计,不再采用区块标识来明确待共识的区块,而是采用发起共识提议的时刻对应的时间戳来明确待共识的区块。
除此之外,也可以不再采用所有共识节点针对该区块标识对应的区块共同发起提议的区块组建方式,而是由各个共识节点基于发起共识提议的时间戳,针对区块独立的发起提议,只在共识完成后再根据时间戳的顺序,对各个共识节点的提议的交易列表进行排序,再根据排序的顺序,来确定各个共识节点提议的交易列表到底隶属于哪个区块。
例如,上述重新设计了区块组建方式的共识协议可以是MyTumbler共识协议,与HoneyBadgerBFT共识协议不同的是,MyTumbler共识协议将HoneyBadgerBFT共识协议的RBC过程的后两轮和ABA过程的前两轮进行了合并,一定前提下可以缩短至3个轮次完成一次共识,三轮交互的消息分别是Val消息,ENDORSE消息和Prom消息。而在Val消息,ENDORSE消息和Prom消息中,均不再携带待共识的区块号,而是携带发起共识提议的时间戳。当一段时间内各个共识节点提议的交易列表均共识通过,再通过各个共识节点发起共识提议的时间戳的顺序,对各个共识节点提议的交易列表进行排序,并根据排序的顺序来确定各个共识节点提议的交易列表到底隶属于哪个区块。
通过将上述传统的区块组建方式重新设计为,基于时间戳来明确待共识的区块,虽然某种程度上可以省去在一个共识结果的生成过程中需要等待、配合其它共识提议的共识完成的步骤,但在实际应用中,会导致改进后的共识协议无法兼容以HoneyBadgerBFT为代表的采用上述传统的区块组建方式的共识协议。在实际应用中,一旦将区块链系统支持的共识协议由以HoneyBadgerBFT为代表的采用上述传统的区块组建方式的共识协议切换成上述改进后的共识协议,可能会导致上述区块链系统面临治理上的困难。
例如,以上述改进后的共识协议为MyTumbler共识协议为例,假设区块链系统默认采用的共识协议为HoneyBadgerBFT,此时共识完成的最新的区块高度为M。一旦区块链系统支持的共识协议由HoneyBadgerBFT切换为MyTumbler,此时区块链系统面临的治理上的困难,主要表现在以下两方面:
一方面,由于区块组建方式发生根本性的改变,区块链系统中网络通信延迟较大的共识节点(比如图4中的NodeCN)提议的交易列表在共识通过后,最终根据发起共识的时间戳的顺序,确定出的该交易列表所隶属的区块,可能是M号区块之后的某一个尚未成块的区块,比如该区块可以记为M+N号区块。由于M号到M+N号区块之间的各个区块均尚未成块,因此该网络通信延迟较大的共识节点提议的交易列表,需要等待M号到M+N-1号区块均成块完成后,才能添加到M+N号区块中,这显然会造成区块链系统面临治理上的困难。
另一方面,由于区块组建方式发生根本性的改变,区块链系统中网络通信延迟较小的共识节点(比如图4中的NodeUK,NodeDE和NodeFR中的任一共识节点),提议的交易列表在共识通过后,最终根据发起共识提议的时间戳的顺序,确定出的该交易列表所隶属的区块,可能是M号区块之前的一个已经成块的区块,比如该区块可以记为M-N号区块。此时该共识节点向一个已经成块的M-N号区块再次提议了交易列表,由于提议的该交易列表通常不能当作无效交易直接丢弃,而且M-N号区块通常也无法直接进行修改,则只能通过在链外进行区块回滚的方式,将该交易列表重新添加至M-N号区块,这显然也会造成区块链系统面临治理上的困难。
有鉴于此,本说明书提出一种既能缩短共识所需要轮次,又能够兼容以HoneyBadgerBFT为代表的传统的异步共识协议的新的异步共识协议设计。
请参见图5,图5为本说明书示出的一种区块链系统中的共识方法的流程图,所述方法包括如下的执行过程:
步骤502:第一轮:接收到第一消息的共识节点广播第二消息至其它共识节点;所述第一消息中包括待共识的目标区块的区块标识;以及,针对所述待共识的目标区块提议的交易列表;所述第二消息中包含所述目标区块的区块标识以及针对所述交易列表的投票;
本说明书中提出的共识协议,也属于一种异步共识协议。在异步共识协议中,所有参与共识的共识节点在角色上都可以是对等的,没有主节点和备份节点之分。对于任意一个共识节点来说,不仅可以发起共识提议,也可以参与由其他共识节点发起的提议的共识过程。
其中,需要说明的是,目前主流的异步共识协议,通常主要包括以下两类:
第一类异步共识协议,采用区块标识来明确待共识的区块;例如,可以是以HBBFT为代表的异步共识协议。第二类异步共识协议以及采用发起共识提议的时刻对应的时间戳来明确待共识的区块等两类算法。例如,可以是以MyTumbler为代表的异步共识协议。
如前所述,采用发起共识提议的时刻对应的时间戳来明确待共识的区块的异步共识协议,虽然在某种程度上可以省去在一个共识结果的生成过程中需要等待、配合其它共识提议的共识完成的步骤,但在实际应用中,会导致该异步共识协议无法兼容以HoneyBadgerBFT为代表的共识协议。
为了兼容以HoneyBadgerBFT为代表的共识协议,本说明书提出一种基于区块标识的MyTumbler共识协议(比如可以称之为MyTumbler-Seq算法)。该共识协议的消息交互过程,可以如图6所示。
在图6示出的共识协议中,仍然可以采用以区块标识来明确待共识的区块,并由所有共识节点针对该区块标识对应的区块共同发起提议的区块组建方式。
对于区块链网络中的任意一个共识节点来说,如果需要针对目标区块发起共识提议,可以通过向共识网络中的其他共识节点广播发送一个第一消息。
其中,该第一消息具体用于向目标区块发起共识提议。在该第一消息中,可以包括该目标区块的区块标识;例如,该区块标识可以是区块号。除此之外,在该第一消息中还可以包括由该共识节点针对该目标区块提议的交易列表。
例如,以Node0发起共识提议的视角来看,交互过程可以如图6所示。Node0可以向Node1、Node2和Node3广播发送一个第一消息,来针对目标区块发起共识提议。其中,该第一消息可以称之为PROPOSE消息。在该PROPOSE消息中,可以包括目标区块的区块标识(比如区块号),以及由Node0打包的交易列表,比如该交易列表可以标记为m0,m0中可以包括一系列的交易构成的集合{tx01,tx02,...,tx0n},tx0n表示m0中的第n笔交易。
在示出的一种实施方式中,PROPOSE消息的格式可以表示成<PROPOSE:sender,n,payload>;其中sender是发送该PROPOSE消息的共识节点的节点标识,n是待共识的区块的区块标识(比如区块号),payload是提案的内容,payload中可以包含由该共识节点打包的交易列表。
此外,第一消息还可以包括发送该第一消息的共识节点对m0的签名,例如记为sig00。一般地,第一共识节点Node0可以用自身的私钥对m0直接签名,得到sig00,也可以是先对m0进行hash计算,得到hash值(即摘要值),进而再用自身的私钥对该hash值签名,从而得到sig00,还可以是用自身的私钥对m0和ts0在内的数据直接进行签名或对m0和ts0在内的数据的hash值进行签名。
接收到第一消息的各共识节点可以验证接收到的第一消息的正确性;例如,可以采用发送该第一消息的公钥对第一消息中的签名进行验证。如果该签名通过验证,则可以确定接收到的第一消息为正确的消息。当接收到第一消息的各共识节点完成了针对第一消息的验证,确认接收到的该第一消息为正确的消息之后,此时各共识节点可以分别在其本地创建一个与该第一消息中包含的交易列表对应的共识实例。
其中,该共识实例,具体是指基于本说明书公开的共识协议对某一共识节点提议的交易列表进行共识处理的算法实例。各个共识节点可以通过在本地运行该共识实例,发起针对该第一消息中包含的交易列表的共识过程。
在实际应用中,对于异步共识协议来说,由于每一个共识节点都可以针对目标区块提议交易列表,因此对于区块链网络中的任意一个共识节点而言,其可能接收到多个由其它共识节点发送的针对目标区块进行提议的多个第一消息。在这种情况下,该共识节点则可以针对接收到的各个第一消息中包含的交易列表,在其本地分别创建一个对应的共识实例,也即该共识节点可以在本地同时创建多个共识实例,对不同的共识节点对目标区块提议的交易列表分别进行共识。
例如,以图6为例,Node0、Node1、Node2和Node3均可以向目标区块提议交易列表,则对于Node0、Node1、Node2和Node3中的任一共识节点而言,需要在本地创建由其它三个共识节点针对目标区块提议的交易列表对应的共识实例。
基于本说明书公开的共识协议,接收到第一消息的共识节点,在运行创建的共识实例,发起对该第一消息中的交易列表进行共识的过程中,每一轮次的共识投票都可以包括至少两轮的消息交互:
在第一轮的消息交互中,接收到第一消息的共识节点,可以向其它共识节点广播第二消息。
其中,该第二消息,具体用于针对该第一消息中包含的交易列表进行共识投票。在该第二消息中,可以包括发送该第二消息的共识节点针该第一消息中包含的交易列表的投票。当然,在该第二消息中也可以包括待共识的目标区块的区块标识。
例如,请继续参见图6,第一轮次的消息交互中,Node1、Node2、Node3在收到Node0广播的PROPOSE消息之后,各自可以分别广播第二消息至其它共识节点。其中,该第二消息可以称之为ENDORSE消息。在该ENDORSE消息中,可以包括对Node0针对目标区块提议的交易列表的投票。
在示出的一种实施方式中,ENDORSE消息的格式可以表示成<ENDORSE:sender,n,b>;其中sender是发送针对区块n发起提议的共识节点的节点标识(即发送上述PROPOSE消息的共识节点的节点标识),n是待共识的区块的区块标识(比如区块号),b是发送该ENDORSE消息的共识节点针对该sender向区块n提议的交易列表的投票内容(即接收到的上述PROPOSE消息中包含的交易列表)。
需要说明的是,在实际应用中,对PROPOSE消息包含的交易列表进行共识的过程中,通常可能需要经过多轮的投票,完成多轮次的共识,因此在该ENDORSE消息的格式中,还可以包含对该交易列表进行共识的轮次。该轮次通常可以用于表示对同一交易列表进行共识投票的轮次。例如,在这种情况下,ENDORSE消息的格式可以表示成<ENDORSE:sender,n,b,r>;其中,r表示针对sender向区块n提议的交易列表进行共识投票的轮次,该ENDORSE的格式中的其它参数的含义与之前提到的PROPOSE消息中的含义相同,不再赘述。
在示出的一种实施方式中,ENDORSE消息中包含的投票内容,具体可以是针对提议的交易列表的投票值。该投票值通常可以包括用于表示认可该交易列表的第一预设值和不认可该交易列表的第二预设值。比如,可以用1表示认可该交易列表,用0表示不认可该交易列表。
在实际应用中,为了对第一轮次的共识投票和其他轮次的共识投票进行区分,可以在针对交易列表进行共识的第一轮次的共识投票中,用该交易列表的摘要值(比如hash值)来表示认可该交易列表的投票值,用上述第二预设值来表示不认可该交易列表的投票值。而在针对交易列表进行共识的其它轮次的共识投票中,可以仍然采用第一预设值来表示认可该交易列表;以及,用上述第二预设值来表示不认可该交易列表。
例如,如果用r=0来表示针对交易列表进行共识的第一轮次,则第一轮次的共识过程中,共识节点之间交互的ENDORSE消息的格式可以表示成<ENDORSE:sender,n,h/0,r=0>;其中,h表示上述交易列表的摘要值。h/0表示ENDORSE消息中包含的针对上述交易列表的投票值为h或者0。而在针对交易列表进行共识的其它轮次,共识节点之间交互的ENDORSE消息的格式可以表示成<ENDORSE:sender,n,0/1,r>。0/1表示ENDORSE消息中包含的针对上述交易列表的投票值为1或者0。
需要说明的是,在第一轮的消息交互中,Node0可以不参与广播第二消息,只由Node1、Node2、Node3分别广播第二消息至其它共识节点。这是因为Node0在第一轮次中发起共识提议,本身即可以代表Node0对第一消息中包含的交易列表是认可的。
还需要强调的是,在第一轮的消息交互中,共识节点可以更改自己的投票结果并再次投票,即发出多个包含的投票内容不同的ENDORSE消息。例如,Nod1可以首次发出内容是所述交易列表的hash值的ENDORSE消息,以表示对所述共识提议中的交易列表的认可,而后续可以再次发送内容是0的ENDORSE消息,以表示对所述共识提议中的交易列表的不认可。再例如,Node2可以首次发出内容是0的ENDORSE消息,以表示对所述共识提议中的交易列表的不认可,而后续可以再次发出内容是所述交易列表的hash值的ENDORSE消息,以表示对所述共识提议中的交易列表的认可。
此外,第二消息中还可以包括对所述交易列表的签名。前述提到,接收到第一消息的共识节点可以验证接收到的第一消息的正确性,例如Node1验证Node0的签名是否正确。进而,接收到第一消息的共识节点,还可以用自己的私钥对第一消息中的交易列表进行签名,并将该签名添加到第二消息中。
步骤504,第二轮,接收到所述第二消息的共识节点收集来自于不同共识节点的针对所述交易列表的投票;如果收集到至少Quorum个来自不同共识节点的表示认可所述交易列表的投票,并且自身针对该交易列表未广播过不同的投票,则广播用于承诺不再更改针对所述交易列表的投票的第三消息至其它共识节点;其中,所述第三消息包含表示认可所述交易列表的投票;
如前所述,在第一轮的消息交互中,接收到第一消息的共识节点,可以通过继续向其它共识节点广播第二消息,来对第一消息中包含的针对目标区块提议的交易列表进行共识投票。在第二轮的消息交互中,接收到第二消息的共识节点,则可以收集来自于不同共识节点的针对上述第一消息中包含的交易列表的投票。
例如,在一个例子中,在第二轮的消息交互中,接收到ENDORSE消息的各个共识节点均可以收集来自于不同共识节点的包含的轮次r相同,并且包含的sender和n也相同的ENDORSE消息,然后进一步获取收集到的ENDORSE消息中包含的投票。
在第二轮的消息交互中,对于任一接收到第二消息的共识节点而言,如果其收集到至少Quorum个来自不同共识节点的表示认可上述交易列表的投票,并且自身针对该交易列表未广播过不同的投票,则可以继续向其它共识节点广播第三消息。
其中,Quorum对应的具体数量,通常取决于区块链网络中共识节点的总数。例如,如果区块链网络中共识节点的总节点数n为3f+1,f表示区块链系统采用的共识协议所支持的容错节点数;则Quorum对应的数量可以是2f+1。
上述第三消息,具体用于承诺不再更改针对该交易列表的投票,也即广播发送第三消息的共识节点在后续轮次的投票中,将不会更改自身的投票结果,仍然保持与第一轮投票相同的投票内容。
由于该第三消息是在收集到至少Quorum个来自不同共识节点的表示认可上述交易列表的投票的情况下发送的,因此在该第三消息中,也可以包括表示认可该交易列表的投票。在下一轮的投票中,发送第三消息的共识节点,需要将自己的投票结果保持为认可该交易列表。
例如,请继续参见图6,第二轮次的消息交互中,Node1、Node2、Node3在向其它共识节点广播了ENDORSE消息之后,Node0、Node1、Node2、Node3均可以开始收集其它共识节点发送的ENDORSE消息中包含的对上述交易的投票内容,并在收集到至少Quorum个来自不同共识节点的表示认可上述交易列表的投票,并且自身针对该交易列表未广播过不同的投票的情况下,继续向其它各共识节点广播发送第三消息。其中,该第二消息可以称之为PROM消息。在该PROM消息中,可以包括表示认可由Node0提议的交易列表的投票。
在示出的一种实施方式中,PROM消息的格式可以表示成<PROM:sender,n,b,r>;其中b表示的是表示认可上述交易列表的投票值,该PROM消息的格式中的其它参数的含义与之前提到的ENDORSE消息和PROPOSE消息中的含义相同,不再赘述。
此外,第三消息中也可以包括对所述交易列表的签名,不再赘述。
在示出的一种实施方式中,在第二轮的消息交互中,对于任一接收到第二消息的共识节点而言,如果其收集到至少Quorum个来自不同共识节点的表示认可上述交易列表的投票,并且自身针对该交易列表广播过不同的投票,则可以继续向其它共识节点广播第四消息。
其中,需要说明的是,上述第四消息相对于第三消息,不再具有承诺不再更改针对该交易列表的投票的功能,也即广播发送第四消息的共识节点在后续轮次的投票中,可以更改自身的投票结果。例如,在第一轮投票中,投票结果为1,表示认可交易列表,而在下一轮投票中,可以将投票结果更改为0,表示不认可交易列表。
由于该第四消息是在收集到至少Quorum个来自不同共识节点的表示认可上述交易列表的投票的情况下发送的,因此在该第四消息中,也可以包括表示认可该交易列表的投票。在下一轮的投票中,发送第四消息的共识节点,可以将投票结果更改为认可该交易列表。
例如,请继续参见图6,第二轮次的消息交互中,Node1、Node2、Node3在向其它共识节点广播了ENDORSE消息之后,Node0、Node1、Node2、Node3均可以开始收集其它共识节点发送的ENDORSE消息中包含的对上述交易列表的投票内容,并在收集到至少Quorum个来自不同共识节点的表示认可上述交易列表的投票,并且自身针对该交易列表广播过不同的投票的情况下,继续向其它各共识节点广播发送第四消息。其中,该第四消息可以称之为COMMIT消息。在该COMMIT消息中,也可以包括表示认可由Node0提议的交易列表的投票。
在示出的一种实施方式中,COMMIT消息的格式可以表示成<PROM:sender,n,b,r>;其中b表示的是表示认可上述交易列表的投票值,该COMMIT消息的格式中的其它参数的含义与之前提到的ENDORSE消息和PROPOSE消息中的含义相同,不再赘述。
此外,第四消息中也可以包括对所述交易列表的签名,不再赘述。
需要强调的是,区块链网络中的至少Quorum数量的共识节点中的每一个,都可以执行以上提到的两轮的消息交互,对其它共识节点提议的交易列表进行共识。
例如,上述图6的实施例,是Node0发起共识提议的视角的共识交互过程。其中图6中的Node1、Node2和Node3发起共识提议的视角的共识交互过程,可以分别参见图7、8、9中所示。综合图6-9,从整体的视角来看,区块链网络中对某一个目标区块进行共识的过程,可以是图6、7、8、9的叠加。
步骤506:如果任一共识节点收集到至少Quorum个来自于不同共识节点的包含表示认可所述交易列表的投票的所述第三消息,则将所述交易列表作为与所述区块标识对应的目标区块的至少一部分共识结果进行输出。
各个共识节点在本地运行与某一共识节点提议的交易列表对应的共识实例,对该共识节点提议的交易列表进行共识的过程中,在执行了以上提到的第二轮的消息交互,向其它共识节点广播发送了上述第三消息和上述第四消息之后,可以收集由其它共识节点广播发送的上述第三消息或者上述第四消息;
例如,在一个例子中,在向其它共识节点广播发送了PROM消息或者COMMIT消息之后,还可以收集来自于不同共识节点的包含的轮次r相同,并且包含的sender和n也相同的PROM消息或者COMMIT消息。
然后,可以基于收集到的上述第三消息或者上述第四消息,来确定各节点是否对上述交易列表的共识投票达成一致。
如果任一共识节点收集到至少Quorum个来自于不同共识节点的包含表示认可所述交易列表的投票的第三消息,此时可以确定区块链网络中投票认可该交易列表,并且承诺不再更改投票结果的共识节点达到了Quorum个,则可以将该交易列表作为与上述区块标识对应的目标区块的至少一部分共识结果进行输出。此时输出的该交易列表即为上述共识实例的执行结果。
通过这种方式,可以在一定前提下将共识过程缩短至2个轮次完成一次共识,并避免在共识过程中触发二元共识。
在示出的一种实施方式中,如果任一共识节点收集到至少Quorum个来自于不同共识节点的消息,但收集到的消息中除了包含上述第三消息以外还包含上述第四消息,此时可以确定区块链网络中投票认可该交易列表,并且承诺不再更改投票结果的共识节点未达到Quorum个,在这种情况下,可以运行二元共识协议对收集到的至少Quorum个消息中包含的投票集合进行二元共识。例如,常见的二元共识协议诸如可以是公共抛硬币算法。
需要说明的是,对于收集到至少Quorum个来自于不同共识节点的消息的共识节点而言,其收集到的至少Quorum个消息中包含的第三消息和第四消息中的投票值,可以相同也可以不相同。
也即,对于该共识节点而言,无论其收到的至少Quorum消息中包含的第三消息和第四消息中的投票值是否相同,都可以触发运行二元共识协议,对该至少Quorum个消息中包含的投票集合进行二元共识。
在示出的一种实施方式中,对于某一个共识实例而言,如果确定需要运行二元共识协议对收集到的至少Quorum个消息中包含的投票集合进行二元共识,还可以在以上提到的两轮的消息交互的基础之上,再增加一轮消息交互。
在这种情况下,如果任一共识节点收集到至少Quorum个来自于不同共识节点的消息,但收集到的消息中除了包含上述第三消息以外还包含上述第四消息,此时可以继续向其它共识节点广播第五消息。
其中,上述第五消息,具体用于将各共识节点收集到的至少Quorum个消息中包含的投票集合扩散到其它共识节点。在该第五消息中可以包括收集到的所述至少Quorum个消息中包含的投票集合。
例如,该第五消息可以称之为CON消息。在示出的一种实施方式中,COMMIT消息的格式可以表示成<CON:sender,n,br,r>;其中br表示收集到的至少Quorum个消息中包含的投票集合,该CON消息的格式中的其它参数的含义与之前提到的ENDORSE消息和PROPOSE消息中的含义相同,不再赘述。
各共识节点在向其它共识节点广播发送了第五消息后,还可以收集由其它共识节点广播发送第五消息,并在收集到至少Quorum个来自于不同共识节点的第五消息之后,可以计算上述至少Quorum个第五消息中包含的投票集合的并集,得到目标投票集合,然后再运行二元共识协议对该目标投票集合进行二元共识。
在示出的一种实施方式中,如果经过二元共识,对上述投票集合中表示认可上述交易列表的投票达成一致,则可以将该交易列表作为与上述区块标识对应的目标区块的至少一部分共识结果进行输出。此时输出的该交易列表即为上述共识实例的执行结果。
相反,如果经过二元共识,对上述投票集合中表示认可上述交易列表的投票未达成一致,此时可以重新执行以上提到的第一轮和第二轮的消息交互,针对该共识实例对应的交易列表执行下一轮次的共识投票,直到得到相关的共识实例的执行结果。
需要说明的是,共识节点采用的二元共识协议的具体类型,在本说明书中不进行限定;例如,可以是公共抛硬币算法。其中,基于公共抛硬币算法来对上述投票集合进行二元共识的计算过程,在实际应用中通常取决于实现该公共抛硬币算法时所采用的技术,在本说明书中不再进行详述,本领域技术人员可以参考相关技术中的记载;比如,上述公共硬币算法可以是基于门限签名技术实现的公共硬币算法。
在示出的一种实施方式中,在以上提到的第一轮的消息交互中,对于任一共识节点来说,如果接收到了f+1不同共识节点发送的包含表示认可上述交易列表的投票的第二消息,并且自身未广播过包含表示不认可上述交易列表的投票的第三消息,还可以继续向其它节点广播包含表示认可所述交易列表的投票的第二消息;其中,f表示区块链系统采用的共识协议所支持的容错节点数。
需要说明的是,如前所述,包含表示不认可上述交易列表的投票的第三消息,通常用于承诺自身对该交易列表的投票将始终是不认可,不再会更改为认可。相应的,该共识节点自身未广播过包含表示不认可上述交易列表的投票的第三消息,则表明该共识节点针对该交易列表的投票可以更改为认可。
因而,对于任一共识节点来说,在接收到了f+1不同共识节点发送的包含表示认可上述交易列表的投票的第二消息,并且自身未广播过包含表示不认可上述交易列表的投票的第三消息的情况下,继续向其它节点广播包含表示认可所述交易列表的投票的第二消息,实际上是对这f+1个不同共识节点针对该交易列表的投票结果的一种认可和跟随,间接上起到了对这f+1个不同共识节点针对该交易列表的投票结果进行放大的效果。例如,基于这种机制,只要f+1个不同共识节点针对该交易列表的投票结果为认可,其它未进行过承诺的共识节点,就可以跟随这f+1个不同共识节点的投票观点,也投票认可该交易列表。
通过这种方式,可以推动各个共识节点对投票认可该交易列表的投票观点,快速的达成一致,从而间接上可以提升整个共识协议的共识效率。
通过以上的共识协议,可以在一定前提下将共识过程缩短至2个轮次完成一次共识,并避免在共识过程中触发二元共识,从而可以显著降低共识过程带来的延迟。
而且,在共识过程中仍然采用了以区块标识来明确提议的交易列表所属的待共识区块,并由所有共识节点针对该区块标识对应的待共识区块共同发起提议的区块组建方式,使得该共识协议可以与传统的支持以区块标识来明确提议的交易列表所属的待共识区块的共识协议相互兼容,从而可以避免区块链系统在发生共识协议切换之后,与旧的共识协议不兼容而造成的治理上的困难。
目前主流的异步共识协议,为了提升共识效率,通常都会引入针对共识提议的pass机制。所谓pass机制,是指在某一轮共识中,如果已经有足够多的针对该目标区块的提议已经共识通过,则区块链网络中的共识节点,就不再接受剩余节点针对该目标区块的提议。
在实际应用中,目前主流的异步共识协议在引入pass机制时,通常是将pass机制作为一个子流程,耦合在二元共识阶段的二元共识的流程之中。
例如,以HoneyBadgerBFT算法为例,HoneyBadgerBFT算法中具有与以上提到的pass机制近似的机制,在HoneyBadgerBFT算法的ABA阶段,如果确定已经有足够多的针对该目标区块的提议已经共识通过,则可以将针对剩余节点的提议的投票(即ABA初值)强制赋值为0(表示不认可)后进入后续的ABA阶段。
不难理解,HoneyBadgerBFT算法中的pass机制,实际上也是作为一个子流程耦合在ABA阶段的抛币环节之中。
有鉴于此,本说明书中,还提出一种与基于区块标识来发起共识提议的目标区块的异步共识协议中包含的二元共识的过程进行解耦的pass机制。
请参见图10,图10为本说明书示出的一种区块链系统中的共识方法的流程图,其中所述区块链系统采用的共识协议为基于区块标识来发起共识提议的目标区块的异步共识协议;所述方法应用于所述区块链系统中的任一共识节点,所述方法包括如下的执行过程:
步骤1002,接收共识节点发送的第一消息;其中,所述第一消息包含待共识的目标区块的区块标识;以及,所述共识节点针对所述目标区块提议的交易列表;
需要说明的是,在本实施例中,上述区块链系统采用的共识协议,包括基于区块标识来发起共识提议的目标区块的异步共识协议。例如,在一个例子中,上述区块链系统采用的共识协议,可以是HoneyBadgerBFT共识协议,也可以是如图6示出的基于区块标识的MyTumbler共识协议。
上述第一消息,仍然可以是上述区块链系统采用的共识协议中定义的,用于向目标区块发起共识提议的消息。例如,以上述区块链系统采用的共识协议是如图6示出的基于区块标识的MyTumbler共识协议为例,上述第一消息仍然可以是上述PROPOSE消息。
在该第一消息中,可以包含待共识的目标区块的区块标识;以及,所述共识节点针对所述目标区块提议的交易列表。
步骤1004,响应于接收到的所述第一消息,确定所述区块链系统中的目标共识节点的数量是否达到阈值;其中,所述目标共识节点为针对所述目标区块提议的交易列表已作为共识结果进行了输出的共识节点;
对于任一共识节点来说,在接收到其它共识节点发送的第一消息之后,可以响应于该第一消息,可以统计区块链系统中针对目标区块提议的交易列表已作为共识结果进行输出的目标共识节点的数量;例如,可以统计本地创建的与其它各个共识节点针对目标区块提议的交易列表对应的共识实例中,已经得到执行结果的共识实例的数量。然后,可以进一步确定统计出的该数量是否达到阈值S。
步骤1006,如果所述区块链系统中的目标共识节点的数量达到阈值,则广播第六消息至其它共识节点;其中,所述第六消息包含所述区块标识,用于声明不再接受除了所述目标共识节点以外的其它共识节点针对所述目标区块提议的交易列表。
如果针对目标区块提议的交易列表已作为共识结果进行输出的目标共识节点的数量达到阈值S,此时该共识节点可以继续向其它共识节点广播第六消息;
其中,上述第六消息,具体用于声明不再接受所述S个不同的共识节点(即上述目标共识节点)以外的其它共识节点针对该目标区块提议的交易列表。
例如,该第六消息可以称之为PASS消息。在示出的一种实施方式中,PASS消息的格式可以表示成<PASS:sender,n,EB>;其中EB表示发送该PASS消息的共识节点投票认可的由所述S个不同的共识节点针对所述目标区块提议的交易列表;比如,可以是发送该PASS消息的共识节点在上一次发送PASS消息之后,该共识节点投票认可的针对所述目标区块提议的交易列表。该PASS消息的格式中的其它参数的含义与之前提到的ENDORSE消息和PROPOSE消息中的含义相同,不再赘述。
需要说明的是,上述第六消息的编号,仅仅是为了区分不同的共识消息,并不代表该消息的发送顺序;也即,在实际应用中,对于第六消息而言,其发送顺序并不一定落后于第五消息。
在示出的一种实施方式中,对于任一共识节点来说,除了可以向其它共识节点广播发送第六消息以外,还可以接收由其它共识节点广播发送的第六消息。
任一共识节点在收集到至少Quorum个来自于不同共识节点的第六消息后,可以获取收集到的至少Quorum个来自于不同共识节点的第六消息中包含的针对所述目标区块提议的交易列表(即以上提到的PASS消息中的EB);比如,可以将至少Quorum个来自于不同共识节点的第六消息中包含的交易列表取并集,生成一个更大的交易列表;然后,可以不再处理未包含在上述至少Quorum个第六消息中的针对所述目标区块提议的交易列表;或者,将未包含在所述至少Quorum个第六消息中的针对所述目标区块提议的交易列表的共识结果输出为共识失败。比如,直接将本地创建的,与未包含在所述至少Quorum个第六消息中的针对所述目标区块提议的交易列表对应的共识实例的执行结果输出为共识失败(比如输出为0)。
在示出的一种实施方式中,任一共识节点在收集到至少Quorum个来自于不同共识节点的第六消息后,还可以确定所述至少Quorum个第六消息中包含的针对所述目标区块提议的交易列表中,是否还存在尚未输出共识结果的目标交易列表;例如,可以确定该共识节点本地创建的,与所述至少Quorum个第六消息中包含的针对所述目标区块提议的交易列表对应的共识实例中,是否还存在尚未得到执行结果的共识实例。如果存在,则可以继续广播包含表示认可所述目标交易列表的投票的第二消息至其它共识节点,以继续推进完成针对该目标交易列表的共识过程。
需要说明的是,以上提到的S,具体可以是一个可配置的阈值,在实际应用中,可以基于所述区块链系统采用的共识协议所支持的容错节点数f,来灵活的配置S的取值。
例如,在示出的一种实施方式中,区块链系统可以支持在保守模式和乐观模式之间进行切换。其中,在保守模式下,S将对应一个数值更大的取值范围。如果所述区块链系统切换为乐观模式,所述S的取值范围可以为[1,f];如果所述区块链系统切换为保守模式,所述S的取值范围可以为[f+1,n-f];其中,所述f表示所述区块链系统采用的共识协议所支持的容错节点数;所述n表示所述区块链系统中的共识节点的总数量(比如3f+1)。
对于任一共识节点来说,在接收到其它共识节点发送的第一消息之后,除了可以执行上述步骤1002-步骤1006描述的pass机制,来声明不再接受除了上述目标共识节点以外的其它共识节点针对所述目标区块提议的交易列表以外,还可以响应于接收到的所述第一消息,运行区块链系统采用的所述异步共识协议对该第一消息中包含的交易列表进行共识。
在示出的一种实施方式中,上述区块链系统采用的异步共识协议,可以是图6示出的基于区块标识的MyTumbler共识协议,而基于该共识协议对上述第一消息包含的交易列表进行共识的过程,仍然可以采用图5示出的两轮消息交互完成,具体的共识过程不再赘述,可以参考之前的实施例的记载。
在示出的一种实施方式中,如果上述区块链系统采用的异步共识协议,可以是图6示出的基于区块标识的MyTumbler共识协议,则在第一轮的消息交互中,对于接收到第一消息的共识节点而言,如果其确定出区块链系统中针对目标区块提议的交易列表已作为共识结果进行输出的目标共识节点的数量达到阈值S,则该共识节点广播的第二消息中可以包含表示不认可所述第一消息包含的所述交易列表的投票。反之,如果其确定出区块链系统中针对目标区块提议的交易列表已作为共识结果进行输出的目标共识节点的数量未达到阈值S,则该共识节点广播的第二消息中可以包含表示认可所述第一消息包含的所述交易列表的投票。
通过这种方式,可以在接收到某一共识节点发送的第一消息时,在确定已经有S个共识节点针对目标区块提议的交易列表共识通过的情况下,不再接受该第一消息中包含的针对目标区块提议的交易列表,并针对该第一消息中包含的针对目标区块提议的交易列表投票为不认可,从而可以加快共识进程。通过以上实施例可知,由于本说明书公开的异步共识协议,可以将pass机制与共识协议中包含的二元共识的过程进行了解耦,并将pass机制作为子流程耦合到以上提到的第一轮的消息交互的流程之中,因此该共识协议中包含的二元共识过程,将变成一个完全独立的子流程。
而一个完全独立的子流程,对于共识协议本身来说,将彻底演变成一种可以与共识协议配合使用的黑盒算法。基于这一点也不难理解,本说明书公开的该异步共识协议,将可以灵活的选择不同的二元共识协议来配合使用,因而相对于现有的诸如HoneyBadgerBFT等主流的异步共识协议,算法的通用性更好。另外,本说明书公开的异步共识协议,除了可以将pass机制与共识协议中包含的二元共识的过程进行解耦以外,还可以在确定针对该目标区块提议的交易列表已作为共识结果进行了输出的目标共识节点的数量达到阈值时,就可以立即通过发送包含该目标区块的区块标识的消息,来声明不再接受除了该目标共识节点以外的其它共识节点针对该目标区块提议的交易列表,而不需要等待其它共识节点针对该目标区块提议的交易列表共识完成,从而可以提高共识协议的共识效率。
例如,以传统的基于时间戳来发起共识提议的MyTumbler算法为例,在MyTumbler算法中,对于任一共识节点来说,如果在某个时刻t的交易列表已经共识通过,该共识节点可以广播一个携带该时刻t对应的时间戳的PASS消息,自身已经经过该时刻t,将不再接受该时刻t之前提议的交易列表;比如,共识节点发出的pass消息实际上表达的是一种承诺,承诺在该时刻t之前提议的交易列表,自己将会投票为0(表示不认可),或者是不再处理在该时刻t之前提议的交易列表。当一个个共识节点收集到至少Quorum个Pass消息后(包括自身最新广播的Pass消息),可以计算这些Pass消息中携带的时间戳的最小值,来作为与关键时刻对应的时间戳。从而,这一个个共识节点可以确认至少Quorum个共识节点都经过了该关键时刻,从而对该关键时刻达成一致。后续,这一个个共识节点将不再接受由其它共识节点该关键时刻t之前提议的交易列表。比如,将对在该关键时刻t之前提议的交易列表,自己将会投票为0(表示不认可),或者是不再处理在该关键时刻t之前提议的交易列表。各节点需要等待接收到Quorum个Pass消息后,才可以通过计算这些Pass消息中携带的时间戳的最小值,来确定出与关键时刻对应的时间戳。
而以本说明书提出的基于区块标识来发起共识提议的MyTumbler算法为例,在该改进后的MyTumbler算法中,共识节点可以在以上描述的第一轮的提案阶段,即接收到第一消息时,就可以在确定已经有足够多的共识节点对目标区块提议的交易列表已作为共识结果进行了输出的情况下,立即发送pass消息,而无需等待收集到足够多的pass消息。
由于改进之后的基于区块标识来发起共识提议的MyTumbler算法,相对于传统的基时间戳来发起共识提议的MyTumbler算法而言,无需等待收集到足够多的pass消息,就可以通过发送一个包含目标区块的区块标识的pass消息的方式,来声明不再接受除了该目标共识节点以外的其它共识节点针对该目标区块提议的交易列表,进而完成对其它共识节点针对该目标区块提议的交易列表的pass处理,因此改进后的MyTumbler算法的pass机制显然更加高效。
在本说明书中,对于任一共识节点来说,当各个共识节点针对目标区块提议的交易列表均完成了以上描述的共识过程,此时该共识节点还可以获取作为共识结果输出的由各个共识节点针对该目标区块提议的交易列表,并将获取到的交易列表汇总为用于构建目标区块的交易集合。然后,可以对该交易集合中的交易进行排序,再基于对交易进行排序后的该交易集合来构建目标区块。
其中,在对上述交易集合中的交易进行排序时,所采用的排序方式,在本说明书中不进行特别限定;
例如,在示出的一种实施方式中,可以分别计算交易集合中的交易的hash值,并基于所述hash值对目标交易集合中的交易进行排序;
通过这种排序方式,可以基于交易的内容来对交易进行排序。
在示出的另一种实施方式中,也可以将交易集合的交易分别和所述交易集合进行数据合并后计算hash值;即将每笔交易和交易集合进行合并后作为一个整体来计算hash值,然后基于计算出的该hash值对交易集合中的交易进行排序。
如果采用前者的基于交易内容的哈希对交易进行排序的方式,对于交易发送者而言,可以通过调整交易内容的方式,对基于交易内容计算出的hash值的取值进行干预,去寻找一个更小的hash值,从而为该笔交易在目标区块中争取一个排序更靠前的位置来优先执行。
如果采用后者的将所述交易集合的交易分别和所述交易集合进行数据合并后计算hash值,并基于所述hash值对所述交易集合中的交易进行排序的方式,由于交易发送者无法预测整个交易集合的内容,因此将无法对最终计算出的hash值进行干预,从而从根本上杜绝了通过调整交易内容让为笔交易在目标区块中争取一个排序更靠前的位置来优先执行的情况发生。
本说明书还提供一种区块链系统实施例,包括:
第一轮:接收到第一消息的共识节点广播第二消息至其它共识节点;所述第一消息中包括待共识的目标区块的区块标识;以及,针对所述待共识的目标区块提议的交易列表;所述第二消息中包含针对所述交易列表的投票;
第二轮,接收到所述第二消息的共识节点收集来自于不同共识节点的针对所述交易列表的投票;如果收集到至少Quorum个来自不同共识节点的表示认可所述交易列表的投票,并且自身针对该交易列表未广播过不同的投票,则广播用于承诺不再更改针对所述交易列表的投票的第三消息至其它共识节点;其中,所述第三消息包含表示认可所述交易列表的投票;
如果任一共识节点收集到至少Quorum个来自于不同共识节点的包含表示认可所述交易列表的投票的所述第三消息,则将所述交易列表作为与所述区块标识对应的目标区块的至少一部分共识结果进行输出。
本说明书还提供一种区块链系统的节点设备的实施例,其中所述区块链系统采用的共识协议为基于区块标识来发起共识提议的目标区块的异步共识协议,所述节点设备包括:
接收模块,接收共识节点发送的第一消息;其中,所述第一消息包含待共识的目标区块的区块标识;以及,所述共识节点针对所述目标区块提议的交易列表;
确定模块,响应于接收到的所述第一消息,确定所述区块链系统中的目标共识节点的数量是否达到阈值;其中,所述目标共识节点为针对所述目标区块提议的交易列表已作为共识结果进行了输出的共识节点;
广播模块,如果所述区块链系统中的目标共识节点的数量达到阈值,则广播第六消息至其它共识节点;其中,所述第六消息包含所述区块标识,用于声明不再接受除了所述目标共识节点以外的其它共识节点针对所述目标区块提议的交易列表。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称为硬件描述语言(HardwareDescription Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(AdvancedBoolean Expression Language)、AHDL(Altera Hardware Description Language)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(JavaHardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(Ruby HardwareDescription Language)等,目前最普遍使用的是VHDL(Very-High-Speed IntegratedCircuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为服务器系统。当然,本说明书不排除随着未来计算机技术的发展,实现上述实施例功能的计算机例如可以为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
虽然本说明书一个或多个实施例提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。例如若使用到第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其他的形式。
本说明书是参照根据本说明书实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储、石墨烯存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本领域技术人员应明白,本说明书一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
以上所述仅为本说明书一个或多个实施例的实施例而已,并不用于限制本说明书一个或多个实施例。对于本领域技术人员来说,本说明书一个或多个实施例可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。
Claims (17)
1.一种区块链系统中的共识方法,其中所述区块链系统采用的共识协议为基于区块标识来发起共识提议的目标区块的异步共识协议,所述方法包括:
接收共识节点发送的第一消息;其中,所述第一消息包含待共识的目标区块的区块标识;以及,所述共识节点针对所述目标区块提议的交易列表;
响应于接收到的所述第一消息,确定所述区块链系统中的目标共识节点的数量是否达到阈值;其中,所述目标共识节点为针对所述目标区块提议的交易列表已作为共识结果进行了输出的共识节点;
如果所述区块链系统中的目标共识节点的数量达到阈值,则广播第六消息至其它共识节点;其中,所述第六消息包含所述区块标识,用于声明不再接受除了所述目标共识节点以外的其它共识节点针对所述目标区块提议的交易列表。
2.如权利要求1所述的方法,所述方法还包括:
响应于接收到的所述第一消息,运行所述区块链系统采用的所述异步共识协议对所述第一消息中包含的交易列表进行共识;
其中,运行所述区块链系统采用的所述异步共识协议对所述第一消息中包含的交易列表进行共识对应的共识过程,包括:
第一轮:接收到所述第一消息的共识节点广播第二消息至其它共识节点;所述第二消息中包含所述目标区块的区块标识以及针对所述交易列表的投票;
第二轮,接收到所述第二消息的共识节点收集来自于不同共识节点的针对所述交易列表的投票;如果收集到至少Quorum个来自不同共识节点的表示认可所述交易列表的投票,并且自身针对该交易列表未广播过不同的投票,则广播用于承诺不再更改针对所述交易列表的投票的第三消息至其它共识节点;其中,所述第三消息包含表示认可所述交易列表的投票;
如果任一共识节点收集到至少Quorum个来自于不同共识节点的包含表示认可所述交易列表的投票的所述第三消息,则将所述交易列表作为与所述区块标识对应的目标区块的至少一部分共识结果进行输出。
3.如权利要求2所述的方法,在所述第一轮中,如果接收到所述第一消息的共识节点确定所述区块链系统中的目标共识节点的数量达到阈值,则该共识节点广播的所述第二消息中包含表示不认可所述第一消息包含的所述交易列表的投票;反之,如果接收到所述第一消息的共识节点确定所述区块链系统中的目标共识节点的数量未达到阈值,则该共识节点广播的所述第二消息中包含表示认可所述第一消息包含的所述交易列表的投票。
4.如权利要求3所述的方法,所述第一轮还包括:
如果接收到了f+1不同共识节点发送的包含表示认可所述交易列表的投票的所述第二消息,并且自身未广播过包含表示不认可所述交易列表的投票的所述第三消息,则继续向其它共识节点广播包含表示认可所述交易列表的投票的第二消息;其中,所述f表示所述区块链系统采用的共识协议所支持的容错节点数。
5.如权利要求2所述的方法,所述第二轮还包括:
如果接收到所述第二消息的共识节点收集到至少Quorum个来自不同共识节点的表示认可所述交易列表的投票,并且自身针对该交易列表广播过不同的投票,则广播第四消息至其它共识节点;其中,所述第四消息不用于承诺不再更改针对所述交易列表的投票;所述第四消息包含表示认可所述交易列表的投票。
6.如权利要求5所述的方法,所述方法还包括:
如果任一共识节点收集到至少Quorum个来自于不同共识节点的消息中,除了包含所述第三消息以外还包含所述第四消息,则运行二元共识协议对所述至少Quorum个消息中包含的投票集合进行二元共识。
7.如权利要求6所述的方法,运行二元共识协议对所述至少Quorum个消息中包含的投票集合进行二元共识之前,还包括:
广播第五消息至其它共识节点;其中,所述第五消息包括所述至少Quorum个消息中包含的投票集合;
所述运行二元共识协议对所述至少Quorum个来自于不同共识节点的投票集合进行二元共识,包括:
收集其它的共识节点广播的所述第五消息;
如果收集到至少Quorum个来自于不同共识节点的所述第五消息,计算所述至少Quorum个所述第五消息中包含的投票集合的并集得到目标投票集合,并运行二元共识协议对所述目标投票集合进行二元共识。
8.如权利要求7所述的方法,所述二元共识协议为公共抛硬币算法。
9.如权利要求7所述的方法,所述第二消息、第三消息、第四消息以及所述第五消息中还包括针对所述交易列表进行共识的轮次;所述至少Quorum个来自于不同共识节点的消息,包括至少Quorum个来自于不同共识节点的包含的所述轮次相同的消息。
10.如权利要求9所述的方法,在针对所述交易列表进行共识的第一轮次,所述投票包括表示认可所述交易列表的该交易列表的摘要值;以及,表示不认可所述交易列表的第二预设取值;在针对所述交易列表进行共识的第一轮次以外的其它轮次,针对所述交易列表的投票包括表示认可所述交易列表的第一预设值;以及,表示不认可所述交易列表的第二预设值。
11.如权利要求1所述的方法,所述第六消息中包括,发送该第六消息的共识节点投票认可的由所述目标共识节点针对所述目标区块提议的交易列表;
所述方法还包括:
任一共识节点在收集到至少Quorum个来自于不同共识节点的第六消息后,不再处理未包含在所述至少Quorum个第六消息中的针对所述目标区块提议的交易列表;或者,将未包含在所述至少Quorum个第六消息中的针对所述目标区块提议的交易列表的共识结果输出为共识失败。
12.如权利要求11所述的方法,所述方法还包括:
任一共识节点在收集到至少Quorum个来自于不同共识节点的第六消息后,如果所述至少Quorum个第六消息中包含的针对所述目标区块提议的交易列表中,还存在尚未输出共识结果的目标交易列表,则广播包含表示认可所述目标交易列表的投票的所述第二消息至其它共识节点。
13.如权利要求1所述的方法,所述阈值为可配置的阈值;
所述区块链系统支持在保守模式和乐观模式之间进行切换;其中,如果所述区块链系统切换为乐观模式,所述阈值的取值范围为[1,f];如果所述区块链系统切换为保守模式,所述阈值的取值范围为[f+1,n-f];其中,所述f表示所述区块链系统采用的共识协议所支持的容错节点数;所述n表示所述区块链系统中的共识节点的总数量。
14.如权利要求1所述的方法,所述方法还包括:
获取作为共识结果输出的由各个共识节点针对所述目标区块提议的交易列表,并将获取到的交易列表汇总为用于构建所述目标区块的交易集合;
对所述交易集合中的交易进行排序,并基于对交易进行排序后的所述交易集合构建所述目标区块。
15.如权利要求14所述的方法,对所述交易集合中的交易进行排序,包括:
分别计算所述交易集合中的交易的hash值,并基于所述hash值对所述目标交易集合中的交易进行排序;或者,
将所述交易集合的交易分别和所述交易集合进行数据合并后计算hash值,并基于所述hash值对所述交易集合中的交易进行排序。
16.一种区块链系统中的共识方法,包括:
第一轮:接收到第一消息的共识节点广播第二消息至其它共识节点;所述第一消息中包括待共识的目标区块的区块标识;以及,针对所述待共识的目标区块提议的交易列表;所述第二消息中包含所述目标区块的区块标识以及针对所述交易列表的投票;
第二轮,接收到所述第二消息的共识节点收集来自于不同共识节点的针对所述交易列表的投票;如果收集到至少Quorum个来自不同共识节点的表示认可所述交易列表的投票,并且自身针对该交易列表未广播过不同的投票,则广播用于承诺不再更改针对所述交易列表的投票的第三消息至其它共识节点;其中,所述第三消息包含所述目标区块的区块标识以及表示认可所述交易列表的投票;
如果任一共识节点收集到至少Quorum个来自于不同共识节点的包含表示认可所述交易列表的投票的所述第三消息,则将所述交易列表作为与所述区块标识对应的目标区块的至少一部分共识结果进行输出。
17.一种区块链系统的节点设备,其中所述区块链系统采用的共识协议为基于区块标识来发起共识提议的目标区块的异步共识协议,包括:
接收模块,接收共识节点发送的第一消息;其中,所述第一消息包含待共识的目标区块的区块标识;以及,所述共识节点针对所述目标区块提议的交易列表;
确定模块,响应于接收到的所述第一消息,确定所述区块链系统中的目标共识节点的数量是否达到阈值;其中,所述目标共识节点为针对所述目标区块提议的交易列表已作为共识结果进行了输出的共识节点;
广播模块,如果所述区块链系统中的目标共识节点的数量达到阈值,则广播第六消息至其它共识节点;其中,所述第六消息包含所述区块标识,用于声明不再接受除了所述目标共识节点以外的其它共识节点针对所述目标区块提议的交易列表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310805116.1A CN116846907A (zh) | 2023-06-30 | 2023-06-30 | 一种共识方法、区块链节点 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310805116.1A CN116846907A (zh) | 2023-06-30 | 2023-06-30 | 一种共识方法、区块链节点 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116846907A true CN116846907A (zh) | 2023-10-03 |
Family
ID=88172108
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310805116.1A Pending CN116846907A (zh) | 2023-06-30 | 2023-06-30 | 一种共识方法、区块链节点 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116846907A (zh) |
-
2023
- 2023-06-30 CN CN202310805116.1A patent/CN116846907A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114401150B (zh) | 区块链网络中加入节点的方法和区块链系统 | |
CN114553434B (zh) | 一种共识方法、区块链系统和共识节点 | |
CN111382456B (zh) | 提案消息处理方法、装置、设备以及存储介质 | |
CN113610531B (zh) | 一种共识方法、区块链系统和共识节点 | |
CN109379397B (zh) | 基于区块链的交易共识处理方法及装置、电子设备 | |
CN114584312B (zh) | 一种共识方法、区块链系统和共识节点 | |
CN110730204A (zh) | 区块链网络中删除节点的方法和区块链系统 | |
CN109493223B (zh) | 一种记账方法及装置 | |
CN113609515B (zh) | 一种共识方法、区块链系统 | |
CN113761071B (zh) | 一种共识方法、区块链系统和共识节点 | |
CN113630258B (zh) | 一种共识方法、区块链系统和共识节点 | |
CN110298754A (zh) | 一种应用于区块链的共识方法 | |
WO2023184881A1 (zh) | 提案共识执行方法、区块链系统、设备和存储介质 | |
CN113630259B (zh) | 一种共识方法、区块链系统和共识节点 | |
Abraham et al. | Optimal good-case latency for rotating leader synchronous bft | |
CN116846907A (zh) | 一种共识方法、区块链节点 | |
CN116846906A (zh) | 一种共识方法、区块链节点 | |
Ozdayi et al. | Instachain: Breaking the sharding limits via adjustable quorums | |
CN116823465A (zh) | 区块链系统中的交易提议方法、共识节点和区块链系统 | |
CN116846912A (zh) | Pbft算法中的视图切换方法、共识节点和区块链系统 | |
CN116823463A (zh) | 区块链系统中的交易提议方法、共识节点和区块链系统 | |
CN116823466A (zh) | 区块链系统中的交易提议方法、共识节点和区块链系统 | |
CN116527694A (zh) | 一种区块链系统中的共识方法和共识节点、区块链系统 | |
CN116846916B (zh) | 数据同步方法、装置、电子设备及计算机可读存储介质 | |
CN115174572B (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 |