掌桥专利:专业的专利平台
掌桥专利
首页

区块链节点的数据存储装置与数据存储方法

文献发布时间:2023-06-19 11:35:49


区块链节点的数据存储装置与数据存储方法

技术领域

本发明涉及区块链技术领域,特别是涉及区块链节点的数据存储装置与数据存储方法。

背景技术

区块链的节点一般分为全量节点和轻节点,全量节点参与共识,同步所有的区块和交易数据,轻节点只同步区块头信息,不同步交易数据,通过Merkle证明来判断一笔交易是否在现在的区块链交易列表中。对于比特币和以太坊特殊的交易结构,可以实现只同步某些账户的交易信息(转入转出交易),从而实现轻钱包。

区块链联盟链在产业应用中,更多的是为了多方协作以及联盟成员之间高效的信息可信共享,该业务场景的交易报文关联性和复杂性都比比特币和以太坊的交易报文高。由于参与联盟链的成员众多,任意几方之间的业务协作交易报文上链后,所有联盟方都会同步至自己的节点,造成存储的压力巨大。

一般的分类分级存储的方法是给交易报文打上特殊的标签,每个节点在数据同步时,将自己节点感兴趣的标签值携带在同步报文中,全量节点只返回特定标签值的交易报文。这种方法适合交易报文内容涉及方明确的场景,比如确定共享范围的信息交互,每个共享范围确定一个标签值即可。但是对于交易报文涉及方可变的场景,这种方法就不适用了,例如大宗仓单区块链联盟业务场景,仓单转让和仓单质押融资都可以改变仓单涉及方,仓单涉及方都只是在某段时间内与仓单有关联,例如银行机构,在质押融资后,某银行需要关注该仓单的信息,质押期间仓单的所有操作,银行都需要关注,而解质押后,银行则跟仓单无关,后续该仓单的所有操作银行可不关注。

可见,业界亟需新型的解决方案来降低区块链节点的存储压力。

发明内容

鉴于以上所述现有技术的缺点,本发明的目的在于提供区块链节点的数据存储装置与数据存储方法,用于解决现有技术中区块链节点存储压力大的技术问题。

为实现上述目的及其他相关目的,本发明提供一种区块链节点的数据存储装置,包括以下模块:存储规则定义模块,用于定义本区块链节点的存储规则;存储规则广播模块,用于将定义的存储规则告知全网络的区块链节点;成员规则保存模块,用于在接收其它区块链节点的存储规则时,将其它区块链节点及其存储规则对应存储;区块数据同步模块,用于在存储其它区块链节点的数据时,根据定义的存储规则对这些数据进行过滤,仅存储符合所述存储规则的数据。

于本发明一实施例中,对于新加入区块链的区块链节点,所述区块数据同步模块还用于:向链上的全量节点发送同步请求;接收所述全量节点的响应,以存储所述全量节点提供的符合本区块链节点的存储规则的其它区块链节点的数据以及这些区块链节点的区块头信息。

于本发明一实施例中,所述区块数据同步模块还用于:在向链上的全量节点发送同步请求之前,判断本区块链节点的区块高度是否小于其它区块链节点的区块高度;若判断结果为是,则向链上的全量节点发送同步请求,以主动请求数据同步;若判断结果为否,则不向链上的全量节点发送同步请求。

于本发明一实施例中,所述同步请求中包括目标区块链节点的标识信息,以供所述全量节点将符合本区块链节点的存储规则的目标区块链节点的数据以及目标区块链节点的区块头信息提供至本区块链节点。

于本发明一实施例中,所述存储规则广播模块将本区块链节点的存储规则告知全网络的区块链节点,包括以下情况:

情况一、本区块链节点为新加入区块链的节点;本区块链节点在加入区块链之后,将定义的存储规则在全网广播;

情况二、本区块链节点为区块链的已有节点;本区块链节点在与新加入的区块链节点建立P2P连接之后,将定义的存储规则发送至新加入的区块链节点;

情况三、本区块链节点为区块链的已有节点;本区块链节点在定义的存储规则发生变化之后,将变化后的存储规则在全网广播;其中,已有节点在存储规则变化后清空自身存储数据,从而作为新加入区块链的节点。

为实现上述目的及其他相关目的,本发明提供一种区块链节点的数据存储方法,应用于新加入区块链的节点,包括:定义存储规则,并在全网广播;向区块链的全量节点发送同步请求;其中,所述同步请求中包括目标区块链节点的标识信息;存储所述全量节点响应所述同步请求而提供的符合本区块链节点的存储规则的目标区块链节点的数据以及目标区块链节点的区块头信息,从而实现数据同步。

