CN116700628B - 区块链数据处理方法、装置、计算机设备和存储介质 - Google Patents
区块链数据处理方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN116700628B CN116700628B CN202310959009.4A CN202310959009A CN116700628B CN 116700628 B CN116700628 B CN 116700628B CN 202310959009 A CN202310959009 A CN 202310959009A CN 116700628 B CN116700628 B CN 116700628B
- Authority
- CN
- China
- Prior art keywords
- contract
- variable
- block
- identifier
- storage
- 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
- 238000003672 processing method Methods 0.000 title abstract description 27
- 238000000034 method Methods 0.000 claims abstract description 95
- 238000012545 processing Methods 0.000 claims abstract description 13
- 230000001680 brushing effect Effects 0.000 claims description 26
- 238000004590 computer program Methods 0.000 claims description 24
- 230000008569 process Effects 0.000 claims description 13
- 238000011084 recovery Methods 0.000 claims description 6
- 238000010586 diagram Methods 0.000 description 11
- 238000004891 communication Methods 0.000 description 8
- 238000004364 calculation method Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 6
- 230000001960 triggered effect Effects 0.000 description 6
- 230000008859 change Effects 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 238000003780 insertion Methods 0.000 description 5
- 230000037431 insertion Effects 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 230000007774 longterm Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种区块链数据处理方法、装置、计算机设备和存储介质。涉及到区块链领域,包括:获取针对区块链系统的智能合约中合约变量的存储请求;所述存储请求中包括所述智能合约的合约地址和所述合约变量的第一变量标识;确定所述智能合约的存储方式;在所述智能合约的存储方式为第一存储方式的情况下,基于所述智能合约的合约地址和所述合约变量的第一变量标识生成所述合约变量的第二变量标识,存储所述第二变量标识和所述合约变量的值组成的键值对;在所述智能合约的存储方式为第二存储方式的情况下,根据所述智能合约的合约地址和所述第一变量标识,向所述智能合约的合约存储树中存储所述合约变量的值。采用本方法能够节省存储空间。
Description
技术领域
本申请涉及区块链技术领域,特别是涉及一种区块链数据处理方法、装置、计算机设备和存储介质。
背景技术
随着计算机技术的发展,出现了区块链技术,区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。由于区块链具有去中心化、信息不可篡改、自治性等特性,区块链也受到人们越来越多的重视和应用。
由于传统技术中区块链系统采用的存储结构不够灵活,从而存在存储空间浪费的问题。
发明内容
基于此,有必要针对上述技术问题,提供一种能够节省存储空间的区块链数据处理方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
一方面,本申请提供了一种区块链数据处理方法。所述方法包括:获取针对区块链系统的智能合约中合约变量的存储请求;所述存储请求中包括所述智能合约的合约地址和所述合约变量的第一变量标识,所述第一变量标识用于在所述智能合约中唯一标识所述合约变量;确定所述智能合约的存储方式;在所述智能合约的存储方式为第一存储方式的情况下,基于所述智能合约的合约地址和所述合约变量的第一变量标识生成所述合约变量的第二变量标识,存储所述第二变量标识和所述合约变量的值组成的键值对;在所述智能合约的存储方式为第二存储方式的情况下,根据所述智能合约的合约地址和所述第一变量标识,向所述智能合约的合约存储树中存储所述合约变量的值。
另一方面,本申请还提供了一种区块链数据处理装置。所述装置包括:存储请求获取模块,用于获取针对区块链系统的智能合约中合约变量的存储请求;所述存储请求中包括所述智能合约的合约地址和所述合约变量的第一变量标识,所述第一变量标识用于在所述智能合约中唯一标识所述合约变量;存储方式确定模块,用于确定所述智能合约的存储方式;第一存储模块,用于在所述智能合约的存储方式为第一存储方式的情况下,基于所述智能合约的合约地址和所述合约变量的第一变量标识生成所述合约变量的第二变量标识,存储所述第二变量标识和所述合约变量的值组成的键值对;第二存储模块,用于在所述智能合约的存储方式为第二存储方式的情况下,根据所述智能合约的合约地址和所述第一变量标识,向所述智能合约的合约存储树中存储所述合约变量的值。
在一些实施例中,所述存储方式确定模块,还用于确定所述智能合约的布署方式;在所述智能合约的布署方式为指定布署方式的情况下,确定所述智能合约的存储方式为第一存储方式;在所述智能合约的布署方式为非指定布署方式的情况下,确定所述智能合约的存储方式为第二存储方式。
在一些实施例中,所述存储方式确定模块,还用于确定所述智能合约的布署方式标记信息;所述布署方式标记信息用于标记布署方式;基于所述布署方式标记信息确定所述智能合约的布署方式。
在一些实施例中,所述第一存储模块,还用于将所述智能合约的合约地址与所述合约变量的第一变量标识进行拼接;基于拼接的结果确定所述合约变量的第二变量标识。
在一些实施例中,所述第一存储模块,还用于确定当前区块的区块标识;当前区块是指处于生成阶段的区块;所述存储请求,是在生成当前区块的过程中触发的;确定所述区块标识对应的块缓存,将所述第二变量标识和所述合约变量的值组成的键值对,存储至所述区块标识对应的块缓存中;在当前区块已成功生成的情况下,将所述区块标识对应的块缓存中的数据存储至数据库;所述块缓存中的数据,包括所述第二变量标识和所述合约变量的值组成的键值对。
在一些实施例中,所述第一存储模块,还用于在当前区块已成功生成的情况下,等待针对当前区块的上链指示信息;在获取到针对当前区块的上链指示信息的情况下,将所述区块标识对应的块缓存中的数据存储至数据库。
在一些实施例中,所述块缓存属于延迟刷盘缓存;所述装置,还用于确定当前区块的块高得到参考块高;所述延迟刷盘缓存中存储有所述参考块高对应的区块标识集合;所述区块标识集合中的区块标识代表的待上链区块的块高为所述参考块高;所述延迟刷盘缓存中包括所述区块标识集合中的每个区块标识分别对应的块缓存;将当前区块的区块标识加入所述参考块高对应的区块标识集合中;在将当前区块的区块标识对应的块缓存中的数据存储至数据库之后,将所述参考块高中每个区块标识分别对应的块缓存中的数据进行删除。
在一些实施例中,所述装置还用于,将所述第二变量标识和所述合约变量的值组成的键值对存储至延迟刷盘日志中;响应于重启,基于延迟刷盘日志中的数据对所述区块标识对应的块缓存进行数据恢复。
在一些实施例中,所述延迟刷盘日志中存储有所述参考块高对应的区块标识集合;所述装置还用于:在将当前区块的区块标识对应的块缓存中的数据存储至数据库之后,将所述延迟刷盘日志中存储的所述参考块高对应的区块标识集合删除,并将所述延迟刷盘日志中存储的当前区块的相关数据删除。
在一些实施例中,所述装置,还用于获取针对所述智能合约中目标合约变量的访问请求;基于所述智能合约的合约地址和所述目标合约变量的第一变量标识生成所述目标合约变量的第二变量标识;以所述目标合约变量的第二变量标识为键对所述目标合约变量进行访问。
在一些实施例中,所述装置,还用于在延迟刷盘缓存中,以所述目标合约变量的第二变量标识为键对所述目标合约变量进行访问;所述延迟刷盘缓存包括待上链区块的块缓存;以所述目标合约变量的第二变量标识为键,在待上链区块的块缓存中查询所述目标合约变量的值;在未查找到的情况下,以所述目标合约变量的第二变量标识为键,在数据库中对所述目标合约变量进行访问。
在一些实施例中,所述第二存储模块,还用于根据所述智能合约的合约地址从世界状态树中,查找所述智能合约的账户对应的状态信息;从所述状态信息中获取存储树根哈希值;根据所述存储树根哈希值查找到所述合约存储树,向所述智能合约的合约存储树中存储所述合约变量的值。
另一方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述区块链数据处理方法中的步骤。
另一方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述区块链数据处理方法中的步骤。
另一方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述区块链数据处理方法中的步骤。
上述区块链数据处理方法、装置、计算机设备、存储介质和计算机程序产品,获取针对区块链系统的智能合约中合约变量的存储请求,存储请求中包括智能合约的合约地址和合约变量的第一变量标识,第一变量标识用于在智能合约中唯一标识合约变量,确定智能合约的存储方式,在智能合约的存储方式为第一存储方式的情况下,基于智能合约的合约地址和合约变量的第一变量标识生成合约变量的第二变量标识,存储第二变量标识和合约变量的值组成的键值对,在智能合约的存储方式为第二存储方式的情况下,根据智能合约的合约地址和第一变量标识,向智能合约的合约存储树中存储合约变量的值。由于支持键值对的存储方式和合约存储树的存储方式,且键值对的存储方式简单便捷,从而节省了存储空间。
附图说明
图1A为一些实施例中区块链数据处理方法的应用环境图;
图1B为一些实施例中区块链的示意图;
图1C为一些实施例中生成区块的示意图;
图2为一些实施例中区块链数据处理方法的流程示意图;
图3为一些实施例中区块链数据处理方法的流程示意图;
图4为一些实施例中区块链数据存储结构的示意图;
图5为一些实施例中区块链节点的系统架构图;
图6为一些实施例中延迟刷盘缓存的示意图;
图7为一些实施例中读取区块的数据的流程示意图;
图8为一些实施例中区块链数据处理方法的流程示意图;
图9为一些实施例中区块链数据处理装置的结构框图;
图10为一些实施例中计算机设备的内部结构图;
图11为一些实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例提供的区块链数据处理方法,可以应用于如图1A所示的应用环境中,该应用环境包括区块链系统,区块链系统中包括N个区块链节点,分别为区块链节点1~区块链节点N。区块链节点可以简称为节点。每个节点101在进行正常工作可以接收到输入信息,并基于接收到的输入信息维护该区块链系统内的共享数据。为了保证区块链系统内的信息互通,区块链系统中的每个节点之间可以存在信息连接,节点之间可以通过上述信息连接进行信息传输。例如,当区块链系统中的任意节点接收到输入信息时,区块链系统中的其他节点便根据共识算法获取该输入信息,将该输入信息作为共享数据中的数据进行存储,使得区块链系统中全部节点上存储的数据均一致。
对于区块链系统中的每个节点,均具有与其对应的节点标识,而且区块链系统中的每个节点均可以存储有区块链系统中其他节点的节点标识,以便后续根据其他节点的节点标识,将生成的区块广播至区块链系统中的其他节点。每个节点中可维护一个如下表所示的节点标识列表,将节点名称和节点标识对应存储至该节点标识列表中。其中,节点标识可为IP(Internet Protocol,网络之间互联的协议)地址以及其他任一种能够用于标识该节点的信息。
区块链系统中的每个节点均存储一条相同的区块链。区块链由多个区块组成,参见图1B,区块链由多个区块组成,创始块中包括区块头和区块主体,区块头中存储有输入信息特征值、版本号、时间戳和难度值,区块主体中存储有输入信息;创始块的下一区块以创始块为父区块,下一区块中同样包括区块头和区块主体,区块头中存储有当前区块的输入信息特征值、父区块的区块头特征值、版本号、时间戳和难度值,并以此类推,使得区块链中每个区块中存储的区块数据均与父区块中存储的区块数据存在关联,保证了区块中输入信息的安全性。
在生成区块链中的各个区块时,参见图1C,区块链所在的节点在接收到输入信息时,对输入信息进行校验,完成校验后,将输入信息存储至内存池中,并更新其用于记录输入信息的哈希树;之后,将更新时间戳更新为接收到输入信息的时间,并尝试不同的随机数,多次进行特征值计算,使得计算得到的特征值可以满足下述公式:
SHA256(SHA256(version+prev_hash+merkle_root+ntime+nbits+x))<TARGET
其中,SHA256为计算特征值所用的特征值算法;version(版本号)为区块链中相关区块协议的版本信息;prev_hash为当前区块的父区块的区块头特征值;merkle_root为输入信息的特征值;ntime为更新时间戳的更新时间;nbits为当前难度,在一段时间内为定值,并在超出固定时间段后再次进行确定;x为随机数;TARGET为特征值阈值,该特征值阈值可以根据nbits确定得到。
这样,当计算得到满足上述公式的随机数时,便可将信息对应存储,生成区块头和区块主体,得到当前区块。随后,区块链所在节点根据区块链系统中其他节点的节点标识,将新生成的区块分别发送给其所在的区块链系统中的其他节点,由其他节点对新生成的区块进行校验,并在完成校验后将新生成的区块添加至其存储的区块链中。
具体地,区块链系统中的每个区块链节点均可以执行本申请提供的区块链数据处理方法,本申请提供的区块链数据处理方法可以由任意的区块链节点执行。区块链节点获取针对区块链系统的智能合约中合约变量的存储请求,存储请求中包括智能合约的合约地址和合约变量的第一变量标识,第一变量标识用于在智能合约中唯一标识合约变量;智能合约属于区块链系统。区块链节点确定智能合约的存储方式,在智能合约的存储方式为第一存储方式的情况下,区块链节点基于智能合约的合约地址和合约变量的第一变量标识生成合约变量的第二变量标识,存储第二变量标识和合约变量的值组成的键值对。在智能合约的存储方式为第二存储方式的情况下,区块链节点根据智能合约的合约地址和第一变量标识,向智能合约的合约存储树中存储合约变量的值。
其中,区块链节点可以但不限于是各种台式计算机、笔记本电脑、智能手机、平板电脑。区块链节点也可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一些实施例中,如图2所示,提供了一种区块链数据处理方法,该方法可以由任意的区块链节点执行,包括以下步骤:
步骤202,获取针对区块链系统的智能合约中合约变量的存储请求;存储请求中包括智能合约的合约地址和合约变量的第一变量标识,第一变量标识用于在智能合约中唯一标识合约变量。
其中,区块链系统中可提供智能合约的功能。智能合约是在区块链系统上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。在区块链中调用智能合约,是发起一笔指向智能合约地址的交易,使得区块链中每个节点分布式地运行智能合约代码。交易可以是金融领域中的交易,例如可以是支付类的交易,当然也可以是其他类型的交易,这里不做限制。智能合约属于计算机化的协议,可以执行某个合约的条款,通过布署在共享账本上的用于在满足一定条件时而执行的代码实现,根据实际的业务需求代码用于完成自动化的交易,例如查询买家所购买商品的物流状态,在买家签收货物后将买家的电子货币转移到商户的地址;当然,智能合约不仅限于执行用于交易的合约,还可以执行对接收的信息进行处理的合约。
合约变量是指智能合约中的变量,智能合约可以有多个变量,多个是指至少两个。智能合约中的每个变量都有对应的第一变量标识。合约变量的第一变量标识,用于在智能合约中唯一标识该合约变量,合约变量的第一变量标识可以根据该合约变量在智能合约中的位置确定,例如,合约变量的第一变量标识可以为该合约变量在智能合约中的位置,或者,合约变量的第一变量标识可以为该合约变量在智能合约中的位置的哈希值。合约变量的第一变量标识也可以是合约变量的变量名。合约地址是指智能合约在区块链节点中的地址。存储请求用于存储合约变量的值。存储请求中还可以包括合约变量的值。合约变量的值是指合约变量的取值,例如,合约变量为a,合约变量的取值为3,即a=3。
具体地,区块链节点在执行完智能合约后,可以将智能合约的合约变量以及合约变量的值进行存储,从而在执行完智能合约后,可以触发执行针对智能合约中合约变量的存储请求。执行智能合约的过程中,智能合约的合约变量的值可能会发生变化。即执行智能合约前后,合约变量的值可能发生变化,当然,也可能不发生变化。
在一些实施例中,在智能合约执行后,区块链节点触发针对智能合约中合约变量的存储请求。在生成区块的过程中,例如,区块中的交易共识后,可以触发针对执行该交易的智能合约中合约变量的存储请求。
步骤204,确定智能合约的存储方式。
其中,存储方式可以划分为第一存储方式和第二存储方式。第一存储方式是指键值对存储方式,也可以称为KV存储方式,KV中的K为key(键)的缩写,V为value(值)的缩写。第二存储方式为树存储方式,树存储方式包括但不限于是采用字典树(trie树)、默克尔树或MPT(Merkle Patricia Trie,默克尔前缀树)树存储的方式。
具体地,智能合约的存储方式可以根据布署方式确定。例如,区块量节点可以确定智能合约的布署方式,在智能合约的布署方式为指定布署方式的情况下,区块量节点确定智能合约的存储方式为第一存储方式,在智能合约的布署方式为非指定布署方式的情况下,区块量节点确定智能合约的存储方式为第二存储方式。
步骤206,在智能合约的存储方式为第一存储方式的情况下,基于智能合约的合约地址和合约变量的第一变量标识生成合约变量的第二变量标识,存储第二变量标识和合约变量的值组成的键值对。
具体地,在智能合约的存储方式为第一存储方式的情况下,区块链节点可以将智能合约的合约地址和合约变量的第一变量标识进行拼接,将拼接的结果作为合约变量的第二变量标识。如图3所示,“是否为KV存储合约?”用于判断智能合约的存储方式,“是KV存储合约”则表示存储方式为第一存储方式,“不是KV存储合约”则表示存储方式为第二存储方式,在“是KV存储合约”的情况下,进入KV存储的环节,在该环节中生成合约变量的第二变量标识,例如,“计算存储Key=合约地址+合约key”。其中,“存储Key”即第二变量标识,“+”即拼接,“合约key”即合约变量的第一变量标识。得到第二变量标识后,区块链节点将第二变量标识作为键并将合约变量的值作为值构成该合约变量对应的键值对,并存储该合约变量对应的键值对。
在一些实施例中,区块链节点可以将合约变量对应的键值对存储到数据库中,可以理解,在数据库中不存在该合约变量对应的键值对的情况下,将合约变量对应的键值对存储到数据库中,是指在数据库中新增合约变量对应的键值对,在数据库中已存在该合约变量对应的键值对的情况下,将合约变量对应的键值对存储到数据库中,是指对数据库中该合约变量对应的键值对中的值进行更新,例如,该合约变量的第二变量标识为b,数据库中已存在该合约变量对应的键值对为“b=3”,存储请求触发生成的该合约变量对应的键值对为“b=5”,则存储“b=5”是指将数据库中的“b=3”修改为“b=5”。
在一些实施例中,合约变量对应的键值对是临时生成的,并不一定需要对数据库进行更新,故区块链节点生成该合约变量对应的键值对后,可以先将该合约变量对应的键值对存储至缓存中,在确定需要用该合约变量对应的键值对数据库进行更新时,再将该合约变量对应的键值对存储至数据库中。
在一些实施例中,对于需要长时间保存历史记录的业务,可以选用第二存储方式,即可以采用合约存储树例如MPT树进行存储,从而可以支持状态回滚和历史数据查询。对于不需要保存历史记录的业务,可以采用第一存储方式,即可以采用KV存储,从而节省空间,并提高数据查询和插入的效率,以及提高合约执行性能。对于保存较短时间的历史记录的业务,可以采用KV存储例如可以使用多个合约或多个字段保存不同时间的数据,也可以采用合约存储树进行存储。
步骤208,在智能合约的存储方式为第二存储方式的情况下,根据智能合约的合约地址和第一变量标识,向智能合约的合约存储树中存储合约变量的值。
其中,合约存储树可以为MPT树。MPT树是区块链中的一种数据结构。MPT树融合了Merkle Tree(默克尔树)和 Patricia Trie(帕特里夏字典树)的特点。MPT 的主要特点包括:通用性:MPT 可用于存储各种类型的数据,包括用户状态、智能合约内容、交易列表等。可验证性:对于任何给定的键值对,用户只需知道该键值对在 MPT 中的路径,就能验证其状态的真实性。抗篡改:由于 MPT 是默克尔树的变体,任何对其内部节点的篡改都会改变树的根哈希值。这意味着对数据的更改容易被发现。优化的存储与查找:MPT 实现了有效的存储和查找过程,通过处理键冲突和优化空间存储来降低了存储开销。字典树部分的性质使得键可以被压缩存储,以节省空间。灵活性:MPT 允许有效地插入、删除以及更新键值对数据。在区块链中,每个区块的状态根是当前最新状态的 MPT 树的根哈希。因此,通过上一个区块的状态根,节点可以验证后续区块的合法性以及完成并更新状态。
区块链节点中存储有世界状态树。世界状态树中记录了区块链系统中各账户的状态信息。区块链系统中的账户包括智能合约账户和外部账户。合约账户是部署智能合约时创建的账户,合约账户是代表智能合约的账户。外部账户是代表用户的账户。每个智能合约都有对应的合约账户。账户的状态信息可以包括随机数(nonce)、账户余额(balance)、存储树根哈希值(storage root)、智能合约代码的哈希值(codeHash)。随机数和账户余额在外部账户和合约账户中都存在。存储树根哈希值和智能合约代码的哈希值仅在合约账户上有效。对于外部账户,计数器记录的数字代表从账户地址发送的交易数量。存储树根哈希值是指智能合约的合约存储树的根哈希值。世界状态树中可以不直接存储状态信息,而是存储按照RLP(Recursive-LengthPrefix,递归的长度前缀)对状态信息进行编码所得到的编码值。如图4中,展示了世界状态树,世界状态树的叶子节点存储的是智能合约的账户的状态信息,图4中展示了一个世界状态树的叶子节点对应的状态信息,即图4中的“账户状态”,“账户状态”中的存储根即存储树根哈希值,代码哈希即智能合约代码的哈希值。
在区块链中,区块头包含世界状态树的根节点哈希值即世界状态树的根哈希值。区块头还包括交易树的根哈希值和收据树的根哈希值。交易树和收据树例如可以是Merkle树或MPT树。每当有新的交易被打包进区块,区块链的状态就会得到更新。如图4所示,区块的区块头中存储了世界状态树的根节点哈希值、收据树的根节点哈希值、交易树的根节点哈希值。根节点哈希值即根哈希值,是对根据点进行哈希计算得到的哈希值。每个智能合约都有对应的合约存储树,合约存储树用于存储智能合约的合约变量和合约变量的值。
具体地,世界状态树为MPT树。区块链节点可以根据合约地址从世界状态树中查找智能合约的账户对应的状态信息,从状态信息中获取存储树根哈希值,根据存储树根哈希值查找得到该智能合约对应的合约存储树,向智能合约的合约存储树中存储合约变量的值。
在一些实施例中,区块链节点在采用第二存储方式布署智能合约的过程中,会初始化智能合约的状态信息,还会为该智能合约创建一个空的合约存储树,该合约存储树的根哈希值为空。在智能合约执行后,将智能合约的合约变量以及值存储至合约存储树中。合约存储树为MPT。区块链节点将合约变量的第一变量标识与合约变量的值(可以是RLP编码表示)组成的键值对存储到MPT中。当智能合约中的合约变量发生更改时,合约变量的合约存储树会随着更新,从而存储树根哈希值也随之变化。MPT树中包括四种类型的节点,分别为空节点、叶节点、扩展节点和分支节点。空节点是指没有数据的节点,用于表示合约存储树是空树的场景。叶节点为保存单个键值对的节点,键值对中的键为叶节点的路径。扩展节点是指包含一个共享路径前缀的子树的树根,扩展节点包含路径和对应的子节点。分支节点是具有17个元素(16个子节点和1个可选的附加节点)的节点。当路径在该节点分叉时,分支节点起到分配路径的作用。子节点可以是另一个分支节点、扩展节点或叶节点。
在一些实施例中,区块链节点根据合约地址查找到合约存储树后,在合约存储树中未存储该合约变量的值的情况下,区块链节点可以根据该第一变量标识,向智能合约的合约存储树中存储合约变量的值。具体地,区块链节点可以在合约存储树中插入节点,插入的该节点的路径由第一变量标识确定,插入的该节点存储了合约变量的值。从而可以通过第一变量标识从合约存储树中查找合约变量的值。
在一些实施例中,合约存储树为MPT树。向MPT树中插入节点即插入新的合约变量和值的过程如下:生成键值对:首先需要创建存储智能合约变量的键值对。键由变量位置的哈希值表示,值是变量的值(使用 RLP 编码)。键和值都会进一步转换为适用于 MPT 结构的格式。键转换:将原始键转换为 MPT适用的十六进制键。将原始键视为字节数组,并将每个字节扩展为两个十六进制数字,从而生成一个十六进制字符串。节点遍历与插入:进入子MPT 中,从根节点开始遍历,根据待插入键值对的键与已经存在的节点路径进行如下操作:如果遇到 空节点,直接在该位置创建一个新的叶节点,其中包含待插入的键值对。如果遇到 叶节点,比较待插入键值对的键和叶节点键的共享前缀: 如果有共享前缀,会创建一个扩展节点,并保存键的共享前缀。新的叶节点(旧叶节点和待插入键值对的叶节点)作为扩展节点的子节点。如果没有共享前缀,会创建一个 分支节点,将待插入键值对的叶节点和原叶节点分别添加为新分支节点的子节点。如果遇到 扩展节点,首先比较待插入键值对的键与扩展节点的共享前缀: 如果有共享前缀,沿着扩展节点的子节点继续遍历。如果没有共享前缀,将扩展节点替换为 分支节点,并将待插入的键值对的叶节点插入到新分支节点的相应位置。如果遇到 分支节点,将要插入的键与分支节点对应子树上的路径进行比较,并沿着相应路径继续递归遍历,直到找到合适的插入位置。插入完成后,MPT 的节点类型和组织结构可能会发生变化。在插入过程中,会有新的节点创建和现有节点的更新。此外,当从根节点到叶节点的路径发生修改时,需要更新沿途节点的哈希值。这样就完成了向智能合约的子 MPT 中插入新变量及值的过程。
在MPT树中查找合约变量的方法在 MPT(Merkle Patricia Tree)中查找智能合约的变量可以通过以下步骤进行:查找键的生成:为查找指定智能合约变量,首先将变量名或位置的哈希值视为字节数组,再将每个字节扩展为两个十六进制数字,生成对应的十六进制字符串作为查找键。根节点开始:从子 MPT 的根节点开始遍历。子 MPT 的根哈希值在合约账户信息中可以找到,字段名为存储根(Storage Root)。遍历 MPT:沿着目标键与节点路径的匹配情况,遍历 MPT 的节点。在遍历过程中:遇到空节点,表示查找的变量不存在。返回空结果或错误提示。遇到叶节点,检查叶节点的键是否与目标键匹配。匹配则返回叶节点的值(对于智能合约变量需要解码 RLP 编码),否则表示查找的变量不存在,返回空结果或错误提示。遇到扩展节点,检查目标键与扩展节点的共享路径是否匹配。匹配则继续沿着扩展节点的子节点遍历,否则表示查找的变量不存在,返回空结果或错误提示。遇到分支节点,根据目标键的下一个十六进制数字选择与其相应的子节点,继续沿着子节点进行遍历。返回结果:如果查找的过程中有匹配的叶节点找到,则返回叶节点的值作为查找结果;否则返回空结果或错误提示,表示合约中不存在该变量。这样,通过遍历子 MPT 的节点并根据目标键与节点路径的匹配关系进行查找,可以找到智能合约中的指定变量。
上述区块链数据处理方法中,获取针对区块链系统的智能合约中合约变量的存储请求,存储请求中包括智能合约的合约地址和合约变量的第一变量标识,第一变量标识用于在智能合约中唯一标识合约变量,确定智能合约的存储方式,在智能合约的存储方式为第一存储方式的情况下,基于智能合约的合约地址和合约变量的第一变量标识生成合约变量的第二变量标识,存储第二变量标识和合约变量的值组成的键值对,在智能合约的存储方式为第二存储方式的情况下,根据智能合约的合约地址和第一变量标识,向智能合约的合约存储树中存储合约变量的值。由于支持键值对的存储方式和合约存储树的存储方式,且键值对的存储方式简单便捷,提升了存储的灵活性并节省了存储空间。另外,由于键值对的存储方式可以提高存储效率,从而提高了合约执行性能。
在一些实施例中,确定智能合约的存储方式包括:确定智能合约的布署方式;在智能合约的布署方式为指定布署方式的情况下,确定智能合约的存储方式为第一存储方式;在智能合约的布署方式为非指定布署方式的情况下,确定智能合约的存储方式为第二存储方式。
其中,布署方式划分为指定布署方式和非指定布署方式。指定布署方式是采用指定布署合约进行合约布署的方式。非指定布署方式是指采用指定布署合约之外的方法进行合约布署的方式。非指定布署方式可以是指定布署方式之外的任意的布署方式。智能合约所采用的布署方式可以是根据业务特征确定的。例如,对于需要长时间保存历史记录的业务,可以选用非指定布署方式,对于不需要保存历史记录的业务,可以采用指定布署方式。
区块链节点中可以存储有多个布署合约,多个是指至少两个,布署合约用于布署智能合约。该多个布署合约包括该指定布署合约。区块链节点中的智能合约可以是通过指定布署合约布署的,也可以是通过指定布署合约之外的布署合约布署的。
具体地,区块链节点中可以存储有该指定布署合约对应的智能合约集合,指定布署合约对应的智能合约集合中存储的智能合约,是由该指定布署合约所布署的。智能合约集合中的智能合约通过合约地址唯一识别。区块链节点响应于针对智能合约中合约变量的存储请求,判断该智能合约是否在指定布署合约对应的智能合约集合中,若在,则确定该智能合约的布署方式为该指定布署方式,反之,则确定该智能合约的布署方式为非指定布署方式。
在一些实施例中,智能合约的布署方式,用于确定合约变量对应的存储结构。存储结构划分为键值对存储结构和树存储结构。键值对存储结构也可以称为KV存储结构,KV中的K为key(键)的缩写,V为value(值)的缩写。若以键值对存储结构存储,则将第二变量标识与合约变量的值构成键值对并存储。若以树存储结构存储合约变量以及合约变量的值,则将合约变量生成树路径,将合约变量生成树路径上的叶子节点的值存储为该合约变量的值。树存储结构包括但不限于是字典树(trie树)、默克尔树或MPT(Merkle Patricia Trie,默克尔前缀树)树。
在一些实施例中,区块链节点中的指定布署合约可以是存储在区块链节点的数据库中的。如图5所示,展示了区块链节点的系统架构图,指定布署合约可以是区块链节点的数据库中的“KV存储合约工厂”提供的,“KV存储合约”是指通过指定布署方式所布署的合约。“KV存储合约工厂”中的“布署合约(待布署合约的字节码)”中的“布署合约”是指指定布署合约,“待布署合约的字节码”是指待布署的智能合约的字节码,即指定布署合约的输入数据为智能合约的字节码。智能合约编写好后需要通过编译器编译后才能在虚拟机上运行,智能合约的字节码是指智能合约的编译结果。虚拟机是指区块链节点中用于执行合约虚拟机。如图5中,区块链节点中存在虚拟机。“KV存储合约工厂”还提供了查询通过指定布署合约所布署的智能合约的功能,例如,“KV存储合约工厂”中的“查询KV存储合约()”,用于查询通过指定布署合约所布署的智能合约。
本实施例中,通过布署方式实现了不同的存储方式,提高了实现不同存储方式的效率。
在一些实施例中,确定智能合约的布署方式包括:确定智能合约的布署方式标记信息;布署方式标记信息用于标记布署方式;基于布署方式标记信息确定智能合约的布署方式。
其中,布署方式标记信息用于标记布署方式,指定布署方式和非指定布署方式对应的布署方式标记信息不同,例如,指定布署方式的布署方式标记信息为第一布署方式标记信息,非指定布署方式的布署方式标记信息为第二布署方式标记信息。
具体地,区块链节点在确定智能合约的布署方式标记信息为第一布署方式标记信息的情况下,确定智能合约的布署方式为指定布署方式。区块链节点在确定智能合约的布署方式标记信息为第二布署方式标记信息的情况下,确定智能合约的布署方式为非指定布署方式。
本实施例中,通过布署方式标记信息可以快速的确定布署方式,提高了确定布署方式的效率。
在一些实施例中,基于智能合约的合约地址和合约变量的第一变量标识生成合约变量的第二变量标识包括:将智能合约的合约地址与合约变量的第一变量标识进行拼接;基于拼接的结果确定合约变量的第二变量标识。
具体地,区块链节点可以将智能合约的合约地址与合约变量的第一变量标识进行拼接,得到拼接值。区块链节点可以将拼接值作为合约变量的第二变量标识。第二变量标识用于唯一识别合约变量。
在一些实施例中,区块链节点可以将智能合约的合约地址与合约变量的第一变量标识进行拼接,得到拼接值。区块链节点可以对该拼接值进行哈希计算,将计算出的哈希值作为合约变量的第二变量标识。
本实施例中,将智能合约的合约地址与合约变量的第一变量标识进行拼接;基于拼接的结果确定合约变量的第二变量标识,从而可以使得第二变量标识可以唯一识别合约变量。
在一些实施例中,存储第二变量标识和合约变量的值组成的键值对包括:确定当前区块的区块标识;当前区块是指处于生成阶段的区块;存储请求,是在生成当前区块的过程中触发的;确定区块标识对应的块缓存,将第二变量标识和合约变量的值组成的键值对,存储至区块标识对应的块缓存中;在当前区块已成功生成的情况下,将区块标识对应的块缓存中的数据存储至数据库;块缓存中的数据,包括第二变量标识和合约变量的值组成的键值对。
其中,当前区块是指正在生成的区块。区块标识是指区块的哈希值,在生成当前区块的过程中,若当前区块发生变化,则当前区块的区块标识也会随着变化。当前区块的块缓存用于存储当前区块的相关数据,当前区块的相关数据包括第二变量标识和合约变量的值组成的键值对,还可以包括当前区块、当前区块对应的交易树和收据树。块缓存中的数据,包括第二变量标识和合约变量的值组成的键值对。
具体地,区块链节点可以将第二变量标识和合约变量的值组成的键值对,存储至区块标识对应的块缓存中。在当前区块已成功生成的情况下,区块链节点可以将第二变量标识和合约变量的值组成的键值对存储至数据库。
本实施例中,将第二变量标识和合约变量的值组成的键值对,存储至区块标识对应的块缓存中,即先存储至缓存中再存储至数据库中,提高了数据库中数据的正确性。
在一些实施例中,在当前区块已成功生成的情况下,将区块标识对应的块缓存中的数据存储至数据库包括:在当前区块已成功生成的情况下,等待针对当前区块的上链指示信息;在获取到针对当前区块的上链指示信息的情况下,将区块标识对应的块缓存中的数据存储至数据库。
其中,上链指示信息用于指示将生成的当前区块存储至区块链上。需要说明的是,区块链节点中生成的区块并不一定都可以存储至区块链上的。
具体地,区块链节点在获取到针对当前区块的上链指示信息的情况下,可以将区块标识对应的块缓存中的数据存储至数据库对应的缓存中,从数据库对应的缓存中读取存储的数据并存储至数据库中。
本实施例中,在获取到针对当前区块的上链指示信息的情况下,将区块标识对应的块缓存中的数据存储至数据库,提高了对数据库更新的准确度。
在一些实施例中,块缓存属于延迟刷盘缓存;方法还包括:确定当前区块的块高得到参考块高;延迟刷盘缓存中存储有参考块高对应的区块标识集合;区块标识集合中的区块标识代表的待上链区块的块高为参考块高;延迟刷盘缓存中包括区块标识集合中的每个区块标识分别对应的块缓存;将当前区块的区块标识加入参考块高对应的区块标识集合中;方法还包括:在将区块标识对应的块缓存中的数据存储至数据库之后,将参考块高中每个区块标识分别对应的块缓存中的数据进行删除。
其中,当前区块的块高,是指当前区块的高度,即是指在区块链中当前区块与创世区块之间的块数。由于当前区块中存储有父区块的哈希值,故在将当前区块上链之前,当前区块的块高是已知的。参考块高是指当前区块的块高。区块标识集合中的区块标识为待上链区块的区块标识。待上链区块是指已经生成,但还没有得到上链指示信息的区块。区块标识集合中的区块标识代表的待上链区块的块高为参考块高,例如,区块标识集合=(区块1的标识, 区块2的标识, 区块3的标识),则区块1、区块2和区块3的块高均为参考块高。
具体地,在获取到针对当前区块的上链指示信息之前,区块链节点可以确定当前区块的块高得到参考块高,将当前区块的区块标识加入参考块高对应的区块标识集合中。在将当前区块的区块标识对应的块缓存中的数据存储至数据库之后,区块链节点,将参考块高中每个区块标识分别对应的块缓存中的数据进行删除。
在一些实施例中,在将当前区块的区块标识对应的块缓存中的数据存储至数据库之后,区块链节点将参考块高对应的区块标识集合从延迟刷盘缓存中删除。如图6所示,“块高1:[区块a的标识,区块b的标识]”为块高1对应的区块标识集合,若当前区块为区块a,则在将区块a对应的块缓存中的数据存储至数据库之后,将“区块a的标识:块缓存”、“区块b的标识:块缓存”和“块高1:[区块a的标识,区块b的标识]”删除。如图3中,将数据存储至延迟刷盘缓存中,将延迟落盘数据中已确认块的数据刷入账本,并将其从延迟日志及延迟缓存中清除。
本实施例中,在将当前区块的区块标识对应的块缓存中的数据存储至数据库之后,将参考块高中每个区块标识分别对应的块缓存中的数据进行删除,从而对于存在块高一致的区块的情况下,即在存储分支的情况下,可以提高区块链数据的处理准确度。
在一些实施例中,方法还包括:将第二变量标识和合约变量的值组成的键值对存储至延迟刷盘日志中;响应于重启,基于延迟刷盘日志中的数据对区块标识对应的块缓存进行数据恢复。
其中,块缓存用于存储未上链的区块的相关数据,未上链的区块包括正在生成的区块、已生成但未指示上链的区块。区块的相关数据包括第二变量标识和合约变量的值组成的键值对,还可以包括当前区块、当前区块对应的交易树和收据树。延迟刷盘缓存中的数据可以是从延迟刷盘日志中获取的。
具体地,区块链节点可以将第二变量标识和合约变量的值组成的键值对存储至延迟刷盘日志中。例如图3中将数据保存到延迟刷盘日志中,并将数据保存至延迟刷盘缓存中。
本实施例中,延迟刷盘缓存中的数据可以是从延迟刷盘日志中获取的,从而在延迟刷盘缓存中的数据丢失的情况下,可以从延迟刷盘日志中恢复,提高了数据的安全性。
在一些实施例中,延迟刷盘日志中存储有参考块高对应的区块标识集合;方法还包括:在将当前区块的区块标识对应的块缓存中的数据存储至数据库之后,将延迟刷盘日志中存储的参考块高对应的区块标识集合删除,并将延迟刷盘日志中存储的当前区块的相关数据删除。
其中, 当前区块的相关数据包括第二变量标识和合约变量的值组成的键值对,还可以包括当前区块、当前区块对应的交易树和收据树。
具体地,区块链节点响应于异常重启,基于延迟刷盘日志中数据对延迟刷盘缓存进行数据恢复。
本实施例中,在延迟刷盘缓存中的数据丢失的情况下,可以从延迟刷盘日志中恢复,提高了数据的安全性。
在一些实施例中,获取针对智能合约中目标合约变量的访问请求;基于智能合约的合约地址和目标合约变量的第一变量标识生成目标合约变量的第二变量标识;以目标合约变量的第二变量标识为键对目标合约变量进行访问。
其中,目标合约变量可以为智能合约中的任一合约变量。在执行智能合约的过程中,区块链节点可以读取智能合约中合约变量的值。智能合约的键值对集合中存储有各合约变量的键值对,合约变量的键值对,是以合约变量的第二变量标识为键,以合约变量的值为值构成的键值。
具体地,区块链节点查询以目标合约变量的第二变量标识为键的键值对,从查询到的键值对中读取值。区块链节点可以先从延迟刷盘缓存中查,在未查找到的情况下,去数据库中查。
本实施例中,以目标合约变量的第二变量标识为键对目标合约变量进行访问,提高了访问效率。
在一些实施例中,以目标合约变量的第二变量标识为键对目标合约变量进行访问包括:在延迟刷盘缓存中,以目标合约变量的第二变量标识为键对目标合约变量进行访问;延迟刷盘缓存包括待上链区块的块缓存;以目标合约变量的第二变量标识为键,在待上链区块的块缓存中查询目标合约变量的值;在未查找到的情况下,以目标合约变量的第二变量标识为键,在数据库中对目标合约变量进行访问。
其中,延迟刷盘缓存包括待上链区块的块缓存。待上链区块的块缓存中,包括与生成该待上链区块相关的智能合约的合约变量的变量信息。合约变量的变量信息包括合约变量的键值对。
具体地,区块链节点以目标合约变量的第二变量标识为键,从待上链区块的块缓存中的各个键值对中,查询对应的键值对,在查找到的情况下,从查找到的键值对中读取值。在未查找到的情况下,以目标合约变量的第二变量标识为键,在数据库中对目标合约变量进行访问。
在一些实施例中,在生成当前区块的过程中,区块链节点可以获取当前区块的前一个区块(即父区块)的哈希值,从延迟刷盘缓存中查找父区块的哈希值对应的数据,例如图7中“从前一个块的哈希值为键从延迟刷盘数据中查找数据”。在查找到的情况下,从查找到的数据中读取对应的数据。在未查找到父区块的哈希值对应的数据的情况下,判断父区块的前一个区块的数据是否在延迟刷盘缓存中,例如图7中,前块数据在延迟刷盘缓存中,若在则继续从延迟刷盘缓存中查找数据,依次类推,若未在延迟刷盘缓存中查找到对应的数据,则从数据库中读取数据。
本实施例中,在未查找到的情况下,以目标合约变量的第二变量标识为键,在数据库中对目标合约变量进行访问,提高了查询效率。
在一些实施例中,根据智能合约的合约地址和第一变量标识,向智能合约的合约存储树中存储合约变量的值包括:根据智能合约的合约地址从世界状态树中,查找智能合约的账户对应的状态信息;从状态信息中获取存储树根哈希值;根据存储树根哈希值查找到合约存储树,向智能合约的合约存储树中存储合约变量的值。
其中,世界状态树中存储有多个智能合约分别对应的账户的状态信息。按照合约地址从世界状态树中查找到的值为对应的合约存储树的账户的状态信息。
具体地,区块链节点可以根据智能合约的合约地址从世界状态树中,查找智能合约的账户对应的状态信息,从状态信息中获取存储树根哈希值,根据存储树根哈希值查找到合约存储树,向智能合约的合约存储树中存储合约变量的值。如图3中源于MPT存储的流程,找到合约存储树后,将key(第一变量标识)转换成MPT树路径,基于MPT树路径将数据插入合约存储树中。
在一些实施例中,区块链节点可以根据智能合约的合约地址从世界状态树中,查找智能合约的账户对应的状态信息,从状态信息中获取存储树根哈希值,根据存储树根哈希值查找到合约存储树,从智能合约的合约存储树中读取合约变量的值。如图7中的关于MPT树查询的过程,将键(第一变量标识)转换成MPT树路径,基于MPT树路径从合约存储树中查找数据。
在一些实施例中,智能合约的合约变量有多个,在智能合约的存储方式为第一存储方式的情况下,针对每个合约变量,存储第二变量标识和合约变量的值组成的键值对,按照各合约变量的键值对中的键对各合约变量的键值对进行排序,排序后,计算每个键值对的哈希值,将各个键值对的哈希值进行拼接得到哈希拼接值,将哈希拼接值的哈希值与合约存储树的根哈希值进行拼接,对拼接的结果进行哈希计算,基于哈希计算的结果更新存储树根哈希值,存储树根哈希值的更新会使得世界状态树的根发生更新。如图5中,“KV存储合约数据存储方式”提供第一存储方式。存储树根哈希值的计算方法,用于计算存储树根哈希值,KV存储合约状态根计算用于更新世界状态树的根。
本实施例中,通过世界状态树存储合约存储的数据,从而保留了世界状态树具有支持状态回滚、历史数据查询的功能。
在一些实施例中,如图8所示,提供了一种区块链数据处理方法,该方法可以由终端执行,还可以由终端和服务器共同执行,以该方法应用于8为例进行说明,包括以下步骤:
步骤802,获取针对区块链系统的智能合约中合约变量的存储请求。
其中,存储请求中包括智能合约的合约地址和合约变量的第一变量标识,第一变量标识用于在智能合约中唯一标识合约变量;智能合约属于区块链系统。
步骤804,判断智能合约的布署方式,在智能合约的布署方式为指定布署方式的情况下,执行步骤806,在智能合约的布署方式为非指定布署方式的情况下,执行步骤816。
步骤806,将智能合约的合约地址与合约变量的第一变量标识进行拼接,基于拼接的结果确定合约变量的第二变量标识。
步骤808,确定当前区块的区块标识,确定区块标识对应的块缓存,并确定当前区块的块高得到参考块高。
其中,当前区块是指处于生成阶段的区块;存储请求,是在生成当前区块的过程中触发的。块缓存中的数据,包括第二变量标识和合约变量的值组成的键值对。
步骤810,将第二变量标识和合约变量的值组成的键值对,存储至区块标识对应的块缓存中,将当前区块的区块标识加入参考块高对应的区块标识集合中。
步骤812,在当前区块已成功生成的情况下,等待针对当前区块的上链指示信息,在获取到针对当前区块的上链指示信息的情况下,将区块标识对应的块缓存中的数据存储至数据库。
步骤814,将参考块高中每个区块标识分别对应的块缓存中的数据、参考块高对应的区块标识集合,从延迟刷盘缓存中删除。
步骤816,根据智能合约的合约地址和第一变量标识,向智能合约的合约存储树中存储合约变量的值。
本实施例中,由于支持键值对的存储方式和合约存储树的存储方式,且键值对的存储方式简单便捷,提升了存储的灵活性并节省了存储空间。另外,由于键值对的存储方式可以提高存储效率,从而提高了合约执行性能。由于支持合约存储树进行存储,从而保留了世界状态树具有支持状态回滚、历史数据查询的功能。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的区块链数据处理方法的区块链数据处理装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个区块链数据处理装置实施例中的具体限定可以参见上文中对于区块链数据处理方法的限定,在此不再赘述。
在一些实施例中,如图9所示,提供了一种区块链数据处理装置,包括:存储请求获取模块902、存储方式确定模块904、第一存储模块906和第二存储模块908,其中:
存储请求获取模块902,用于获取针对区块链系统的智能合约中合约变量的存储请求;存储请求中包括智能合约的合约地址和合约变量的第一变量标识,第一变量标识用于在智能合约中唯一标识合约变量。
存储方式确定模块904,用于确定智能合约的存储方式。
第一存储模块906,用于在智能合约的存储方式为第一存储方式的情况下,基于智能合约的合约地址和合约变量的第一变量标识生成合约变量的第二变量标识,存储第二变量标识和合约变量的值组成的键值对。
第二存储模块908,用于在智能合约的存储方式为第二存储方式的情况下,根据智能合约的合约地址和第一变量标识,向智能合约的合约存储树中存储合约变量的值。
在一些实施例中,存储方式确定模块904,还用于确定智能合约的布署方式;在智能合约的布署方式为指定布署方式的情况下,确定智能合约的存储方式为第一存储方式;在智能合约的布署方式为非指定布署方式的情况下,确定智能合约的存储方式为第二存储方式。
在一些实施例中,存储方式确定模块904,还用于确定智能合约的布署方式标记信息;布署方式标记信息用于标记布署方式;基于布署方式标记信息确定智能合约的布署方式。
在一些实施例中,第一存储模块906,还用于将智能合约的合约地址与合约变量的第一变量标识进行拼接;基于拼接的结果确定合约变量的第二变量标识。
在一些实施例中,第一存储模块906,还用于确定当前区块的区块标识;当前区块是指处于生成阶段的区块;存储请求,是在生成当前区块的过程中触发的;确定区块标识对应的块缓存,将第二变量标识和合约变量的值组成的键值对,存储至区块标识对应的块缓存中;在当前区块已成功生成的情况下,将区块标识对应的块缓存中的数据存储至数据库;块缓存中的数据,包括第二变量标识和合约变量的值组成的键值对。
在一些实施例中,第一存储模块906,还用于在当前区块已成功生成的情况下,等待针对当前区块的上链指示信息;在获取到针对当前区块的上链指示信息的情况下,将区块标识对应的块缓存中的数据存储至数据库。
在一些实施例中,块缓存属于延迟刷盘缓存;装置,还用于确定当前区块的块高得到参考块高;延迟刷盘缓存中存储有参考块高对应的区块标识集合;区块标识集合中的区块标识代表的待上链区块的块高为参考块高;延迟刷盘缓存中包括区块标识集合中的每个区块标识分别对应的块缓存;将当前区块的区块标识加入参考块高对应的区块标识集合中;在将当前区块的区块标识对应的块缓存中的数据存储至数据库之后,将参考块高中每个区块标识分别对应的块缓存中的数据进行删除。
在一些实施例中,装置,还用于将第二变量标识和合约变量的值组成的键值对存储至延迟刷盘日志中;响应于重启,基于延迟刷盘日志中的数据对区块标识对应的块缓存进行数据恢复。
在一些实施例中,延迟刷盘日志中存储有参考块高对应的区块标识集合;装置还用于:在将当前区块的区块标识对应的块缓存中的数据存储至数据库之后,将延迟刷盘日志中存储的参考块高对应的区块标识集合删除,并将延迟刷盘日志中存储的当前区块的相关数据删除。
在一些实施例中,装置,还用于获取针对智能合约中目标合约变量的访问请求;基于智能合约的合约地址和目标合约变量的第一变量标识生成目标合约变量的第二变量标识;以目标合约变量的第二变量标识为键对目标合约变量进行访问。
在一些实施例中,装置,还用于在延迟刷盘缓存中,以目标合约变量的第二变量标识为键对目标合约变量进行访问;延迟刷盘缓存包括待上链区块的块缓存;以目标合约变量的第二变量标识为键,在待上链区块的块缓存中查询目标合约变量的值;在未查找到的情况下,以目标合约变量的第二变量标识为键,在数据库中对目标合约变量进行访问。
在一些实施例中,第二存储模块908,还用于根据智能合约的合约地址从世界状态树中,查找智能合约的账户对应的状态信息;从状态信息中获取存储树根哈希值;根据存储树根哈希值查找到合约存储树,向智能合约的合约存储树中存储合约变量的值。
上述区块链数据处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一些实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图10所示。该计算机设备包括处理器、存储器、输入/输出接口(Input/Output,简称I/O)和通信接口。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储区块链数据处理方法中涉及到的数据。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种区块链数据处理方法。
在一些实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图11所示。该计算机设备包括处理器、存储器、输入/输出接口、通信接口、显示单元和输入装置。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口、显示单元和输入装置通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、移动蜂窝网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种区块链数据处理方法。该计算机设备的显示单元用于形成视觉可见的画面,可以是显示屏、投影装置或虚拟现实成像装置,显示屏可以是液晶显示屏或电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图10和图11中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一些实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述区块链数据处理方法中的步骤。
在一些实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述区块链数据处理方法中的步骤。
在一些实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述区块链数据处理方法中的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive RandomAccess Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(PhaseChange Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(StaticRandom Access Memory,SRAM)或动态随机存取存储器(Dynamic Random AccessMemory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (24)
1.一种区块链数据处理方法,其特征在于,所述方法包括:
在生成当前区块的过程中,获取针对区块链系统的智能合约中合约变量的存储请求;所述存储请求中包括所述智能合约的合约地址和所述合约变量的第一变量标识,所述第一变量标识用于在所述智能合约中唯一标识所述合约变量;
确定所述智能合约的存储方式;
在所述智能合约的存储方式为第一存储方式的情况下,基于所述智能合约的合约地址和所述合约变量的第一变量标识生成所述合约变量的第二变量标识,确定所述当前区块的区块标识,确定所述区块标识对应的块缓存,将所述第二变量标识和所述合约变量的值组成的键值对,存储至所述区块标识对应的块缓存中,在当前区块已成功生成的情况下,将所述区块标识对应的块缓存中的数据存储至数据库;
在所述智能合约的存储方式为第二存储方式的情况下,根据所述智能合约的合约地址和所述第一变量标识,向所述智能合约的合约存储树中存储所述合约变量的值。
2.根据权利要求1所述的方法,其特征在于,所述确定所述智能合约的存储方式包括:
确定所述智能合约的布署方式;
在所述智能合约的布署方式为指定布署方式的情况下,确定所述智能合约的存储方式为第一存储方式;
在所述智能合约的布署方式为非指定布署方式的情况下,确定所述智能合约的存储方式为第二存储方式。
3.根据权利要求2所述的方法,其特征在于,所述确定所述智能合约的布署方式包括:
确定所述智能合约的布署方式标记信息;所述布署方式标记信息用于标记布署方式;
基于所述布署方式标记信息确定所述智能合约的布署方式。
4.根据权利要求1所述的方法,其特征在于,所述基于所述智能合约的合约地址和所述合约变量的第一变量标识生成所述合约变量的第二变量标识包括:
将所述智能合约的合约地址与所述合约变量的第一变量标识进行拼接;
基于拼接的结果确定所述合约变量的第二变量标识。
5.根据权利要求1所述的方法,其特征在于,所述在当前区块已成功生成的情况下,将所述区块标识对应的块缓存中的数据存储至数据库包括:
在当前区块已成功生成的情况下,等待针对当前区块的上链指示信息;
在获取到针对当前区块的上链指示信息的情况下,将所述区块标识对应的块缓存中的数据存储至数据库。
6.根据权利要求5所述的方法,其特征在于,所述块缓存属于延迟刷盘缓存;所述方法还包括:
确定当前区块的块高得到参考块高;所述延迟刷盘缓存中存储有所述参考块高对应的区块标识集合;所述区块标识集合中的区块标识代表的待上链区块的块高为所述参考块高;所述延迟刷盘缓存中包括所述区块标识集合中的每个区块标识分别对应的块缓存;
将当前区块的区块标识加入所述参考块高对应的区块标识集合中;
所述方法还包括:
在将当前区块的区块标识对应的块缓存中的数据存储至数据库之后,将所述参考块高中每个区块标识分别对应的块缓存中的数据进行删除。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将所述第二变量标识和所述合约变量的值组成的键值对存储至延迟刷盘日志中;
响应于重启,基于延迟刷盘日志中的数据对所述区块标识对应的块缓存进行数据恢复。
8.根据权利要求7所述的方法,其特征在于,所述延迟刷盘日志中存储有参考块高对应的区块标识集合,所述参考块高是指当前区块的块高;所述方法还包括:
在将当前区块的区块标识对应的块缓存中的数据存储至数据库之后,将所述延迟刷盘日志中存储的所述参考块高对应的区块标识集合删除,并将所述延迟刷盘日志中存储的当前区块的相关数据删除。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取针对所述智能合约中目标合约变量的访问请求;
基于所述智能合约的合约地址和所述目标合约变量的第一变量标识生成所述目标合约变量的第二变量标识;
以所述目标合约变量的第二变量标识为键对所述目标合约变量进行访问。
10.根据权利要求9所述的方法,其特征在于,所述以所述目标合约变量的第二变量标识为键对所述目标合约变量进行访问包括:
在延迟刷盘缓存中,以所述目标合约变量的第二变量标识为键对所述目标合约变量进行访问;所述延迟刷盘缓存包括待上链区块的块缓存;
以所述目标合约变量的第二变量标识为键,在待上链区块的块缓存中查询所述目标合约变量的值;
在未查找到的情况下,以所述目标合约变量的第二变量标识为键,在数据库中对所述目标合约变量进行访问。
11.根据权利要求1至10任意一项所述的方法,其特征在于,所述根据所述智能合约的合约地址和所述第一变量标识,向所述智能合约的合约存储树中存储所述合约变量的值包括:
根据所述智能合约的合约地址从世界状态树中,查找所述智能合约的账户对应的状态信息;
从所述状态信息中获取存储树根哈希值;
根据所述存储树根哈希值查找到所述合约存储树,向所述智能合约的合约存储树中存储所述合约变量的值。
12.一种区块链数据处理装置,其特征在于,所述装置包括:
存储请求获取模块,用于在生成当前区块的过程中,获取针对区块链系统的智能合约中合约变量的存储请求;所述存储请求中包括所述智能合约的合约地址和所述合约变量的第一变量标识,所述第一变量标识用于在所述智能合约中唯一标识所述合约变量;
存储方式确定模块,用于确定所述智能合约的存储方式;
第一存储模块,用于在所述智能合约的存储方式为第一存储方式的情况下,基于所述智能合约的合约地址和所述合约变量的第一变量标识生成所述合约变量的第二变量标识,确定所述当前区块的区块标识,确定所述区块标识对应的块缓存,将所述第二变量标识和所述合约变量的值组成的键值对,存储至所述区块标识对应的块缓存中,在当前区块已成功生成的情况下,将所述区块标识对应的块缓存中的数据存储至数据库;
第二存储模块,用于在所述智能合约的存储方式为第二存储方式的情况下,根据所述智能合约的合约地址和所述第一变量标识,向所述智能合约的合约存储树中存储所述合约变量的值。
13.根据权利要求12所述的装置,其特征在于,所述存储方式确定模块,还用于:
确定所述智能合约的布署方式;
在所述智能合约的布署方式为指定布署方式的情况下,确定所述智能合约的存储方式为第一存储方式;
在所述智能合约的布署方式为非指定布署方式的情况下,确定所述智能合约的存储方式为第二存储方式。
14.根据权利要求13所述的装置,其特征在于,所述存储方式确定模块,还用于:
确定所述智能合约的布署方式标记信息;所述布署方式标记信息用于标记布署方式;
基于所述布署方式标记信息确定所述智能合约的布署方式。
15.根据权利要求12所述的装置,其特征在于,所述第一存储模块,还用于:
将所述智能合约的合约地址与所述合约变量的第一变量标识进行拼接;
基于拼接的结果确定所述合约变量的第二变量标识。
16.根据权利要求12所述的装置,其特征在于,所述第一存储模块,还用于:
在当前区块已成功生成的情况下,等待针对当前区块的上链指示信息;
在获取到针对当前区块的上链指示信息的情况下,将所述区块标识对应的块缓存中的数据存储至数据库。
17.根据权利要求16所述的装置,其特征在于,所述块缓存属于延迟刷盘缓存;所述装置还用于:
确定当前区块的块高得到参考块高;所述延迟刷盘缓存中存储有所述参考块高对应的区块标识集合;所述区块标识集合中的区块标识代表的待上链区块的块高为所述参考块高;所述延迟刷盘缓存中包括所述区块标识集合中的每个区块标识分别对应的块缓存;
将当前区块的区块标识加入所述参考块高对应的区块标识集合中;
在将当前区块的区块标识对应的块缓存中的数据存储至数据库之后,将所述参考块高中每个区块标识分别对应的块缓存中的数据进行删除。
18.根据权利要求12所述的装置,其特征在于,所述装置还用于:
将所述第二变量标识和所述合约变量的值组成的键值对存储至延迟刷盘日志中;
响应于重启,基于延迟刷盘日志中的数据对所述区块标识对应的块缓存进行数据恢复。
19.根据权利要求18所述的装置,其特征在于,所述延迟刷盘日志中存储有参考块高对应的区块标识集合,所述参考块高是指当前区块的块高;所述装置还用于:
在将当前区块的区块标识对应的块缓存中的数据存储至数据库之后,将所述延迟刷盘日志中存储的所述参考块高对应的区块标识集合删除,并将所述延迟刷盘日志中存储的当前区块的相关数据删除。
20.根据权利要求12所述的装置,其特征在于,所述装置还用于:
获取针对所述智能合约中目标合约变量的访问请求;
基于所述智能合约的合约地址和所述目标合约变量的第一变量标识生成所述目标合约变量的第二变量标识;
以所述目标合约变量的第二变量标识为键对所述目标合约变量进行访问。
21.根据权利要求20所述的装置,其特征在于,所述装置还用于:
在延迟刷盘缓存中,以所述目标合约变量的第二变量标识为键对所述目标合约变量进行访问;所述延迟刷盘缓存包括待上链区块的块缓存;
以所述目标合约变量的第二变量标识为键,在待上链区块的块缓存中查询所述目标合约变量的值;
在未查找到的情况下,以所述目标合约变量的第二变量标识为键,在数据库中对所述目标合约变量进行访问。
22.根据权利要求12至21任意一项所述的装置,其特征在于,所述第二存储模块,还用于:
根据所述智能合约的合约地址从世界状态树中,查找所述智能合约的账户对应的状态信息;
从所述状态信息中获取存储树根哈希值;
根据所述存储树根哈希值查找到所述合约存储树,向所述智能合约的合约存储树中存储所述合约变量的值。
23.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至11中任一项所述的方法的步骤。
24.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至11中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310959009.4A CN116700628B (zh) | 2023-08-01 | 2023-08-01 | 区块链数据处理方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310959009.4A CN116700628B (zh) | 2023-08-01 | 2023-08-01 | 区块链数据处理方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116700628A CN116700628A (zh) | 2023-09-05 |
CN116700628B true CN116700628B (zh) | 2024-02-02 |
Family
ID=87837746
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310959009.4A Active CN116700628B (zh) | 2023-08-01 | 2023-08-01 | 区块链数据处理方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116700628B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111770113A (zh) * | 2020-08-31 | 2020-10-13 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法、区块链节点和节点设备 |
CN112261163A (zh) * | 2020-12-21 | 2021-01-22 | 支付宝(杭州)信息技术有限公司 | 一种区块链系统中的状态存储方法及区块链系统、节点 |
WO2022148390A1 (zh) * | 2020-06-05 | 2022-07-14 | 支付宝(杭州)信息技术有限公司 | 一种在区块链中部署、更新、调用智能合约的方法 |
CN116167099A (zh) * | 2022-12-30 | 2023-05-26 | 蚂蚁区块链科技(上海)有限公司 | 区块链系统中的数据访问方法和区块链节点 |
CN116308347A (zh) * | 2023-02-28 | 2023-06-23 | 蚂蚁区块链科技(上海)有限公司 | 区块链中的交易分组方法和区块链节点 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111630830B (zh) * | 2020-04-15 | 2023-07-04 | 支付宝(杭州)信息技术有限公司 | 账户模型下的分布式区块链数据存储 |
-
2023
- 2023-08-01 CN CN202310959009.4A patent/CN116700628B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022148390A1 (zh) * | 2020-06-05 | 2022-07-14 | 支付宝(杭州)信息技术有限公司 | 一种在区块链中部署、更新、调用智能合约的方法 |
CN111770113A (zh) * | 2020-08-31 | 2020-10-13 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法、区块链节点和节点设备 |
CN112261163A (zh) * | 2020-12-21 | 2021-01-22 | 支付宝(杭州)信息技术有限公司 | 一种区块链系统中的状态存储方法及区块链系统、节点 |
CN116167099A (zh) * | 2022-12-30 | 2023-05-26 | 蚂蚁区块链科技(上海)有限公司 | 区块链系统中的数据访问方法和区块链节点 |
CN116308347A (zh) * | 2023-02-28 | 2023-06-23 | 蚂蚁区块链科技(上海)有限公司 | 区块链中的交易分组方法和区块链节点 |
Also Published As
Publication number | Publication date |
---|---|
CN116700628A (zh) | 2023-09-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110275884B (zh) | 数据存储方法及节点 | |
CN107577427B (zh) | 用于区块链系统的数据迁移方法、设备和存储介质 | |
CN112328435B (zh) | 目标数据备份和恢复的方法、装置、设备及存储介质 | |
CN109582473A (zh) | 基于区块链的跨链数据访问方法和装置 | |
EP4070221A1 (en) | Cross-partition calls in partitioned, tamper-evident data stores | |
CN117235285B (zh) | 融合知识图谱数据的方法及装置 | |
CN105009068A (zh) | 管理对存储数据单元的操作 | |
CN113590144B (zh) | 一种依赖处理方法及装置 | |
CN111835808A (zh) | 数据存储方法及装置、数据读取方法及装置、存储介质 | |
CN112269839B (zh) | 区块链中的数据存储方法、装置、电子设备及存储介质 | |
CN114185575A (zh) | 一种业务系统升级方法和装置 | |
CN105843809B (zh) | 数据处理方法和装置 | |
CN113077260A (zh) | 基于区块链的数据访问方法、装置及电子设备 | |
CN116700628B (zh) | 区块链数据处理方法、装置、计算机设备和存储介质 | |
CN112241474A (zh) | 信息处理方法、装置和存储介质 | |
EP4394619A1 (en) | Data processing method and apparatus based on blockchain, and device and readable storage medium | |
CN111488343A (zh) | 基于业务数据区块链的电商数据上链方法及装置 | |
CN115221559A (zh) | 数据账户的访问授权方法及装置 | |
CN115203746A (zh) | 数据账户的访问授权方法及装置 | |
CN116542668A (zh) | 一种基于区块链的数据处理方法、设备及可读存储介质 | |
CN115203747A (zh) | 数据账户创建方法及装置 | |
CN112052234A (zh) | 业务数据的处理方法和装置、存储介质、电子装置 | |
CN117635081B (zh) | 数据处理方法、装置、设备及存储介质 | |
CN110889040B (zh) | 用于推送信息的方法和装置 | |
CN113641649B (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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40095351 Country of ref document: HK |