CN113010115A - 区块链节点中的数据处理方法及相关设备 - Google Patents
区块链节点中的数据处理方法及相关设备 Download PDFInfo
- Publication number
- CN113010115A CN113010115A CN202110305226.2A CN202110305226A CN113010115A CN 113010115 A CN113010115 A CN 113010115A CN 202110305226 A CN202110305226 A CN 202110305226A CN 113010115 A CN113010115 A CN 113010115A
- Authority
- CN
- China
- Prior art keywords
- data
- resident memory
- intelligent contract
- request
- contract
- 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.)
- Granted
Links
Images
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/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
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/604—Tools and structures for managing or administering access control systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- 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/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- 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]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Human Computer Interaction (AREA)
- General Health & Medical Sciences (AREA)
- Databases & Information Systems (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Automation & Control Theory (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及区块链技术领域,具体提供了一种区块链节点中的数据处理方法及相关设备,区块链节点中设置有常驻内存,该方法包括:根据区块链节点运行智能合约时所需访问数据的访问频率,将访问频率不低于设定频率阈值的数据确定为目标数据;将目标数据写入区块链节点的常驻内存中;其中,在运行目标数据所对应的第一智能合约的过程中,从常驻内存中读取目标数据,并且基于所读取到的目标数据执行第一智能合约;本方案可以缩短在运行第一智能合约过程中的数据读取时间,提高了第一智能合约的执行效率。
Description
技术领域
本申请涉及区块链技术领域,具体而言,涉及一种区块链节点中的数据处理方法及相关设备。
背景技术
智能合约是一种存储在区块链节点上的可执行的代码,该代码指定了智能合约的执行过程和处理逻辑,例如输入、输出、中间转换逻辑等。相关技术中存在智能合约在执行过程中花费的时间长,智能合约的执行效率低的问题。
发明内容
本申请的实施例提供了一种区块链节点中的数据处理方法及相关设备,以提高智能合约的执行效率。
本申请的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本申请的实践而习得。
根据本申请实施例的一个方面,提供了一种区块链节点中的数据处理方法,所述区块链节点中设置有常驻内存,所述方法包括:根据所述区块链节点运行智能合约时所需访问数据的访问频率,将访问频率不低于设定频率阈值的数据确定为目标数据;将所述目标数据写入所述区块链节点的常驻内存中;其中,在运行所述目标数据所对应的第一智能合约的过程中,从所述常驻内存中读取所述目标数据,并基于所读取到的所述目标数据执行所述第一智能合约。
根据本申请实施例的一个方面,提供了一种区块链节点中的数据处理装置,所述区块链节点中设置有常驻内存,所述装置包括:确定模块,用于根据所述区块链节点运行智能合约时所需访问数据的访问频率,将访问频率不低于设定频率阈值的数据确定为目标数据;写入模块,用于将所述目标数据写入所述区块链节点的常驻内存中;其中,在运行所述目标数据所对应的第一智能合约的过程中,从所述常驻内存中读取所述目标数据,并且基于所读取到的所述目标数据执行所述第一智能合约。
在本申请的一些实施例中,基于前述方案,写入模块,包括:运行单元,用于在所述区块链节点中运行所述第一智能合约;数据写入请求发送单元,用于基于所述第一智能合约向所述常驻内存发送数据写入请求;写入单元,用于根据所述数据写入请求将所述目标数据写入所述常驻内存中。
在本申请的一些实施例中,基于前述方案,所述数据写入请求携带所述第一智能合约的合约地址和所述目标数据的数据标识;写入单元,包括:第一组合单元,用于组合所述数据写入请求所携带的合约地址和所述数据写入请求所携带的数据标识,得到第一标识;关联存储单元,用于若所述常驻内存对应的剩余内存配额指示所述常驻内存中存在剩余内存,则将所述第一标识与所述目标数据关联存储于所述常驻内存中,并更新所述常驻内存对应的剩余内存配额。
在本申请的一些实施例中,基于前述方案,区块链节点中的数据处理装置还包括:数据读取请求发送单元,用于在所述区块链节点运行所述第一智能合约的过程中,基于所述第一智能合约向所述常驻内存发送数据读取请求,所述数据读取请求用于请求读取所述目标数据;第一读取单元,用于根据所述数据读取请求所携带的数据标识,从所述常驻内存中读取所述目标数据。
在本申请的一些实施例中,基于前述方案,所述数据读取请求还携带签名信息和所述第一智能合约的合约地址;区块链节点中的数据处理装置还包括:签名验证模块,用于在第一读取单元执行对应步骤之前,根据所述数据读取请求所携带的签名信息对所述数据读取请求所携带的合约地址进行签名验证。
在本申请的一些实施例中,基于前述方案,所述数据读取请求还携带所述第一智能合约的合约地址;第一读取单元,包括:第二组合单元,用于组合所述数据读取请求所携带的数据标识和所述数据读取请求所携带的合约地址,得到第一标识;第二读取单元,用于在所述常驻内存中读取与所述第一标识相关联的所述目标数据。
在本申请的一些实施例中,基于前述方案,数据读取请求发送单元包括:数据标识获取单元,用于获取待访问数据的数据标识;发送单元,用于若根据所述区块链节点中的第一数据存储信息确定所述待访问数据是所述目标数据,则基于所述第一智能合约向所述常驻内存发送所述数据读取请求;所述第一数据存储信息指示了所述区块链节点的常驻内存中所存储的数据。
在本申请的一些实施例中,基于前述方案,区块链节点中的数据处理装置还包括:第一读取模块,用于若根据所述区块链节点中的第二数据存储信息确定所述待访问数据存储于所述缓存中,则根据所述待访问数据的数据标识,从所述缓存中读取对应的数据;所述第二数据存储信息指示了所述区块链节点的缓存中所存储的数据。
在本申请的一些实施例中,基于前述方案,区块链节点中的数据处理装置还包括:第二读取模块,用于若根据所述第一数据存储信息和所述第二数据存储信息确定所述待访问数据未存储于所述常驻内存且未存储于所述缓存,则根据所述待访问数据的数据标识,从数据库中读取对应的数据。
在本申请的一些实施例中,基于前述方案,区块链节点中的数据处理装置还包括:访问频率获取单元,用于获取所述缓存中各项数据在设定周期内的访问频率;第一删除单元,用于根据所述缓存中各项数据的访问频率对所述缓存中的数据进行删除。
在本申请的一些实施例中,基于前述方案,区块链节点中的数据处理装置还包括:第三组合单元,用于若所述常驻内存接收到数据删除请求,组合所述数据删除请求所携带的合约地址和所述数据删除请求所携带的数据标识,得到第二标识;数据定位单元,用于根据所述第二标识在所述常驻内存中进行数据定位;第二删除单元,用于将所定位到的数据进行删除,并更新所述常驻内存对应的剩余内存配额。
在本申请的一些实施例中,基于前述方案,区块链节点中的数据处理装置还包括:数据删除请求发送单元,用于在运行第一智能合约的过程中,基于所述第一智能合约向所述常驻内存发送所述数据删除请求。
根据本申请实施例的一个方面,提供了一种电子设备,包括:处理器;存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,实现如上所述区块链节点中的数据处理方法。
根据本申请实施例的一个方面,提供了一种计算机可读存储介质,其上存储有计算机可读指令,当所述计算机可读指令被处理器执行时,实现如上所述区块链节点中的数据处理方法。
在本申请的方案中,在区块链节点中设置常驻内存的基础上,将所确定访问频率较高的目标数据写入到常驻内存中,从而,在运行目标数据所对应的第一智能合约时,直接从常驻内存中读取目标数据,而不需要与数据库进行交互,缩短了第一智能合约运行过程中读取数据的时间,提高了第一智能合约的执行效率。除此之外,将访问频次较高的目标数据写入常驻内存中,可以有效利用常驻内存中的存储空间,保证了常驻内存中数据的利用率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是根据一实施例示出的区块链系统的框图。
图2是区块链中区块的连接示意图。
图3是生成区块的示意图。
图4是根据本申请的一个实施例示出区块链节点中的数据处理方法的流程图。
图5是相关技术中智能合约的执行环境示意图。
图6是根据本申请一实施例示出智能合约的执行环境示意图。
图7是根据本申请一实施例示出的步骤420的流程图。
图8是根据本申请另一实施例示出的区块链节点中的数据处理方法的流程图。
图9是根据本申请的一实施例示出的步骤820的流程图。
图10是根据本申请的另一个实施例示出区块链节点中的数据处理方法的流程图。
图11是根据本申请一实施例示出的在常驻内存中进行数据写入的流程图。
图12是根据本申请一实施例示出的在常驻内存中删除一条合约内存数据的流程图。
图13是根据本申请一实施例示出的在常驻内存中删除一数据表的流程图。
图14是根据本申请一实施例示出的在常驻内存中删除一智能合约所写入全部数据的流程图。
图15是根据一实施例示出的区块链节点中的数据处理装置的框图。
图16示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本申请将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本申请的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本申请的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本申请的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
需要说明的是:在本文中提及的“多个”是指两个或两个以上;“至少一个(项)”是指一个或者多个;“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
图1是根据一实施例示出的区块链系统的框图,参见图1所示的区块链系统,区块链系统100是指用于进行区块链节点与区块链节点之间数据共享的系统。该区块链系统100中可以包括多个区块链节点101,多个区块链节点101可以是区块链系统100中各个客户端。每个区块链节点101在进行正常工作可以接收到输入信息,并基于接收到的输入信息维护该区块链系统内的共享数据。
为了保证区块链系统内的信息互通,区块链系统中的每个区块链节点之间可以存在信息连接,区块链节点101之间可以通过上述信息连接进行信息传输。例如,当区块链系统100中的任意区块链节点101接收到输入信息(输入信息例如交易信息、发布的智能合约等)时,区块链系统中的其他区块链节点便根据共识算法获取该输入信息,将该输入信息作为共享数据中的数据进行存储,使得区块链系统中全部区块链节点上存储的数据均一致。
对于区块链系统100中的每个区块链节点,均具有与其对应的区块链节点标识,而且区块链系统100中的每个区块链节点均可以存储有区块链系统中其他区块链节点的区块链节点标识,以便后续根据其他区块链节点的区块链节点标识,将生成的区块广播至区块链系统中的其他区块链节点。每个区块链节点中可维护一个如下表所示的区块链节点标识列表,将区块链节点名称和区块链节点标识对应存储至该区块链节点标识列表中。其中,区块链节点标识可为IP(Internet Protocol,网络之间互联的协议)地址以及其他任一种能够用于标识该区块链节点的信息,表1中仅以IP地址为例进行说明。
表1
区块链节点名称 | 区块链节点标识 |
区块链节点1 | 117.114.151.174 |
区块链节点2 | 117.116.189.145 |
… | … |
区块链节点N | xx.xx.xx.xx |
区块链系统100中的每个区块链节点均存储相同的区块链。该区块链可以是公有链、私有链、联盟链等。区块链由多个区块组成,参见图2,区块链由多个区块组成,创始块中包括区块头和区块主体,区块头中存储有输入信息特征值、版本号、时间戳和难度值,区块主体中存储有输入信息;创始块的下一区块以创始块为父区块,下一区块中同样包括区块头和区块主体,区块头中存储有当前区块的输入信息特征值、父区块的区块头特征值、版本号、时间戳和难度值,并以此类推,使得区块链中每个区块中存储的区块数据均与父区块中存储的区块数据存在关联,保证了区块中输入信息的安全性。
在生成区块链中的各个区块时,参见图3,区块链系统中的区块链节点在接收到输入信息时,对输入信息进行校验,完成校验后,将输入信息存储至内存池中,并更新其用于记录输入信息的哈希树;之后,将更新时间戳更新为接收到输入信息的时间,并尝试不同的随机数,多次进行特征值计算,使得计算得到的特征值可以满足下述公式:
SHA256(SHA256(version+prev_hash+merkle_root+ntime+nbits+x))<TARGET
其中,SHA256为计算特征值所用的特征值算法;version(版本号)为区块链中相关区块协议的版本信息;prev_hash为当前区块的父区块的区块头特征值;merkle_root为输入信息的特征值;ntime为更新时间戳的更新时间;nbits为当前难度,在一段时间内为定值,并在超出固定时间段后再次进行确定;x为随机数;TARGET为特征值阈值,该特征值阈值可以根据nbits确定得到。
这样,当计算得到满足上述公式的随机数时,便可将信息对应存储,生成区块头和区块主体,得到当前区块。随后,区块链所在区块链节点根据区块链系统中其他区块链节点的区块链节点标识,将新生成的区块分别发送给其所在的区块链系统中的其他区块链节点,由其他区块链节点对新生成的区块进行校验,并在完成校验后将新生成的区块添加至其存储的区块链中。
以下对本申请实施例的技术方案的实现细节进行详细阐述:
图4示出了根据本申请的一个实施例示出区块链节点中的数据处理方法的流程图,该方法可以由区块链系统中的区块链节点执行,区块链节点可以是具备处理能力的计算机设备执行,例如服务器、终端等,在此不进行具体限定。在本申请的方案中,区块链节点中设有常驻内存。参照图4所示,该方法至少包括步骤410至420,详细介绍如下:
步骤410,根据所述区块链节点运行智能合约时所需访问数据的访问频率,将访问频率不低于设定频率阈值的数据确定为目标数据。
智能合约是指运行在节点上的能够执行任意计算并实现复杂逻辑的程序代码,该程序代码指示了智能合约的执行过程和处理逻辑,例如输入、输出、中间转换逻辑等。
智能合约在区块链上的形式为字节码形式,即在通过高级编程语言编写好智能合约对应的源代码后,通过编译器将该源代码形式的智能合约编译为字节码形式。智能合约在区块链系统中被发布和共识通过后,字节码形式的智能合约被写入区块链中,并对应配置智能合约的合约地址。在一区块链系统中,被写入区块链中的智能合约可以是一个也可以是多个,在此不进行具体限定。
字节码是一种中间码格式,包括一序列op代码(操作码)/数据对组成的二进制字符编码。在区块链节点调用智能合约时,区块链节点中的虚拟机会加载并运行字节码形式的智能合约,更具体而言,虚拟机中的解释器对字节码所代表的指令流进行解释和执行。
区块链节点运行智能合约是为了实现智能合约所限定的处理逻辑,在实现该智能合约所限定的处理逻辑的过程中,需要进行数据访问,从而将所访问读取到的数据作为实现处理逻辑的数据基础。
运行智能合约的过程中所需要访问的数据由智能合约所限定。可以理解的是,智能合约的内容不同,运行该智能合约的过程中所需要访问的数据也存在差异。当然,运行一智能合约所需要访问的数据可以是一项也可以是多项,具体视智能合约的内容而定。
在步骤410中,针对区块链上每一智能合约所确定的目标数据可以是一项也可以是多项。该目标数据是与智能合约相对应的,该目标数据是在运行所对应智能合约时所访问的数据中访问频率较高的数据。在本申请的一些实施例中,目标数据可以是系统配置数据、公钥列表等,当然,由于智能合约的内容不同,对应于每一智能合约的目标数据也可能存在差异。
在本申请的一些实施例中,在步骤410中可以面向区块链上的全部智能合约来确定目标数据,即在区块链上全部智能合约所分别需要访问的数据中,将访问频率不低于设定频率阈值的数据统称为目标数据。
在本申请的一些实施例中,在步骤410中,可以先根据区块链上智能合约的执行频率,将执行频率不低于第一频率阈值的智能合约确定为目标智能合约;然后根据运行目标智能合约的过程时所需访问数据的访问频率,将访问频率不低于设定频率阈值的数据确定为目标数据。在本实施例中,将执行频率较高的热点智能合约运行中访问频率较高的数据确定为目标数据。
运行一智能合约所需要访问各项数据的访问频率可以根据区块链节点在运行智能合约过程中的运行日志来计算得到,智能合约运行过程中的运行日志记录了智能合约运行过程中所访问的数据。从而,可以基于运行日志来计算各项所访问数据的访问频率。
设定频率阈值可以根据实际需要进行设定。在本申请的一些实施例中,可以结合区块链上全部智能合约在运行过程中所访问数据的平均访问频率、中位访问频率、最大访问频率等来进行设定,例如将设定频率阈值指定为平均访问频率、将设定频率阈值指定为中位访问频率等。当然,在实际中,随着时间的推移,由于区块链上可能涉及智能合约的升级或者新部署智能合约,智能合约的执行情况以及数据的访问情况会发生变化,因此,该设定频率阈值也根据区块链上智能合约的执行情况进行动态调整。
步骤420,将所述目标数据写入所述区块链节点的常驻内存中;其中,在运行所述目标数据所对应的第一智能合约的过程中,从所述常驻内存中读取所述目标数据,并且基于所读取到的所述目标数据执行所述第一智能合约。
在常驻内存中,被写入常驻内存的数据不会被动地被删除,而只能由应用程序主动发起删除请求才能将其删除。因此,在将目标数据写入常驻内存后,只要数据写入方不主动删除该目标数据,该目标数据会一直保存在常驻内存中。
为了便于区分,将在运行过程中需要访问目标数据的智能合约称为第一智能合约,由于所被访问的数据与所运行的智能合约是相对应的,因此,基于智能合约与数据之间的访问关系,也可以说,第一智能合约泛指目标数据所对应的智能合约。
在现有技术中,将运行智能合约时所需要访问的数据存储在数据库中,因此,在区块链节点运行智能合约的过程中,需要与数据库进行交互,在从数据库中获取到对应的数据后,还进一步需要将所获取到的数据加载到区块链节点的内存中。如果运行智能合约时所需要访问的每一数据均按照该数据访问过程进行数据读取,读取数据花费的时间较长,从而导致运行智能合约所花费的时间长,智能合约的执行效率低。
在本申请的方案中,在区块链节点中设置常驻内存的基础上,将所确定访问频率较高的目标数据写入到常驻内存中,从而,在运行对应的第一智能合约时,直接从常驻内存中读取目标数据,而不需要与数据库进行交互,从而,整体上缩短了数据读取时间,对应可以提高第一智能合约的执行效率。
而且,在本申请的方案中被写入常驻内存中的目标数据是访问频率较高的数据,可以表明在区块链节点中运行目标数据所对应的第一智能合约的频次较高,从而,整体上提高了区块链节点中智能合约的执行效率。除此之外,仅将访问频次较高的目标数据写入常驻内存中,可以有效利用常驻内存中的存储空间,保证了常驻内存中数据的利用率。
图5是相关技术中智能合约的执行环境示意图。如图5所示,该执行环境包括通信连接的区块链节点和数据库520,其中,区块链节点中设有虚拟机511和缓存512。
区块链节点的虚拟机511用于运行智能合约。虚拟机(virtual machine,VM)是通过软件模拟的、具备完整硬件系统功能并运行在隔离环境下的完整计算机系统,比如虚拟化物理机VMware、Java虚拟机等。区块链节点中的虚拟机是建立在区块链系统上的代码运行环境,其主要作用是处理区块链上的智能合约。在虚拟机上运行智能合约,可以实现智能合约与智能合约之间、智能合约和宿主系统之间有效的资源隔离,一方面,在同一区块链节点上同时运行至少两个智能合约时,可以避免智能合约之间的影响;另一方面,可以避免不同区块链节点因硬件系统差异导致执行相同智能合约所出现结果不一致的情况。
在需要运行智能合约时,先将字节码形式的智能合约加载进虚拟机511,对于执行智能合约所需要访问的数据,若区块链节点中的虚拟机511是首次运行一智能合约,则从数据库520中读取运行该智能合约所需要访问的数据,并将所读取到的数据暂存在缓存512中,以便于下次直接从缓存512中进行数据读取,而不需要再次从数据库520中读取数据。
对于区块链节点的缓存512而言,其存储空间有限,因此,在缓存512中设置了数据淘汰机制,也就是说,缓存512会自动地根据所设置的数据淘汰机制将所存储的数据被动删除。因此,由于被暂存在缓存512中的数据可能被被动删除,那么,若运行智能合约所需要访问的数据在缓存512中被删除,还是需要从数据库520中读取对应的数据,由于从数据库520中读取数据花费的时间长,因此,仍然存在智能合约的执行效率低的问题。
图6是根据本申请一实施例示出智能合约的执行环境示意图。相较于图5所示的执行环境,图6所示区块链节点中还设有常驻内存513。因此,可以按照上述步骤410-420的过程将智能合约所需要访问的数据中访问频率较高的目标数据写入到常驻内存513中。由于常驻内存513中存储的数据不会被被动地删除,因此,只要数据写入方不主动进行数据删除,则写入常驻内存中的数据会一直存在。
在将访问频率较高的目标数据写入到常驻内存513后,在对应执行所写入目标数据对应的第一智能合约时,可以直接从常驻内存513中读取目标数据,而不需从数据库520中读取目标数据。
相关技术中,区块链中所有的智能合约均共享区块链节点的缓存,这种缓存中的数据会随各种智能合约的调用而更新,一些数据会被淘汰。而采用本申请的方案,将访问频率较高的数据写入常驻内存后,可以保证该部分访问频率较高的数据不会被淘汰。
值得一提的是,在图6所示的实施例执行环境中,缓存512中也可以存储一些运行智能合约所需要访问的数据,当然,数据库520中也存储了相应的数据,在运行智能合约的过程中出缓存512和常驻内存513中所存储的数据外的其他需要访问的数据,仍然从数据库520中读取。
可以理解的是,不管是常驻内存还是缓存中的数据均来自于数据库。在智能合约被区块链节点首次运行时,均是从数据库中进行读取。因此,在步骤420中可以先在从数据库中读取到目标数据后,然后再将所读取到的目标数据对应写入到常驻内存中。同理,对于缓存中的数据也是如此,在从数据库中读取到对应的数据后,将数据存入缓存中。
在本申请的一些实施例中,如图7所示,步骤420,包括:
步骤710,在所述区块链节点中运行所述第一智能合约。
在区块链节点中运行第一智能合约的目的是使该第一智能合约向常驻内存请求写入目标数据。
步骤720,基于所述第一智能合约向所述常驻内存发送数据写入请求。
在本实施例中,由目标数据所对应的第一智能合约向常驻内存发起数据写入请求;该数据写入请求用于请求将目标数据写入区块链节点的常驻内存中。
步骤730,根据所述数据写入请求将所述目标数据写入所述常驻内存中。
常驻内存在接收到数据写入请求后,对应将所请求写入的目标数据写入到常驻内存中。
如上所描述,该目标数据的初始来源是数据库,因此,为了将该目标数据写入常驻内存中,通过运行该目标数据所对应的第一智能合约,从而,该第一智能合约可以从数据库中获取到目标数据。在此基础上,由第一智能合约向常驻内存发送数据写入请求,以将从数据库所读取到的目标数据写入常驻内存中。
在本申请的一些实施例中,如果区块链节点的缓存中存储了待写入的目标数据,则在运行目标数据所对应的第一智能合约的过程中,可以从缓存中读取到该目标数据。在此基础上,由第一智能合约向常驻内存发送数据写入请求,以将从缓存中所读取到的目标数据写入常驻内存中。
在本申请的一些实施例中,所述数据写入请求携带所述第一智能合约的合约地址和所述目标数据的数据标识;在本实施例中,请继续参阅图7,步骤730进一步包括:
步骤731,组合所述数据写入请求所携带的合约地址和所述数据写入请求所携带的数据标识,得到第一标识。
步骤732,若所述常驻内存对应的剩余内存配额指示所述常驻内存中存在剩余内存,则将所述第一标识与所述目标数据关联存储于所述常驻内存中,并更新所述常驻内存对应的剩余内存配额。
数据写入请求是待写入的目标数据所对应的第一智能合约发起,该数据写入请求中携带了发起数据写入请求的智能合约对应的合约地址(即第一智能合约的合约地址)和所请求写入数据的数据标识(即目标数据的数据标识)。
在本申请的一些实施例中,可以以键值对(Key-Value)的形式将目标数据与对应的第一标识进行关联存储。具体的,以第一标识为键,以目标数据为值,形成键值对。下述表2示出了常驻内存中由目标数据和第一标识所构建的键值对。
表2
键(Key:合约地址_映射表名_key1) | 值(Value) |
1d2fcefadbe15278sxs_公钥列表_公司1 | BBE9066D2517511D2 |
1d2fcefadbe15278sxs_公钥列表_公司2 | 39C7BFA77884144A3 |
23befadce8s8f8a7d7s_配置_gasPrice | 100 |
在表2中所示出常驻内存中的键值对中,以第一标识为键。具体的,第一标识的结构为:合约地址_数据标识,其中,数据标识的结构为:映射表名_key1;数据标识中的映射表名可以是目标数据在数据库中所在数据表的表名;数据标识中的key1可以是目标数据在数据库中所在数据表中的键。
在本实施例中,第一标识中包括目标数据所对应第一智能合约的合约地址,因此,可以保证在常驻内存中不同第一智能合约所对应的目标数据不会被覆盖。
如上所描述,为一智能合约所确定的目标数据可能是多项,该多项数据可以是来源于数据库中不同的数据表,也可以是来源于同一数据表,不同的数据表可以存储不同的数据。在此基础上,将数据表所对应的映射表名和目标数据在数据库中对应数据表中的键(Key1)组合,作为该目标数据的数据标识,因此,可以有效避免来源于不同数据表的目标数据的数据标识相同的情况,保证了目标数据的数据标识的唯一性。
常驻内存对应的剩余内存配额用于指示常驻内存中剩余内存空间,在常驻内存对应的剩余内存配额指示常驻内存中的剩余内存足以存储目标数据时,将目标数据与第一标识关联存储至常驻内存中,可以避免因常驻内存中存储空间不足所导致目标数据写入失败的情况。
在本申请的一些实施例中,若常驻内存对应的剩余内存配额指示常驻内存中不存在剩余内存或者剩余内存不足以存储目标数据,则可以生成写入失败指示信息。
在本申请的一些实施例中,如图8所示,该方法还包括:
步骤810,在所述区块链节点运行所述第一智能合约的过程中,基于所述第一智能合约向所述常驻内存发送数据读取请求,所述数据读取请求用于请求读取所述目标数据。
在本实施例中,为了从常驻内存中读取目标数据,需要该目标数据所对应的第一智能合约向该常驻内存发起数据读取请求;而如果不是由目标数据所对应的第一智能合约发起的,则无法从常驻内存中进行数据读取。
步骤820,根据所述数据读取请求所携带的数据标识,从所述常驻内存中读取所述目标数据。
数据读取请求所携带的数据标识是该数据读取请求所请求读取数据的数据标识(即目标数据的数据标识)。
在本申请的一些实施例中,所述数据读取请求还携带签名信息和所述第一智能合约的合约地址;步骤820之前,该方法还包括:根据所述数据读取请求所携带的签名信息对所述数据读取请求所携带的合约地址进行签名验证。
由于所请求读取的目标数据是用于执行该目标数据对应的第一智能合约,因此,通过数据读取请求携带的签名信息和所携带的合约地址来验证该数据读取请求是否是第一智能合约发起的,即验证所携带的合约地址是否为第一智能合约的合约地址,以确定数据读取请求所携带的合约地址是否被篡改。
在本申请的一些实施例中,数据读取请求所携带的签名信息可以是先对第一智能合约的合约地址进行哈希运算,得到第一哈希运算结果,然后通过第一智能合约的私钥对第一哈希运算结果进行加密得到。在此基础上,在常驻内存接收到数据读取请求后,通过该第一智能合约对应的公钥对数据读取请求所携带的签名信息进行解密,得到解密结果;并对数据读取请求所携带的合约地址进行哈希运算,得到第二哈希运算结果。如果解密结果与第二哈希运算结果一致,则签名验证通过,表明数据读取请求所携带的合约地址是第一智能合约的合约地址;反之,如果解密结果与第二哈希运算结果不一致,则签名验证失败,表明数据读取请求所携带的合约地址不是第一智能合约的合约地址。
在本实施例中,仅在签名验证通过后才对应执行步骤820及其后续的步骤。
在本申请的一些实施例中,所述数据读取请求还携带所述第一智能合约的合约地址;步骤820进一步包括:组合所述数据读取请求所携带的数据标识和所述数据读取请求所携带的合约地址,得到第一标识;在所述常驻内存中读取与所述第一标识相关联的所述目标数据。
在本实施例的方案中,在常驻内存中,目标数据与第一标识是关联存储的,由于第一标识是组合数据读取请求所携带的数据标识和数据读取请求所携带的合约地址得到,而数据读取请求所携带的合约地址是发起该数据读取请求的合约地址(在本方案中即第一智能合约的合约地址),因此,对于常驻内存中存储的目标数据,仅能够被该目标数据所对应第一智能合约读取到,而不能被其他智能合约读取到;从而可以保证常驻内存中所存储数据访问的安全性。
在本申请的一些实施例中,如图9所示,步骤810包括:
步骤910,获取待访问数据的数据标识。
待访问数据是指运行第一智能合约的过程中当前所需要访问的数据。
步骤920,若根据所述区块链节点中的第一数据存储信息确定所述待访问数据是所述目标数据,则基于所述第一智能合约向所述常驻内存发送所述数据读取请求;所述第一数据存储信息指示了所述区块链节点的常驻内存中所存储的数据。
如上所描述,被写入常驻内存中的目标数据可以是第一智能合约运行过程中所需要全部访问的数据,也可以是第一智能合约运行过程中所需访问数据中的一部分。对于仅部分数据存储于常驻内存的场景,在运行第一智能合约的过程中,需要先基于第一数据存储信息和当前的待访问数据的数据标识来判断当前的待访问数据是否为被写入常驻内存的目标数据。具体的,如果第一数据存储信息指示常驻内存中所存储数据的数据标识集合中包括该待访问数据的数据标识,则表明该待访问数据是目标数据,从而可以从常驻内存中读取该待访问数据;反之,如果第一数据存储信息指示常驻内存中所存储数据的数据标识集合中不包括该待访问数据的数据标识,表明该待访问数据不是目标数据。
在本申请的一些实施例中,步骤910之后,该方法还包括:若根据所述区块链节点中的第二数据存储信息确定所述待访问数据存储于所述缓存中,则根据所述待访问数据的数据标识,从所述缓存中读取对应的数据;所述第二数据存储信息指示了所述区块链节点的缓存中所存储的数据。
在本实施例中,根据第二数据存储信息来判断待访问数据是否存储于区块链节点的缓存中。具体的,如果第二数据存储信息指示缓存中所存储数据的数据标识集合中包括该待访问数据的数据标识,则表明该待访问数据存储于缓存中;反之,如果第二数据存储信息指示缓存中所存储数据的数据标识集合中不包括该待访问数据的数据标识,则表明待访问数据未存储于缓存中。
在确定待访问数据存储于缓存中的基础上,可以根据该待访问数据的数据标识从缓存中读取该待访问数据。在本申请的一些实施例中,在缓存中,各项数据可以是与该数据的数据标识相关联存储,从而可以直接根据待访问数据的数据标识读取所关联的待访问数据。在另外一些实施例中,在缓存中各项数据也可以是与所对应的第一标识相关联存储的,因此,可以组合缓存所接收到数据读取请求携带的合约地址和所携带的数据标识来得到第一标识,并从缓存中读取与该第一标识相关联的待访问数据。
在本申请的一些实施例中,步骤910之后,该方法还包括:若根据所述第一数据存储信息和所述第二数据存储信息确定所述待访问数据未存储于所述常驻内存且未存储于所述缓存,则根据所述待访问数据的数据标识,从数据库中读取对应的数据。
在确定待访问数据未存储于常驻内存也未存储于缓存的情况下,对应从数据库中读取该待访问数据。
可以理解的是,在运行第一智能合约的过程中,需要从常驻内存、缓存以及数据库中读取运行该第一智能合约所需访问的全部数据,进而基于所读取到的全部数据执行第一智能合约。
在本申请的一些实施例中,该方法还包括:获取所述缓存中各项数据在设定周期内的访问频率;根据所述缓存中各项数据的访问频率对所述缓存中的数据进行删除。
如上所描述,由于缓存的存储空间有限,缓存中设置了淘汰机制来被动删除缓存中的数据。在本实施例中,在缓存中可以按照各项数据在设定访问周期内的访问频率来确定需要被删除的数据。在本申请的一些实例中,可以设定第二频率阈值,将缓存中访问频率低于第二频率阈值的数据确定为需要被删除的数据,从而对应将所确定需要被删除的数据进行删除。
在本申请的一些实施例中,还可以进一步结合缓存中数据的存入时间和数据的访问频率来确定需要被删除的数据,例如,将当前时间与所对应存入时间的时间差大于设定时间阈值,且所对应访问频率低于第二频率阈值的数据确定为需要被删除的数据,以对应进行删除。
在本申请的一些实施例中,如图10所示,该方法还包括:
步骤1010,若所述常驻内存接收到数据删除请求,组合所述数据删除请求所携带的合约地址和所述数据删除请求所携带的数据标识,得到第二标识。
步骤1020,根据所述第二标识在所述常驻内存中进行数据定位。
步骤1030,将所定位到的数据进行删除,并更新所述常驻内存对应的剩余内存配额。
在本实施例中,通过如上步骤1010-1030的步骤对常驻内存中的数据进行主动删除。
数据删除请求所携带的合约地址是发起该数据删除请求的第一智能合约的合约地址。数据删除请求所携带的数据标识是该数据删除请求所请求删除数据的数据标识。第二标识是指组合数据删除请求所携带的合约地址和所携带的数据标识得到的标识。
在本申请的一些实施例中,数据删除请求由数据的请求写入方主动请求进行删除。在该实施例中,步骤1010之前,该方法还包括:在运行第一智能合约的过程中,基于所述第一智能合约向所述常驻内存发送所述数据删除请求。
在常驻内存中目标数据是与所对应的第一标识关联存储的,因此,在常驻内存接收到的数据删除请求后,先组合数据删除请求所携带的合约地址和所携带的合约地址,得到第二标识;然后按照所得到的第二标识在常驻内存中进行数据定位,以对应将所定位到的数据进行删除。
同常驻内存中数据写入和读取数据的过程,常驻内存在接收到数据删除请求后,也需要基于数据删除请求携带的签名信息和合约地址对所携带的合约地址进行签名验证,签验证通过后才能进行数据删除。
在本实施例的方案中,在需要进行数据删除时,根据组合发起数据删除请求的智能合约的合约地址和待删除数据的标识所得到的第二标识,在常驻内存中进行数据定位;在常驻内存中,所写入的目标数据是与该目标数据对应的第一标识相关联存储的,第一标识是组合请求写入目标数据的第一智能合约的合约地址和该目标数据的数据标识得到;由此可以看出,只有一智能合约A发起的数据删除请求才能删除常驻内存中所对应第一标识中包括该智能合约A的合约地址的数据,换言之,只有请求写入一数据(假设为数据B)的智能合约A才能请求删除被写入常驻内存的数据B,而其他智能合约无法请求删除该智能合约A所请求写入的数据。由此可以防止常驻内存中的数据被除请求写入该数据的智能合约外的其他智能合约删除。
在本申请的一些实施例中,数据删除请求可以用于请求删除一第一智能合约所写入的一项数据,也可以用于请求删除一第一智能合约所写入一数据表中的全部数据,还可以用于请求删除一第一智能合约所写入的全部数据。
在本申请的一些实施例中,数据标识的结构可以如上所描述的形式:映射表名_key1。在此基础上,若数据删除请求用于请求删除一第一智能合约所写入的一项数据,则该数据删除请求所携带的数据标识是由该待删除数据所在数据表的映射表名和该待删除数据在数据表中所对应的键组合得到的数据标识。若数据删除请求用于请求删除一第一智能合约所写入一数据表中的全部数据,则数据删除请求所携带的数据标识可以是该数据表的映射表名,而不包括数据对应的键。若数据删除请求用于请求删除一第一智能合约所写入的全部数据,则该数据删除请求所携带的数据标识可以为空;在此种情况下,则组合得到的第二标识仅仅包括该数据删除请求所携带的合约地址。
在本申请的一些实施例中,由于智能合约是在区块链节点的虚拟机中运行,为了便于通过智能合约对常驻内存进行操作,可以在虚拟机中设置用于指示对常驻内存所进行操作的操作码。智能合约对常驻内存进行操作例如上述所列举的向常驻内存中写入数据、向常驻内存请求删除数据等,当然,在虚拟机中还可以设置其他的操作码,例如加载与存储操作码、数据运算操作码(例如指示将栈顶端两个值相加的操作码,指示将栈顶端的两个值相除的操作码等)、读取数据的操作码等。
下面对与常驻内存相关的操作码进行举例。表3示出了用于在常驻内写入数据和删除数据的四个操作码。
表3
操作码 | 含义 |
300OP_ADD_RECORD | 新增一条合约内存数据 |
301OP_DEL_RECORD | 删除一条合约内存数据 |
302OP_DEL_TABLE | 删除一张数据表 |
303OP_DEL_CONTRACT_RECORDS | 删除一智能合约对应的全部内存表数据 |
基于如上的操作码,虚拟机可以调用上述所列举的操作码,进而基于虚拟机当前所运行的智能合约向常驻内存发送对应的操作请求,操作请求例如对应于“新增一条合约内存数据”的数据读取请求、用于请求删除数据(一条合约内存数据、一张数据表、一智能合约对应的全部内存表数据)的数据删除请求。
在本申请的一些实施例中,在调用这些操作码进行对应操作之前,会对应对操作请求发起方进行签名验证,签名验证的过程参见上文描述,在此不再赘述。
为了在智能合约运行过程中调用上述四个操作码,在合约编程库中提供了上述四个操作码分别对应的编程接口,从而,程序员所编写的智能合约在运行时可以调用对应的操作码以实现对应的功能。下述表4列举了针对上述四个操作码所分别提供的编程接口。
表4
编程接口 | 接口含义 |
AddRecord(tableName,key) | 新增一条合约内存数据 |
DeleteRecord(tableName,key) | 删除一条合约内存数据 |
DeleteTable(tableName) | 删除一张数据表 |
DeleteContractMemData() | 删除一智能合约写入的全部内存表数据 |
在表4中,在上述所列举的四个编程接口中,括号中的内容为对应编程接口的输入参数(又称为入参),其中,tableName表示合约内存数据(例如上文中的目标数据)所在数据表的表名;key表示合约内存数据在所在数据表中的键。
为了准确对上述四个编程接口进行编译,在合约编译器中,对应设置了针对每一编程接口的编译规则,当编译器遇到上述表4中的4个编程接口的接口名称时,可以按照表5所示出编程接口名与操作数之间的对应关系,将编程接口转成成对应的操作数。
表5
编程接口名 | 操作数 |
AddRecord | 300 |
DeleteRecord | 301 |
DeleteTable | 302 |
DeleteContractMemData | 303 |
为了实现上述4个操作数对应的功能,在虚拟机中对应加入实现上述操作数所对应功能的代码,当虚拟机执行过程中遇到对应的操作时,则调用该操作数对应的代码,以实现对应的功能。具体的,在虚拟机中可以设置如表6所示的用于指示操作数与所对应代码的代码地址的映射关系表,从而便于直接根据代码地址调用用于实现该操作数所指示功能的代码。
表6
操作数 | 虚拟机中对应代码地址 |
300 | 新增一个合约数据对应的代码地址 |
301 | 删除一条合约内存数据对应的代码地址 |
302 | 删除一数据表对应的代码地址 |
303 | 删除一智能合约所写入全部数据对应的代码地址 |
下面结合上述四个操作码来对数据写入和数据删除过程进行具体说明。图11示出了根据本申请一实施例示出的在常驻内存中进行数据写入的流程图。在常驻内存中进行数据写入,即调用用于“新增一条合约内存数据”的操作码来实现。请参阅图11所示,在虚拟机执行业务合约代码的过程中,按照下述步骤向常驻内存中写入合约内存数据,该合约内存数据即上文中所确定的目标数据。详细介绍如下:
步骤1110,读取下一字节码。如上所描述,智能合约在区块链上为字节码形式,在调用智能合约时,虚拟机在加载完字节码形式的智能合约后,会对应读取其中的字节码,以运行该智能合约。
步骤1120,判断所读取到的字节码是否为指示新增一条合约内存数据的操作码;若为是,则执行步骤1130;若为否,则执行步骤1121:执行字节码对应的操作;执行完步骤1121后,返回至步骤1110以继续读取后续的字节码。
步骤1130,合约内存存入器装配键:Key=合约地址_TableName_Key。其中,合约地址是请求进行数据写入的智能合约的合约地址,TableName为待写入数据所在数据表的表名;等号右侧中的Key为待写入数据在所在数据表中的键,其即为上文中的Key1。TableName与等号右侧的Key的组合即为待写入数据的数据标识;等号左侧的Key即为上文中组合合约地址和待写入数据的数据标识所得到的第一标识。
步骤1140,合约内存计数器检测剩余内存配额是否用完;若为否,则执行步骤1150;若为是,则返回步骤1110。
步骤1150,将Key和Value存入常驻内存的合约内存表中。值得一提的是,步骤1150中的Key为步骤1130中所装配得到的键,即等号左侧的Key。其中,Value为待写入的数据。在步骤1150中,将待写入数据和为该待写入数据所装配的键(第一标识)以键值对的形式存储预常驻内存的合约内存表中。
步骤1160,合约内存计数器更新剩余内存配额,并返回步骤1110。
图12是根据本申请一实施例示出的在常驻内存中删除一条合约内存数据的流程图。该删除一条合约内存数据是通过调用用于“删除一条合约内存数据”的操作码来实现。请参阅图12所示,在虚拟机执行业务合约代码过程中,按照下述步骤删除常驻内存中的一条合约内存数据。详细介绍如下:
步骤1210,读取下一字节码;
步骤1220,判断所读取到的字节码是否为指示删除一条合约内存数据的操作码,若为是,则执行步骤1230,若为否,则执行步骤1221:执行字节码对应的操作;执行完步骤1221后,返回至步骤1210以继续读取后续的字节码。
步骤1230,合约内存存入器装配键:Key=合约地址_TableName_Key。其中,合约地址是请求删除一条合约内存数据的智能合约的合约地址,TableName为待删除的合约内存数据所在数据表的表名;等号右侧中的Key为待删除的合约内存数据在所在数据表中的键,其即为上文中的Key1。TableName与等号右侧的Key的组合即为待删除的合约内存数据的数据标识;等号左侧的Key可视为上文中组合合约地址和待删除数据的数据标识所得到的第二标识。
步骤1240,删除常驻内存的合约内存表中键为Key的数据。值得一提的是,在步骤1240中的Key为步骤1230合约内存存入器所装配得到的键,即等号左侧的Key。
步骤1250,合约内存计数器更新剩余内存配额,并返回至步骤1210。
图13是根据本申请一实施例示出的在常驻内存中删除一数据表的流程图。该删除一数据表是通过调用用于“删除一数据表”的操作码来实现。请参阅图13所示,在虚拟机执行业务合约代码的过程中,按照下述步骤删除常驻内存中的一数据表。详细介绍如下:
步骤1310,读取下一字节码;
步骤1320,判断所读取到的字节码是否为指示删除一数据表的操作码,若为是,则执行步骤1330,若为否,则执行步骤1321:执行字节码对应的操作;执行完步骤1321后,返回至步骤1310以继续读取后续的字节码。
步骤1330,合约内存存入器装配键:Key=合约地址_TableName。其中,合约地址是请求删除一数据表的智能合约的合约地址,TableName为待删除数据表的表名。等号左侧的Key可视为上文中组合合约地址和待删除数据的数据标识所得到的第二标识。
步骤1340,删除常驻内存的合约内存表中以Key为前缀的数据。如上所描述,在被写入常驻内存中的目标数据是与所对应的第一标识形成键值对存储的,第一标识的形式为:合约地址_数据表名_键。由此可以看出,在常驻内存中,被写入的数据在常驻内存中的Key,均是以该数据对应的合约地址和数据表名的组合为前缀的。因此,在步骤1340中,在合约内存表中定位以所装配得到的键(Key)为前缀的数据,所定位到的数据即为所要被删除的数据;然后对应删除所定位到的数据。
步骤1350,合约内存计数器更新剩余内存配额,并返回至步骤1310。
图14是根据本申请一实施例示出的在常驻内存中删除一智能合约所写入全部数据的流程图。该删除一智能合约所写入全部数据是通过调用用于“删除一智能合约所写入全部数据”的操作码来实现。请参阅图14所示,在虚拟机执行业务合约代码的过程中,按照下述步骤删除常驻内存中的一智能合约所写入全部数据。详细介绍如下:
步骤1410,读取下一字节码;
步骤1420,判断所读取到的字节码是否为指示删除一智能合约所写入全部数据的操作码,若为是,则执行步骤1430,若为否,则执行步骤1421:执行字节码对应的操作;执行完步骤1421后,返回至步骤1410以继续读取后续的字节码。
步骤1430,合约内存存入器装配键:Key=合约地址。其中,合约地址是请求删除一智能合约所写入全部数据的智能合约的合约地址。
步骤1440,删除常驻内存的合约内存表中以Key为前缀的数据。如上所描述,在被写入常驻内存中的目标数据是与所对应的第一标识形成键值对存储的,第一标识的形式为:合约地址_数据表名_键。由此可以看出,在常驻内存中,被写入的数据在常驻内存中的Key,均是以该数据对应的合约地址为前缀的。因此,在步骤1440中,在合约内存表中定位以步骤1430所装配得到的键(Key)为前缀的数据,所定位到的数据即为所要被删除的数据;然后对应删除所定位到的数据。
步骤1450,合约内存计数器更新剩余内存配额,并返回至步骤1410。
以下介绍本申请的装置实施例,可以用于执行本申请上述实施例中的方法。对于本申请装置实施例中未披露的细节,请参照本申请上述方法实施例。
图15是根据一实施例示出的区块链节点中的数据处理装置的框图,所述区块链节点中设置有常驻内存,如图15所示,该区块链节点中的数据处理装置包括:确定模块1510,用于根据所述区块链节点运行智能合约时所需访问数据的访问频率,将访问频率不低于设定频率阈值的数据确定为目标数据;写入模块1520,用于将所述目标数据写入所述区块链节点的常驻内存中;其中,在运行所述目标数据所对应的第一智能合约的过程中,从所述常驻内存中读取所述目标数据,并且基于所读取到的所述目标数据执行所述第一智能合约。
在本申请的一些实施例中,写入模块1520,包括:运行单元,用于在所述区块链节点中运行所述第一智能合约;数据写入请求发送单元,用于基于所述第一智能合约向所述常驻内存发送数据写入请求;写入单元,用于根据所述数据写入请求将所述目标数据写入所述常驻内存中。
在本申请的一些实施例中,所述数据写入请求携带所述第一智能合约的合约地址和所述目标数据的数据标识;写入单元,包括:第一组合单元,用于组合所述数据写入请求所携带的合约地址和所述数据写入请求所携带的数据标识,得到第一标识;关联存储单元,用于若所述常驻内存对应的剩余内存配额指示所述常驻内存中存在剩余内存,则将所述第一标识与所述目标数据关联存储于所述常驻内存中,并更新所述常驻内存对应的剩余内存配额。
在本申请的一些实施例中,区块链节点中的数据处理装置还包括:数据读取请求发送单元,用于在所述区块链节点运行所述第一智能合约的过程中,基于所述第一智能合约向所述常驻内存发送数据读取请求,所述数据读取请求用于请求读取所述目标数据;第一读取单元,用于根据所述数据读取请求所携带的数据标识,从所述常驻内存中读取所述目标数据。
在本申请的一些实施例中,所述数据读取请求还携带签名信息和所述第一智能合约的合约地址;区块链节点中的数据处理装置还包括:签名验证模块,用于在第一读取单元执行对应步骤之前,根据所述数据读取请求所携带的签名信息对所述数据读取请求所携带的合约地址进行签名验证。
在本申请的一些实施例中,所述数据读取请求还携带所述第一智能合约的合约地址;第一读取单元,包括:第二组合单元,用于组合所述数据读取请求所携带的数据标识和所述数据读取请求所携带的合约地址,得到第一标识;第二读取单元,用于在所述常驻内存中读取与所述第一标识相关联的所述目标数据。
在本申请的一些实施例中,数据读取请求发送单元包括:数据标识获取单元,用于获取待访问数据的数据标识;发送单元,用于若根据所述区块链节点中的第一数据存储信息确定所述待访问数据是所述目标数据,则基于所述第一智能合约向所述常驻内存发送所述数据读取请求;所述第一数据存储信息指示了所述区块链节点的常驻内存中所存储的数据。
在本申请的一些实施例中,区块链节点中的数据处理装置还包括:第一读取模块,用于若根据所述区块链节点中的第二数据存储信息确定所述待访问数据存储于所述缓存中,则根据所述待访问数据的数据标识,从所述缓存中读取对应的数据;所述第二数据存储信息指示了所述区块链节点的缓存中所存储的数据。
在本申请的一些实施例中,区块链节点中的数据处理装置还包括:第二读取模块,用于若根据所述第一数据存储信息和所述第二数据存储信息确定所述待访问数据未存储于所述常驻内存且未存储于所述缓存,则根据所述待访问数据的数据标识,从数据库中读取对应的数据。
在本申请的一些实施例中,区块链节点中的数据处理装置还包括:访问频率获取单元,用于获取所述缓存中各项数据在设定周期内的访问频率;第一删除单元,用于根据所述缓存中各项数据的访问频率对所述缓存中的数据进行删除。
在本申请的一些实施例中,区块链节点中的数据处理装置还包括:第三组合单元,用于若所述常驻内存接收到数据删除请求,组合所述数据删除请求所携带的合约地址和所述数据删除请求所携带的数据标识,得到第二标识;数据定位单元,用于根据所述第二标识在所述常驻内存中进行数据定位;第二删除单元,用于将所定位到的数据进行删除,并更新所述常驻内存对应的剩余内存配额。
在本申请的一些实施例中,区块链节点中的数据处理装置还包括:数据删除请求发送单元,用于在运行第一智能合约的过程中,基于所述第一智能合约向所述常驻内存发送所述数据删除请求。
图16示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
需要说明的是,图16示出的电子设备的计算机系统1600仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图16所示,计算机系统1600包括中央处理单元(Central Processing Unit,CPU)1601,其可以根据存储在只读存储器(Read-Only Memory,ROM)1602中的程序或者从存储部分1608加载到随机访问存储器(Random Access Memory,RAM)1603中的程序而执行各种适当的动作和处理,例如执行上述实施例中的方法。在RAM 1603中,还存储有系统操作所需的各种程序和数据。CPU1601、ROM1602以及RAM 1603通过总线1604彼此相连。输入/输出(Input/Output,I/O)接口1605也连接至总线1604。
以下部件连接至I/O接口1605:包括键盘、鼠标等的输入部分1606;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分1607;包括硬盘等的存储部分1608;以及包括诸如LAN(Local AreaNetwork,局域网)卡、调制解调器等的网络接口卡的通信部分1609。通信部分1609经由诸如因特网的网络执行通信处理。驱动器1610也根据需要连接至I/O接口1605。可拆卸介质1611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1610上,以便于从其上读出的计算机程序根据需要被安装入存储部分1608。
特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1609从网络上被下载和安装,和/或从可拆卸介质1611被安装。在该计算机程序被中央处理单元(CPU)1601执行时,执行本申请的系统中限定的各种功能。
需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。其中,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现,所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
作为另一方面,本申请还提供了一种计算机可读存储介质,该计算机可读介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读存储介质承载计算机可读指令,当该计算机可读存储指令被处理器执行时,实现上述任一实施例中的方法。
根据本申请的一个方面,还提供了一种电子设备,其包括:处理器;存储器,存储器上存储有计算机可读指令,计算机可读指令被处理器执行时,实现上述任一实施例中的方法。
根据本申请实施例的一个方面,提供了计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述任一实施例中的方法。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本申请实施方式的方法。
本领域技术人员在考虑说明书及实践这里公开的实施方式后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
Claims (15)
1.一种区块链节点中的数据处理方法,其特征在于,所述区块链节点中设置有常驻内存,所述方法包括:
根据所述区块链节点运行智能合约时所需访问数据的访问频率,将访问频率不低于设定频率阈值的数据确定为目标数据;
将所述目标数据写入所述区块链节点的常驻内存中;其中,在运行所述目标数据所对应的第一智能合约的过程中,从所述常驻内存中读取所述目标数据,并且基于所读取到的所述目标数据执行所述第一智能合约。
2.根据权利要求1所述的方法,其特征在于,所述将所述目标数据写入所述区块链节点的常驻内存中,包括:
在所述区块链节点中运行所述第一智能合约;
基于所述第一智能合约向所述常驻内存发送数据写入请求;
根据所述数据写入请求将所述目标数据写入所述常驻内存中。
3.根据权利要求2所述的方法,其特征在于,所述数据写入请求携带所述第一智能合约的合约地址和所述目标数据的数据标识;
所述根据所述数据写入请求将所述目标数据写入所述常驻内存中,包括:
组合所述数据写入请求所携带的合约地址和所述数据写入请求所携带的数据标识,得到第一标识;
若所述常驻内存对应的剩余内存配额指示所述常驻内存中存在剩余内存,则将所述第一标识与所述目标数据关联存储于所述常驻内存中,并更新所述常驻内存对应的剩余内存配额。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述方法还包括:
在所述区块链节点运行所述第一智能合约的过程中,基于所述第一智能合约向所述常驻内存发送数据读取请求,所述数据读取请求用于请求读取所述目标数据;
根据所述数据读取请求所携带的数据标识,从所述常驻内存中读取所述目标数据。
5.根据权利要求4所述的方法,其特征在于,所述数据读取请求还携带签名信息和所述第一智能合约的合约地址;
所述根据所述数据读取请求所携带的数据标识,从所述常驻内存中读取所述目标数据之前,所述方法还包括:
根据所述数据读取请求所携带的签名信息对所述数据读取请求所携带的合约地址进行签名验证。
6.根据权利要求4所述的方法,其特征在于,所述数据读取请求还携带所述第一智能合约的合约地址;
所述根据所述数据读取请求所携带的数据标识,从所述常驻内存中读取所述目标数据,包括:
组合所述数据读取请求所携带的数据标识和所述数据读取请求所携带的合约地址,得到第一标识;
在所述常驻内存中读取与所述第一标识相关联的所述目标数据。
7.根据权利要求4所述的方法,其特征在于,所述基于所述第一智能合约向所述常驻内存发送数据读取请求,包括:
获取待访问数据的数据标识;
若根据所述区块链节点中的第一数据存储信息确定所述待访问数据是所述目标数据,则基于所述第一智能合约向所述常驻内存发送所述数据读取请求;所述第一数据存储信息指示了所述区块链节点的常驻内存中所存储的数据。
8.根据权利要求7所述的方法,其特征在于,所述获取待访问数据的数据标识之后,所述方法还包括:
若根据所述区块链节点中的第二数据存储信息确定所述待访问数据存储于所述缓存中,则根据所述待访问数据的数据标识,从所述缓存中读取对应的数据;所述第二数据存储信息指示了所述区块链节点的缓存中所存储的数据。
9.根据权利要求8所述的方法,其特征在于,所述获取待访问数据的数据标识之后,所述方法还包括:
若根据所述第一数据存储信息和所述第二数据存储信息确定所述待访问数据未存储于所述常驻内存且未存储于所述缓存,则根据所述待访问数据的数据标识,从数据库中读取对应的数据。
10.根据权利要求8所述的方法,其特征在于,所述方法还包括:
获取所述缓存中各项数据在设定周期内的访问频率;
根据所述缓存中各项数据的访问频率对所述缓存中的数据进行删除。
11.根据权利要求1至3中任一项所述的方法,其特征在于,所述方法还包括:
若所述常驻内存接收到数据删除请求,组合所述数据删除请求所携带的合约地址和所述数据删除请求所携带的数据标识,得到第二标识;
根据所述第二标识在所述常驻内存中进行数据定位;
将所定位到的数据进行删除,并更新所述常驻内存对应的剩余内存配额。
12.根据权利要求10所述的方法,其特征在于,所述组合所述数据删除请求所携带的合约地址和所述数据删除请求所携带的数据标识,得到第二标识之前,所述方法还包括:
在运行第一智能合约的过程中,基于所述第一智能合约向所述常驻内存发送所述数据删除请求。
13.一种区块链节点中的数据处理装置,其特征在于,所述区块链节点中设置有常驻内存,所述装置包括:
确定模块,用于根据所述区块链节点运行智能合约时所需访问数据的访问频率,将访问频率不低于设定频率阈值的数据确定为目标数据;
写入模块,用于将所述目标数据写入所述区块链节点的常驻内存中;其中,在运行所述目标数据所对应的第一智能合约的过程中,从所述常驻内存中读取所述目标数据,并且基于所读取到的所述目标数据执行所述第一智能合约。
14.一种电子设备,其特征在于,包括:
处理器;
存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,实现如权利要求1-12中任一项所述的方法。
15.一种计算机可读存储介质,其上存储有计算机可读指令,当所述计算机可读指令被处理器执行时,实现如权利要求1-12中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110305226.2A CN113010115B (zh) | 2021-03-18 | 2021-03-18 | 区块链节点中的数据处理方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110305226.2A CN113010115B (zh) | 2021-03-18 | 2021-03-18 | 区块链节点中的数据处理方法及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113010115A true CN113010115A (zh) | 2021-06-22 |
CN113010115B CN113010115B (zh) | 2022-11-22 |
Family
ID=76404798
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110305226.2A Active CN113010115B (zh) | 2021-03-18 | 2021-03-18 | 区块链节点中的数据处理方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113010115B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114513558A (zh) * | 2022-01-29 | 2022-05-17 | 建信金融科技有限责任公司 | 用户请求的处理方法和装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110473096A (zh) * | 2019-07-31 | 2019-11-19 | 阿里巴巴集团控股有限公司 | 基于智能合约的数据授权方法及装置 |
CA3045571A1 (en) * | 2018-05-29 | 2019-11-29 | Alibaba Group Holding Limited | Blockchain-based commodity claim method and apparatus, and electronic device |
CN110580417A (zh) * | 2019-11-08 | 2019-12-17 | 支付宝(杭州)信息技术有限公司 | 基于智能合约的隐私数据查询方法及装置 |
CN111340470A (zh) * | 2020-02-24 | 2020-06-26 | 中国工商银行股份有限公司 | 区块链交易处理方法、节点及合约容器 |
CN112380149A (zh) * | 2021-01-18 | 2021-02-19 | 腾讯科技(深圳)有限公司 | 基于节点内存的数据处理方法、装置、设备以及介质 |
CN112950211A (zh) * | 2021-05-14 | 2021-06-11 | 腾讯科技(深圳)有限公司 | 一种交易验重方法、装置、设备以及介质 |
-
2021
- 2021-03-18 CN CN202110305226.2A patent/CN113010115B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA3045571A1 (en) * | 2018-05-29 | 2019-11-29 | Alibaba Group Holding Limited | Blockchain-based commodity claim method and apparatus, and electronic device |
CN110473096A (zh) * | 2019-07-31 | 2019-11-19 | 阿里巴巴集团控股有限公司 | 基于智能合约的数据授权方法及装置 |
CN110580417A (zh) * | 2019-11-08 | 2019-12-17 | 支付宝(杭州)信息技术有限公司 | 基于智能合约的隐私数据查询方法及装置 |
CN111340470A (zh) * | 2020-02-24 | 2020-06-26 | 中国工商银行股份有限公司 | 区块链交易处理方法、节点及合约容器 |
CN112380149A (zh) * | 2021-01-18 | 2021-02-19 | 腾讯科技(深圳)有限公司 | 基于节点内存的数据处理方法、装置、设备以及介质 |
CN112950211A (zh) * | 2021-05-14 | 2021-06-11 | 腾讯科技(深圳)有限公司 | 一种交易验重方法、装置、设备以及介质 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114513558A (zh) * | 2022-01-29 | 2022-05-17 | 建信金融科技有限责任公司 | 用户请求的处理方法和装置 |
CN114513558B (zh) * | 2022-01-29 | 2023-06-16 | 建信金融科技有限责任公司 | 用户请求的处理方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113010115B (zh) | 2022-11-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11074245B2 (en) | Method and device for writing service data in block chain system | |
CN110297689B (zh) | 智能合约执行方法、装置、设备及介质 | |
US10972367B2 (en) | Provisioning framework for binding related cloud services | |
CN107577427B (zh) | 用于区块链系统的数据迁移方法、设备和存储介质 | |
US11074000B2 (en) | Non-transitory computer-readable storage medium, and information processing device and method | |
US10225140B2 (en) | Portable instance provisioning framework for cloud services | |
US11556348B2 (en) | Bootstrapping profile-guided compilation and verification | |
CN110874739A (zh) | 实现高完整性、高带宽、低延迟、安全处理的分布式计算和存储网络 | |
US20230004542A1 (en) | Method and apparatus for publishing smart contract,computer-readable medium,and electronic device | |
US10929149B2 (en) | Method and system for updating firmware | |
US10268462B2 (en) | Emulation device, emulation method, and recording medium storing emulation program | |
CN112306645B (zh) | 以太坊虚拟机的事务处理方法、装置、设备和介质 | |
CN104079613A (zh) | 用于多租户间共享应用程序对象的方法和系统 | |
CN110334297A (zh) | 终端页面的加载方法、终端、服务器及存储介质 | |
CN112559635B (zh) | 以太坊联盟链节点的业务处理方法、装置、设备及介质 | |
JP2022104879A (ja) | 境界を越えた参照から保護するための方法、システム、およびコンピュータ・プログラム製品(境界を越えたメモリ参照から保護するための専用の境界情報レジスタ・ファイル) | |
CN113010115B (zh) | 区块链节点中的数据处理方法及相关设备 | |
US20240126567A1 (en) | Data processing system, method, and apparatus | |
KR20110099214A (ko) | 동결된 개체들을 위한 형식 설명자 관리 | |
US20150339139A1 (en) | Enhanced java array | |
CN113918602A (zh) | 一种数据缓存方法、装置和电子设备 | |
US9747448B2 (en) | Cryptographic mechanisms to provide information privacy and integrity | |
WO2024021417A1 (zh) | 数据账户创建方法及装置 | |
US10684873B2 (en) | Efficient data decoding using runtime specialization | |
US11496304B2 (en) | Information processing device, information processing method, and storage medium |
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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40045489 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |