CN115348278A - 区块链的分布式存储方法 - Google Patents
区块链的分布式存储方法 Download PDFInfo
- Publication number
- CN115348278A CN115348278A CN202210994424.9A CN202210994424A CN115348278A CN 115348278 A CN115348278 A CN 115348278A CN 202210994424 A CN202210994424 A CN 202210994424A CN 115348278 A CN115348278 A CN 115348278A
- Authority
- CN
- China
- Prior art keywords
- node
- client
- segment
- coding
- coding segment
- 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
Images
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/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- 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
- H04L63/123—Applying verification of the received information received data contents, e.g. message integrity
-
- 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
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)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了区块链的分布式存储方法,该方法包括:根据预设的纠删码技术,生成目标区块对应的编码片段集合及每一编码片段对应的哈希值,各编码片段的数量与客户端节点的数量相同,编码片段集合包含目标区块的所有区块数据及与可容忍拜占庭节点数量相同的冗余编码片段;以各编码片段对应的哈希值作为叶子节点,生成默克尔树并生成默克尔树路径;将每一编码片段及其对应的默克尔树路径广播至对应的客户端节点,以供各客户端节点验证并确认是否需要与服务器主节点形成共识,在形成共识后,目标区块对应的编码片段集合存储于各共识客户端节点。可见,本申请在保证存储的交易数据的正确性及完整性的基础上,优化了区块链的存储性能。
Description
技术领域
本申请涉及区块链技术领域,更具体地说,涉及区块链的分布式存储方法。
背景技术
由于区块链具备不可篡改性,使用区块链存储交易数据,便于监管核查,因而,现有技术中常将交易数据存储于区块链上。但,随着交易数据的日渐增多,对区块链的存储需求日渐增高。如何提高区块链的存储能力,以存储日渐增多的交易数据成为了本领域人员关注的重点。
综上所述,亟需一种区块链的分布式存储方法,用于提高区块链的存储性能。
发明内容
有鉴于此,本申请提供了一种区块链的分布式存储方法,用于提高区块链的存储性能。
为了实现上述目的,现提出的方案如下:
一种区块链的分布式存储方法,所述区块链上的节点包括一个服务器主节点、至少一个服务器备份节点及至少两个客户端节点,所述方法应用于服务器主节点,包括:
根据预设的纠删码技术,生成所述区块链上的目标区块对应的编码片段集合及所述编码片段集合中每一个编码片段对应的哈希值,其中,所述目标区块对应的编码片段集合中各编码片段的数量与所述客户端节点的数量相同,所述编码片段集合中包含了所述目标区块的所有区块数据,且所述编码片段集合中包含了与可容忍拜占庭节点数量相同的冗余编码片段;
以各编码片段对应的哈希值作为叶子节点,生成存储了各编码片段对应的哈希值的默克尔树;
生成每一个编码片段对应的默克尔树路径,所述编码片段对应的默克尔树路径,记录了在所述目标区块对应的默克尔树中所述编码片段对应的叶子节点到所述默克尔树的根节点所需要经过的所有叶子节点;
将每一个编码片段及其对应的默克尔树路径广播至对应的客户端节点,以供各客户端节点之间基于所述编码片段及其对应的默克尔树路径进行验证,并确认是否需要与所述服务器主节点形成共识,在形成共识后,实现将所述目标区块对应的编码片段集合存储于各共识客户端节点,其中,N为所述区块链上的客户端节点的数量,共识客户端节点的个数为正整数且不小于2N/3,N为整数且不小于2。
一种区块链的分布式存储方法,所述区块链上的节点包括一个服务器主节点、至少一个服务器备份节点及至少两个客户端节点,所述方法应用于客户端节点,包括:
接收所述服务器主节点发送的与本节点匹配的编码片段及所述编码片段对应的默克尔树路径,其中,所述编码片段为所述服务器主节点利用预设的纠删码技术对区块链上的目标区块进行编码得到的,所述编码片段对应的默克尔树路径,记录了在所述目标区块对应的默克尔树中所述编码片段对应的叶子节点到所述默克尔树的根节点所需要经过的所有叶子节点;
根据所述编码片段及所述编码片段对应的默克尔树路径,验证接收到的编码片段是否正确;
若正确,则存储所述接收到的编码片段;
向除本节点之外的各客户端节点广播签名及验证结果,以便各客户端节点形成共识;
判断接收到的除本节点之外的客户端节点广播的签名及验证结果的数量是否皆不小于阈值,其中,N为所述区块链上的客户端节点的数量,所述阈值为2N/3,N为整数且不小于2;
若签名及判断结果的数量皆不小于所述阈值,则向所述服务器主节点及所述除本节点之外的客户端节点广播确认信息,以供所述服务器主节点在确认所述确认信息的数量不小于所述阈值后,与数量不少于2N/3的客户端节点形成共识,以实现将所述目标区块的各个编码片段存储于各形成共识的客户端节点。
从上述的技术方案可以看出,区块链上的节点包括一个服务器主节点、至少一个服务器备份节点及至少两个客户端节点,而本申请提供的区块链的分布式存储方法,主要应用于服务器主节点,首先,可以根据预设的纠删码技术,生成所述区块链上的目标区块对应的编码片段集合及所述编码片段集合中每一个编码片段对应的哈希值,其中,所述目标区块对应的编码片段集合中各编码片段的数量与所述客户端节点的数量相同,所述编码片段集合中包含了所述目标区块的所有区块数据,且所述编码片段集合中包含了与可容忍拜占庭节点数量相同的冗余编码片段,因而,可以确定当区块链上存储了所有编码片段后,可以完成该区块的所有区块数据的存储;以各编码片段对应的哈希值作为叶子节点,生成存储了各编码片段对应的哈希值的默克尔树;可以生成每一个编码片段对应的默克尔树路径,所述编码片段对应的默克尔树路径,记录了在所述目标区块对应的默克尔树中所述编码片段对应的叶子节点到所述默克尔树的根节点所需要经过的所有叶子节点,以便客户端节点根据该默克尔树路径查找默克尔树上与默克尔树路径匹配的哈希值,以此为基础验证接收到的编码片段的完整性及正确性;将每一个编码片段及其对应的默克尔树路径广播至对应的客户端节点,以供各客户端节点之间基于所述编码片段及其对应的默克尔树路径进行验证,并确认是否需要与所述服务器主节点形成共识,在形成共识后,实现将所述目标区块对应的编码片段集合存储于各共识客户端节点,其中,N为所述区块链上的客户端节点的数量,共识客户端节点的个数为正整数且不小于2N/3,N为整数且不小于2,如此,可以在客户端节点上存储区块对应的编码片段集合,且区块链上客户端节点存储了该区块的所有区块数据,但每一客户端节点仅仅是存储一部分该区块的区块数据,节省了各客户端节点的存储空间,以提高区块链的存储性能。
此外,本申请中将各编码片段及其对应的默克尔树路径广播至各客户端节点,以供各客户端节点之间基于所述编码片段及其对应的默克尔树路径进行验证,并确认是否需要与所述服务器主节点形成共识,在形成共识后,实现将所述目标区块对应的编码片段集合存储于各共识客户端节点,即,在各客户端节点验证完接收到的编码片段正确与否后才存储编码片段,能够保证各客户端节点所存储的编码片段的正确性及准确性。
综上,本申请在保证存储的交易数据的正确性及完整性的基础上,优化了区块链的存储性能。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请公开的一种区块链的节点架构图;
图2a-图2b为本申请公开的一种区块链的分布式存储的可选信令流程图;
图3为本申请示例的一种默克尔树;
图4为本申请公开的一种区块链的分布式存储装置结构框图;
图5为本申请公开的又一种区块链的分布式存储装置结构框图;
图6为本申请公开的一种区块链的分布式存储设备的硬件结构框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请提供的区块链的分布式存储方法,可以应用于区块链的链上存储中,通过本申请的区块链的分布存储方法将区块链上每一区块的各编码片段存储于各客户端节点上,以实现将各区块的存储于区块链上。将各区块存储于区块链上能够在一定程度上保证区块数据的安全性,降低数据泄露的风险。
接下来,将结合图1对本申请实施例提供的实现区块链分布式存储的一种可选的区块链架构进行详细介绍。
参见图1,该区块链上可以包括:服务器主节点10、客户端节点20及服务器备份节点30。其中,区块链上的节点按类型分为服务器节点和客户端节点。服务器节点占少数,客户端节点占多数。本申请中服务器节点存储完整的区块链,该完整的区块链中包括各区块的区块数据,各服务器备份节点间相互备份,保持数据同步。客户端节点只存放各个区块的编码片段,以及少量用于数据完整性验证的默克尔树数据。
而服务器节点中存在一个服务器主节点10,其余皆是服务器备份节点30。各客户端节点服务器20在本申请中并未进行主从划分,多个客户端节点20中可能存在宕机或恶意的客户端节点20。服务器主节点10的数量为一个、服务器备份节点30的个数为至少一个,客户端节点20的数量为至少两个。本申请提供的区块链的分布式存储方法主要需要服务器主节点10及各客户端节点20的配合,以实现将区块链上每一区块的各编码片段存储于各客户端节点20上。
服务器主节点10及服务器备份节点30所对应的设备可以是服务设备,通过单台服务设备或服务器集群实现,各服务器节点所对应的设备拥有强大的计算与存储能力。各客户端节点20所对应的设备可以是各类便携式可接发设备,物联网设备等,例如,iPad、电脑及移动终端等终端设备。客户端节点所对应的设备对计算和存储能力的要求较低。
各客户端节点20之间可以互相传输数据信息,对等互信,服务器主节点10及服务器备份节点20之间也可以互相传输数据信息,服务器主节点10及各客户端节点20之间也可以互相传输数据信息。
本申请的各客户端节点20之间可能具备一个或多个相同或相似的属性。
本申请的提供的区块链的分布式存储方法主要应用于服务器主节点及各客户端节点,而服务器备份节点主要用于接收并存储服务器主节点传输的区块链上的所有区块。
接下来,将结合图2a及图2b对本申请实施例提供的区块链的分布式存储方法进行详细介绍。图2a及图2b具有继承性,本申请在实施过程中先后执行图2a及图2b。本申请中的区块链的分布式存储方法的具体步骤如下:
步骤S1、服务器主节点根据预设的纠删码技术,生成所述区块链上的目标区块对应的编码片段集合及所述编码片段集合中每一个编码片段对应的哈希值。
具体地,目标区块为区块链上任意一个未被编码的区块,例如,可以是未应用过本申请区块链的分布式存储方法的区块链上的任意一个历史区块,也可以是应用过本申请区块链的分布式存储方法的区块链上的任意一个新增加的区块。
未被编码的目标区块中的区块数据是二进制形式的,需要将先将目标区块中的区块数据转换为二进制,再对转换后的区块数据使用纠删码技术。
纠删码技术可以为RS codes(Reed-solomon codes,里德-所罗门码又称里所码),RS codes是一种前向错误更正的信道编码。
其中,该目标区块对应的编码片段集合中各编码片段的数量与区块链上客户端节点的数量相同,该目标区块对应的编码片段集合中包含了该目标区块的所有区块数据,且使用纠删码技术后该目标区块对应的编码片段集合中包含了与可容忍拜占庭节点数量相同的冗余编码片段。基于此,可以仅获取部分编码片段即可解码得到编码片段集合对应的目标区块的区块数据,其中,部分编码片段的数量等于区块链上客户端节点的数量与区块链上可容忍拜占庭节点数量之间的差值。
区块链上可容忍拜占庭节点数量与客户端节点的数量有关,若区块链上客户端节点的数量为正整数N,f为拜占庭协议设置的共识节点的容错数,f为非负整数,且等于Floor[(N-1)/3],Floor表明向下取整。
可以分别对每一编码片段采用哈希算法,得到每一编码片段对应的哈希值。各编码片段与各哈希值之间属于一一对应的关系。
步骤S2、服务器主节点以各编码片段对应的哈希值作为叶子节点,生成存储了各编码片段对应的哈希值的默克尔树。
具体地,默克尔树为二叉树,各叶子节点之间两两结合,直至得到默克尔树的根节点的哈希值,即完成默克尔树的构建,如图3所示。
参见图3,每一圆圈表示一个节点,编码片段集合中每一编码片段对应的哈希值为默克尔树的最底层。
步骤S3、服务器主节点生成每一个编码片段对应的默克尔树路径。
具体地,每一个编码片段对应的默克尔树路径,记录了在该目标区块对应的默克尔树中该编码片段对应的叶子节点到该默克尔树的根节点所需要经过的所有叶子节点。
参见图3,以编码片段集合中的某一个编码片段为例,该为例的编码片段对应的哈希值若为图3中的哈希值2,那么该为例的编码片段对应的叶子节点到该默克尔树的根节点所需要经过的所有叶子节点为图3中的两个虚线圆圈,而默克尔树路径为先哈希值1再到哈希值3。
图3中的哈希值1、哈希值2、哈希值3、哈希值4及哈希值5仅表明各哈希值所对应的编码片段不同,与生成各哈希值所采用的哈希算法无关。
步骤S4、服务器主节点发送与所述第一客户端节点对应的编码片段及默克尔树路径至第一客户端节点。
具体地,编码片段集合中的每一编码片段都有对应的客户端节点,服务器主节点可以按照编码片段与客户端节点之间的对应关系,将每一个编码片段及其默克尔树路径发送至对应的客户端节点。
需要说明的是,本申请中的第一客户端节点、第二客户端节点及第三客户端节点仅表明第一客户端节点、第二客户端节点及第三客户端节点为三个客户端节点,且每个客户端节点在目标区块对应的编码片段集合中都有唯一对应的编码片段,但本申请并未限制第一客户端节点、第二客户端节点及第三客户端节点之间的关系及属性,第一客户端节点、第二客户端节点及第三客户端节点之间可以具备一个或多个属性。
还需要说明的是,本申请所提供的实施步骤及可选信令流程仅是为了清楚地介绍本申请,但并未限制本申请在实施区块链的分布式存储方法时,仅能用于存在三个客户端节点的区块链中,本申请并未对客户端节点的个数进行限制。
步骤S5、服务器主节点发送与所述第二客户端节点对应的编码片段及默克尔树路径至第二客户端节点。
具体地,服务器主节点将编码片段集合中与第二客户端节点对应的编码片段发送至该第二客户端节点,同时,发送第二客户端节点对应的编码片段的默克尔树路径。
步骤S6、服务器主节点发送与所述第三客户端节点对应的编码片段及默克尔树路径至第三客户端节点。
具体地,服务器主节点将编码片段集合中与第三客户端节点对应的编码片段发送至该第三客户端节点,同时,发送第三客户端节点对应的编码片段的默克尔树路径。
服务器主节点需要将编码片段集合中的每一个编码片段及其默克尔树路径都发送至对应的客户端节点中。
服务器主节点发送编码片段的过程中并不会遗漏任意一个客户端节点,即,服务器主节点同样会将对应的编码片段发送至恶意或宕机的客户端节点中。
步骤S7、服务器主节点发送所述目标区块至服务器备份节点。
具体地,服务器主节点可以将目标区块同时发送至各服务器备份节点中,以对区块链上的目标区块进行备份,服务器主节点也可以直接将区块链上包含目标区块在内的所有区块发送至服务器备份节点中,实现对区块链上的所有区块进行备份。
本实施例提供的各步骤仅是为了清楚地说明本申请,实际上,服务器主节点不仅可以先后执行步骤S4、S5、S6及S7,也可以同时执行步骤S4、S5、S6及S7,其中,先后执行步骤S4、S5、S6及S7时,执行顺序也并不一定都按照以步骤S4开始,以步骤S7结束实施,在实施过程中,本申请仅关注是否完成了步骤S4、S5、S6及S7,并不关注步骤S4、S5、S6及S7的先后顺序。
步骤S8、第一客户端节点根据接收到的编码片段及默克尔树路径,验证接收到的编码片段是否正确,若正确,则存储该编码片段。
具体地,当第一客户端节点接收到编码片段及其对应的默克尔树路径时,即可根据接收到的编码片段及默克尔树路径,验证接收到的编码片段是否正确,并在验证结果为正确时,存储接收到的编码片段。
可以通过判断接收到的编码片段是否完整,以完成验证。
在实施过程中,步骤S8仅是在步骤S4之后执行,本申请并不限制步骤S8是否一定要在步骤S5、S6及S7之后执行。
步骤S9、第二客户端节点根据接收到的编码片段及默克尔树路径,验证接收到的编码片段是否正确,若正确,则存储该编码片段。
具体地,当第二客户端节点接收到编码片段及其对应的默克尔树路径时,即可根据接收到的编码片段及默克尔树路径,验证接收到的编码片段是否正确,并在验证结果为正确时,存储接收到的编码片段。
在实施过程中,步骤S9仅是在步骤S5之后执行,本申请并不限制步骤S9是否一定要在步骤S4、S6、S7及S8之后执行。
步骤S10、第三客户端节点根据接收到的编码片段及默克尔树路径,验证接收到的编码片段是否正确,若正确,则存储该编码片段。
具体地,当第三客户端节点接收到编码片段及其对应的默克尔树路径时,即可根据接收到的编码片段及默克尔树路径,验证接收到的编码片段是否正确,并在验证结果为正确时,存储接收到的编码片段。
当存在客户端节点得到表明编码片段不正确的验证结果时,该客户端节点可以向服务器主节点发送指令,以供服务器主节点重新发送与该客户端节点匹配的编码片段及默克尔树路径。
在实施过程中,步骤S10仅是在步骤S6之后执行,本申请并不限制步骤S10是否一定要在步骤S4、S5、S7、S8及S9之后执行。
在实施过程中,区块链上可能存在恶意或宕机的客户端节点,其在服务器主节点发送对应的编码片段及默克尔树路径后,可能并不接收编码片段,也可能在接收编码片段后并不做任何处理。
步骤S11、第一客户端节点发送所述第一客户端的签名及验证结果至第二客户端节点。
步骤S12、第一客户端节点发送所述第一客户端的签名及验证结果至第三客户端节点。
具体地,在第一客户端节点验证接收到的编码片段完整且正确后,将第一客户端节点签名及验证结果发送至区块链中除第一客户端节点以外的所有客户端节点中,区块链中除第一客户端节点以外的所有客户端节点中可能包含有恶意或宕机的客户端节点。
第一客户端节点可以同时向区块链中除第一客户端节点以外的所有客户端节点发送第一客户端的签名及验证结果。
其中,第一客户端节点向区块链中除第一客户端节点以外的所有客户端节点所发送的签名及验证结果可以是一致的。
步骤S13、第二客户端节点发送所述第二客户端的签名及验证结果至第三客户端节点。
步骤S14、第二客户端节点发送所述第二客户端的签名及验证结果至第一客户端节点。
具体地,在第二客户端节点验证接收到的编码片段完整且正确后,第二客户端节点将第二客户端节点的签名及验证结果发送至区块链中除第二客户端节点以外的所有客户端节点中,区块链中除第二客户端节点以外的所有客户端节点中可能包含有恶意或宕机的客户端节点。
第二客户端节点可以同时向区块链中除第二客户端节点以外的所有客户端节点发送第二客户端的签名及验证结果。
其中,第二客户端节点向区块链中除第二客户端节点以外的所有客户端节点所发送的签名及验证结果可以是一致的。
步骤S15、第三客户端节点发送所述第三客户端的签名及验证结果至第二客户端节点。
步骤S14、第三客户端节点发送所述第三客户端的签名及验证结果至第一客户端节点。
具体地,在第三客户端节点验证接收到的编码片段完整且正确后,第三客户端节点将第三客户端节点的签名及验证结果发送至区块链中除第三客户端节点以外的所有客户端节点中,区块链中除第三客户端节点以外的所有客户端节点中可能包含有恶意或宕机的客户端节点。
第三客户端节点可以同时向区块链中除第三客户端节点以外的所有客户端节点发送第三客户端的签名及验证结果。
其中,第三客户端节点向区块链中除第三客户端节点以外的所有客户端节点所发送的签名及验证结果可以是一致的。
需要说明的是,不同的客户端节点所发送的签名是不一致的,即,客户端节点所发送的签名与该客户端节点之间一一对应。
当各客户端节点接收到各个签名及验证结果后,可以采用预置的私钥进行解密。
步骤S17、第一客户端节点判断接收到的签名及验证结果是否不小于2N/3,若是,则执行步骤S20。
步骤S18、第二客户端节点判断接收到的签名及验证结果是否不小于2N/3,若是,则执行步骤S21。
步骤S19、第三客户端节点判断接收到的签名及验证结果是否不小于2N/3,若是,则执行步骤S22。
具体地,N为所述区块链上的客户端节点的数量,N为整数且不小于2。区块链上的各个非恶意或宕机的客户端节点,在接收到各签名及验证结果后,可以统计接收到的各签名及各验证结果的数量,若所接收到的各签名及各验证结果的数量皆不小于2N/3时,可认为区块链上仅存在,数量少于可容忍拜占庭节点数量的恶意及宕机的客户端节点,此时,发送过签名及验证结果的各客户端节点之间存储有对应的编码片段。
若签名及验证结果小于2N/3,则可能区块链上存在过多的恶意或宕机的客户端节点,此时,需要发送提醒信息,以维修恶意或宕机的客户端节点或增加新的客户端节点。
步骤S20、第一客户端节点发送第一客户端节点的确认信息至服务器主节点。
步骤S21、第二客户端节点发送第二客户端节点的确认信息至第一客户端节点。
步骤S22、第三客户端节点发送第三客户端节点的确认信息至第二客户端节点。
步骤S23、第一客户端节点发送第一客户端节点的确认信息至第二客户端节点。
步骤S24、第二客户端节点发送第二客户端节点的确认信息至第三客户端节点。
步骤S25、第一客户端节点发送第一客户端节点的确认信息至第三客户端节点。
步骤S26、第二客户端节点发送第二客户端节点的确认信息至服务器主节点。
步骤S27、第三客户端节点发送第三客户端节点的确认信息至第一客户端节点。
步骤S28、第三客户端节点发送第三客户端节点的确认信息至服务器主节点。
具体地,当每一客户端节点接收到数量不少于2N/3的签名及验证结果后,可以向服务器主节点及除该客户端节点以外的所有客户端节点发送确认信息,以形成共识。例如,第一客户端节点向服务器主节点及除第一客户端节点以外的所有客户端节点发送第一客户端节点的确认信息;第二客户端节点向服务器主节点及除第二客户端节点以外的所有客户端节点发送第二客户端节点的确认信息;第三客户端节点向服务器主节点及除第三客户端节点以外的所有客户端节点发送第三客户端节点的确认信息。
其中,确认信息包括该发送确认信息的客户端节点的签名及判断结果,该判断结果表明该发送确认信息的客户端节点接收到数量不少于2N/3的签名及验证结果。例如,第一客户端节点的确认信息包括第一客户端节点的签名及判断结果。
各客户端节点在接收到确认信息后,可以对确认信息进行解析,确定接收到的各确认信息的来源,以实现发送过确认信息的各客户端节点之间形成共识,每一客户端节点还可确定存储有目标区块编码片段的各客户端节点。
服务器主节点在接收到各客户端节点发送的确认信息后,可以对接收到的各确认信息进行解析,以确定是否有不小于2N/3的客户端节点存储有目标区块的编码片段。
从上述的技术方案可以看出,区块链上的节点包括一个服务器主节点、至少一个服务器备份节点及至少两个客户端节点,而本申请提供的区块链的分布式存储方法,主要应用于服务器主节点,首先,可以根据预设的纠删码技术,生成所述区块链上的目标区块对应的编码片段集合及所述编码片段集合中每一个编码片段对应的哈希值,其中,所述目标区块对应的编码片段集合中各编码片段的数量与所述客户端节点的数量相同,所述编码片段集合中包含了所述目标区块的所有区块数据,且所述编码片段集合中包含了与可容忍拜占庭节点数量相同的冗余编码片段,因而,可以确定当区块链上存储了所有编码片段后,可以完成该区块的所有区块数据的存储;以各编码片段对应的哈希值作为叶子节点,生成存储了各编码片段对应的哈希值的默克尔树;可以生成每一个编码片段对应的默克尔树路径,所述编码片段对应的默克尔树路径,记录了在所述目标区块对应的默克尔树中所述编码片段对应的叶子节点到所述默克尔树的根节点所需要经过的所有叶子节点,以便客户端节点根据该默克尔树路径查找默克尔树上与默克尔树路径匹配的哈希值,以此为基础验证接收到的编码片段的完整性及正确性;将每一个编码片段及其对应的默克尔树路径广播至对应的客户端节点,以供各客户端节点之间基于所述编码片段及其对应的默克尔树路径进行验证,并确认是否需要与所述服务器主节点形成共识,在形成共识后,实现将所述目标区块对应的编码片段集合存储于各共识客户端节点,其中,N为所述区块链上的客户端节点的数量,共识客户端节点的个数为正整数且不小于2N/3,N为整数且不小于2,如此,可以在客户端节点上存储区块对应的编码片段集合,且区块链上客户端节点存储了该区块的所有区块数据,但每一客户端节点仅仅是存储一部分该区块的区块数据,节省了各客户端节点的存储空间,以提高区块链的存储性能。
此外,本申请中将各编码片段及其对应的默克尔树路径广播至各客户端节点,以供各客户端节点之间基于所述编码片段及其对应的默克尔树路径进行验证,并确认是否需要与所述服务器主节点形成共识,在形成共识后,实现将所述目标区块对应的编码片段集合存储于各共识客户端节点,即,在各客户端节点验证完接收到的编码片段正确与否后才存储编码片段,能够保证各客户端节点所存储的编码片段的正确性及准确性。
另外,本实施例在形成共识的过程中,所广播的是编码片段、默克尔树路径、签名、验证结果及判断结果,不需要广播默克尔树,且编码片段、默克尔树路径、签名、验证结果及判断结果的数据量偏小,因而,本实施例能够有效减小通信成本以及降低网络带宽。
综上,本申请在保证存储的交易数据的正确性及完整性的基础上,优化了区块链的存储性能,并降低了共识过程中的通信成本及网络带宽。
在本申请的一些实施例中,考虑到在形成共识后,区块链上可能增加新区块,该新区块也需要存储于各客户端节点中,可以将每一个新区块分别作为目标区块,执行本申请提供的区块链的分布式存储方法,实现新区块的分布式存储。
从上述技术方案可以看出,本实施例可以利用区块链的分布式存储方法逐步将区块链上的新区块分布式地存储于各客户端节点中。
接下来,本申请实施例将从服务器主节点的角度对本申请的区块链的分布式存储方法做进一步介绍。
在本申请的一些实施例中,对步骤S1、服务器主节点根据预设的纠删码技术,生成所述区块链上的目标区块对应的编码片段集合及所述编码片段集合中每一个编码片段对应的哈希值的过程进行详细说明,步骤如下:
S10、服务器主节点根据纠删码技术,将所述目标区块中的区块数据进行分割,并将分割后的数据组成列矩阵。
具体地,N为所述区块链上的客户端节点的数量,f为拜占庭协议设置的共识节点的容错数,为非负整数且小于N,所述列矩阵中元素的个数等于N-f,N为整数且不小于2。
服务器主节点将目标区块的区块数据转换为二进制,并将二进制形式的区块数据进行分割,得到数量等于N-f的二进制形式的区块数据片段,并采用有限域GF(28)的运算法则对区块数据片段进行运算处理,再将运算处理后的各区块数据片段组成列矩阵。
S11、服务器主节点确定与区块链上各客户端节点对应的可逆矩阵。
具体地,所述可逆矩阵可以为采用有限域GF(28)的运算法则处理后的范德蒙矩阵或者柯西矩阵。
其中,每一个客户端节点对应于所述可逆矩阵中的一个行向量,且所述可逆矩阵中每一个行向量的元素的个数等于所述列矩阵中的元素个数。
S12、服务器主节点将所述可逆矩阵与所述列矩阵相乘,得到每一客户端节点对应的编码片段,各客户端节点对应的编码片段组成编码片段集合。
具体地,服务器主节点将可逆矩阵与列矩阵相乘,得到编码片段集合,编码片段集合中编码片段的数量与区块链上客户端节点的数量一致。又由于可逆矩阵中的各个行向量与各个客户端节点之间为一一对应的关系,而可逆矩阵中的每一个行向量分别与列矩阵相乘,得到每一个行向量对应的编码片段,因而,由于可逆矩阵中的行向量的存在,编码片段与客户端节点之间亦是一一对应的关系。
从上述技术方案可以看出,本实施例相比于上一实施例,提供了一种生成编码片段集合的可选的方式,通过上述过程,可以生成与各个客户端节点对应的编码片段,从而,实现目标区块的分布式存储。且生成编码片段集合的过程中利用的是可逆矩阵,因而,可以利用可逆矩阵的逆矩阵,由编码片段解码得到目标区块的区块数据。
在本申请的一些实施例中,考虑到在形成共识后,区块链上可能增加新的客户端节点,而新的客户端节点也需要存储目标区块的编码片段,以便后续解码时,能够从新客户端节点中获取编码片段。基于此,在新客户端节点加入已形成共识的区块链后,可以增加如下步骤:
S29、服务器主节点确定与所述新客户端节点对应的行向量,并将所述新客户端节点对应的行向量与所述列矩阵相乘,得到所述新客户端节点对应的新编码片段。
具体地,服务器主节点可确定每一个新客户端节点对应的行向量,此时,区块链中各客户端节点皆有对应的行向量,且各行向量所组成的矩阵为可逆矩阵,若不为可逆矩阵,则需要重新确定新客户端节点所对应的行向量。
服务器主节点可将每一个新客户端节点对应的行向量与运算处理后的各区块数据片段所组成的列矩阵相乘,得到该新客户端节点对应的编码片段。
该新客户端节点对应的编码片段即为新编码片段。
S30、服务器主节点生成所述新编码片段对应的新哈希值。
具体地,服务器主节点可以利用哈希算法,生成新客户端节点的编码片段对应的哈希值,新编码片段的哈希值即为新哈希值。
S31、服务器主节点根据所述新哈希值更新所述默克尔树,并确定所述新编码片段对应的新的默克尔树路径。
具体地,服务器主节点可以更新与目标区块对应的默克尔树,并确定在更新后的默克尔树中新编码片段对应的默克尔树路径。
S32、服务器主节点将所述新编码片段及所述新的默克尔树路径发送至对应的新客户端节点,以供所述新客户端节点生成接收到的编码片段的哈希值,并根据生成的哈希值及接收到的默克尔树路径,计算得到根哈希值,并将计算得到的根哈希值与默克尔树的根哈希值比对,在计算得到的根哈希值与默克尔树的根哈希值一致时,存储接收到的编码片段,以减少对历史编码片段及原客户端节点造成影响。
具体地,服务器主节点可以将生成的新编码片段及其对应的默克尔树路径发送至对应的新客户端节点中。新客户端节点生成接收到的编码片段的哈希值,并调用目标区块对应的默克尔树,根据该默克尔树及接收到的默克尔树路径,验证接收到的编码片段的完整性及正确性。在验证结果为正确的时候,新客户端节点发送确认信息至服务器主节点。
需要注意的是,区块链上服务器主节点与各客户端节点生成哈希值所采用的哈希算法是一致的。
本申请中的区块链的编码速率等于各区块数据片段的数量与编码片段集合中编码片段的数量之间的比值,还等于(N-f)/N。
一个区块数据的大小为B时,这个区块数据被编码成N个编码片段,编码速率等于(N-f)/N,其中这个区块首先被分成N-f份,每一份的存储大小为B/(N-f),N-f份原始数据片段将会被编码成N份编码片段,每一份编码片段的存储大小为3B/(2N+1)。如果新节点加入不改变行向量的元素个数,即编码速率不变,那么分配给新节点的编码片段存储大小同样为B/(N-f),区块链上的其他区块编码后得到的编码片段的存储大小同样不变。但如果改变改变行向量的元素个数,改变编码速率,采用区块链上实时的客户端节点的数量来确定可逆矩阵及列矩阵,那么当新节点加入后每一份编码片段的存储大小将变为3B/(2N1+1),其中,N1为新节点加入后,区块链上客户端节点的数量。因此,随着客户端节点数量的增多所存储的编码片段的大小却在减小。
从上述技术方案可以看出,本实施例提供了一种区块链上增加了新客户端节点后对目标区块的存储方式,通过上述过程,在新的客户端节点加入后,不需要重新为区块链上的各客户端节点分配编码片段,不会对区块链上原客户端节点造成影响。若是在新客户端节点加入后,根据区块链上的客户端节点的数量重新分配编码片段的话,这对于服务器主节点而言,工作量较大,且时间及通信成本较大,还会影响其他服务。因而,通过本实施例提供的技术方案,能够进一步降低时间及通信成本,避免对服务器主节点的其他服务造成影响。且采用本申请提供的区块链的分布式存储方法,能够在新节点加入后,仍保持对目标区块的存储量,抗风险能力更强。
在本申请的一些实施例中,对步骤S31中服务器主节点根据所述新哈希值更新所述默克尔树的过程进行详细说明,步骤如下:
S310、若所述新客户端节点的个数为1,则直接以所述新哈希值为叶子节点更新所述默克尔树。
具体地,若新客户端节点的个数为1,则仅有一个新哈希值可作为新的叶子节点。此时,可以直接将该新哈希值作为目标区块对应的默克尔树的叶子节点之一,而组成默克尔树的叶子节点之间两两结合,实现更新默克尔树。
S311、若所述新客户端节点的个数为两个以上,则以各新哈希值作为叶子节点生成目标默克尔树。
具体地,若新客户端节点的个数为两个以上,则新哈希值的个数亦为两个以上,因而,新哈希值之间先两两结合,生成仅存储有新哈希值的目标默克尔树。
S312、所述目标默克尔树的根节点与所述默克尔树的根节点结合,得到更新后的默克尔树。
具体地,该目标默克尔树与原默克尔树进行根节点的结合,完成目标区块的根节点的更新。
从上述技术方案可以看出,本实施例提供了一种更新目标区块对应的默克尔树的可选的方式。通过上述过程,可以完成默克尔树的更新,以实现默克尔树中包含有各客户端节点存储的编码片段对应的哈希值,从而,能够更准确地生成用于验证的默克尔树路径。
在本申请的一些实施例中,对步骤S2、服务器主节点以各编码片段对应的哈希值作为叶子节点,生成存储了各编码片段对应的哈希值的默克尔树的过程进行详细说明,步骤如下:
S20、服务器主节点为每一个编码片段随机分配标识。
具体地,编码片段与标识之间为一一对应的关系。
各编码片段的标识的长度可以是一致的。
服务器主节点可以采用随机数生成算法,生成每一个编码片段的标识。
S21、服务器主节点将所述编码片段对应的标识及哈希值组成键值对。
具体地,同一编码片段的标识及哈希值可以进行组合并建立对应关系。标识与哈希值亦是一一对应的关系。
S22、服务器主节点以各编码片段对应的键值对作为叶子节点,构建默克尔树。
具体地,默克尔树中不仅包含有各编码片段的哈希值,还可以包含各编码片段的标识。同一编码片段的标识及哈希值组合成为默克尔树的一个叶子节点。
从上述技术方案可以看出,本实施例提供了一种生成默克尔树的可选的方式。通过上述的方式,标识与哈希值一一对应,通过确定标识,即可得到与标识对应的哈希值,因而,可以记录默克尔树路径中的各哈希值对应的标识,实现默克尔树路径的生成。
基于上一实施例,在本申请的一些实施例中,对步骤S3、服务器主节点生成每一个编码片段对应的默克尔树路径的过程进行详细说明,步骤如下:
S30、服务器主节点确定每一个编码片段对应的叶子节点到所述默克尔树的根节点所需要经过的叶子节点。
具体地,服务器主节点从默克尔树中每一个包含有一个键值对的叶子节点出发,确定该叶子节点到默克尔树根节点所需要经过的叶子节点。
S31、服务器主节点按所述编码片段对应的叶子节点到所述默克尔树的根节点所经过的叶子节点的顺序,获取所需要经过的各叶子节点中的标识,形成所述编码片段对应的默克尔树路径。
具体地,服务器主节点从该包含有一个键值对的叶子节点出发到根节点的过程中,每经过一个叶子节点便获取该叶子节点中的标识,并按获取标识的顺序对各获得的标识进行排列,得到默克尔树路径。
从上述技术方案可以看出,本实施例提供了一种生成每一个编码片段对应的默克尔树路径的可选的方式。通过上述的过程,可以更准确地生成每一编码片段的默克尔树路径,以便各客户端节点进行验证。
接下来,本申请实施例将从客户端节点的角度对本申请的区块链的分布式存储方法做进一步介绍。
在本申请的一些实施例中,考虑到在形成共识,实现目标区块对应的编码片段存储于各客户端节点后,可能存在需要查看目标区块上的交易数据等需要获取目标区块的区块数据的情况。此时,客户端节点可能接收到获取区块数据的指令。在此基础上,该客户端节点可以进行解码,解码的过程如下所示:
S33、客户端节点确定解码所需要的编码片段的目标数量。
具体地,由于编码片段集合中包含有f个冗余的编码片段,因而,目标数量等于N-f,其中,f为拜占庭协议设置的共识节点的容错数。
S34、客户端节点从形成共识的其他客户端节点中随机挑选出N-f-1个目标客户端节点,并从所述目标客户端节点中获取所述目标客户端节点对应的行向量及所述目标区块对应的编码片段,并调用本节点对应的行向量及所述目标区块的编码片段。
具体地,接收到指令的客户端节点中,若是执行解码操作,则该客户端节点并非为恶意或宕机的客户端节点,那么该接收到指令的客户端节点已事先存储有一个目标区块对应的编码片段。此时,该客户端节点可以随机从已形成共识的其余客户端节点中随机挑选N-f-1个目标客户端节点,获取该目标客户端节点所对应的行向量及该目标客户端节点所存储的编码片段。
S35、客户端节点根据各行向量及各编码片段,利用纠删码解码技术,得到所述目标区块的区块数据。
具体地,该客户端节点可以通过纠删码解码技术及获得的各行向量及各编码片段,解码得到目标区块的区块数据。
在本申请的一些实施例中,对客户端节点根据接收到的编码片段及默克尔树路径,验证接收到的编码片段是否正确的过程进行详细说明,步骤如下:
S40、客户端节点生成与所述编码片段对应的待验证哈希值。
具体地,若不同的节点对同样的数据信息采用同一种哈希算法,不同的节点也可得到同样的哈希值。但若若不同的节点对不同的数据信息采用同一种哈希算法,不同的节点得到的哈希值并不相同。因而,可以通过判断哈希值是否相同,确定客户端节点接收到的编码片段是否正确。基于此,客户端节点对接收到的编码片段可采用哈希算法,得到待验证的哈希值。
S41、客户端节点调用与所述编码片段对应的默克尔树,根据所述默克尔树路径,查找所述默克尔树,得到在所述默克尔树中所述编码片段对应的叶子节点到根节点之间的所有叶子节点的哈希值。
具体地,客户端节点调用存储于区块链上、与接收到的编码片段对应的默克尔树,根据默克尔树路径在默克尔树中查找哈希值。
S42、客户端节点根据所述待验证哈希值,及所述编码片段对应的叶子节点到根节点之间的所有叶子节点的哈希值,生成待验证根哈希值。
具体地,客户端节点将查找到的哈希值组合,将组合后的哈希值作为待验证根哈希值。
S43、客户端节点判断所述待验证根哈希值与所述默克尔树的根哈希值是否一致,若一致,则确认所述接收到的编码片段正确。
具体地,当待验证根哈希值与默克尔树的根哈希值一致时,表明接受到的默克尔树路径与接受到的编码片段是对应的,且接受到的编码片段亦是完整且正确的。
从上述技术方案可以看出,本实施例提供了一种验证接受到的编码片段是否正确的可选的方式。通过上述的方式,能够确保每一客户端节点所接收到的编码片段与该客户端节点是对应的,且该接收到的编码片段是完整且正确的,能够保证所存储的编码片段亦是正确且完整的。
在本申请的一些实施例中,对步骤S35、客户端节点根据各行向量及各编码片段,利用纠删码解码技术,得到所述目标区块的区块数据的过程进行详细说明,步骤如下:
S350、客户端节点将各行向量组成可逆矩阵,并得到所述可逆矩阵的逆矩阵。
具体地,客户端节点将各个行向量按照一定的顺序组成可逆矩阵,并获取该可逆矩阵的逆矩阵。
其中,若在解码之前,并未有新客户端节点加入区块链,那么,此处的可逆矩阵可为服务器主节点生成编码片段集合时所采用的可逆矩阵的一部分。此处的可逆矩阵仅包含N-f个行向量,而服务器主节点生成编码片段集合时所采用的可逆矩阵包含生成编码片段集合时所有客户端节点的行向量。
S351、客户端节点将各编码片段组成列矩阵,所述列矩阵及所述可逆矩阵中行数相同的元素来自于同一客户端节点。
具体地,客户端节点按照组合行向量的顺序组合各编码片段,得到列矩阵。
其中,此处的各编码片段可为服务器主节点生成的所有与目标区块对应的编码片段的一部分。此处的各编码片段仅包含N-f个编码片段,而服务器主节点生成的所有与目标区块对应的编码片段的数量为N。
S352、客户端节点将所述逆矩阵与所述列矩阵相乘,得到所述目标区块的区块数据。
具体地,客户端节点将所述逆矩阵与所述列矩阵相乘,得到数据片段,对数据片段进行处理并整合,可得到所述目标区块的区块数据。
从上述技术方案可以看出,本实施例提供了一种解码得到区块数据的可选的方式。通过上述的过程,客户端节点可以在得到足够的行向量及编码片段后,解码得到目标区块的区块数据。在此过程中,所需要处理仅是部分编码片段及行向量,不需要所有客户端节点的行向量及所有生成的编码片段,节省了计算量,提高了解码的速度,基于此,在解码过程中也不需要所有的客户端节点都属于共识客户端节点,允许区块链中存在恶意或宕机的客户端节点,适用范围更广。
下面对本申请实施例提供的区块链的分布式存储装置进行描述,下文描述的区块链的分布式存储装置与上文描述的区块链的分布式存储方法可相互对应参照。
首先,结合图4,对应用于服务器主节点所对应的设备的区块链的分布式存储装置进行介绍,如图4所示,该区块链的分布式存储装置可以包括:
编码片段集合生成单元11,用于根据预设的纠删码技术,生成所述区块链上的目标区块对应的编码片段集合及所述编码片段集合中每一个编码片段对应的哈希值,其中,所述目标区块对应的编码片段集合中各编码片段的数量与所述客户端节点的数量相同,所述编码片段集合中包含了所述目标区块的所有区块数据,且所述编码片段集合中包含了与可容忍拜占庭节点数量相同的冗余编码片段;
默克尔树生成单元12,用于以各编码片段对应的哈希值作为叶子节点,生成存储了各编码片段对应的哈希值的默克尔树;
默克尔树路径生成单元13,用于生成每一个编码片段对应的默克尔树路径,所述编码片段对应的默克尔树路径,记录了在所述目标区块对应的默克尔树中所述编码片段对应的叶子节点到所述默克尔树的根节点所需要经过的所有叶子节点;
编码片段广播单元14,用于将每一个编码片段及其对应的默克尔树路径广播至对应的客户端节点,以供各客户端节点之间基于所述编码片段及其对应的默克尔树路径进行验证,并确认是否需要与所述服务器主节点形成共识,在形成共识后,实现将所述目标区块对应的编码片段集合存储于各共识客户端节点,其中,N为所述区块链上的客户端节点的数量,共识客户端节点的个数为正整数且不小于2N/3,N为整数且不小于2。
首先,结合图5,对应用于客户端节点所对应的设备的区块链的分布式存储装置进行介绍,如图5所示,该区块链的分布式存储装置可以包括:
编码片段接收单元21,用于接收所述服务器主节点发送的与本节点匹配的编码片段及所述编码片段对应的默克尔树路径,其中,所述编码片段为所述服务器主节点利用预设的纠删码技术对区块链上的目标区块进行编码得到的,所述编码片段对应的默克尔树路径,记录了在所述目标区块对应的默克尔树中所述编码片段对应的叶子节点到所述默克尔树的根节点所需要经过的所有叶子节点;
编码片段验证单元22,用于根据所述编码片段及所述编码片段对应的默克尔树路径,验证接收到的编码片段是否正确;
编码片段存储单元23,用于若正确,则存储所述接收到的编码片段;
验证结果广播单元24,用于向除本节点之外的各客户端节点广播签名及验证结果,以便各客户端节点形成共识;
数量判断单元25,用于判断接收到的除本节点之外的客户端节点广播的签名及验证结果的数量是否皆不小于阈值,其中,N为所述区块链上的客户端节点的数量,所述阈值为2N/3,N为整数且不小于2;
确认信息广播单元26,用于若签名及判断结果的数量皆不小于所述阈值,则向所述服务器主节点及所述除本节点之外的客户端节点广播确认信息,以供所述服务器主节点在确认所述确认信息的数量不小于所述阈值后,与数量不少于2N/3的客户端节点形成共识,以实现将所述目标区块的各个编码片段存储于各形成共识的客户端节点。
本申请实施例提供的区块链的分布式存储装置可应用于区块链的分布式存储设备。区块链的分布式存储设备可以是服务器主节点所对应的设备或客户端节点所对应的设备。图6示出了区块链的分布式存储设备的硬件结构框图,参照图6,区块链的分布式存储设备的硬件结构可以包括:至少一个处理器1,至少一个通信接口2,至少一个存储器3和至少一个通信总线4;
在本申请实施例中,处理器1、通信接口2、存储器3、通信总线4的数量为至少一个,且处理器1、通信接口2、存储器3通过通信总线4完成相互间的通信;
处理器1可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路等;
存储器3可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory)等,例如至少一个磁盘存储器;
其中,存储器存储有程序,处理器可调用存储器存储的程序,所述程序用于:实现前述服务器主节点在区块链的分布式存储方案中的各个处理流程,或,实现前述客户端节点在区块链的分布式存储方案中的各个处理流程。
本申请实施例还提供一种存储介质,该存储介质可存储有适于处理器执行的程序,所述程序用于:实现前述服务器主节点在区块链的分布式存储方案中的各个处理流程,或,实现前述客户端节点在区块链的分布式存储方案中的各个处理流程。
上述区块链的分布式存储设备及存储介质的具体实现逻辑可以参照前述区块链的分布式存储方法的相关介绍,此处不再赘述。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。本申请的各个实施例之间可以相互结合。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种区块链的分布式存储方法,其特征在于,所述区块链上的节点包括一个服务器主节点、至少一个服务器备份节点及至少两个客户端节点,所述方法应用于服务器主节点,包括:
根据预设的纠删码技术,生成所述区块链上的目标区块对应的编码片段集合及所述编码片段集合中每一个编码片段对应的哈希值,其中,所述目标区块对应的编码片段集合中各编码片段的数量与所述客户端节点的数量相同,所述编码片段集合中包含了所述目标区块的所有区块数据,且所述编码片段集合中包含了与可容忍拜占庭节点数量相同的冗余编码片段;
以各编码片段对应的哈希值作为叶子节点,生成存储了各编码片段对应的哈希值的默克尔树;
生成每一个编码片段对应的默克尔树路径,所述编码片段对应的默克尔树路径,记录了在所述目标区块对应的默克尔树中所述编码片段对应的叶子节点到所述默克尔树的根节点所需要经过的所有叶子节点;
将每一个编码片段及其对应的默克尔树路径广播至对应的客户端节点,以供各客户端节点之间基于所述编码片段及其对应的默克尔树路径进行验证,并确认是否需要与所述服务器主节点形成共识,在形成共识后,实现将所述目标区块对应的编码片段集合存储于各共识客户端节点,其中,N为所述区块链上的客户端节点的数量,共识客户端节点的个数为正整数且不小于2N/3,N为整数且不小于2。
2.根据权利要求1所述的区块链的分布式存储方法,其特征在于,所述根据预设的纠删码技术,生成所述区块链上的目标区块对应的编码片段集合,包括:
根据纠删码技术,将所述目标区块中的区块数据进行分割,并将分割后的数据组成列矩阵,其中,N为所述区块链上的客户端节点的数量,f为拜占庭协议设置的共识节点的容错数,为非负整数且小于N,所述列矩阵中元素的个数等于N-f,N为整数且不小于2;
确定与区块链上各客户端节点对应的可逆矩阵,其中,每一个客户端节点对应于所述可逆矩阵中的一个行向量,且所述可逆矩阵中每一个行向量的元素的个数等于所述列矩阵中的元素个数;
将所述可逆矩阵与所述列矩阵相乘,得到每一客户端节点对应的编码片段,各客户端节点对应的编码片段组成编码片段集合。
3.根据权利要求2所述的区块链的分布式存储方法,其特征在于,在形成共识后,还包括:
若存在新客户端节点加入区块链,则确定与所述新客户端节点对应的行向量,并将所述新客户端节点对应的行向量与所述列矩阵相乘,得到所述新客户端节点对应的新编码片段;
生成所述新编码片段对应的新哈希值;
根据所述新哈希值更新所述默克尔树,并确定所述新编码片段对应的新的默克尔树路径;
将所述新编码片段及所述新的默克尔树路径发送至对应的新客户端节点,以供所述新客户端节点生成接收到的编码片段的哈希值,并根据生成的哈希值及接收到的默克尔树路径,计算得到根哈希值,并将计算得到的根哈希值与默克尔树的根哈希值比对,在计算得到的根哈希值与默克尔树的根哈希值一致时,存储接收到的编码片段,以减少对历史编码片段及原客户端节点造成影响。
4.根据权利要求3所述的区块链的分布式存储方法,其特征在于,根据所述新哈希值更新所述默克尔树,包括:
若所述新客户端节点的个数为1,则直接以所述新哈希值为叶子节点更新所述默克尔树;
若所述新客户端节点的个数为两个以上,则以各新哈希值作为叶子节点生成目标默克尔树;
所述目标默克尔树的根节点与所述默克尔树的根节点结合,得到更新后的默克尔树。
5.根据权利要求1所述的区块链的分布式存储方法,其特征在于,所述以各编码片段对应的哈希值作为叶子节点,生成存储了各编码片段对应的哈希值的默克尔树,包括:
为每一个编码片段随机分配标识;
所述编码片段对应的标识及哈希值组成键值对;
以各编码片段对应的键值对作为叶子节点,构建默克尔树。
6.根据权利要求5所述的区块链的分布式存储方法,其特征在于,所述生成每一个编码片段对应的默克尔树路径,包括:
确定每一个编码片段对应的叶子节点到所述默克尔树的根节点所需要经过的叶子节点;
按所述编码片段对应的叶子节点到所述默克尔树的根节点所经过的叶子节点的顺序,获取所需要经过的各叶子节点中的标识,形成所述编码片段对应的默克尔树路径。
7.一种区块链的分布式存储方法,其特征在于,所述区块链上的节点包括一个服务器主节点、至少一个服务器备份节点及至少两个客户端节点,所述方法应用于客户端节点,包括:
接收所述服务器主节点发送的与本节点匹配的编码片段及所述编码片段对应的默克尔树路径,其中,所述编码片段为所述服务器主节点利用预设的纠删码技术对区块链上的目标区块进行编码得到的,所述编码片段对应的默克尔树路径,记录了在所述目标区块对应的默克尔树中所述编码片段对应的叶子节点到所述默克尔树的根节点所需要经过的所有叶子节点;
根据所述编码片段及所述编码片段对应的默克尔树路径,验证接收到的编码片段是否正确;
若正确,则存储所述接收到的编码片段;
向除本节点之外的各客户端节点广播签名及验证结果,以便各客户端节点形成共识;
判断接收到的除本节点之外的客户端节点广播的签名及验证结果的数量是否皆不小于阈值,其中,N为所述区块链上的客户端节点的数量,所述阈值为2N/3,N为整数且不小于2;
若签名及判断结果的数量皆不小于所述阈值,则向所述服务器主节点及所述除本节点之外的客户端节点广播确认信息,以供所述服务器主节点在确认所述确认信息的数量不小于所述阈值后,与数量不少于2N/3的客户端节点形成共识,以实现将所述目标区块的各个编码片段存储于各形成共识的客户端节点。
8.根据权利要求7所述的区块链的分布式存储方法,其特征在于,根据所述编码片段及所述编码片段对应的默克尔树路径,验证接收到的编码片段是否正确,包括:
生成与所述编码片段对应的待验证哈希值;
调用与所述编码片段对应的默克尔树,根据所述默克尔树路径,查找所述默克尔树,得到在所述默克尔树中所述编码片段对应的叶子节点到根节点之间的所有叶子节点的哈希值;
根据所述待验证哈希值,及所述编码片段对应的叶子节点到根节点之间的所有叶子节点的哈希值,生成待验证根哈希值;
判断所述待验证根哈希值与所述默克尔树的根哈希值是否一致,若一致,则确认所述接收到的编码片段正确。
9.根据权利要求7所述的区块链的分布式存储方法,其特征在于,在实现将所述目标区块的各个编码片段存储于各形成共识的客户端节点之后,还包括:
若需要获取所述目标区块上的区块数据,则确定解码所需要的编码片段的目标数量,其中,f为拜占庭协议设置的共识节点的容错数,为非负整数且小于N,所述目标数量等于N-f;
从形成共识的其他客户端节点中随机挑选出N-f-1个目标客户端节点,并从所述目标客户端节点中获取所述目标客户端节点对应的行向量及所述目标区块对应的编码片段,并调用本节点对应的行向量及所述目标区块的编码片段;
根据各行向量及各编码片段,利用纠删码解码技术,得到所述目标区块的区块数据。
10.根据权利要求9所述的区块链的分布式存储方法,其特征在于,根据各行向量及各编码片段,利用纠删码解码技术,得到所述目标区块的区块数据,包括:
将各行向量组成可逆矩阵,并得到所述可逆矩阵的逆矩阵;
将各编码片段组成列矩阵,所述列矩阵及所述可逆矩阵中行数相同的元素来自于同一客户端节点;
将所述逆矩阵与所述列矩阵相乘,得到所述目标区块的区块数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210994424.9A CN115348278A (zh) | 2022-08-18 | 2022-08-18 | 区块链的分布式存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210994424.9A CN115348278A (zh) | 2022-08-18 | 2022-08-18 | 区块链的分布式存储方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115348278A true CN115348278A (zh) | 2022-11-15 |
Family
ID=83954502
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210994424.9A Pending CN115348278A (zh) | 2022-08-18 | 2022-08-18 | 区块链的分布式存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115348278A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116628083A (zh) * | 2023-04-27 | 2023-08-22 | 中国人民解放军战略支援部队信息工程大学 | 区块链交易数据扩容存储方法及*** |
CN116755640A (zh) * | 2023-08-21 | 2023-09-15 | 腾讯科技(深圳)有限公司 | 联盟链的数据处理方法、装置、计算机设备和存储介质 |
-
2022
- 2022-08-18 CN CN202210994424.9A patent/CN115348278A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116628083A (zh) * | 2023-04-27 | 2023-08-22 | 中国人民解放军战略支援部队信息工程大学 | 区块链交易数据扩容存储方法及*** |
CN116628083B (zh) * | 2023-04-27 | 2024-05-24 | 中国人民解放军战略支援部队信息工程大学 | 区块链交易数据扩容存储方法及*** |
CN116755640A (zh) * | 2023-08-21 | 2023-09-15 | 腾讯科技(深圳)有限公司 | 联盟链的数据处理方法、装置、计算机设备和存储介质 |
CN116755640B (zh) * | 2023-08-21 | 2024-02-09 | 腾讯科技(深圳)有限公司 | 联盟链的数据处理方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107819828B (zh) | 数据传输方法、装置、计算机设备和存储介质 | |
CN115348278A (zh) | 区块链的分布式存储方法 | |
CN108681943B (zh) | 一种区块链网络的数据处理方法、装置、设备及存储介质 | |
CN108900364B (zh) | 区块链网络的管理方法、装置、介质及电子设备 | |
US10049017B2 (en) | Method and system for byzantine fault-tolerance replicating of data on a plurality of servers | |
CN107078910B (zh) | 生成区块链区块的方法、装置、节点、签名设备及*** | |
CN107276765B (zh) | 区块链中共识的处理方法及装置 | |
US8132073B1 (en) | Distributed storage system with enhanced security | |
CN113055188B (zh) | 一种数据处理方法、装置、设备及存储介质 | |
US8140849B2 (en) | Security for network coding file distribution | |
CN108737105B (zh) | 私钥的找回方法、装置、私钥设备和介质 | |
CN113254272A (zh) | 区块链网络的数据处理方法、装置、计算机设备和介质 | |
CN111414426A (zh) | 一种基于区块链的数据处理方法及*** | |
JP2012129751A (ja) | 受信装置及び、受信装置による処理方法 | |
EP4195033A1 (en) | Method and apparatus for upgrading blockchain system, and terminal device | |
CN113746638A (zh) | Nft存储方法、nft还原方法、计算机设备和存储介质 | |
CN114363034B (zh) | 验证码生成及校验方法、装置、电子设备及存储介质 | |
CN112749968A (zh) | 基于区块链的业务数据记录方法及装置 | |
JP2018093363A (ja) | 検証システム、検証方法及び検証プログラム | |
CN114268490B (zh) | 一种设备认证方法、物联网***、服务器及存储介质 | |
CN111259428A (zh) | 基于区块链的数据处理方法、装置、节点设备及存储介质 | |
US11356274B2 (en) | Verifying a set of remotely stored data | |
WO2018000647A1 (zh) | 文件下载方法、装置、终端及服务器 | |
CN112182009A (zh) | 区块链的数据更新方法及装置、可读存储介质 | |
CN112235290A (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 |