一种智能合约存储方法及存储系统与流程

文档序号:17442117发布日期:2019-04-17 04:54阅读:416来源:国知局
一种智能合约存储方法及存储系统与流程

本发明涉及区块链技术领域,尤其涉及一种智能合约存储方法及存储系统。



背景技术:

智能合约是指一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议。区块链技术具有数据去中心化、透明不可篡改和高可靠性等特征,为实现和支撑智能合约的高效运行提供了理想的基础。

从技术角度和运行方式,智能合约可以看作一份以数字代码形式记录的约定,同时保存了约定中包含的触发条件。当触发条件满足时,智能合约会自动识别触发条件和发出预设的数据资源,按照预定的程序执行结果。

目前一般将智能合约重复保存为各个节点的区块链数据,即直接存储在区块链上或者存储智能合约的一些关联信息(哈希、路径等)。

目前智能合约的存储方式存在以下缺陷,一是各节点智能合约大量冗余,并且增加了区块链数据占用的存储空间;二是如果个别节点智能合约出现损坏丢失等情况,将会导致各节点智能合约执行结果不一致的问题出现。

因此,提供一种智能合约存储方法及存储系统。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的智能合约存储方法及存储系统,能够解决数据冗余以及各节点智能合约执行结果不一致的问题。

根据本发明的一个方面,提供一种智能合约存储方法,包括以下步骤:

将智能合约文件切分成多个数据块;

获取各数据块编号;

建立数据块与数据块编号的映射索引表,存储在区块链中;

将所有数据块分配至多个给定分区中;

将各给定分区中的数据块存储在各给定分区对应的多个存储设备中。

进一步地,所述多个存储设备包括多个副本,该多个副本分布在不同的故障域;

将各给定分区中的数据块存储在各给定分区对应的多个存储设备中之后,还包括:

将所述多个存储设备中存储的数据块备份到所述多个副本中。

进一步地,上述智能合约存储方法,还包括:根据各存储设备所在主机、主机所在机架以及机架所在机房绘制树形结构,并将容错规则填充至树形结构,生成存储设备树形逻辑结构;

将各给定分区中的数据块存储在各给定分区对应的多个存储设备中的步骤包括:

向数据库发送给定分区定位请求,根据数据库反馈的定位结果依次选择各给定分区对应的机房、机房中机架、机架上服务器以及服务器中存储设备;

将各给定分区中的数据块存储在选择的存储设备中。

进一步地,获取各数据块编号的步骤包括:

获取智能合约文件的哈希值;

获取对智能合约文件切分时各数据块的生成序号;

将所述智能合约文件的哈希值与各数据块的生成序号组合成各数据块编号。

进一步地,所述将智能合约文件切分成多个数据块的步骤包括:

根据多个存储设备中可存储数据的最大尺寸,将智能合约文件切分成多个数据块。

根据本发明的另一方面,提供一种上述方法的智能合约存储系统,包括:

智能合约文件切分模块,用于将智能合约文件切分成多个数据块;

数据块编号获取模块,用于获取各数据块编号;

映射索引表建立模块,用于建立数据块与数据块编号的映射索引表,存储在区块链中;

数据块分配模块,用于将所有数据块分配至多个给定分区中;

数据块存储模块,用于将各给定分区中的数据块存储在各给定分区对应的多个存储设备中。

进一步地,在数据块存储模块中,所述多个存储设备包括多个副本,该多个副本分布在不同的故障域;

数据块存储模块还用于将所述多个存储设备中存储的数据块备份到所述多个副本中。

进一步地,上述智能合约存储系统,还包括:存储设备树形逻辑结构生成模块,用于根据各存储设备所在主机、主机所在机架以及机架所在机房绘制树形结构,并将容错规则填充至树形结构,生成存储设备树形逻辑结构;

在数据块存储模块中,包括:

选择单元,用于向数据库发送给定分区定位请求,根据数据库反馈的定位结果依次选择各给定分区对应的机房、机房中机架、机架上服务器以及服务器中存储设备;

存储单元,用于将各给定分区中的数据块存储在选择的存储设备中。

进一步地,数据块编号获取模块包括:

哈希值获取单元,用于获取智能合约文件的哈希值;

切分序号获取单元,用于获取对智能合约文件切分时各数据块的生成序号;

各数据块编号获取单元,用于将所述智能合约文件的哈希值与各数据块的生成序号组合成各数据块编号。

进一步地,在智能合约文件切分模块中,智能合约文件切分模块具体用于根据多个存储设备中可存储数据的最大尺寸,将智能合约文件切分成多个数据块。

本发明与现有技术相比具有以下的优点:

1.本发明的智能合约存储方法及存储系统仅在区块链上存储映射索引表,通过链外存储智能合约,不占用区块链数据空间,不存在存储大量智能合约导致的数据冗余问题;

2.本发明的智能合约存储方法及存储系统采用分布式存储技术保证了智能合约的安全性和隐私性,且不被篡改;

3.本发明的智能合约存储方法及存储系统使得区块链上各节点通过映射索引表读取和执行一份智能合约,一旦智能合约无法读取,所有节点都会失败,各节点执行智能合约的结果是一致的。

