CN111061698B - 以太坊合约数据的存储方法及装置 - Google Patents
以太坊合约数据的存储方法及装置 Download PDFInfo
- Publication number
- CN111061698B CN111061698B CN201911398921.7A CN201911398921A CN111061698B CN 111061698 B CN111061698 B CN 111061698B CN 201911398921 A CN201911398921 A CN 201911398921A CN 111061698 B CN111061698 B CN 111061698B
- Authority
- CN
- China
- Prior art keywords
- contract data
- data
- ethernet
- contract
- ipfs
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/258—Data format conversion from or to a database
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明实施例提供一种以太坊合约数据的存储方法及装置,方法包括:当以太坊网络中的目标以太坊节点发布和使用合约时,产生所述合约的合约数据,将所述合约数据存储到所述目标以太坊节点上的IPFS中;当所述以太坊网络中除目标以太坊节点以外的其他以太坊节点访问所述目标以太坊节点上的IPFS中存储的合约数据时,将所述合约数据存储到所述其他以太坊节点上的IPFS中。本发明实施例使得合约数据存储在部分以太坊节点上,大大减小每个以太坊节点上合约数据的存储量。
Description
技术领域
本发明属于区块链技术领域,尤其涉及一种以太坊合约数据的存储方法及装置。
背景技术
区块链是一种去中心化的计算与存储架构,是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式,在很多领域已广泛使用。
以太坊在比特币提出的区块链技术的基础上,创新地引入了智能合约,用户在以太坊区块链上不仅仅发送交易,还可以调用自定义的代码。因此,可以在以太坊上开发各种可信任的应用,从而使得以太坊上的生态迅速繁荣起来。
以太坊的机制是所有以太坊节点维护一个共同的账本,而应用往往就伴随着大量的应用数据,这会使得整个以太坊网络的账本的数据会大大增加。现有技术中以太坊的合约数据最终通过LevelDB保存到电脑上。每份合约数据在每个以太坊节点中都进行了真实存储,从而使得每个以太坊节点中保留了整个区块链的所有合约数据,导致单个以太坊节点存储的数据量过大,很难承担这么大的账本。
发明内容
为克服上述现有的以太坊合约数据的存储方法导致单个以太坊几点存储的数据量过大的问题或者至少部分地解决上述问题,本发明实施例提供一种以太坊合约数据的存储方法及装置。
根据本发明实施例的第一方面,提供一种以太坊合约数据的存储方法,包括:
当以太坊网络中的目标以太坊节点发布和使用合约时,产生所述合约的合约数据,将所述合约数据存储到所述目标以太坊节点上的IPFS中;
当所述以太坊网络中除目标以太坊节点以外的其他以太坊节点访问所述目标以太坊节点上的IPFS中存储的合约数据时,将所述合约数据存储到所述其他以太坊节点上的IPFS中。
具体地,将所述合约数据存储到所述目标以太坊节点上的IPFS中的步骤包括:
将所述合约数据映射成Key-Value的形式;
对所述合约数据的映射结果进行序列化;
将所述映射结果的序列化结果转换成二进制数据;
将所述二进制数据存储到所述目标以太坊节点上的IPFS中。
具体地,将所述合约数据存储到所述目标以太坊节点上的IPFS中的步骤包括:
当所述合约数据为固定长度数据类型时,将所述合约数据按预设字节拆分成多个数据段,将每个数据段在所述目标以太坊节点的IPFS中进行右对齐存储;
若任一数据段的相邻数据段小于所述预设字节,则将该数据段和该数据段的相邻数据段进行压缩合并存储。
具体地,将所述合约数据存储到所述目标以太坊节点上的IPFS中的步骤包括:
当所述合约数据为可变长度数据类型时,将所述合约数据按预设字节拆分成多个数据段,将每个数据段在所述目标以太坊节点的IPFS中进行左对齐存储;
若任一数据段小于所述预设字节,则将所述数据段按一条记录进行存储,并在所述记录的Value值的最后一个字节存储所述数据段的实际长度;
其中,所述合约数据存储的第一条记录的Key值为所述第一条记录对应的数据段的索引编号;
所述第一条记录的Value值为所述合约数据的实际长度加1;
所述合约数据的每条记录的Key值为所述第一条记录的Key值进行sha3后得到的Hash值按照每条记录存储的先后顺序从0开始每次累加1得到。
具体地,将所述合约数据存储到所述目标以太坊节点上的IPFS中的步骤包括:
当所述合约数据为结构体时,所述合约数据的每条记录的Key值为每条记录对应的所述合约数据的结构变量的索引编号;
当所述合约数据为数组时,所述合约数据的第一条记录的Key值为所述合约数据的数组变量的索引编号,所述合约数据的第一条记录的Value值为所述合约数据中数组元素的个数,所述合约数据的每条记录的Key值为所述第一条记录的Key值进行sha3后得到的Hash值按照每条记录存储的先后顺序从0开始每次累加1得到,每条记录的Value值为相应的数组元素的值。
具体地,将所述合约数据存储到所述目标以太坊节点上的IPFS中的步骤之后还包括:
在所述目标以太坊节点的本地保留所述合约数据在所述IPFS中的地址;
根据所述IPFS中合约数据的地址读取所述合约数据,并对读取的所述合约数据进行反序列化;
根据反序列化的结果和所述合约的数据结构之间的映射关系,将所述反序列化的结果还原成所述合约的数据结构。
具体地,将所述合约数据存储到所述其他以太坊节点上的IPFS中的步骤之后还包括:
对所述合约数据在所有所述以太坊节点的IPFS中存储的地址进行同步;
根据所述合约数据存储的地址的同步结果,对所有所述以太坊节点的IPFS中存储的合约数据进行同步。
根据本发明实施例第二方面提供一种以太坊合约数据的存储装置,包括:
第一存储模块,用于当以太坊网络中的目标以太坊节点发布和使用合约时,产生所述合约的合约数据,将所述合约数据存储到所述目标以太坊节点上的IPFS中;
第二存储模块,用于当所述以太坊网络中除目标以太坊节点以外的其他以太坊节点访问所述目标以太坊节点上的IPFS中存储的合约数据时,将所述合约数据存储到所述其他以太坊节点上的IPFS中。
根据本发明实施例的第三个方面,还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器调用所述程序指令能够执行第一方面的各种可能的实现方式中任一种可能的实现方式所提供的以太坊合约数据的存储方法。
根据本发明实施例的第四个方面,还提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行第一方面的各种可能的实现方式中任一种可能的实现方式所提供的以太坊合约数据的存储方法。
本发明实施例提供一种以太坊合约数据的存储方法及装置,该方法通过使用分布式且可信的IPFS作为以太坊网络中合约数据的实际存储空间,将合约数据首先存储在产生合约数据的以太坊节点中,然后根据合约数据的访问,将合约数据逐渐存储到以太坊网络中的部分以太坊节点中,使得合约数据存储在部分以太坊节点上,每个以太坊节点上保留的合约数据只是所有合约数据中若干个的组合,从而大大减小每个以太坊节点上合约数据的存储量。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的以太坊合约数据的存储方法整体流程示意图;
图2为本发明实施例提供的以太坊合约数据的存储方法中以太坊节点之间合约数据的访问流程示意图;
图3为本发明实施例提供的以太坊合约数据的存储装置整体结构示意图;
图4为本发明实施例提供的电子设备整体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明的一个实施例中提供一种以太坊合约数据的存储方法,图1为本发明实施例提供的以太坊合约数据的存储方法整体流程示意图,该方法包括:S101,当以太坊网络中的目标以太坊节点发布和使用合约时,产生所述合约的合约数据,将所述合约数据存储到所述目标以太坊节点上的IPFS中;
其中,目标以太坊节点为发布和使用合约的以太坊节点。在以太坊节点在发布和使用合约时,相应的会产生这个合约的合约数据。IPFS(Inter-Planetary File System,星际文件系统)使用基于内容的地址寻址,只需要验证内容的哈希,就可以验证存储数据的安全性。将目标以太坊节点发布和使用合约时产生的合约数据存储在本地的IPFS中。IPFS中存储的合约数据存储在其硬盘中。
S102,当所述以太坊网络中除目标以太坊节点以外的其他以太坊节点访问所述目标以太坊节点上的IPFS中存储的合约数据时,将所述合约数据存储到所述其他以太坊节点上的IPFS中。
当有用户需要读取合约数据时,需要读取的用户对应的以太坊节点访问IPFS中存储的合约数据,产生新的靠背。即谁使用合约数据,这个合约数据就会复制到使用者那里。根据这个特性,本实施例将把以太坊的LevelDB替换为IPFS。随着以太坊网络的运转,合约数据会分布到了以太坊网络中有限个以太坊节点中。本实施例避免了每个以太坊全节点都去保留一份合约数据,而是目标以太网节点和访问合约数据的其他以太网节点才保留合约数据,从而能够减轻每个以太坊节点在随着以太坊网络变大的情况下,数据量太大导致压力过大的问题。以太坊节点之间合约数据的访问流程如图2所示。以太坊节点之间合约数据的访问优先访问距离较近的以太坊节点。
本实施例通过使用分布式且可信的IPFS作为以太坊网络中合约数据的实际存储空间,将合约数据首先存储在产生合约数据的以太坊节点中,然后根据合约数据的访问,将合约数据逐渐存储到以太坊网络中的部分以太坊节点中,使得合约数据存储在有限个以太坊节点上,每个以太坊节点上保留的合约数据只是所有合约数据中若干个的组合,从而大大减小每个以太坊节点上合约数据的存储量。
在上述实施例的基础上,本实施例中将所述合约数据存储到所述目标以太坊节点上的IPFS中的步骤包括:将所述合约数据映射成Key-Value的形式;对所述合约数据的映射结果进行序列化;将所述映射结果的序列化结果转换成二进制数据;将所述二进制数据存储到所述目标以太坊节点上的IPFS中。
具体地,本实施例中合约数据的存储方法不仅适用于目标以太坊节点,适用于以太坊网络中所有以太坊节点中合约数据的存储。
在上述实施例的基础上,本实施例中将所述合约数据存储到所述目标以太坊节点上的IPFS中的步骤包括:当所述合约数据为固定长度数据类型时,将所述合约数据按预设字节拆分成多个数据段,将每个数据段在所述目标以太坊节点的IPFS中进行右对齐存储;若任一数据段的相邻数据段小于所述预设字节,则将该数据段和该数据段的相邻数据段进行压缩合并存储。
具体地,合约数据的索引编号按照合约数据存储位置的先后顺序从0开始每次加1。其中,预设字节为32字节。当合约数据为固定长度数据类型时,将合约数据按右对齐进行编码,如果相邻存储成员的数据长度小于32字节,则将相邻存储成员的合约数据压缩合并存储。
在上述实施例的基础上,本实施例中将所述合约数据存储到所述目标以太坊节点上的IPFS中的步骤包括:当所述合约数据为可变长度数据类型时,将所述合约数据按预设字节拆分成多个数据段,将每个数据段在所述目标以太坊节点的IPFS中进行左对齐存储;若任一数据段小于所述预设字节,则将所述数据段按一条记录进行存储,并在所述记录的Value值的最后一个字节存储所述数据段的实际长度;其中,所述合约数据存储的第一条记录的Key值为所述第一条记录对应的数据段的索引编号;所述第一条记录的Value值为所述合约数据的实际长度加1;所述合约数据的每条记录的Key值为所述第一条记录的Key值进行sha3后得到的Hash值按照每条记录存储的先后顺序从0开始每次累加1得到。
具体地,当合约数据为可变长度数据类型时,将合约数据按左对齐进行编码。当合约数据为固定长度数据类型时,将合约数据按右对齐进行编码。根据合约数据的编码类型,即左对齐或右对齐,可以确定合约数据为固定长度数据类型还是可变长度数据类型。
合约数据为可变长度数据类型时,如果合约数据划分的长度小于预设字节,如32字节,则按一条记录存储,该记录的Value值的最后一个字节存储该条记录的可变内容的实际长度。如果可变长度类型的合约数据的长度超过32字节,则将合约数据按照32字节拆成多条记录进行存储。第一条记录的Key为其索引编号,Value为其实际数据长度加1。然后,每条记录的Key为首条记录Key进行sha3后得到的hash值从0开始每次累加1得到,Value值为拆分的数据部分。每条记录的Value值中保存一个数据段。
在上述实施例的基础上,本实施例中将所述合约数据存储到所述目标以太坊节点上的IPFS中的步骤包括:当所述合约数据为结构体时,所述合约数据的每条记录的Key值为每条记录对应的所述合约数据的结构变量的索引编号;当所述合约数据为数组时,所述合约数据的第一条记录的Key值为所述合约数据的数组变量的索引编号,所述合约数据的第一条记录的Value值为所述合约数据中数组元素的个数,所述合约数据的每条记录的Key值为所述第一条记录的Key值进行sha3后得到的Hash值按照每条记录存储的先后顺序从0开始每次累加1得到,每条记录的Value值为相应的数组元素的值。
具体地,针对结构体的存储,将结构体每条记录的Key值看成结构体中结构变量的索引编号。针对数组的存储,需要扩展多条记录。第一条记录Key为数组变量的索引编号,Value记录数组中的元素个数。后续则根据数组的元素增加多条记录,每条记录的Key在首条记录的Key上做sha3得到hash从0开始每次累加1,Value为数组元素的对应值。针对Map合约数据的存储,其Key则为图的Key值加上图中变量的索引编号后进行sha3取Hash。
在上述各实施例的基础上,本实施例中将所述合约数据存储到所述目标以太坊节点上的IPFS中的步骤之后还包括:在所述目标以太坊节点的本地保留所述合约数据在所述IPFS中的地址;根据所述IPFS中合约数据的地址读取所述合约数据,并对读取的所述合约数据进行反序列化;根据反序列化的结果和所述合约的数据结构之间的映射关系,将所述反序列化的结果还原成所述合约的数据结构。
具体地,在将合约数据存储到以太坊节点的IPFS后,IPFS返回该合约数据的存储地址,并将合约地址保留在以太坊节点本地。在需要用到合约数据时,通过IPFS地址读取到该合约数据,进行反序列化后,根据映射关系就还原成了合约的数据结构。
在上述各实施例的基础上,本实施例中将所述合约数据存储到所述其他以太坊节点上的IPFS中的步骤之后还包括:对所述合约数据在所有所述以太坊节点的IPFS中存储的地址进行同步;根据所述合约数据存储的地址的同步结果,对所有所述以太坊节点的IPFS中存储的合约数据进行同步。
具体地,由于在以太坊节点本地保留有合约数据存到IPFS中的地址,在以太坊节点之间进行合约数据同步时,无须同步合约数据,只需要同步合约数据在IPFS中的存储地址。需要这些数据的以太坊节点通过同步的合约数据的存储地址,从相应的IPFS中获取合约数据并保存到本地。
在本发明的另一个实施例中提供一种以太坊合约数据的存储装置,该装置用于实现前述各实施例中的方法。因此,在前述以太坊合约数据的存储方法的各实施例中的描述和定义,可以用于本发明实施例中各个执行模块的理解。图3为本发明实施例提供的以太坊合约数据的存储装置整体结构示意图,该装置包括第一存储模块301和第二存储模块302,其中:
第一存储模块301用于当以太坊网络中的目标以太坊节点发布和使用合约时,产生所述合约的合约数据,将所述合约数据存储到所述目标以太坊节点上的IPFS中;
其中,目标以太坊节点为发布和使用合约的以太坊节点。在以太坊节点在发布和使用合约时,相应的会产生这个合约的合约数据。IPFS使用基于内容的地址寻址,只需要验证内容的哈希,就可以验证存储数据的安全性。第一存储模块301将目标以太坊节点发布和使用合约时产生的合约数据存储在本地的IPFS中。IPFS中存储的合约数据存储在其硬盘中。
第二存储模块302用于当所述以太坊网络中除目标以太坊节点以外的其他以太坊节点访问所述目标以太坊节点上的IPFS中存储的合约数据时,将所述合约数据存储到所述其他以太坊节点上的IPFS中;
当有用户需要读取合约数据时,需要读取的用户对应的以太坊节点访问IPFS中存储的合约数据,产生新的靠背。即谁使用合约数据,这个合约数据就会复制到使用者那里。根据这个特性,本实施例将把以太坊的LevelDB替换为IPFS。随着以太坊网络的运转,合约数据会分布到了以太坊网络中有限个以太坊节点中。本实施例避免了每个以太坊全节点都去保留一份合约数据,而是目标以太网节点和访问合约数据的其他以太网节点才保留合约数据,从而能够减轻每个以太坊节点在随着以太坊网络变大的情况下,数据量太大导致压力过大的问题。
本实施例通过使用分布式且可信的IPFS作为以太坊网络中合约数据的实际存储空间,将合约数据首先存储在产生合约数据的以太坊节点中,然后根据合约数据的访问,将合约数据逐渐存储到以太坊网络中的部分以太坊节点中,使得合约数据存储在有限个以太坊节点上,每个以太坊节点上保留的合约数据只是所有合约数据中若干个的组合,从而大大减小每个以太坊节点上合约数据的存储量。
在上述实施例的基础上,本实施例中第一存储模块具体用于:将所述合约数据映射成Key-Value的形式;对所述合约数据的映射结果进行序列化;将所述映射结果的序列化结果转换成二进制数据;将所述二进制数据存储到所述目标以太坊节点上的IPFS中。
在上述实施例的基础上,本实施例中第一存储模块具体用于:当所述合约数据为固定长度数据类型时,将所述合约数据按预设字节拆分成多个数据段,将每个数据段在所述目标以太坊节点的IPFS中进行右对齐存储;若任一数据段的相邻数据段小于所述预设字节,则将该数据段和该数据段的相邻数据段进行压缩合并存储。
在上述实施例的基础上,本实施例中第一存储模块具体用于:当所述合约数据为可变长度数据类型时,将所述合约数据按预设字节拆分成多个数据段,将每个数据段在所述目标以太坊节点的IPFS中进行左对齐存储;若任一数据段小于所述预设字节,则将所述数据段按一条记录进行存储,并在所述记录的Value值的最后一个字节存储所述数据段的实际长度;其中,所述合约数据存储的第一条记录的Key值为所述第一条记录对应的数据段的索引编号;所述第一条记录的Value值为所述合约数据的实际长度加1;所述合约数据的每条记录的Key值为所述第一条记录的Key值进行sha3后得到的Hash值按照每条记录存储的先后顺序从0开始每次累加1得到。
在上述实施例的基础上,本实施例中第一存储模块具体用于:当所述合约数据为结构体时,所述合约数据的每条记录的Key值为每条记录对应的所述合约数据的结构变量的索引编号;当所述合约数据为数组时,所述合约数据的第一条记录的Key值为所述合约数据的数组变量的索引编号,所述合约数据的第一条记录的Value值为所述合约数据中数组元素的个数,所述合约数据的每条记录的Key值为所述第一条记录的Key值进行sha3后得到的Hash值按照每条记录存储的先后顺序从0开始每次累加1得到,每条记录的Value值为相应的数组元素的值。
在上述各实施例的基础上,本实施例中还包括读取模块,用于在所述目标以太坊节点的本地保留所述合约数据在所述IPFS中的地址;根据所述IPFS中合约数据的地址读取所述合约数据,并对读取的所述合约数据进行反序列化;根据反序列化的结果和所述合约的数据结构之间的映射关系,将所述反序列化的结果还原成所述合约的数据结构。
在上述各实施例的基础上,本实施例中还包括同步模块,用于对所述合约数据在所有所述以太坊节点的IPFS中存储的地址进行同步;根据所述合约数据存储的地址的同步结果,对所有所述以太坊节点的IPFS中存储的合约数据进行同步。
图4示例了一种电子设备的实体结构示意图,如图4所示,该电子设备可以包括:处理器(processor)401、通信接口(Communications Interface)402、存储器(memory)403和通信总线404,其中,处理器401,通信接口402,存储器403通过通信总线404完成相互间的通信。处理器401可以调用存储器403中的逻辑指令,以执行如下方法:当以太坊网络中的目标以太坊节点发布和使用合约时,产生所述合约的合约数据,将所述合约数据存储到所述目标以太坊节点上的IPFS中;当所述以太坊网络中除目标以太坊节点以外的其他以太坊节点访问所述目标以太坊节点上的IPFS中存储的合约数据时,将所述合约数据存储到所述其他以太坊节点上的IPFS中。
此外,上述的存储器403中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本实施例提供一种非暂态计算机可读存储介质,非暂态计算机可读存储介质存储计算机指令,计算机指令使计算机执行上述各方法实施例所提供的方法,例如包括:当以太坊网络中的目标以太坊节点发布和使用合约时,产生所述合约的合约数据,将所述合约数据存储到所述目标以太坊节点上的IPFS中;当所述以太坊网络中除目标以太坊节点以外的其他以太坊节点访问所述目标以太坊节点上的IPFS中存储的合约数据时,将所述合约数据存储到所述其他以太坊节点上的IPFS中。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (9)
1.一种以太坊合约数据的存储方法,其特征在于,包括:
当以太坊网络中的目标以太坊节点发布和使用合约时,产生所述合约的合约数据,将所述合约数据存储到所述目标以太坊节点上的IPFS中;
当所述以太坊网络中除目标以太坊节点以外的其他以太坊节点访问所述目标以太坊节点上的IPFS中存储的合约数据时,将所述合约数据存储到所述其他以太坊节点上的IPFS中;
其中,将所述合约数据存储到所述目标以太坊节点上的IPFS中的步骤包括:
将所述合约数据映射成Key-Value的形式;
对所述合约数据的映射结果进行序列化;
将所述映射结果的序列化结果转换成二进制数据;
将所述二进制数据存储到所述目标以太坊节点上的IPFS中。
2.根据权利要求1所述的以太坊合约数据的存储方法,其特征在于,将所述合约数据存储到所述目标以太坊节点上的IPFS中的步骤包括:
当所述合约数据为固定长度数据类型时,将所述合约数据按预设字节拆分成多个数据段,将每个数据段在所述目标以太坊节点的IPFS中进行右对齐存储;
若任一数据段的相邻数据段小于所述预设字节,则将该数据段和该数据段的相邻数据段进行压缩合并存储。
3.根据权利要求1所述的以太坊合约数据的存储方法,其特征在于,将所述合约数据存储到所述目标以太坊节点上的IPFS中的步骤包括:
当所述合约数据为可变长度数据类型时,将所述合约数据按预设字节拆分成多个数据段,将每个数据段在所述目标以太坊节点的IPFS中进行左对齐存储;
若任一数据段小于所述预设字节,则将所述数据段按一条记录进行存储,并在所述记录的Value值的最后一个字节存储所述数据段的实际长度;
其中,所述合约数据存储的第一条记录的Key值为所述第一条记录对应的数据段的索引编号;
所述第一条记录的Value值为所述合约数据的实际长度加1;
所述合约数据的每条记录的Key值为所述第一条记录的Key值进行sha3后得到的Hash值按照每条记录存储的先后顺序从0开始每次累加1得到。
4.根据权利要求1所述的以太坊合约数据的存储方法,其特征在于,将所述合约数据存储到所述目标以太坊节点上的IPFS中的步骤包括:
当所述合约数据为结构体时,所述合约数据的每条记录的Key值为每条记录对应的所述合约数据的结构变量的索引编号;
当所述合约数据为数组时,所述合约数据的第一条记录的Key值为所述合约数据的数组变量的索引编号,所述合约数据的第一条记录的Value值为所述合约数据中数组元素的个数,所述合约数据的每条记录的Key值为所述第一条记录的Key值进行sha3后得到的Hash值按照每条记录存储的先后顺序从0开始每次累加1得到,每条记录的Value值为相应的数组元素的值。
5.根据权利要求1-4任一所述的以太坊合约数据的存储方法,其特征在于,将所述合约数据存储到所述目标以太坊节点上的IPFS中的步骤之后还包括:
在所述目标以太坊节点的本地保留所述合约数据在所述IPFS中的地址;
根据所述IPFS中合约数据的地址读取所述合约数据,并对读取的所述合约数据进行反序列化;
根据反序列化的结果和所述合约的数据结构之间的映射关系,将所述反序列化的结果还原成所述合约的数据结构。
6.根据权利要求1-4任一所述的以太坊合约数据的存储方法,其特征在于,将所述合约数据存储到所述其他以太坊节点上的IPFS中的步骤之后还包括:
对所述合约数据在所有所述以太坊节点的IPFS中存储的地址进行同步;
根据所述合约数据存储的地址的同步结果,对所有所述以太坊节点的IPFS中存储的合约数据进行同步。
7.一种以太坊合约数据的存储装置,其特征在于,包括:
第一存储模块,用于当以太坊网络中的目标以太坊节点发布和使用合约时,产生所述合约的合约数据,将所述合约数据存储到所述目标以太坊节点上的IPFS中;
第二存储模块,用于当所述以太坊网络中除目标以太坊节点以外的其他以太坊节点访问所述目标以太坊节点上的IPFS中存储的合约数据时,将所述合约数据存储到所述其他以太坊节点上的IPFS中;
其中,将所述合约数据存储到所述目标以太坊节点上的IPFS中的步骤包括:
将所述合约数据映射成Key-Value的形式;
对所述合约数据的映射结果进行序列化;
将所述映射结果的序列化结果转换成二进制数据;
将所述二进制数据存储到所述目标以太坊节点上的IPFS中。
8.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述以太坊合约数据的存储方法的步骤。
9.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至6任一项所述以太坊合约数据的存储方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911398921.7A CN111061698B (zh) | 2019-12-30 | 2019-12-30 | 以太坊合约数据的存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911398921.7A CN111061698B (zh) | 2019-12-30 | 2019-12-30 | 以太坊合约数据的存储方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111061698A CN111061698A (zh) | 2020-04-24 |
CN111061698B true CN111061698B (zh) | 2023-09-05 |
Family
ID=70304899
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911398921.7A Active CN111061698B (zh) | 2019-12-30 | 2019-12-30 | 以太坊合约数据的存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111061698B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113271314A (zh) * | 2021-06-07 | 2021-08-17 | 桂林电子科技大学 | 一种基于以太坊和ipfs的微酒店网站数据保护方法 |
CN113641631B (zh) * | 2021-08-10 | 2023-05-23 | 深圳技术大学 | 基于区块链的ipfs文件管理方法、设备及存储介质 |
Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102332030A (zh) * | 2011-10-17 | 2012-01-25 | 中国科学院计算技术研究所 | 用于分布式键-值存储系统的数据存储、管理和查询方法及系统 |
CN107563905A (zh) * | 2017-07-20 | 2018-01-09 | 西安电子科技大学 | 一种基于区块链的学术平台服务系统及建立方法 |
CN108628942A (zh) * | 2018-03-27 | 2018-10-09 | 深圳市网心科技有限公司 | 区块链节点设备、分布式数据库的数据读取及写入方法 |
CN109034814A (zh) * | 2018-09-14 | 2018-12-18 | 百度在线网络技术(北京)有限公司 | 基于以太坊虚拟机的智能合约处理方法和装置 |
CN109389500A (zh) * | 2018-09-29 | 2019-02-26 | 重庆邮电大学 | 基于以太坊的数据交易平台 |
CN109491968A (zh) * | 2018-11-13 | 2019-03-19 | 浙江鲸腾网络科技有限公司 | 一种文件处理方法、装置、设备及计算机可读存储介质 |
WO2019067357A1 (en) * | 2017-09-29 | 2019-04-04 | Alibaba Group Holding Limited Fourth Floor, One Capital Place | METHOD FOR STORING DATA, METHOD FOR QUERYING DATA AND APPARATUS |
CN109634932A (zh) * | 2018-11-30 | 2019-04-16 | 北京瑞卓喜投科技发展有限公司 | 一种智能合约存储方法及存储系统 |
CN110032545A (zh) * | 2019-03-27 | 2019-07-19 | 远光软件股份有限公司 | 基于区块链的文件存储方法、系统及电子设备 |
CN110061838A (zh) * | 2019-04-28 | 2019-07-26 | 广州大学 | 一种dns资源记录的去中心化存储系统及其实现、信息检索方法 |
CN110109874A (zh) * | 2019-05-13 | 2019-08-09 | 北京共识数信科技有限公司 | 一种基于区块链的无中心分布式文件检索方法 |
CN110175471A (zh) * | 2019-05-23 | 2019-08-27 | 语联网(武汉)信息技术有限公司 | 一种档案的存储方法及系统 |
EP3561710A1 (en) * | 2018-04-25 | 2019-10-30 | Freeformers Holdings Limited | Data processing system utilising distributed ledger technology |
CN110532238A (zh) * | 2019-08-19 | 2019-12-03 | 广州华旻信息科技有限公司 | 基于区块链技术的合同管理系统及方法 |
CN110597814A (zh) * | 2019-09-16 | 2019-12-20 | 腾讯科技(深圳)有限公司 | 结构化数据的序列化、反序列化方法以及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10541886B2 (en) * | 2017-05-24 | 2020-01-21 | International Business Machines Corporation | Decentralized change management based on peer devices using a blockchain |
-
2019
- 2019-12-30 CN CN201911398921.7A patent/CN111061698B/zh active Active
Patent Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102332030A (zh) * | 2011-10-17 | 2012-01-25 | 中国科学院计算技术研究所 | 用于分布式键-值存储系统的数据存储、管理和查询方法及系统 |
CN107563905A (zh) * | 2017-07-20 | 2018-01-09 | 西安电子科技大学 | 一种基于区块链的学术平台服务系统及建立方法 |
WO2019067357A1 (en) * | 2017-09-29 | 2019-04-04 | Alibaba Group Holding Limited Fourth Floor, One Capital Place | METHOD FOR STORING DATA, METHOD FOR QUERYING DATA AND APPARATUS |
CN108628942A (zh) * | 2018-03-27 | 2018-10-09 | 深圳市网心科技有限公司 | 区块链节点设备、分布式数据库的数据读取及写入方法 |
EP3561710A1 (en) * | 2018-04-25 | 2019-10-30 | Freeformers Holdings Limited | Data processing system utilising distributed ledger technology |
CN109034814A (zh) * | 2018-09-14 | 2018-12-18 | 百度在线网络技术(北京)有限公司 | 基于以太坊虚拟机的智能合约处理方法和装置 |
CN109389500A (zh) * | 2018-09-29 | 2019-02-26 | 重庆邮电大学 | 基于以太坊的数据交易平台 |
CN109491968A (zh) * | 2018-11-13 | 2019-03-19 | 浙江鲸腾网络科技有限公司 | 一种文件处理方法、装置、设备及计算机可读存储介质 |
CN109634932A (zh) * | 2018-11-30 | 2019-04-16 | 北京瑞卓喜投科技发展有限公司 | 一种智能合约存储方法及存储系统 |
CN110032545A (zh) * | 2019-03-27 | 2019-07-19 | 远光软件股份有限公司 | 基于区块链的文件存储方法、系统及电子设备 |
CN110061838A (zh) * | 2019-04-28 | 2019-07-26 | 广州大学 | 一种dns资源记录的去中心化存储系统及其实现、信息检索方法 |
CN110109874A (zh) * | 2019-05-13 | 2019-08-09 | 北京共识数信科技有限公司 | 一种基于区块链的无中心分布式文件检索方法 |
CN110175471A (zh) * | 2019-05-23 | 2019-08-27 | 语联网(武汉)信息技术有限公司 | 一种档案的存储方法及系统 |
CN110532238A (zh) * | 2019-08-19 | 2019-12-03 | 广州华旻信息科技有限公司 | 基于区块链技术的合同管理系统及方法 |
CN110597814A (zh) * | 2019-09-16 | 2019-12-20 | 腾讯科技(深圳)有限公司 | 结构化数据的序列化、反序列化方法以及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111061698A (zh) | 2020-04-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110457319B (zh) | 区块链状态数据存储方法及装置、电子设备 | |
EP3754515A1 (en) | Reshard method and system in distributed storage system | |
CN111444196B (zh) | 块链式账本中全局状态的哈希的生成方法、装置及设备 | |
EP3376393B1 (en) | Data storage method and apparatus | |
CN112887421A (zh) | 区块链状态数据同步方法及装置、电子设备 | |
US8965849B1 (en) | Static sorted index replication | |
CN110750382B (zh) | 用于提高数据修复性能的最小存储再生码编码方法及系统 | |
CN111061698B (zh) | 以太坊合约数据的存储方法及装置 | |
CN103838860A (zh) | 一种基于动态副本策略的文件存储系统及其存储方法 | |
CN111444192B (zh) | 块链式账本中全局状态的哈希的生成方法、装置及设备 | |
CN106649676A (zh) | 一种基于hdfs存储文件的去重方法及装置 | |
US10509582B2 (en) | System and method for data storage, transfer, synchronization, and security | |
CN107797770B (zh) | 一种磁盘状态信息的同步方法及装置 | |
CN113687964B (zh) | 数据处理方法、装置、电子设备、存储介质及程序产品 | |
WO2023011022A1 (zh) | 基于区块链的数据处理方法、设备及计算机可读存储介质 | |
US20200212932A1 (en) | Reducing storage of blockchain metadata via dictionary-style compression | |
CN112785408A (zh) | 基于哈希的对账方法及装置 | |
CN112748877A (zh) | 一种文件的整合上传方法及装置、文件的下载方法及装置 | |
CN110413588B (zh) | 分布式对象存储方法、装置、计算机设备和存储介质 | |
CN106980618B (zh) | 基于MongoDB分布式集群架构的文件存储方法和系统 | |
US20180246666A1 (en) | Methods for performing data deduplication on data blocks at granularity level and devices thereof | |
CN111444194B (zh) | 一种块链式账本中索引的清除方法、装置及设备 | |
CN112181974B (zh) | 标识信息分配方法、系统及存储设备 | |
CN108848136B (zh) | 一种云服务集群的共享存储方法 | |
CN112799592A (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 |