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

一种区块链合约数据分片存储方法、系统、设备及介质

文献发布时间:2024-04-18 19:58:21


一种区块链合约数据分片存储方法、系统、设备及介质

技术领域

本发明涉及区块链领域,特别是涉及一种区块链合约数据分片存储方法、系统、设备及介质。

背景技术

在区块链领域,传统的逻辑合约与数据合约的分离可以方便后续逻辑合约的升级,但是随着时间的推移,数据合约中累积的数据量越来越大,导致数据合约的读写性能逐渐下降。

发明内容

本发明的目的是提供一种区块链合约数据分片存储方法、系统、设备及介质,以提升合约读写性能。

为实现上述目的,本发明提供了如下方案:

一种区块链合约数据分片存储方法,包括:

部署代理合约、索引合约和逻辑合约;所述代理合约用于存储业务初始时间、时间段间隔和索引合约地址;所述索引合约用于存储索引编号与数据合约地址的映射关系;所述逻辑合约用于存储代理合约地址;

当业务方需要使用智能合约进行业务处理时,调用所述逻辑合约;所述智能合约包括:逻辑合约、代理合约、索引合约和数据合约;所述数据合约用于根据索引编号分片存储合约数据,并提供数据的读写方法;所述数据合约中包括若干数据合约实例,且所述数据合约实例与所述索引编号一一对应;

所述逻辑合约调用所述代理合约,并向所述代理合约传入业务编号和操作标志;所述业务编号中包括携带业务时间信息的字段;

所述代理合约对所述业务编号进行解析,得到业务时间信息,并根据所述业务时间信息、所述业务初始时间和所述时间段间隔计算索引编号;

所述代理合约根据所述索引编号和所述操作标志向所述索引合约请求数据合约地址,并返回给所述逻辑合约;

所述逻辑合约根据所述数据合约地址,通过所述数据合约读写数据。

可选地,部署代理合约、索引合约和逻辑合约,具体包括:

业务方通过发送交易的方式部署代理合约和索引合约,并通过交易为所述代理合约初始化业务初始时间、时间段间隔和索引合约地址,为所述索引合约初始化索引编号与数据合约地址的映射关系;

业务方通过交易的方式部署逻辑合约,并通过交易为所述逻辑合约初始化代理合约地址。

可选地,当业务方需要使用智能合约进行业务处理时,调用所述逻辑合约,具体包括:

当业务方需要使用智能合约进行业务处理时,按照所述逻辑合约的方法参数规则构造交易并进行签名,然后发送到区块链上调用所述逻辑合约。

可选地,所述代理合约对所述业务编号进行解析,得到业务时间信息,并根据所述业务时间信息、所述业务初始时间和所述时间段间隔计算索引编号,具体包括:

所述代理合约对所述业务编号进行解析,得到业务时间信息,计算所述业务时间信息与所述业务初始时间的差值,并将所述差值除以所述时间间隔后取整,得到索引编号。

可选地,所述代理合约根据所述索引编号和所述操作标志向所述索引合约请求数据合约地址,并返回给所述逻辑合约,具体包括:

所述代理合约根据所述索引编号请求所述索引合约,以使所述索引合约根据所述映射关系查询所述数据合约;

当所述索引合约查询不到所述数据合约时,判断所述操作标志是否为写操作;若所述操作标志为写操作,则创建新的数据合约实例,并更新所述索引编号与所述数据合约地址的映射关系;若所述操作标志不是写操作,则返回空的数据合约地址;当所述索引合约查询到所述数据合约时,返回所述数据合约地址;

所述代理合约将所述数据合约地址返回给所述逻辑合约。

可选地,所述索引合约中通过散列表的形式存储索引编号与数据合约地址的映射关系。

一种区块链合约数据分片存储系统,包括:

部署模块,用于部署代理合约、索引合约和逻辑合约;所述代理合约用于存储业务初始时间、时间段间隔和索引合约地址;所述索引合约用于存储索引编号与数据合约地址的映射关系;所述逻辑合约用于存储代理合约地址;

处理模块,用于:

当业务方需要使用智能合约进行业务处理时,调用所述逻辑合约;所述智能合约包括:逻辑合约、代理合约、索引合约和数据合约;所述数据合约用于根据索引编号分片存储合约数据,并提供数据的读写方法;所述数据合约中包括若干数据合约实例,且所述数据合约实例与所述索引编号一一对应;