附图说明

以下结合附图和实施例对本发明作进一步说明。

图1是本发明实施例提供的智能合约存储方法的流程图;

图2是本发明实施例提供的智能合约存储系统的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。

本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非被特定定义,否则不会用理想化或过于正式的含义来解释。

本发明将智能合约的散列值记录在区块链上,采用以散列值为索引的分布式存储网络来保存完整的智能合约代码。区块链网络只保存一份智能合约的拷贝,因此不存在大量智能合约数据冗余。

图1是本发明实施例的智能合约存储方法的流程图,参见图1所示,本发明实施例提供的智能合约存储方法,包括以下步骤:

步骤101,将智能合约文件切分成多个数据块;

步骤102,获取各数据块编号;

步骤103,建立数据块与数据块编号的映射索引表,存储在区块链中;

步骤104,将所有数据块分配至多个给定分区中;

步骤105,将各给定分区中的数据块存储在各给定分区对应的多个存储设备中。

其中,区块链节点、给定分区和存储设备形成存储路径。

本发明实施例的智能合约存储方法仅在区块链上存储映射索引表,通过链外存储智能合约,不占用区块链数据空间,不存在存储大量智能合约导致的数据冗余问题,另外,本发明采用分布式存储技术保证了智能合约的安全性和隐私性,且不被篡改,进一步地,区块链上各节点能够通过映射索引表读取和执行一份智能合约,一旦智能合约无法读取,所有节点都会失败,各节点执行智能合约的结果是一致的。

其中,多个存储设备可以是所有或一定范围内的网络节点。此时要求在区块链网络中对同一份智能合约只保存一份拷贝,并且该拷贝被分割成多个数据块,分布保存在所有或一定范围内的网络节点上。需要执行智能合约的时候,通过统一的方法从链外加载代码。

本发明实施例提供的智能合约存储方法,在将各给定分区上的数据块存储在多个存储设备中之前,还包括:根据给定分区序号得到存储设备列表。

在实际应用中,可以根据给定分区序号通过crush算法(crush算法是分布式存储系统ceph使用的一种受控复制的分布式hash算法)得到一个存储设备列表。然后经过筛选,根据副本数找出符合要求的存储设备进行数据存储。这种方法有两个优点,一是数据存储位置由计算得到而不需要去查询元数据服务器,完全实现了去中心化的分布式存储;其次有效缓解了普通hash算法在处理存储设备增删时带来的数据迁移问题。

值得注意的是,还可以采用基于ipfs的分布式存储技术,实现智能合约的链外存储。

具体地,给定分区用于对数据块的存储进行组织和位置映射。

为了备份数据库,所述多个存储设备包括多个副本,该多个副本分布在不同的故障域,使得多个副本相互隔离,确保数据块不会由于一个副本中存储设备的损坏导致智能合约无法读取,提高了智能合约的存储安全性。

将各给定分区中的数据块存储在各给定分区对应的多个存储设备中之后,还包括:

将所述多个存储设备中存储的数据块备份到所述多个副本中。

上述智能合约存储方法,还包括:根据各存储设备所在主机、主机所在机架以及机架所在机房绘制树形结构,并将容错规则填充至树形结构,生成存储设备树形逻辑结构;其中,将各给定分区中的数据块存储在各给定分区对应的多个存储设备中的步骤包括:向数据库发送给定分区定位请求,根据数据库反馈的定位结果依次选择各给定分区对应的机房、机房中机架、机架上服务器以及服务器中存储设备;将各给定分区中的数据块存储在选择的存储设备中。存储设备树形逻辑结构隐含了故障区域,例如使用不同电源的不同的机架属于不同的故障域,使得crush能够依据一定的规则将副本放置在不同的故障域。

具体地,存储设备树形逻辑结构描述当前系统资源状态的map,即硬盘分布的逻辑位置。将所有硬件资源组成一个树状结构,再按照容错规则生成逻辑上的树形结构。其中,子节点是真正的存储设备,每个设备都具有编号和权重,中间节点是设备的容器,例如一个机柜一个机架一个机房等等。其次,还需要为crush指定存储规则,如数据的分布限制条件和备份要求等。每个规则代表一系列操作,如选择容器和提交等。

进一步地,获取各数据块编号的步骤包括:

获取智能合约文件的哈希值;

获取对智能合约文件切分时各数据块的生成序号;

将所述智能合约文件的哈希值与各数据块的生成序号组合成各数据块编号。

获取各数据块编号的步骤能够确保各数据块编号不同,以确保索引的准确度。

进一步地,所述将智能合约文件切分成多个数据块的步骤包括:

根据多个存储设备中可存储数据的最大尺寸,将智能合约文件切分成多个数据块。

具体地,将文件按照可以存储的最大对象的大小进行切分,每次切分后产生的对象将获得唯一的编号,对象和对象编号进行线性映射即可。将每个对象独立地映射到一个给定分区。根据系统指定的静态哈希函数例如除留余数法获取对象编号的哈希值,将对象编号映射成一个近似均匀分布的伪随机数值,再和mask按位相与,获得给定分区序号。通过给定分区序号获取得到存储设备列表。这几个存储设备共同负责存储和维护一个给定分区中所有的存储对象。找到其中符合要求的存储设备,即可进行对象数据的存储和读取。