于本发明一实施例中,在向链上的全量节点发送同步请求之前,所述方法还包括:判断本区块链节点的区块高度是否小于其它区块链节点的区块高度;若判断结果为是,则向链上的全量节点发送同步请求,以主动请求数据同步;若判断结果为否,则不向链上的全量节点发送同步请求。

于本发明一实施例中,所述新加入区块链的节点包括:存储规则发生变化后清空自身存储数据的区块链已有节点。

为实现上述目的及其他相关目的,本发明提供一种区块链节点的数据存储方法,应用于区块链的全量节点,所述方法包括:接收链上一节点发送的同步请求;其中,所述同步请求中包括目标区块链节点的标识信息;查找该节点的存储规则,利用该节点的存储规则过滤目标区块链节点的数据;将目标区块链节点的区块头信息与过滤后的数据一并发送至该节点供其存储。

于本发明一实施例中,所述全量节点未定义自身的存储规则。

如上所述,通过本发明的区块链节点的数据存储装置与数据存储方法,各联盟成员可根据各种复杂场景下的实际需求灵活地自定义自身区块链节点的存储规则,从而有选择地保存与自身业务相关的交易信息,在保证联盟成员区块链节点相关数据保存完整性的前提下,有效降低了节点的存储压力。

附图说明

图1显示为本发明一实施例中区块链节点的数据存储装置的模块图。

图2显示为本发明一实施例中区块链节点的数据存储方法的原理图。

图3显示为本发明另一实施例中区块链节点的数据存储方法的流程图。

具体实施方式

以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。

需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图示中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。

本申请提供一种区块链节点的数据存储装置,在实际应用中,区块链的每个区块链节点都会包括该数据存储装置。每个区块链节点可根据实际需求,利用该数据存储装置定义自己的存储规则,从而有选择地保存与自身业务相关的交易信息,不仅保证了保存数据的完整性,还大大降低了节点的存储压力。

如图1所示,本实施例的区块链节点的数据存储装置10包括以下模块:

存储规则定义模块11,用于定义本区块链节点的存储规则。

详细而言,存储规则定义模块11主要负责本区块链节点的存储规则的定义,通过人机交互界面,区块链管理员可以通过存储规则定义模块11对本区块链节点配置相应的存储规则。存储规则可以是一段代码,可表达复杂的含义,输入是区块链的交易内容,输出是True或False,表示是否符合该存储规则。

这里以区块链仓单交易平台中银行节点为例来进行说明。区块链仓单交易平台将仓单生成、质押融资等业务信息上链,建立了一个仓单业务联盟区块链,仓单只有质押给银行后,银行才会关注仓单的内容和操作信息,解质押后银行不再关注该仓单的内容。针对该业务特征,银行定义的存储规则(伪代码形式,以银行ID为ICBC的节点为例)为:

bool filter(transaction):

wrid=transaction.wrid;/*获取交易报文中的仓单id*/

type=transaction.type;/*获取交易报文中的仓单操作*/

bank=transaction.bank;/*获取交易报文中的银行id,如果不涉及银行,则id为空*/

while(type!=CREATE||type!=PLEDGE||type!=UNPLEDGE):/*操作类型不为创建、质押或解质押*/

prevtx=traceprev(transaction.wrid);/*找到该仓单id上链的前一次交易信息*/

type=prevtx.type;

bank=prevtx.bank;

if(type==PLEDGE&&bank==ICBC):/*如果该仓单id前面最近一次操作是质押给本银行的操作*/

return True;/*匹配成功*/

else:

return False;

需要说明的是,在本申请中,区块链的全量节点未通过存储规则定义模块11来定义自身的存储规则。

存储规则广播模块12,用于将定义的存储规则告知全网络的区块链节点。

详细而言,区块链的节点包括已有的节点和新加入的节点。对于新加入区块链的节点而言,在加入区块链之后,其通过自己的存储规则广播模块12将定义的存储规则在全网广播。对于区块链的已有节点,其需要通过自己的存储规则广播模块12将自己的存储规则告知新加入的区块链节点,具体的,该区块链节点在与新加入的区块链节点建立P2P连接之后,将定义的存储规则发送至新加入的区块链节点。另外,对于区块链的已有节点,当其自身的存储规则发生变化之后,需要通过自己的存储规则广播模块12将变化后的存储规则在全网广播,以将自己的存储能力让全网知晓。

需要说明的是,在本申请中,已有节点在存储规则变化之后,由于自身存储的数据已经不再满足新的存储规则,故清空自身存储数据,从而作为新加入区块链的节点。

成员规则保存模块13,用于在接收其它区块链节点的存储规则时,将其它区块链节点及其存储规则对应存储。