所述逻辑合约调用所述代理合约,并向所述代理合约传入业务编号和操作标志;所述业务编号中包括携带业务时间信息的字段;

所述代理合约对所述业务编号进行解析,得到业务时间信息,并根据所述业务时间信息、所述业务初始时间和所述时间段间隔计算索引编号;

所述代理合约根据所述索引编号和所述操作标志向所述索引合约请求数据合约地址,并返回给所述逻辑合约;

所述逻辑合约根据所述数据合约地址,通过所述数据合约读写数据。

一种电子设备,包括存储器及处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述电子设备执行上述的区块链合约数据分片存储方法。

一种计算机可读存储介质,其存储有计算机程序,所述计算机程序被处理器执行时实现上述的区块链合约数据分片存储方法。

根据本发明提供的具体实施例,本发明公开了以下技术效果:

本发明提供的区块链合约数据分片存储方法,将区块链上的智能合约拆分为逻辑合约、代理合约、索引合约和数据合约,其中,逻辑合约中不存储业务数据,这样后续业务逻辑发生变化进行合约升级时,可以部署新的逻辑合约,而不用担心业务数据迁移和丢失的问题;代理合约负责根据逻辑合约的请求返回实际的数据合约地址或者实例,代理合约根据逻辑合约传入的时间信息,计算出索引编号,并向索引合约查找实际的数据合约地址,将数据合约地址或者实例返回给逻辑合约进行处理;索引合约负责存储索引编号与数据合约地址的映射关系,代理合约通过索引合约获取数据合约的地址;数据合约负责存储逻辑合约需要保存的数据,提供数据的读写方法。其中代理合约、索引合约仅需部署一个实例,数据合约随着使用时间的推移,由索引合约根据索引编号创建出多个数据合约实例。本发明通过将合约数据分片存储到多个不同的数据合约实例中,降低了单个合约内数据量的大小,能够提升合约读写性能。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明提供的区块链合约数据分片存储方法的流程图;

图2为本发明提供的业务方使用智能合约进行业务处理的过程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明的目的是提供一种区块链合约数据分片存储方法、系统、设备及介质,通过将合约数据分片存储到多个不同的数据合约中,降低单个合约内数据量的大小,提升合约读写性能。

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

本发明提供一种区块链合约数据分片存储方法。图1为本发明提供的区块链合约数据分片存储方法的流程图。如图1所示,该方法包括:

步骤S1:部署代理合约、索引合约和逻辑合约;所述代理合约用于存储业务初始时间、时间段间隔和索引合约地址;所述索引合约用于存储索引编号与数据合约地址的映射关系;所述逻辑合约用于存储代理合约地址。

步骤S1具体包括:

步骤S1.1:业务方通过发送交易的方式部署代理合约和索引合约,并通过交易为所述代理合约初始化业务初始时间、时间段间隔和索引合约地址,为所述索引合约初始化索引编号与数据合约地址的映射关系。

具体地,业务方通过发送交易的方式部署业务代理合约和索引合约。在以上合约部署成功后,对合约中的配置进行初始化。业务方通过交易为代理合约初始化业务初始时间、时间段间隔和索引合约地址。业务初始时间等于业务的起始时间,业务初始时间以数值格式存储到合约中,时间间隔为时间分片的间隔时长。

步骤S1.2:业务方通过交易的方式部署逻辑合约,并通过交易为所述逻辑合约初始化代理合约地址。

具体地,业务方通过交易的方式部署业务逻辑合约。业务方通过交易初始化逻辑合约中存储的代理合约地址信息,业务逻辑合约仅保存代理合约地址信息,不存储实际的业务数据。多个业务逻辑合约可以共用一个代理合约和索引合约。

步骤S2:当业务方需要使用智能合约进行业务处理时,调用所述逻辑合约;所述智能合约包括:逻辑合约、代理合约、索引合约和数据合约;所述数据合约用于根据索引编号分片存储合约数据,并提供数据的读写方法;所述数据合约中包括若干数据合约实例,且所述数据合约实例与所述索引编号一一对应。

优选地,当业务方需要使用智能合约进行业务处理时,按照所述逻辑合约的方法参数规则构造交易并进行签名,然后发送到区块链上调用所述逻辑合约。其中,合约参数包括业务编号和操作标志;业务编号中需要包含携带业务时间信息的Key(字段)。