本发明实施例的智能合约存储方法仅在区块链上存储映射索引表,通过链外存储智能合约,不占用区块链数据空间,不存在存储大量智能合约导致的数据冗余问题,另外,本发明采用分布式存储技术保证了智能合约的安全性和隐私性,且不被篡改,进一步地,区块链上各节点能够通过映射索引表读取和执行一份智能合约,一旦智能合约无法读取,所有节点都会失败,各节点执行智能合约的结果是一致的。

对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。

图2是本发明实施例的智能合约存储系统框图,参见图2所示,本发明实施例提供的智能合约存储系统,包括:

智能合约文件切分模块201,用于将智能合约文件切分成多个数据块;

数据块编号获取模块202,用于获取各数据块编号;

映射索引表建立模块203,用于建立数据块与数据块编号的映射索引表,存储在区块链中;

数据块分配模块204,用于将所有数据块分配至多个给定分区中;

数据块存储模块205,用于将各给定分区中的数据块存储在各给定分区对应的多个存储设备中。

本发明实施例的智能合约存储系统仅在区块链上存储映射索引表,通过链外存储智能合约,不占用区块链数据空间,不存在存储大量智能合约导致的数据冗余问题,另外,本发明采用分布式存储技术保证了智能合约的安全性和隐私性,且不被篡改,进一步地,区块链上各节点能够通过映射索引表读取和执行一份智能合约,一旦智能合约无法读取,所有节点都会失败,各节点执行智能合约的结果是一致的。

进一步地,在数据块存储模块中,所述多个存储设备包括多个副本,该多个副本分布在不同的故障域;

数据块存储模块还用于将所述多个存储设备中存储的数据块备份到所述多个副本中。

进一步地,上述智能合约存储系统,还包括:存储设备树形逻辑结构生成模块,用于根据各存储设备所在主机、主机所在机架以及机架所在机房绘制树形结构,并将容错规则填充至树形结构,生成存储设备树形逻辑结构;

在数据块存储模块中,包括:

选择单元,用于向数据库发送给定分区定位请求,根据数据库反馈的定位结果依次选择各给定分区对应的机房、机房中机架、机架上服务器以及服务器中存储设备;

存储单元,用于将各给定分区中的数据块存储在选择的存储设备中。

进一步地,数据块编号获取模块包括:

哈希值获取单元,用于获取智能合约文件的哈希值;

切分序号获取单元,用于获取对智能合约文件切分时各数据块的生成序号;

各数据块编号获取单元,用于将所述智能合约文件的哈希值与各数据块的生成序号组合成各数据块编号。

进一步地,在智能合约文件切分模块中,智能合约文件切分模块具体用于根据多个存储设备中可存储数据的最大尺寸,将智能合约文件切分成多个数据块。

对于系统实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本发明应用一种分布式存储技术对智能合约进行存储和读取,减少数据冗余的同时提升效率和一致性。要求在区块链网络中对同一份智能合约只保存一份拷贝,并且该拷贝被分割成多个数据块,分布保存在所有或一定范围内的网络节点上。需要执行智能合约的时候,通过统一的方法从链外加载代码。

本发明一实施例还提供了一种智能合约执行系统,包括处理器,存储器,存储在存储器上并可在所述处理器上运行的计算机程序,该计算机程序被处理器执行时实现如下步骤:

将智能合约文件切分成多个数据块;

获取各数据块编号;

建立数据块与数据块编号的映射索引表,存储在区块链中;

将所有数据块分配至多个给定分区中;

将各给定分区中的数据块存储在各给定分区对应的多个存储设备中。

可选的,所述多个存储设备包括多个副本,该多个副本分布在不同的故障域;该计算机程序被处理器执行时还实现如下步骤:

将所述多个存储设备中存储的数据块备份到所述多个副本中。

可选的,该计算机程序被处理器执行时还实现如下步骤:

根据各存储设备所在主机、主机所在机架以及机架所在机房绘制树形结构,并将容错规则填充至树形结构,生成存储设备树形逻辑结构;向数据库发送给定分区定位请求,根据数据库反馈的定位结果依次选择各给定分区对应的机房、机房中机架、机架上服务器以及服务器中存储设备;将各给定分区中的数据块存储在选择的存储设备中。

可选的,该计算机程序被处理器执行时还实现如下步骤:

获取智能合约文件的哈希值;获取对智能合约文件切分时各数据块的生成序号;将所述智能合约文件的哈希值与各数据块的生成序号组合成各数据块编号。

可选的,该计算机程序被处理器执行时还实现如下步骤:

根据多个存储设备中可存储数据的最大尺寸,将智能合约文件切分成多个数据块。

本发明一实施例提供了一种计算机可读存储介质,其上存储有计算机程序,上述计算机程序被处理器执行时实现上述智能合约执行方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(read-onlymemory,简称rom)、随机存取存储器(randomaccessmemory,简称ram)、磁碟或者光盘等。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1