详细而言,每个区块链节点在收到其它节点存储规则的广播信息后,都会通过自己的成员规则保存模块13将该节点信息和该节点的存储规则加以保存。较佳的,各节点信息及各节点的存储规则以映射矩阵的形式保存,如此,每个区块链节点都会获知其它联盟成员节点的存储能力信息。

区块数据同步模块14,用于在存储其它区块链节点的数据时,根据定义的存储规则对这些数据进行过滤,仅存储符合所述存储规则的数据。

详细而言,根据现有的联盟链共识算法,区块链会按照一定周期产出新的区块,各区块链节点定期广播新的区块高度至整个网络。每当有新区块产生时,全网对该区块进行投票,在投票通过后进行全网广播,从而每个已有节点都要将该新区块的数据加以存储,从而完成数据同步。在本实施例中,已有的每个区块链节点在保存该新区块的数据时,并不保存该新区块的所有数据,而是利用自己的存储规则对该新区块的数据进行过滤,仅存储符合自己存储规则的数据,从而有效降低存储压力。以前文中银行节点的存储规则为例,通过该存储规则,可以让银行节点只保存在本银行质押期间的仓单信息,对于其它不需要的信息则不予存储。

在本实施例中,对于新加入区块链的区块链节点而言,其区块数据同步模块14还用于:向链上的全量节点发送同步请求;接收所述全量节点的响应,以存储所述全量节点提供的符合本区块链节点的存储规则的其它区块链节点的数据以及这些区块链节点的区块头信息。

详细而言,新加入区块链的区块链节点首先判断本区块链节点的区块高度是否小于其它区块链节点的区块高度;若判断结果为是,则向链上的全量节点发送同步请求,以主动请求数据同步;若判断结果为否,则不向链上的全量节点发送同步请求。所述同步请求中包括目标区块链节点的标识信息,以供所述全量节点将符合本区块链节点的存储规则的目标区块链节点的数据以及目标区块链节点的区块头信息提供至本区块链节点,从而完成数据同步。

本领域技术人员应当理解,图1实施例中的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时本领域技术人员还可以在图1的基础上做适当的变形,如将这些模块整合为更少个数的模块或细分为更多数量的模块,本申请对此不做限制。

如图2所示,以下详细介绍本申请的区块链节点的数据存储方法的实现原理:

S21:新加入区块链的节点定义存储规则,并在全网广播;

S22:该新节点向区块链的全量节点发送同步请求;其中,所述同步请求中包括目标区块链节点的标识信息;

S23:该全量节点在接收该同步请求之后,在存储的映射矩阵中查找该节点的存储规则,利用该节点的存储规则过滤目标区块链节点的数据;

S24:该全量节点将目标区块链节点的区块头信息与过滤后的目标区块链节点数据一并发送至该新节点;

S25:该新节点存储该全量节点响应所述同步请求而提供的符合自身存储规则的目标区块链节点的数据以及目标区块链节点的区块头信息,从而实现数据同步。

在一实施例中,在步骤S22执行之前,该新节点先判断自身的区块高度是否小于链上其它区块链节点的区块高度;若判断结果为是,则向链上的全量节点发送同步请求,以主动请求数据同步;反之,则不向链上的全量节点发送同步请求。

在一实施例中,若链上已有节点的存储规则发生改变,该已有节点会将新的存储规则广播至全网,并清空自身存储数据,从而变成一新加入区块链的节点,执行前述方法S21。

如图3所示,在另一实施例中,本申请的区块链节点的数据存储方法包括以下步骤:

S31、新的联盟成员加入区块链,新的区块链节点定义自己的存储规则;

S32、新的区块链节点将定义的存储规则在联盟链全网广播;

S33、各节点在收到广播的存储规则后,将收到的区块链节点信息及其存储规则加以保存;

S34、新区块链节点在与链上已有节点建立p2p连接时,已有节点将自身存储规则发送给该新节点;

S35、新区块链节点启动区块同步,向全量节点(未定义存储规则)发送同步请求,用于进行区块的批量同步;

S36、全量节点收到同步请求后,查找该新节点的存储规则,将待同步的目标区块中的满足该存储规则的交易信息连同该目标节点的区块头发送给该新节点;

S37:新节点接收该全量节点发送的内容并存储,从而完成区块同步。

综上,本发明的区块链节点的数据存储装置与数据存储方法,可让区块链节点只同步与本节点的联盟成员相关的交易数据信息,从而大大减轻数据存储压力,有效克服了现有技术中的种种缺点而具高度产业利用价值。

上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。

相关技术
技术分类

06120112986244