步骤S3:所述逻辑合约调用所述代理合约,并向所述代理合约传入业务编号和操作标志;所述业务编号中包括携带业务时间信息的字段。

优选地,业务逻辑合约对交易进行处理,在需要访问或者更新合约中的数据时,业务逻辑合约根据其合约中存储的代理合约地址,将带有业务时间信息的Key以及是否写操作标志传入代理合约。

步骤S4:所述代理合约对所述业务编号进行解析,得到业务时间信息,并根据所述业务时间信息、所述业务初始时间和所述时间段间隔计算索引编号。

优选地,所述代理合约对所述业务编号进行解析,得到业务时间信息,计算所述业务时间信息与所述业务初始时间的差值,并将所述差值除以所述时间间隔后取整,得到索引编号。

具体地,代理合约根据逻辑合约传入的Key进行解析,获取Key中的时间信息,并计算时间信息Key与业务初始时间的差值,再使用差值除以时间间隔取整后,获取时间索引编号。

步骤S5:所述代理合约根据所述索引编号和所述操作标志向所述索引合约请求数据合约地址,并返回给所述逻辑合约。

步骤S5具体包括:

步骤S5.1:所述代理合约根据所述索引编号请求所述索引合约,以使所述索引合约根据所述映射关系查询所述数据合约。

步骤S5.2:当所述索引合约查询不到所述数据合约时,判断所述操作标志是否为写操作;若所述操作标志为写操作,则创建新的数据合约实例,并更新所述索引编号与所述数据合约地址的映射关系;若所述操作标志不是写操作,则返回空的数据合约地址;当所述索引合约查询到所述数据合约时,返回所述数据合约地址。

步骤S5.3:所述代理合约将所述数据合约地址返回给所述逻辑合约。

具体地,代理合约传入索引编号和是否写操作标志两个参数来调用索引合约,获取或创建对应的数据合约地址或实例返回给业务逻辑合约。如果索引合约中对应的索引编号中不存在数据合约,并且当前请求为写数据请求时,索引合约动态创建新的数据合约后,再向代理合约返回数据合约的地址或实例,然后代理合约再返回给逻辑合约。

步骤S6:所述逻辑合约根据所述数据合约地址,通过所述数据合约读写数据。

具体地,业务逻辑合约通过数据合约的实例进行数据的读写操作,其中数据合约提供相关的读写方法进行数据的读写。数据合约提供多种类型的哈希表来存储数据,这样数据合约可以看成是一个key-value数据库,其中key是相关数据的的hash,value根据存储数据的类型选择不同类型的哈希表,例如订单的金额存储可以使用hash(订单编号,“金额”)来作为key,金额是数字类型,所以选择value是数字类型的哈希表来存储;对于订单商品名,商品名为字符串类型,可以选择value是字符串类型的哈希表来存储,而key可以使用hash(业务编号,“商品名”)。

以订单处理业务为例,则业务编号具体为订单编号。合约需要处理订单业务,正常可以使用单一的订单合约来实现,但是如果发现合约中存在bug或者订单逻辑发生变化,需要升级时,重新部署合约则会导致原来合约中已经存储的数据无法迁移。因此可以将订单合约拆分为逻辑合约和数据合约,其中逻辑合约用来处理订单逻辑,数据合约用来存储合约数据,相当于数据库的概念,这样当需要业务升级时,仅需要重新部署逻辑合约,再将新的逻辑合约中存入原有的数据合约地址,就可以读取历史数据。但是随着数据合约中的数据量越来越大,数据合约的读写性能越来越慢,由此设计本发明方法,将订单合约拆分为逻辑合约、数据合约、代理合约和索引合约。

1)首先业务方部署逻辑合约和代理合约,并进行初始化。其中业务初始时间为业务的最早开始时间,例如订单业务最早的订单为2001年9月1日,则业务初始时间为20010901,可以将其转化为基于1970年1月1日期的按天计算的整数,根据当前业务量将订单业务按30天一次进行分片,即时间间隔为30,即2001年9月1日到2001年9月30日之间的订单数据在数据合约1中,2001年10月1日到2001年10月30日的订单数据在数据合约2中,2001年10月31日到2001年11月29日的订单数据在数据合约3中。

2)业务方部署业务逻辑合约,并初始化逻辑合约。

3)调用逻辑合约,逻辑合约的方法参数中需要包含订单编号以及订单中其他具体业务数据,其中订单编号中需要包含订单的日期信息,例如F20010903-X23-B,其编码规则中包含了订单的日期信息20010903,订单编号即为包含携带业务时间信息的Key。注意订单编号中的日期并非当前的实际时间信息,而是一种业务编号,指代业务发生的时间信息。

4)在逻辑合约需要进行合约数据读写时,将订单编号以及是否写操作的标志传入代理合约。

5)代理合约需要能解码订单编号,获取编号中的日期信息20010903,并根据业务初始时间和时间间隔,计算出其订单的索引编号,当前示例的索引编号为0。

6)代理合约根据索引编号和是否写操作标志向索引合约查询请求数据合约实际地址。索引合约中通过散列表的形式存储索引编号与数据合约地址的映射关系。当索引合约查询不到数据合约时,如果为写操作,则创建新的数据合约,并存储索引编号和合约地址的映射关系;当不是写操作,则返回全0的合约地址,表示没有此数据合约。代理合约再将结果返回给业务逻辑合约。

7)业务逻辑合约通过数据合约的实例进行数据的读写操作。

图2为本发明提供的业务方使用智能合约进行业务处理的过程图。其中,业务方为系统的使用方,负责进行业务合约的调用。代理合约负责解析业务合约传入的Key,并进行解析获取索引编号。索引合约负责存储索引编号与数据合约的映射关系。数据合约负责存储业务合约中的实际数据。

如图2所示,业务方调用逻辑合约处理的过程如下:

1、业务方调用逻辑合约,参数中包含携带时间信息的key,进行业务处理。

2、逻辑合约调用代理合约,传入参数包括key,请求获取数据合约。

3、代理合约解析key,计算出索引编号。

4、代理合约根据索引编号,请求索引合约,获取数据合约地址或实例。

5、代理合约返回数据合约地址或实例给逻辑合约。

6、逻辑合约通过数据合约读写数据。

综上所述,本发明通过分片的方式保持每个数据合约中存储的数据量不会过大,这样可以提升数据合约的读写效率。

为了执行上述方法,以实现相应的功能和技术效果,下面提供一种区块链合约数据分片存储系统。该系统包括:

部署模块,用于部署代理合约、索引合约和逻辑合约;所述代理合约用于存储业务初始时间、时间段间隔和索引合约地址;所述索引合约用于存储索引编号与数据合约地址的映射关系;所述逻辑合约用于存储代理合约地址。

处理模块,用于当业务方需要使用智能合约进行业务处理时,调用所述逻辑合约;所述智能合约包括:逻辑合约、代理合约、索引合约和数据合约;所述数据合约用于根据索引编号分片存储合约数据,并提供数据的读写方法;所述数据合约中包括若干数据合约实例,且所述数据合约实例与所述索引编号一一对应;所述逻辑合约调用所述代理合约,并向所述代理合约传入业务编号和操作标志;所述业务编号中包括携带业务时间信息的字段;所述代理合约对所述业务编号进行解析,得到业务时间信息,并根据所述业务时间信息、所述业务初始时间和所述时间段间隔计算索引编号;所述代理合约根据所述索引编号和所述操作标志向所述索引合约请求数据合约地址,并返回给所述逻辑合约;所述逻辑合约根据所述数据合约地址,通过所述数据合约读写数据。

本发明还提供一种电子设备,包括存储器和处理器,该存储器用于存储计算机程序,该处理器用于运行计算机程序以使电子设备执行上述的区块链合约数据分片存储方法。所述电子设备可以是服务器。

另外,本发明还提供一种计算机可读存储介质,其存储有计算机程序,该计算机程序被处理器执行时实现上述的区块链合约数据分片存储方法。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。

相关技术
  • 一种智能合约访问方法、系统、设备及计算机存储介质
  • 一种智能合约管理方法、系统、设备及计算机存储介质
  • 一种智能合约升级方法、系统、设备及计算机存储介质
  • 一种文件管理方法、系统及区块链节点设备和存储介质
  • 一种供需匹配方法、系统及区块链节点设备和存储介质
  • 一种基于区块链网络的智能合约数据安全管理方法、系统及存储介质
  • 一种批处理数据分片方法、系统、计算机设备及存储介质
技术分类

06120116483470