CN114598475B - 基于fabric的拜占庭容错共识方法及系统 - Google Patents
基于fabric的拜占庭容错共识方法及系统 Download PDFInfo
- Publication number
- CN114598475B CN114598475B CN202210078831.5A CN202210078831A CN114598475B CN 114598475 B CN114598475 B CN 114598475B CN 202210078831 A CN202210078831 A CN 202210078831A CN 114598475 B CN114598475 B CN 114598475B
- Authority
- CN
- China
- Prior art keywords
- consensus
- node
- message
- group
- data structure
- 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
-
- 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/02—Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
-
- 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
- H04L9/3255—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 using group based signatures, e.g. ring or threshold signatures
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Hardware Redundancy (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请涉及一种基于fabric的拜占庭容错共识方法及系统,通过创建多个共识群组,将处于同一个通道的多个共识节点置入与该通道对应的共识群组中,降低了共识维度,减少了共识方法的通信复杂度,同时使得各个共识群组可以并行处理交易信息,提高了交易信息处理效率。本申请的打包节点只生成区块头而不生成区块体,使得区块头和区块体分离,一方面区块消息在传输过程中消息量减少了,另一方面可以保护交易隐私,因为区块体保存在各共识群组里,打包节点和其他共识群组里的共识节点在公共存储区中只会看到具有唯一标识作用的数据结构,而不会获取具体的交易信息,从而实现了共识群组与共识群组之间的隐私隔离,增加了联盟链的不可算改性。
Description
技术领域
本申请涉及区块链共识机制技术领域,特别是涉及一种基于fabric的拜占庭容错共识方法及系统。
背景技术
联盟链是介于公有链与私有链之间的一种系统形态,它由多个利益相关的实体机构共同参与和维护,以使联盟链健康运作。因联盟链具有监管功能,适用于商业应用,因此近年来涌现大量的联盟链解决方案,典型代表有hyperledger fabric,目前fabric在生产环境中仅支持raft算法。raft算法是一种非拜占庭容错类型的区块链共识方法,它不能容忍拜占庭错误。当部署在单个企业内或由可信任的权威机构管理时,raft算法可能就够了,但对安全性要求较高的场景,如金融场景,raft算法的安全性存在不足的缺陷,一旦节点作恶就会出现安全性问题,因此需要更安全的共识方法来进行全网共识。
发明内容
基于此,有必要针对传统共识方法采用raft算法可能导致在安全性要求高的场景下存在安全性不足的问题,提供一种基于fabric的拜占庭容错共识方法及系统。
本申请提供一种基于fabric的拜占庭容错共识方法,包括:
创建多个共识群组,每一个共识群组对应一个通道,将处于同一个通道的多个共识节点置入与该通道对应的共识群组中;在每一个共识群组中,存在一个主共识节点和至少一个副共识节点;
控制每一个共识群组执行以下步骤:
共识群组内的主共识节点定时从与共识群组对应的本地交易池中取出至少一个交易信息,依据至少一个交易信息构建具有唯一标识作用的数据结构,对所述数据结构签名生成Proposal消息,向共识群组内的所有副共识节点各发送一条该Proposal消息;
共识群组内的每一个副共识节点收到Proposal消息后,解析Proposal消息并获取该Proposal消息中的数据结构,对所述数据结构签名生成Prepare消息,向共识群组内的所有其他共识节点各发送一条该Prepare消息;
当共识群组内的每一个共识节点收到一条Prepare消息时,共识节点解析该Prepare消息并获取该Prepare消息中的数据结构,判断已收到的包含该数据结构的Prepare消息总数是否大于或等于2f+1;
若已收到的包含该数据结构的Prepar消息总数是否大于或等于2f+1,则共识节点对所述数据结构签名生成Commit消息,向主共识节点发送该Commit消息;
当主共识节点收到一条Commit消息时,主共识节点解析该Commit消息并获取Commit消息中的数据结构,判断已收到的包含该数据结构的Commit消息总数是否大于或等于2f+1;
若已收到的包含该数据结构的Commit消息总数是否大于或等于2f+1,则主共识节点对所述数据结构签名生成群组共识结果数据,向打包节点发送群组共识结果数据;
打包节点每隔第一预设时间段,收集不同共识群组的主共识节点发送的群组共识结果数据,依据不同共识群组的主共识节点发送的群组共识结果数据构造区块头。
本申请还提供一种基于fabric的拜占庭容错共识系统,包括:
fabric平台终端,包括多个共识群组和打包节点,用于执行如前述内容提及的基于fabric的拜占庭容错共识方法;每一个共识群组包括多个共识节点;
多个客户端,每一个客户端均与fabric平台终端通信连接,用于生成交易信息,并将交易信息发送至与交易信息耦合的共识群组。
本申请涉及一种基于fabric的拜占庭容错共识方法及系统,通过创建多个共识群组,将处于同一个通道的多个共识节点置入与该通道对应的共识群组中,降低了共识维度,减少了共识方法的通信复杂度,同时使得各个共识群组可以并行处理交易信息,提高了交易信息处理效率。本申请的打包节点只生成区块头而不生成区块体,使得区块头和区块体分离,一方面区块消息在传输过程中消息量减少了,另一方面可以保护交易隐私,因为区块体保存在各共识群组里,打包节点和其他共识群组里的共识节点在广播过程中只会看到具有唯一标识作用的数据结构,而不会获取具体的交易信息,从而实现了共识群组与共识群组之间的隐私隔离,增加了联盟链的不可篡改性。
附图说明
图1为本申请一实施例提供的基于fabric的拜占庭容错共识方法的流程示意图。
图2为本申请一实施例提供的基于fabric的拜占庭容错共识系统的结构图。
图3为本申请一实施例提供的基于fabric的拜占庭容错共识系统的结构图。
附图标记:
10-fabric平台终端;110-共识群组;111-共识节点;112-主共识节点;
113-副共识节点;120-打包节点;130-公共存储区;20-客户端。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供一种基于fabric的拜占庭容错共识方法。需要说明的是,本申请提供的基于fabric的拜占庭容错共识方法的应用于任何业务类型。比如金融业务。
此外,本申请提供的基于fabric的拜占庭容错共识方法不限制其执行主体。可选地,本申请提供的基于fabric的拜占庭容错共识方法的执行主体的可以为一种fabric平台终端。
如图1所示,在本申请的一实施例中,所述基于fabric的拜占庭容错共识方法包括如下S100至S300:
S100,创建多个共识群组,每一个共识群组对应一个通道,将处于同一个通道的多个共识节点置入与该通道对应的共识群组中。在每一个共识群组中,存在一个主共识节点和至少一个副共识节点。
具体地,通道即Channel,是fabric算法中的重要概念,作用是用于实现区块链网络中业务的隔离。一个联盟链具有多个通道,每个通道可代表一项业务,并且对应一套账本。通道内的成员为业务参与方(即联盟链内的参与这项业务的实体机构)。当然,一个实体机构可以加入多个通道,因为一个实体机构可以参与多个不同的业务。可以理解为,一个通道就是一条子链,一条子链由“1个通道+1个账本+N个参与该项业务的实体机构”组成。
本申请将每一个通道对应一个共识群组,从而将不同的业务区分开来,便于并行处理不同的业务。那么参与同一个业务的实体机构就以共识节点的形式置入同一个共识群组中。每一个共识节点代表一个参与这个业务的实体机构。前述内容提到了,一个实体机构可以参与多个不同的业务,因此,不同的共识群组可能会出现相同的共识节点。例如,共识群组1包括共识节点A,共识节点B和共识节点C,共识群组2包括共识节点A和共识节点D,那么代表共识节点A同时参与了这两个业务。
每一个共识群组中,存在一个主共识节点和至少一个副共识节点。主共识节点和副共识节点都是共识节点,区别在于,主共识节点相对于副共识节点与参与更多的共识方法步骤,承担更多的算力。主共识节点和副共识节点都是共识节点,每一个共识节点本地都会生成一个账本,来存储记录区块生成的信息,例如区块体,区块体等等。
S200,控制每一个共识群组执行如下S210至S241:
S210,共识群组内的主共识节点定时从与共识群组对应的本地交易池中取出至少一个交易信息。主共识节点依据至少一个交易信息构建具有唯一标识作用的数据结构,对所述数据结构签名生成Proposal消息。主共识节点向共识群组内的所有副共识节点各发送一条该Proposal消息。
具体地,每一个共识群组具有与这个共识群组对应的本地交易池,用于存储交易信息。交易信息由客户端发送至共识群组,这点后续会详细介绍。
所述数据结构具有唯一标识作用,它在传播过程中既可以具有唯一标识性,用于辨别是否有共识节点存在欺诈行为,又不会直接泄露交易信息,具有极高的安全性,是本申请的核心。共识节点存在欺诈行为,又称为“共识节点作恶”,为了便于理解,本申请将共识节点作恶表达为共识节点存在欺诈行为。共识节点存在欺诈行为,可以具体表现在共识节点私自篡改具有唯一标识作用的数据结构。
S220,共识群组内的每一个副共识节点收到Proposal消息后,副共识节点解析该Proposal消息并获取该Proposal消息中的数据结构。副共识节点对所述数据结构签名生成Prepare消息。副共识节点向共识群组内的所有其他共识节点各发送一条该Prepare消息。
具体地,本步骤需要每一个副共识节点均执行S220步骤,对数据结构签名生成Prepare消息。
S230,当共识群组内的每一个共识节点收到一条Prepare消息时,共识节点解析该Prepare消息并获取Prepare消息中的数据结构,判断已收到的包含该数据结构的Prepare消息总数是否大于或等于2f+1。
具体地,本步骤的共识节点包括主共识节点,也包括副共识节点,属于二次确认过程。
本步骤采用了实用拜占庭算法的原理,假设f是拜占庭节点的数量,要容忍f个拜占庭节点存在,其总节点数量为n=3f+1,最坏的情况是2f+1个节点里有f个拜占庭节点,则非拜占庭节点数量为2f+1-f=f+1个,这样就保证了非拜占庭节点数量f+1大于拜占庭节点数量f。
拜占庭节点可以理解为本申请中的出现欺诈行为的共识节点,非拜占庭节点可以理解为未出现欺诈行为的,诚信的共识节点。
因此,如果获取Prepare消息中的数据结构,代表已收到的包含该数据结构的Prepare消息总数在原有基础上加1,此时重新统计一下已收到的包含该数据结构的Prepare消息总数,通过判断已收到的包含该数据结构的Prepare消息总数是否大于或等于2f+1,可以得知是否这个数据结构通过了拜占庭容忍。
可选地,判断已收到的包含该数据结构的Prepare消息总数是否大于或等于2f+1可以附加时间限制,比如限时5分钟,如果5分钟内还没有收到大于或等于2f+1条包含该数据结构的Prepare消息,那么自动判定已收到的包含该数据结构的Prepar消息总数小于2f+1。这是为了防止卡判定。
S231,若已收到的包含该数据结构的Prepar消息总数大于或等于2f+1,则共识节点对所述数据结构签名生成Commit消息,向主共识节点发送该Commit消息。
具体地,如果已收到的包含该数据结构的Prepare消息总数大于或等于2f+1,可以说明这个数据结构通过了拜占庭容忍。那么后续共识节点对所述数据结构签名生成Commit消息,向主共识节点发送该Commit消息,返回S230。
反之,若已收到的包含该数据结构的Prepar消息总数小于2f+1,则确定存在欺诈行为的副共识节点较多,拒绝向主共识节点发送该Commit消息,返回S230。此时可以认为存在很多副共识节点在执行S220生成Prepare消息时,私下把数据结构进行了调换和修改,这是一种欺诈行为。且存在欺诈行为的副共识节点数量过多,无法通过拜占庭容忍。
S240,当主共识节点收到一条Commit消息时,主节点解析该Commit消息并获取Commit消息中的数据结构。判断已收到的包含该数据结构的Commit消息总数是否大于或等于2f+1。
具体地,S240和S230原理类似,也是在farbic技术中融入了拜占庭容忍算法,而且本步骤进行了第二次拜占庭容忍算法,额外增加了安全性,防止有共识节点有欺诈行为发生。
可选地,判断已收到的包含该数据结构的Commit消息总数是否大于或等于2f+1可以附加时间限制,比如限时5分钟,如果5分钟内还没有收到大于或等于2f+1条包含该数据结构的Commit消息,那么自动判定已收到的包含该数据结构的Commit消息总数小于2f+1。这是为了防止卡判定。
S241,若已收到的包含该数据结构的Commit消息总数大于或等于2f+1,则主共识节点对所述数据结构签名生成群组共识结果数据,向打包节点发送群组共识结果数据。
具体地,S241的原理和S231的原理一致,此处不再赘述。
综上,S210至S241一轮结束,返回S210,每一个共识群组的每一个主共识节点继续执行新一轮S210至S241。
S300,打包节点每隔第一预设时间段,收集不同共识群组的主共识节点发送的群组共识结果数据。依据不同共识群组的主共识节点发送的群组共识结果数据构造区块头。
具体地,打包节点和每一个共识群组均进行通信连接,打包节点只生成区块头。区块体则是在S210,共识群组内的主共识节点定时从与共识群组对应的本地交易池中取出至少一个交易信息时由主共识节点生成的。在S210中,在主共识节点向共识群组内的所有副共识节点各发送一条该Proposal消息时,主共识节点还向共识群组内的所有副共识节点各发送区块体。这样区块体就会保存在各个共识群组内,而不会外泄。区块体具体保存在共识群组内的所有共识节点的账本内。区块头后续会广播给联盟链里的所有共识群组,区块头与区块体是互相分离保存的,可以保护各个共识群组内的交易隐私。
S400,打包节点以广播的形式将区块头分发给联盟链中的所有共识群组。
具体地,这里注意是分发给“联盟链中的所有共识群组”,即联盟链中的所有共识群组都可以对区块头进行是否具有欺诈行为的监督。本步骤将区块头广播给各个共识群组,作用是利用不同的共识群组共同来监控是否出现欺诈行为,防止欺诈行为的包庇,增加区块头的不可篡改性。
例如,一个区块头内包含3个群组共识结果数据,分别来自于共识群组A,共识群组B和共识群组C,但是联盟链里一共有5个共识群组:共识群组A,共识群组B,共识群组C,共识群组D和共识群组E。
虽然共识群组D和共识群组E压根没有参与业务交易,但是执行S400时,共识群组D和共识群组E也会收到区块头,对区块头进行监督。
本实施例中,本申请涉及一种基于fabric的拜占庭容错共识方法及系统,通过创建多个共识群组,将处于同一个通道的多个共识节点置入与该通道对应的共识群组中,降低了共识维度,减少了共识方法的通信复杂度,同时使得各个共识群组可以并行处理交易信息,提高了交易信息处理效率。本申请的打包节点只生成区块头而不生成区块体,使得区块头和区块体分离,一方面区块消息在传输过程中消息量减少了,另一方面可以保护交易隐私,因为区块体保存在各共识群组里,打包节点和其他共识群组里的共识节点在公共存储区中只会看到具有唯一标识作用的数据结构,而不会获取具体的交易信息,从而实现了共识群组与共识群组之间的隐私隔离,增加了联盟链的不可算改性。
在本申请的一实施例中,在S210之前,所述S200还包括如下S201至S202:
S201,监控共识群组内的每一个共识节点是否收到客户端发送的交易信息,当存在任意一个共识节点接收到客户端发送的交易信息时,控制该共识节点将所述交易信息缓存于与共识群组对应的本地交易池中。
具体地,交易信息实际为fabric中的tx(transaction),tx在fabric中含义为交易,为方便理解,且从数据传输角度考虑,本申请中将tx阐述为交易信息。由于每个共识节点都属于一个实体机构,那么该实体机构对应的客户端(client)在发送交易信息时,就会直接发送至该共识节点处,再放置于交易池中。
S202,控制接收到交易信息的共识节点在共识群组内广播所述交易信息。
具体地,各个共识群组是互相隔离的。因此本步骤的广播步骤是在接收到交易的共识节点所归属的共识群组内进行,并不会被其他共识群组所获知。
在本申请的一实施例中,所述数据结构为merkle root,merkle root为依据从交易池中取出的所有交易信息构建的merkle树的根。
具体地,merkle树为默克尔树,merkle root是merkle树的根。
在本申请的一实施例中,S200包括如下S211至S217:
S211,共识群组内的主共识节点每隔第二预设时间段,从与共识群组对应的本地交易池中取出至少一个交易信息。
具体地,每一个共识群组具有与这个共识群组对应的本地交易池。
S212,主共识节点依据预设merkle树构造对从与共识群组对应的本地交易池中取出的所有交易信息进行哈希,得到交易信息哈希值,同时生成merkle tree。merkle tree为将预设merkle树构造融合了从与共识群组对应的本地交易池中取出的所有交易信息之后生成的数据结构。
具体地,预设merkle树构造的不同,哈希的方式也不同,预设merkle树构造决定了哈希的方式。可选的,一种预设merkle树构造是,当交易信息总数是偶数时,先将所有交易信息按预设顺序排序,然后按预设顺序抽取2个交易信息进行哈希,得到第一哈希值,再按预设顺序在余下的交易信息中继续抽取2个交易信息,得到第二哈希值,直至所有交易信息均进行过哈希,得到一个哈希值列表。再将哈希值列表中的所有哈希值两两进行哈希,循环往复直至最终只剩下一个哈希值,将最终剩下的哈希值作为交易信息哈希值。
例如,如果S211中提取的至少一个交易信息为tx1,tx2,tx3,tx4,一共4个交易信息,那么S212具体可以包括:
S212a,读取预设顺序,预设顺序为按照交易信息序号从小到大排列,那么就按tx1,tx2,tx3,tx4排列。
S212b,取tx1和tx2哈希,得到hash1,取tx3和tx4哈希,得到hash2。
S212c,最后将hash1和hash2哈希,得到hash3,将hash3作为交易信息哈希值。
可选的,另一种预设merkle树构造是,当交易信息总数是奇数时,先将所有交易信息按预设顺序排序,然后按预设顺序抽取2个交易信息进行哈希,得到第一哈希值,再按预设顺序在余下的交易信息中继续抽取2个交易信息,得到第二哈希值,直至只剩1个交易信息没有进行过哈希,得到一个哈希值列表,并将剩下的1个交易信息作为轮空交易信息。再将哈希值列表中的所有哈希值两两进行哈希,循环往复直至最终只剩下一个哈希值,将最终剩下的哈希值和轮空交易信息再进行一次哈希,将得到的哈希值作为交易信息哈希值。
例如,如果S211中提取的至少一个交易信息为tx1,tx2,tx3,一共3个交易信息,那么S212具体可以包括:
S212a,抽取tx1,tx2,tx3,读取预设顺序,预设顺序为按照交易信息序号从小到大排列,那么就按tx1,tx2,tx3排列。
S212b,取tx1和tx2哈希,得到hash1,将tx3作为轮空交易信息。
S212c,将hash1和tx3哈希,得到hash2,将hash2作为交易信息哈希值。
S213,主共识节点将所述交易信息哈希值作为预设merkle树构造的merkle root。
具体地,承接上S212中的例子,hash3就是merkle root。
S214,主共识节点从公共存储区提取上一个时间节点对应的区块高度,将上一个时间节点对应的区块高度加1得到的数字作为当前区块高度。
具体地,上一个时间节点对应的区块高度,即上一个时间节点生成的区块头的区块高度h1,将h1+1=当前区块高度h,区块高度可以代表区块处于区块链条中的位置。
S215,主共识节点创建Proposal消息标签,对Proposal消息标签、当前区块高度和merkle root的组合体进行签名,得到Proposal签名。
具体地,主共识节点可以利用主共识节点本地账本存储的主共识节点的私钥来对Proposal消息标签、当前区块高度和merkle root的组合体进行签名。Proposal签名的格式为<Sig(proposal,h,merkle root)>。sig为签名符号,proposal为proposal消息标签。h为当前区块高度。
S216,主共识节点依据merkle tree和Proposal签名生成Proposal消息。
S217,主共识节点向共识群组内的所有副共识节点各发送一条该Proposal消息。
具体地,Proposal消息的格式为<Sig(proposal,h,merkle root),merkle tree>。sig为签名符号,proposal为proposal消息标签。h为当前区块高度。含义和S214中的一致,本申请中所有出现的“当前区块高度”的含义都一致,和S214中的一致,再赘述。
在本申请的一实施例中,S220包括如下S221至S226:
S221,共识群组内的每一个副共识节点收到Proposal消息后,共识节点解析该Proposal消息并获取该Proposal消息中的Proposal签名。
S222,副共识节点验证Proposal签名的合法性,判断Proposal签名是否合法。
具体地,可以有多种实施方式来验证Proposal签名的合法性。每一个共识节点的本地的账本均预先保存有主共识节点的公钥,可以基于ECDSA算法,通过依据主共识节点的公钥是否可以解密Proposal签名成功,从而验证Proposal签名的合法性。这是因为主共识节点是利用主共识节点的私钥来对Proposal消息标签、当前区块高度和merkle root的组合体进行签名的,因此解密时通过主共识节点的公钥就可以解密成功。
如果使用主共识节点的公钥可以解密Proposal签名成功,则认为Proposal签名合法。反之使用主共识节点的公钥无法解密Proposal签名,则认为Proposal签名非法。
S223,若Proposal签名合法,则副共识节点解析Proposal签名,并获取Proposal签名中的merkle root。
S224,副共识节点从本地提取上一个时间节点对应的区块高度,将上一个时间节点对应的区块高度加1得到的数字作为当前区块高度。
具体地,本地指的是副共识节点本地的账本。
S225,副共识节点创建Prepare消息标签。副共识节点对Prepare消息标签、当前区块高度和merkle root的组合体进行签名,得到Prepare签名,将Prepare签名作为Prepare消息。
具体地,Prepare签名的格式:<Sig(prepare,h,merkle root),将其作为Prepare消息,即Prepare消息也是这个格式。sig为签名符号,prepare为Prepare消息标签。h为当前区块高度。
S226,副共识节点向共识群组内的所有其他共识节点各发送一条该Prepare消息。
具体地,需要注意的是,Prepare消息的生成节点是所有副共识节点,不包括主共识节点。Prepare消息的格式为<Sig(prepare,h,merkle root)。sig为签名符号,prepare为Prepare消息标签。h为当前区块高度。
在本申请的一实施例中,S230包括如下S231至S235:
S231,当共识群组内的每一个共识节点收到一条Prepare消息时,共识节点解析该Prepare消息并获取Prepare消息中的Prepare签名。
S232,共识节点验证Prepare签名的合法性,判断Prepare签名是否合法。
S233,若Prepare签名合法,则共识节点解析Prepare签名,并获取Preparel签名的merkle root。
S234,共识节点将包含该merkle root的Prepare消息总数在原有总数的基础上加1。
具体地,如果先前包含该merkle root的Prepare消息总数为5,那么经过S233共识节点解析出该merkle root,那么现在包含该merkle root的Prepare消息总数由5变为6。
S235,共识节点判断已收到的包含该数据结构的Prepare消息总数是否大于或等于2f+1。
在本申请的一实施例中,所述S231包括如下S231a至S231c:
S231a,若已收到的包含该数据结构的Prepare消息总数大于或等于2f+1,则共识节点从本地提取上一个时间节点对应的区块高度,将上一个时间节点对应的区块高度加1得到的数字作为当前区块高度。
具体地,本步骤和S214的原理一致,都是获取当前区块高度h。
S231b,共识节点创建Commit消息标签,对Commit消息标签、当前区块高度和merkle root的组合体进行签名,得到Commit签名,将Commit签名作为Commit消息。
具体地,需要注意的是,Prepare消息的生成节点是所有副共识节点,不包括主共识节点。而Commit消息的生成节点是所有的共识节点,既包括主共识节点,又包括所有副共识节点。Commit签名的格式为:<Sig(commit,h,merkle root)>。commit为Commit消息标签。h为当前区块高度。
S231c,共识节点向主共识节点发送该Commit消息。
具体地,Commit消息的消息格式就是Commit签名的格式:<Sig(commit,h,merkleroot)>。commit为Commit消息标签。h为当前区块高度。
在本申请的一实施例中,所述S241包括如下S241a至S241c:
S241a,若已收到的包含该数据结构的Commit消息总数大于或等于2f+1,则主共识节点从本地提取上一个时间节点对应的区块高度,将上一个时间节点对应的区块高度加1得到的数字作为当前区块高度。
具体地,本步骤的原理同S214的原理,也同S231a的原理。
S241b,主共识节点创建Result消息标签,对Result消息标签、当前区块高度和merkle root的组合体进行签名,得到Result签名,将Result签名作为群组共识结果数据。
具体地,Result签名的格式也即群组共识结果数据的格式为:<Sig(result,h,merkle root)>。result为Result消息标签。h为当前区块高度。
S241c,主共识节点向打包节点发送该群组共识结果数据。
在本申请的一实施例中,所述S300包括如下S310至S350:
S310,打包节点每隔第一预设时间段,收集不同共识群组的主共识节点发送的群组共识结果数据,得到多个群组共识结果数据。
具体地,第一预设时间段可以为30分钟。
S320,打包节点生成当前时间戳,所述当前时间戳显示当前时间节点。
具体地,时间戳为了记录打包节点生成区块头的生成时间。
S330,打包节点对所述当前时间戳和多个群组共识结果数据进行哈希,得到当前时间戳对应的共识哈希值。将与当前时间戳对应的共识哈希值存储于本地。
具体地,本地指的是打包节点本地的账本。
S340,打包节点从本地调取前一时间戳对应的共识哈希值。前一时间戳显示相对于当前时间节点的前一时间节点。
例如,当前时间戳为21点,第一预设时间段为30分钟,那么前一时间戳就是20点30分。
S350,打包节点构造区块头,所述区块头包括所述前一时间戳对应的共识哈希值,所述当前时间戳,所述当前区块高度,以及所述多个群组共识结果。
具体地,区块头包含多个merkle root,分别来自不同的共识群组提交的群组共识结果,本步骤将区块头发给广播给各个共识群组,作用是利用不同的共识群组来监控是否出现欺诈行为,防止欺诈行为的包庇。
在本申请的一实施例中,所述基于fabric的拜占庭容错共识方法还包括如下S510至S540:
S510,每一个共识群组的每一个共识节点实时监控区块头的接收情况,判断是否收到打包节点发送的区块头。
具体地,由于S400中,打包节点以广播的形式将区块头分发给联盟链中的所有共识群组。因此联盟链中的每一个共识节点都可以接收新生成的区块头。
S520,若一个共识群组的一个共识节点收到打包节点发送的区块头,则共识节点存储该区块头至共识节点本地,并解析所述区块头,获取所述区块头中的当前区块高度和merkle root。
具体地,当前区块高度代表了该区块头对应的区块在区块链中的位置,因此,区块链中的位置是唯一的,每个区块头都有唯一的当前区块高度,例如,占据首位置的区块的区块头的当前区块高度为0,占据二位的区块的区块头的当前区块高度为1,占据三位的区块的区块头的当前区块高度为2....依次类推。
S530,共识节点从本地筛选出目标Commit消息。所述目标Commit消息包含的当前区块高度与区块头中的当前区块高度相同,判断所述目标Commit消息中的merkle root是否与区块头中的merkle root一致。
具体地,由于每个区块头都有唯一的当前区块高度,因此在目标Commit消息的筛选原则是:Commit消息包含的当前区块高度与区块头中的当前区块高度相同,这样的Commit消息才可以作为目标Commit。这样才能确保是通过执行同一个S210提取的同样的交易信息集合,通过后续执行的步骤生成的commit消息和区块头。这是一种控制变量原则,比对merkle root之前必须保证二者的当前区块高度一致,否则比较merkle root就无意义了。
S540,若所述目标Commit消息中的merkle root与区块头中的merkle root不一致,则共识节点向监察服务器发送监察请求。
具体地,如果不一致,表明打包节点的和这个共识群组的主共识节点有一方进行了欺诈行为。不可能是共识群组的副共识节点进行了欺诈行为,因为如果打包节点的和这个共识群组的主共识节点都是诚实的,那么主共识节点通过拜占庭容忍算法已经去除了副共识节点进行欺诈行为的可能性。
监察服务器在接收到监察请求后,收集打包节点提供的证据和/或主共识节点提供的证据,判断哪一方做出了欺诈行为。
下面提供一种监察服务器判断哪一方做出了欺诈行为的具体步骤。
首先让打包节点提供相应的证据。打包节点向监察服务器提交发送监察请求的主共识节点对应群组共识结果数据<Sig(result,h merkle root)>,监察服务器可以验证区块头中包含的merkle root是否包含结和群组共识结果数据中包含的merkle root一致,如果一致,证明打包节点是诚实的,没有做出欺诈行为。否则认为打包节点做出欺诈行为,给予一定惩罚。并通知各共识群组该区块头无效。
如果确认打包节点没有做出欺诈行为,开始验证主共识节点是否做出欺诈行为,要求该主共识节点提供相应的证据,具体的证据为主共识节点提供2f+1条对同一merkleroot签名的Commit消息。具体地,如果主共识节点能够向监察服务器提交2f+1条对同一merkle root签名的Commit消息,且每一个Commit消息中的merkle root与区块头中的merkle root均一致,则证明该merkel root的确是由群组投票达成的共识,否则认为该主共识节点做出欺诈行为,给予一定惩罚,并通知各共识群组该区块头无效,该区块头对应的区块也无效。
本实施例中,当目标Commit消息中的merkle root与区块头中的merkle root不一致,通过联盟链中的每一个共识节点向监察服务器发送监察请求,可以请监察服务器进行欺诈行为的审查,更进一步提高了区块头中merkle root的安全性和防篡改性。
本申请还提供一种基于fabric的拜占庭容错共识系统。
如图2所示,在本申请一实施例中,基于fabric的拜占庭容错共识系统包括fabric平台终端10和多个客户端20。
fabric平台终端10包括多个共识群组110和打包节点120。fabric平台终端10用于执行如前述任意一个实施例中提及的基于fabric的拜占庭容错共识方法。每一个共识群组110包括多个共识节点111。
每一个客户端20均与fabric平台终端10通信连接,用于生成交易信息,并将交易信息发送至与交易信息耦合的共识群组110。
具体地,需要说明的是,本实施例提供的基于fabric的拜占庭容错共识系统和前述多个实施例提及的基于fabric的拜占庭容错共识方法中,存在很多相同名称的设备或节点,统一在本实施例的基于fabric的拜占庭容错共识系统进行标号,为了行文简洁,前述基于fabric的拜占庭容错共识方法就不进行标号了。
如图3所示,每一个共识群组110包括一个主共识节点112和至少一个副共识节点113。主共识节点112和副共识节点113都是共识节点111。
以上所述实施例的各技术特征可以进行任意的组合,各方法步骤也并不做执行顺序的限制,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (11)
1.一种基于fabric的拜占庭容错共识方法,其特征在于,所述基于fabric的拜占庭容错共识方法包括:
创建多个共识群组,每一个共识群组对应一个通道,将处于同一个通道的多个共识节点置入与该通道对应的共识群组中;在每一个共识群组中,存在一个主共识节点和至少一个副共识节点;
控制每一个共识群组执行以下步骤:
共识群组内的主共识节点定时从与共识群组对应的本地交易池中取出至少一个交易信息,依据至少一个交易信息构建具有唯一标识作用的数据结构,对所述数据结构签名生成Proposal消息,向共识群组内的所有副共识节点各发送一条该Proposal消息;
共识群组内的每一个副共识节点收到Proposal消息后,解析该Proposal消息并获取该Proposal消息中的数据结构,对所述数据结构签名生成Prepare消息,向共识群组内的所有其他共识节点各发送一条该Prepare消息;
当共识群组内的每一个共识节点收到一条Prepare消息时,共识节点解析该Prepare消息并获取该Prepare消息中的数据结构,判断已收到的包含该数据结构的Prepare消息总数是否大于或等于2f+1;
若已收到的包含该数据结构的Prepar消息总数大于或等于2f+1,则共识节点对所述数据结构签名生成Commit消息,向主共识节点发送该Commit消息;
当主共识节点收到一条Commit消息时,主共识节点解析该Commit消息并获取Commit消息中的数据结构,判断已收到的包含该数据结构的Commit消息总数是否大于或等于2f+1;
若已收到的包含该数据结构的Commit消息总数大于或等于2f+1,则主共识节点对所述数据结构签名生成群组共识结果数据,向打包节点发送群组共识结果数据;
打包节点每隔第一预设时间段,收集不同共识群组的主共识节点发送的群组共识结果数据,依据不同共识群组的主共识节点发送的群组共识结果数据构造区块头;
打包节点以广播的形式将区块头分发给联盟链中的所有共识群组。
2.根据权利要求1所述的基于fabric的拜占庭容错共识方法,其特征在于,在所述共识群组内的主共识节点定时从与共识群组对应的本地交易池中取出至少一个交易信息,依据至少一个交易信息构建具有唯一标识作用的数据结构,对所述数据结构签名生成Proposal消息,向共识群组内的所有副共识节点各发送一条该Proposal消息之前,所述基于fabric的拜占庭容错共识方法还包括:
控制每一个共识群组执行以下步骤:
监控共识群组内的每一个共识节点是否收到客户端发送的交易信息,当存在任意一个共识节点接收到客户端发送的交易信息时,控制该共识节点将所述交易信息缓存于与共识群组对应的本地交易池中;
控制接收到交易信息的共识节点在共识群组内广播所述交易信息。
3.根据权利要求2所述的基于fabric的拜占庭容错共识方法,其特征在于,所述数据结构为merkle root,merkle root为依据从交易池中取出的所有交易信息构建的merkle树的根。
4.根据权利要求3所述的基于fabric的拜占庭容错共识方法,其特征在于,所述共识群组内的主共识节点定时从与共识群组对应的本地交易池中取出至少一个交易信息,依据至少一个交易信息构建具有唯一标识作用的数据结构,对所述数据结构签名生成Proposal消息,向共识群组内的所有副共识节点各发送一条该Proposal消息,包括:
共识群组内的主共识节点每隔第二预设时间段,从与共识群组对应的本地交易池中取出至少一个交易信息;
主共识节点依据预设merkle树构造对从与共识群组对应的本地交易池中取出的所有交易信息进行哈希,得到交易信息哈希值,同时生成merkle tree;merkle tree为将预设merkle树构造融合了从与共识群组对应的本地交易池中取出的所有交易信息之后生成的数据结构;
主共识节点将所述交易信息哈希值作为预设merkle树构造的merkle root;
主共识节点从本地提取上一个时间节点对应的区块高度,将上一个时间节点对应的区块高度加1得到的数字作为当前区块高度;
主共识节点创建Proposal消息标签,对Proposal消息标签、当前区块高度和merkleroot的组合体进行签名,得到Proposal签名;
主共识节点依据merkle tree和Proposal签名生成Proposal消息;
主共识节点向共识群组内的所有副共识节点各发送一条该Proposal消息。
5.根据权利要求4所述的基于fabric的拜占庭容错共识方法,其特征在于,所述共识群组内的每一个副共识节点收到Proposal消息后,解析该Proposal消息并获取该Proposal消息中的数据结构,对所述数据结构签名生成Prepare消息,向共识群组内的所有其他共识节点各发送一条该Prepare消息,包括:
共识群组内的每一个副共识节点收到Proposal消息后,共识节点解析该Proposal消息并获取该Proposal消息中的Proposal签名;
副共识节点验证Proposal签名的合法性,判断Proposal签名是否合法;
若Proposal签名合法,则副共识节点解析Proposal签名,并获取Proposal签名中的merkle root;
副共识节点从本地提取上一个时间节点对应的区块高度,将上一个时间节点对应的区块高度加1得到的数字作为当前区块高度;
副共识节点创建Prepare消息标签,对Prepare消息标签、当前区块高度和merkle root的组合体进行签名,得到Prepare签名,将Prepare签名作为Prepare消息;
副共识节点向共识群组内的所有其他共识节点各发送一条该Prepare消息。
6.根据权利要求5所述的基于fabric的拜占庭容错共识方法,其特征在于,所述当共识群组内的每一个共识节点收到一条Prepare消息时,共识节点解析该Prepare消息并获取该Prepare消息中的数据结构,判断已收到的包含该数据结构的Prepare消息总数是否大于或等于2f+1,包括:
当共识群组内的每一个共识节点收到一条Prepare消息时,共识节点解析该Prepare消息并获取Prepare消息中的Prepare签名;
共识节点验证Prepare签名的合法性,判断Prepare签名是否合法;
若Prepare签名合法,则共识节点解析Prepare签名,并获取Prepare签名中的merkleroot;
共识节点将包含该merkle root的Prepare消息总数在原有总数的基础上加1;
共识节点判断已收到的包含该数据结构的Prepare消息总数是否大于或等于2f+1。
7.根据权利要求6所述的基于fabric的拜占庭容错共识方法,其特征在于,所述若已收到的包含该数据结构的Prepare消息总数大于或等于2f+1,则共识节点对所述数据结构签名生成Commit消息,向主共识节点发送该Commit消息,包括:
若已收到的包含该数据结构的Prepare消息总数大于或等于2f+1,则共识节点从本地提取上一个时间节点对应的区块高度,将上一个时间节点对应的区块高度加1得到的数字作为当前区块高度;
共识节点创建Commit消息标签,对Commit消息标签、当前区块高度和merkle root的组合体进行签名,得到Commit签名,将Commit签名作为Commit消息;
共识节点向主共识节点发送该Commit消息。
8.根据权利要求7所述的基于fabric的拜占庭容错共识方法,其特征在于,所述若已收到的包含该数据结构的Commit消息总数大于或等于2f+1,则主共识节点对所述数据结构签名生成群组共识结果数据,向打包节点发送群组共识结果数据,包括:
若已收到的包含该数据结构的Commit消息总数大于或等于2f+1,则主共识节点从本地提取上一个时间节点对应的区块高度,将上一个时间节点对应的区块高度加1得到的数字作为当前区块高度;
主共识节点创建Result消息标签,对Result消息标签、当前区块高度和merkle root的组合体进行签名,得到Result签名,将Result签名作为群组共识结果数据;
主共识节点向打包节点发送该群组共识结果数据。
9.根据权利要求8所述的基于fabric的拜占庭容错共识方法,其特征在于,所述打包节点每隔第一预设时间段,收集不同共识群组的主共识节点发送的群组共识结果数据,依据不同共识群组的主共识节点发送的群组共识结果数据构造区块头,包括:
打包节点每隔第一预设时间段,收集不同共识群组的主共识节点发送的群组共识结果数据,得到多个群组共识结果数据;
打包节点生成当前时间戳,所述当前时间戳显示当前时间节点;
打包节点对所述当前时间戳和多个群组共识结果数据进行哈希,得到与当前时间戳对应的共识哈希值,将与当前时间戳对应的共识哈希值存储于本地;
打包节点从本地调取前一时间戳对应的共识哈希值;前一时间戳显示相对于当前时间节点的前一时间节点;
打包节点构造区块头,所述区块头包括与所述前一时间戳对应的共识哈希值,所述当前时间戳,所述当前区块高度,以及所述多个群组共识结果数据。
10.根据权利要求9所述的基于fabric的拜占庭容错共识方法,其特征在于,所述基于fabric的拜占庭容错共识方法还包括:
每一个共识群组的每一个共识节点实时监控区块头的接收情况,判断是否收到打包节点发送的区块头;
若一个共识群组的一个共识节点收到打包节点发送的区块头,则共识节点存储该区块头至共识节点本地,并解析所述区块头,获取所述区块头中的当前区块高度和merkleroot;
共识节点从本地筛选出目标Commit消息;所述目标Commit消息包含的当前区块高度与区块头中的当前区块高度相同;
判断所述目标Commit消息中的merkle root是否与区块头中的merkle root一致;
若所述目标Commit消息中的merkle root与区块头中的merkle root不一致,则共识节点向监察服务器发送监察请求。
11.一种基于fabric的拜占庭容错共识系统,其特征在于,包括:
fabric平台终端,包括多个共识群组和打包节点,用于执行如权利要求1-10中任意一项所述的基于fabric的拜占庭容错共识方法;每一个共识群组包括多个共识节点;
多个客户端,每一个客户端均与所述fabric平台终端通信连接,用于生成交易信息,并将交易信息发送至与交易信息耦合的共识群组。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210078831.5A CN114598475B (zh) | 2022-01-24 | 2022-01-24 | 基于fabric的拜占庭容错共识方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210078831.5A CN114598475B (zh) | 2022-01-24 | 2022-01-24 | 基于fabric的拜占庭容错共识方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114598475A CN114598475A (zh) | 2022-06-07 |
CN114598475B true CN114598475B (zh) | 2022-11-01 |
Family
ID=81806223
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210078831.5A Active CN114598475B (zh) | 2022-01-24 | 2022-01-24 | 基于fabric的拜占庭容错共识方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114598475B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110245951A (zh) * | 2019-06-19 | 2019-09-17 | 西南交通大学 | 一种基于树形结构的联盟链主从多链共识方法 |
CN110677485A (zh) * | 2019-09-30 | 2020-01-10 | 大连理工大学 | 一种基于信用的动态分层拜占庭容错共识方法 |
CN111612455A (zh) * | 2020-04-21 | 2020-09-01 | 国网江苏省电力有限公司电力科学研究院 | 一种面向用电信息保护的拜占庭容错联盟链共识方法及其系统、存储介质 |
WO2021244568A1 (zh) * | 2020-06-05 | 2021-12-09 | 支付宝(杭州)信息技术有限公司 | 区块链中的共识方法和系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111526218B (zh) * | 2020-07-03 | 2020-09-22 | 支付宝(杭州)信息技术有限公司 | 联盟链中的共识方法和系统 |
-
2022
- 2022-01-24 CN CN202210078831.5A patent/CN114598475B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110245951A (zh) * | 2019-06-19 | 2019-09-17 | 西南交通大学 | 一种基于树形结构的联盟链主从多链共识方法 |
CN110677485A (zh) * | 2019-09-30 | 2020-01-10 | 大连理工大学 | 一种基于信用的动态分层拜占庭容错共识方法 |
CN111612455A (zh) * | 2020-04-21 | 2020-09-01 | 国网江苏省电力有限公司电力科学研究院 | 一种面向用电信息保护的拜占庭容错联盟链共识方法及其系统、存储介质 |
WO2021244568A1 (zh) * | 2020-06-05 | 2021-12-09 | 支付宝(杭州)信息技术有限公司 | 区块链中的共识方法和系统 |
Non-Patent Citations (1)
Title |
---|
A Byzantine Fault-Tolerant Consensus Library for Hyperledger Fabric;Artem Barger;《2021 IEEE International Conference on Blockchain and Cryptocurrency (ICBC)》;20210506;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN114598475A (zh) | 2022-06-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109936457B (zh) | 区块链多方见证方法、装置、设备及计算机可读存储介质 | |
US11128522B2 (en) | Changing a master node in a blockchain system | |
CN109493221B (zh) | 区块链中交易记录保密方法、设备、网络及存储介质 | |
CN111314067B (zh) | 区块存储方法、装置、计算机设备及存储介质 | |
CN111654465A (zh) | 一种基于区块链的电力业务跨域可信认证系统及方法 | |
CN112540926A (zh) | 一种基于区块链的资源分配公平的联邦学习方法 | |
CN108734028A (zh) | 基于区块链的数据管理方法、区块链节点及存储介质 | |
CN109379343B (zh) | 一种区块链的异构共识方法及终端 | |
CN109981690B (zh) | 一种基于区块链智能合约的防篡改定时数据保密传输方法 | |
CN113141414B (zh) | 一种cnfs协议中区块链节点的分组多链异步共识方法 | |
CN111163109B (zh) | 区块链去中心式节点防仿冒方法 | |
CN110166237A (zh) | 一种基于区块链的密钥分发方法及系统 | |
CN113079000A (zh) | 一种基于可验证量子随机数的共识方法 | |
CN116432213A (zh) | 一种基于多链区块链的粮食供应链数据隐私保护方法 | |
CN114862397B (zh) | 一种基于双链结构的双解耦区块链分布式方法 | |
CN110689348A (zh) | 基于联盟链的收入验证方法、装置、终端及介质 | |
CN113127562A (zh) | 一种低冗余区块链数据存储和检索方法及系统 | |
CN113901528A (zh) | 基于区块链的云端数据完整性审计方法 | |
CN114528565A (zh) | 一种基于区块链的敏感数据高效上链算法 | |
CN114598475B (zh) | 基于fabric的拜占庭容错共识方法及系统 | |
CN116828453A (zh) | 基于自适应非线性函数的无人机边缘计算隐私保护方法 | |
CN113570321B (zh) | 氢能数据管理系统 | |
CN116055579A (zh) | 多联盟链跨链方法 | |
CN115357915A (zh) | 基于深度学习和信息隐藏的区块链方法和医康养交易系统 | |
CN115086049A (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 |