CN111538521B - 智能合约部署、交易方法及装置 - Google Patents
智能合约部署、交易方法及装置 Download PDFInfo
- Publication number
- CN111538521B CN111538521B CN202010332543.9A CN202010332543A CN111538521B CN 111538521 B CN111538521 B CN 111538521B CN 202010332543 A CN202010332543 A CN 202010332543A CN 111538521 B CN111538521 B CN 111538521B
- Authority
- CN
- China
- Prior art keywords
- intelligent contract
- memory
- code
- address
- node
- 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
- 238000000034 method Methods 0.000 title claims abstract description 104
- 230000008569 process Effects 0.000 claims abstract description 65
- 238000013507 mapping Methods 0.000 claims abstract description 60
- 230000006870 function Effects 0.000 claims description 69
- 238000003860 storage Methods 0.000 claims description 22
- 238000004590 computer program Methods 0.000 claims description 13
- 238000012545 processing Methods 0.000 claims description 13
- 230000007246 mechanism Effects 0.000 claims description 10
- 238000010276 construction Methods 0.000 claims description 4
- 238000004891 communication Methods 0.000 abstract description 22
- 238000010586 diagram Methods 0.000 description 17
- 238000005516 engineering process Methods 0.000 description 12
- 230000000977 initiatory effect Effects 0.000 description 6
- 238000012795 verification Methods 0.000 description 6
- 238000009434 installation Methods 0.000 description 5
- 230000003993 interaction Effects 0.000 description 5
- 239000000872 buffer Substances 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000011084 recovery Methods 0.000 description 3
- 239000002699 waste material Substances 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 239000004744 fabric Substances 0.000 description 2
- 230000008014 freezing Effects 0.000 description 2
- 238000007710 freezing Methods 0.000 description 2
- 230000008676 import Effects 0.000 description 2
- 238000002955 isolation Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004140 cleaning Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000002427 irreversible effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000004064 recycling Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/656—Updates while running
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
Abstract
本发明提供了一种智能合约部署、交易方法及装置,智能合约部署方法包括:接收用户进行智能合约部署的智能合约代码;将所述智能合约代码写入节点内存;将所述智能合约代码在所述节点内存中的调用地址映射至节点进程,实现智能合约部署。本发明的方案执行过程与区块链系统在同一环境中运行,无容器通讯操作,由于执行代码以内存的形式存在,在不需要用到的时候可进行卸载,不占用资源。本发明的方案可以直接访问内存获取,完全消除了通讯带来的时间损耗,同时,多合约部署不再需要重新分配容器资源,区块链系统性能得到极大的提升。
Description
技术领域
本发明涉及区块链技术,具体的讲是一种智能合约部署、交易方法及装置。
背景技术
智能合约是区块链技术的一个重要特性,区块链本身具备的特点与智能合约非常契合,智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约实际上是一段可执行代码,在独立的安全可靠的环境中执行用户交易。随着区块链技术的快速发展和应用,智能合约的需求也跟着逐渐增长,对智能合约的性能要求也越来越高。
区块链中最具代表性的联盟链架构当属Hyperledger Fabric,Fabric将智能合约运行在docker容器中,不同的智能合约由不同的容器持有,智能合约与区块链系统的交互通过grpc技术实现。容器作为一种隔离性较强的技术,意味着它与外界的交互需要消耗更多的资源。智能合约在执行过程中很多时候都需要查询或写入事件状态,这时,容器需要通过grpc通讯和区块链系统进行交互,这个过程是非常耗时的,容器化的智能合约交易执行速度因此较慢,尤其在交易量上涨时,系统整体性能表现通常不太理想。并且,随着智能合约的增多,容器也会随着增多,大量的容器造成资源浪费。
发明内容
为了加速智能合约的执行速度,提高系统处理交易的能力,本发明实施例提供了一种智能合约部署方法,包括:
接收用户进行智能合约部署的智能合约代码;
将所述智能合约代码写入节点内存;
将所述智能合约代码在所述节点内存中的调用地址映射至节点进程,实现智能合约部署。
本发明实施例中,所述的将所述智能合约代码写入节点内存包括:
编译所述智能合约源代码确定智能合约目标文件;
根据所述智能合约目标文件确定智能合约机器码;
利用内存映射将所述的智能合约机器码存储至节点内存并确定该智能合约机器码的指针地址。
本发明实施例中,所述的目标文件包括:
智能合约的符号表、虚拟地址、重定向数组、函数元数据结构及垃圾回收机制。
本发明实施例中,所述的根据所述智能合约目标文件确定智能合约机器码包括:
根据所述的重定向数组、函数元数据结构确定智能合约的机器码、汇编指令及偏移信息。
本发明实施例中,所述的利用内存映射将所述的智能合约机器码存储至节点内存并确定该智能合约机器码的指针地址包括:
根据所述的虚拟地址和偏移信息确定物理内存地址;
利用内存映射和确定的物理内存地址将所述智能合约机器码存储至节点内存并确定智能合约机器码的指针地址。
本发明实施例中,所述的将所述智能合约代码写入节点内存还包括:
在所述节点内存中以键值构建存储智能合约调用方式存储结构;其中,键值对的键为智能合约ID,键值对的值包括:包含智能合约属性的结构体、即时区块链高度、状态码以及调用地址。
本发明实施例中,所述的将所述智能合约代码在所述节点内存中的调用地址映射至节点进程包括:
将所述智能合约ID写入节点进程;
利用所述键值对将所述智能合约代码在所述节点内存中的调用地址映射至节点进程。
同时,本发明还提供一种智能合约部署装置,包括:
接收模块,用于接收用户进行智能合约部署的智能合约代码;
写入模块,用于将所述智能合约代码写入节点内存;
映射模块,用于将所述智能合约代码在所述节点内存中的调用地址映射至节点进程,实现智能合约部署。
本发明实施例中,所述的写入模块包括:
编译单元,用于编译所述智能合约源代码确定智能合约目标文件;
机器码确定单元,用于根据所述智能合约目标文件确定智能合约机器码;
内存映射单元,用于利用内存映射将所述的智能合约机器码存储至节点内存并确定该智能合约机器码的指针地址。
本发明实施例中,所述的目标文件包括:
智能合约的符号表、虚拟地址、重定向数组、函数元数据结构及垃圾回收机制。
本发明实施例中,所述的机器码确定单元根据所述的重定向数组、函数元数据结构确定智能合约的机器码、汇编指令及偏移信息。
本发明实施例中,所述的内存映射单元包括:
地址确定单元,用于根据所述的虚拟地址和偏移信息确定物理内存地址;
内存映射处理单元,用于利用内存映射和确定的物理内存地址将所述智能合约机器码存储至节点内存并确定智能合约机器码的指针地址。
本发明实施例中,所述写入模块还包括:
存储结构构建单元,用于在所述节点内存中以键值对构建存储智能合约调用方式存储结构;其中,键值对的键为智能合约ID,键值对的值包括:包含智能合约属性的结构体、即时区块链高度、状态码以及调用地址。
本发明实施例中,所述的映射模块包括:
ID写入单元,用于将所述智能合约ID写入节点进程;
映射处理单元,用于利用所述键值对将所述智能合约代码在所述节点内存中的调用地址映射至节点进程。
另外,本发明还提供一种智能合约交易方法,该交易方法利用前述的智能合约部署方法,将智能合约部署至区块链节点;
接收智能合约交易请求;
根据所述智能合约交易请求从节点进程中确定智能合约代码在节点内存中的调用地址;
根据确定的调用地址从节点内存中获取智能合约代码执行智能合约交易。
另外,本发明还提供一种智能合约交易装置,该装置包括前述的智能合约部署装置,将智能合约部署至区块链节点;
请求接收模块,用于接收智能合约交易请求;
地址确定模块,用于根据所述智能合约交易请求从节点进程中确定智能合约代码在节点内存中的调用地址;
交易模块,用于根据确定的调用地址从节点内存中获取智能合约代码执行智能合约交易。
同时,本发明还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述方法。
同时,本发明还提供一种计算机可读存储介质,计算机可读存储介质存储有执行上述方法的计算机程序。
本发明提供的智能合约部署、交易方法及装置,其在执行过程与区块链系统在同一环境中运行,无容器通讯操作,并且支持热更新,升级合约无需重启系统,同时,这种方式由于执行代码以内存的形式存在,在不需要用到的时候可进行卸载,不占用资源。利用一种动态映射导入内存的方式,将智能合约代码动态加载到系统中,同时采用热更新的方法,在不重启系统、不修改源系统程序代码的情况下部署更新智能合约,通过这种方式部署运行的智能合约不依赖于容器,与区块链系统运行在同一进程内,现有技术中只能通过grpc通讯获取的数据,而本发明的方案可以直接访问内存获取,完全消除了通讯带来的时间损耗,同时,多合约部署不再需要重新分配容器资源,区块链系统性能得到极大的提升。
为让本发明的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明公开的智能合约部署方法的流程图;
图2为本发明实施例汇总将智能合约代码写入节点内存的流程图;
图3为本实施例提供的一种基于嵌入式智能合约的区块链系统的结构图;
图4为本发明一实施例中公开的嵌入式智能合约部署装置的框图;
图5为本发明一实施例中进行智能合约部署的流程图;
图6为本发明实施例中公开的进行内存映射的原理图;
图7为本发明实施例中智能合约原理图;
图8为本发明提供的智能合约交易方法的流程图;
图9为本发明实施例中公开的嵌入式智能合约内存数据结构;
图10为本发明公开的智能合约部署装置的框图;
图11为本发明公开的智能合约交易装置的框图;
图12为本发明实施例中提供的电子设备的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
智能合约实际上是一段可执行代码,在独立的安全可靠的环境中执行用户交易。随着区块链技术的快速发展和应用,智能合约的需求也跟着逐渐增长,对智能合约的性能要求也越来越高。现有技术中,将智能合约运行在docker容器中,不同的智能合约由不同的容器持有,智能合约与区块链系统的交互通过grpc技术实现。容器作为一种隔离性较强的技术,意味着它与外界的交互需要消耗更多的资源。智能合约在执行过程中很多时候都需要查询或写入世界状态,这时,容器需要通过grpc通讯和区块链系统进行交互,这个过程是非常耗时的,相较于进程内通讯和进程间通讯,网络通讯的数据传输是最慢的。容器化的智能合约交易执行速度因此较慢,在交易量上涨时,系统整体性能表现通常不太理想。并且,随着智能合约的增多,容器也会随着增多,容器造成资源浪费。
为了加速智能合约的执行速度,提高系统处理交易的能力,本发明提供了一种智能合约部署方法,如图1所示,包括:
步骤S101,接收用户进行智能合约部署的智能合约代码;
步骤S102,将智能合约代码写入节点内存;
步骤S103,将智能合约代码在节点内存中的调用地址映射至节点进程,实现智能合约部署。
本发明通过将智能合约代码导入节点内存的方式,将智能合约代码动态加载到系统中,在不重启系统、不修改源系统程序代码的情况下部署更新智能合约,通过这种方式部署运行的智能合约不依赖于容器,与区块链系统运行在同一进程内,不同于现有技术中只能通过grpc通讯获取的数据,本发明的方法可以直接访问内存获取,完全消除了通讯带来的时间损耗,同时,多合约部署不再需要重新分配容器资源,区块链系统性能得到极大的提升。
具体的,如图2所示,本发明已实施例中,步骤S102将智能合约代码写入节点内存包括:
步骤S201,编译智能合约源代码确定智能合约目标文件;
步骤S202,根据智能合约目标文件确定智能合约机器码;
步骤S203,利用内存映射将所述的智能合约机器码存储至节点内存并确定该智能合约机器码的指针地址。
本发明实施例中,上述的目标文件即为.o后缀文件,该文件内容包含智能合约的符号表、虚拟地址、重定向数组、函数元数据结构及垃圾回收机制。
本发明实施例中,所述的根据所述智能合约目标文件确定智能合约机器码包括:
根据所述的重定向数组、函数元数据结构确定智能合约的机器码、汇编指令及偏移信息。
本发明实施例中,利用目标文件中的重定向数组和函数元数据结构体获取合约函数执行的机器码,汇编指令和偏移,区块链系统将这些内容写入自己的进程中并缓存在系统内存中。
本发明实施例中,利用Linux系统提供的一种方式内存映射文件的方法(mmap),将智能合约代码写入节点内存。mmap可调用一块可执行的内存,该内存即存放智能合约函数的机器码,同时返回该调用函数地址。执行交易过程中只需要找到智能合约函数接口的映射地址,同时修改调用指针类型为智能合约函数类型,然后调用该接口函数便可以执行交易。
下面结合具体的实施例对本发明技术方案作进一步详细说明。
本实施例提出一种基于嵌入式智能合约的区块链部署及交易方案,本实施例中,利用一种动态映射的方式将主进程内存地址映射到智能合约函数地址的技术,在部署合约时首先对智能合约源代码进行形式化验证,通过验证后再将智能合约源码制作编译成为目标文件(.o后缀文件),该文件内容包含符号表、重定向数组、函数元数据结构体和垃圾回收机制。利用目标文件中的重定向数组和函数元数据结构体获取合约函数执行的机器码,汇编指令和偏移,区块链系统将这些内容写入自己的进程中并缓存在系统内存中,Linux系统提供了一种方式mmap,可调用一块可执行的内存,该内存即存放智能合约函数的机器码,同时返回该调用函数地址。执行交易过程中只需要找到智能合约函数接口的映射地址,同时修改调用指针类型为智能合约函数类型,然后调用该接口函数便可以执行交易。交易执行过程与区块链系统在同一环境中运行,无容器通讯操作,并且支持热更新,升级合约无需重启系统,同时,本实施例的这种智能合约部署及交易方式由于执行代码以内存的形式存在,在不需要用到的时候可进行卸载,不占用资源。
如图3所示,为本实施例提供的一种基于嵌入式智能合约的区块链系统的结构图。其主要技术包括客户端请求发起装置1、嵌入式智能合约部署装置2和嵌入式智能合约执行装置3。
本实施例中智能合约的部署和交易主要体现于嵌入式智能合约部署装置和嵌入式智能合约执行装置。下面结合附图对本发明技术方案进行详细说明。
所述客户端请求发起装置1,主要负责发起智能合约安装部署请求和交易请求;客户端请求发起装置1主要涉及三种类型的请求:智能合约代码上传请求、智能合约代码部署请求和智能合约交易请求。
嵌入式智能合约部署装置2,接受来自客户端请求发起装置1发起的智能合约安装部署请求并进行嵌入式智能合约部署。
嵌入式智能合约执行装置3,主要处理来自装置1发起的交易请求、依据装置2提供的信息执行交易。
本实施例中,嵌入式智能合约部署装置2主要包括:形式化验证模块21、安装模块22和部署模块23,如图4所示。
其中,形式化验证模块21,用于对智能合约代码进行形式化验证,及时发现合约代码漏洞;
安装模块22,用于将通过形式化验证模块21验证的智能合约代码存储在节点指定位置并将该位置发送给客户端请求发起装置1;
部署模块23,用于接收来自装置1发起的智能合约部署请求并进行嵌入式智能合约部署。
其中,如图5所示,部署模块23进行智能合约部署的流程包括:
步骤R231,打包智能合约源代码,转发给区块链上其他节点;
接收到来自客户端请求发起装置1的智能合约部署请求;
首先解析请求报文中的智能合约路径,该路径已由安装模块22发送给装置1。解析得到智能合约路径后,根据智能合约路径生成智能合约ID,并打包智能合约源代码转发给链上的其他节点;
步骤R232,收到智能合约部署请求和源代码压缩包,解压源码包;
各个节点接收到智能合约部署消息,获取智能合约ID,解压智能合约源代码;
步骤R233,编译智能合约代码得到目标文件(.o文件),并提取内部函数的机器码、汇编指令和偏移。目标文件形如:
地址:0x10023d0偏移:7646汇编指令:JBE 0x1002425机器码:001011...
需要指出的是,这里的地址其实为虚拟地址,汇编指令可以让我们知道某一操作具体做什么,偏移表示这一操作占用的空间(即在JBE这条指令后的下一条指令应该是当前的地址+7646),机器码即最终的计算机执行码;
与现有技术中的动态库链接程序不同,现有技术的动态库加载的方式中,系统自动分配动态代码存储,然后对主进程开放调用入口,这种方式对程序来说是不可控的,加载后的动态库会一直占有进程资源不可释放。
本发明实施例汇总,通过Linux系统提供了一种调用可执行内存的方式:mmap,本实施例中,被调用内存必须存储机器码,这种方式也称为内存映射。内存映射可以将用户空间的一段内存区域映射到内核空间,映射成功后,用户对这段区域的修改可以直接反映到内核空间,同样,内核空间对这段区域的修改也直接反映到用户空间。即,区块链系统的主进程运行在内核中,通过mmap将智能合约的机器码以内存映射的形式与内核进程建立映射关系,从而使得内核进程可以随意访问智能合约机器码存储内存。
本发明公开的智能合约部署及交易方式中,智能合约代码在这种方式中以内存的形式存在,在运行时占据系统一部分内存空间,在该智能合约代码失效后可手动释放或者通过垃圾回收机制自动回收,并不会造成资源浪费,是一种可卸载式的动态导入方式,mmap的具体原理如图5所示,该原理描述即为步骤R234。
步骤R234,将目标文件映射到内核中;
本实施例汇中,利用mmap进行可卸载式的智能合约代码动态导入。步骤R234具体包括如下步骤:
A.首先取得步骤R233中编译得到的智能合约代码目标文件;
该文件包含内部函数名称根据编译环境转换而成的函数符号表、记录函数虚拟地址和偏移信息的重定向数组、记录函数具体执行机器码的元数据结构体和函数代码的垃圾回收机制等。
B.将目标函数从虚拟地址空间转换到物理内存地址空间;
由于目标文件记录的只是虚拟地址,本实施例中,使用MMU(Memory ManagementUnit,内存管理单元),将目标函数从虚拟地址空间转换到物理内存地址空间。在ARM架构中使用页表来进行转换,一般使用到两极页表,以段的方式进行转换时使用的是一级页表,以页的方式则使用二级页表。ARM中有一个页表基址寄存器,记录一级页表的地址,每个一级页表有对应空间大小的描述符,MMU所做的就是从页表基址寄存器中取出描述符,并结合目标文件提供的虚拟地址和偏移信息计算最终的物理内存地址;
内存管理单元MMU,有时称作分页内存管理单元,是一种负责处理中央处理器(CPU)的内存访问请求的计算机硬件。内存管理单元的功能包括虚拟地址到物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制,在较为简单的计算机体系结构中,负责总线的仲裁以及存储体切换。MMU位于处理器内核和连接高速缓存以及物理存储器的总线之间。当处理器内核取指令或者存取数据的时候,都会提供一个有效地址,或者称为逻辑地址、虚拟地址。这个地址是可执行代码在编译的时候由链接器生成的。当应用代码需要使用存储空间时,操作系统通过MMU为其分配合适的物理存储空间。有效地址不需要和系统的实际硬件物理地址相匹配,而是通过MMU将有效地址映射成对应的物理地址,以访问指令和数据。
C.mmap将机器码存储到物理内存中,并返回一个函数指针,该指针地址对应智能合约函数机器码的入口地址;
即通过上述的步骤B、C实现前述的利用内存映射将所述的智能合约机器码存储至节点内存并确定该智能合约机器码的指针地址。其中,
根据所述的虚拟地址和偏移信息确定物理内存地址;
利用内存映射和确定的物理内存地址将所述智能合约机器码存储至节点内存并确定智能合约机器码的指针地址。
D.根据实际智能合约函数类型对mmap获取的指针进行类型转换,以使该指针可以调用智能合约内部函数接口;
本发明实施例中,以这种方式写入智能合约代码的好处是,可以随时抹掉智能合约代码,由Linux提供的内核操作函数mmap具有较高安全性,同时,以最小代价写入机器指令,主进程只需要执行写入的机器码,不需要额外地维护其他类似动态加载的事情,达到节省资源的目的;
步骤R235,在节点进程中存储智能合约内存调用的相关信息。
将智能合约代码映射到主进程内存后,通过另一种数据结构维护来智能合约代码,步骤R234中,可以得到每个智能合约的机器码地址,将其保存在内存中,以及与该智能合约相关的信息,供后续执行交易时使用,智能合约其在内存中的数据结构如图6所示。
所有智能合约代码调用地址均存放在同一块内存里面,智能合约调用方式存储结构是一个键值对,key值为智能合约ID,value为包含合约属性的结构体,包括版本号(实际为即时区块高度),状态码和调用地址。
如图7所示,当接收到装置1发送的智能合约升级请求时,部署模块23首先获取区块链高度作为版本号,构建智能合约时使用该版本号作为智能合约目标文件的标识符,按照步骤R231到步骤R235完成部署后,更新智能合约内存数据结构(部署时为新增),同时将智能合约状态置为1。
接收的请求为冻结智能合约时,同样获取智能合约ID,部署模块23在内存中找到该ID对应的键值对,将状态置为0,下次接收到该合约的交易将无法正常进行。
当需要恢复时只需要发起智能合约恢复请求将状态码激活即可重新进行该智能合约交易。
当接收到销毁智能合约请求时,则在内存中将对应智能合约ID的记录删除,操作系统本身的垃圾回收机制会在该智能合约函数地址长久不使用之后自动回收智能合约代码占据的内存空间,可以利用mmap返回的函数指针进行手动内存释放,达到资源清理的目的,后续交易将无法正常进行同时也无法进行恢复。
本发明还提供一种智能合约交易方法,该交易方法利用本发明实施例中的智能合约部署方法,将智能合约部署至区块链节点;如图8所示,本发明提供的智能合约交易方法的流程包括:
步骤S701,接收智能合约交易请求;
步骤S702,根据智能合约交易请求从节点进程中确定智能合约代码在节点内存中的调用地址;
步骤S703,根据确定的调用地址从节点内存中获取智能合约代码执行智能合约交易。
具体的,在本发明一实施例汇总,前述的嵌入式智能合约执行装置3,在接收到装置1发送的智能合约交易请求后,首先解析交易报文,获取智能合约相关信息(通常为智能合约ID以及各类参数),然后在图6所示的内存数据结构中找到对应的调用地址,根据解析得到的参数在智能合约调用地址中找到相应的函数执行入口,具体原理如图9所示,通过智能合约ID得到调用地址指针,该指针指向智能合约各执行函数机器码在内存中存放的位置,智能合约在该位置上呈现的同样是一块地址列表,各自存放不同的函数入口地址,该地址存放函数的执行代码指令,根据函数符号表将参数传入到对应的函数地址中并执行该函数机器码,最终得到交易执行结果,并返回给装置1。
本发明实施例提出的一种基于嵌入式智能合约的区块链部署及交易方案,利用一种动态映射(非动态库,可卸载的)导入内存的方式,将智能合约代码动态加载到系统中,同时采用热更新的方法,能实现在不重启系统、不修改源系统程序代码的情况下部署更新智能合约,通过这种方式部署运行的智能合约不依赖于容器,与区块链系统运行在同一进程内,而现有技术只能通过grpc通讯获取的数据,本方案可以直接访问内存获取,完全消除了通讯带来的时间损耗,同时,多合约部署不再需要重新分配容器资源,区块链系统性能得到极大的提升。
同时,本发明还提供一种智能合约部署装置,如图10所示包括:
接收模块901,用于接收用户进行智能合约部署的智能合约代码;
写入模块902,用于将所述智能合约代码写入节点内存;
映射模块903,用于将所述智能合约代码在所述节点内存中的调用地址映射至节点进程,实现智能合约部署。
本发明实施例中,写入模块902包括:
编译单元,用于编译所述智能合约源代码确定智能合约目标文件;
机器码确定单元,用于根据所述智能合约目标文件确定智能合约机器码;
内存映射单元,用于利用内存映射将所述的智能合约机器码存储至节点内存并确定该智能合约机器码的指针地址。
本发明实施例中,所述的目标文件包括:
智能合约的符号表、虚拟地址、重定向数组、函数元数据结构及垃圾回收机制。
本发明实施例中,所述的机器码确定单元根据所述的重定向数组、函数元数据结构确定智能合约的机器码、汇编指令及偏移信息。
本发明实施例中,所述的内存映射单元包括:
地址确定单元,用于根据所述的虚拟地址和偏移信息确定物理内存地址;
内存映射处理单元,用于利用内存映射和确定的物理内存地址将所述智能合约机器码存储至节点内存并确定智能合约机器码的指针地址。
本发明实施例中,写入模块还包括:
存储结构构建单元,用于在所述节点内存中以键值对构建存储智能合约调用方式存储结构;其中,键值对的键为智能合约ID,键值对的值包括:包含智能合约属性的结构体、即时区块链高度、状态码以及调用地址。
本发明实施例中,映射模块包括:
ID写入单元,用于将所述智能合约ID写入节点进程;
映射处理单元,用于利用所述键值对将所述智能合约代码在所述节点内存中的调用地址映射至节点进程。
另外,本发明还提供一种智能合约交易装置,该装置包括前述的智能合约部署装置,将智能合约部署至区块链节点;如图11所示,智能合约交易装置包括:
请求接收模块1001,用于接收智能合约交易请求;
地址确定模块1002,用于根据所述智能合约交易请求从节点进程中确定智能合约代码在节点内存中的调用地址;
交易模块1003,用于根据确定的调用地址从节点内存中获取智能合约代码执行智能合约交易。
本发明实施例提出的一种基于嵌入式智能合约的区块链部署、交易方法及装置,针对目前智能合约容器化部署存在的问题,如交易执行过程中的grpc通讯耗时、容器资源占用等。通过引入一种动态映射将智能合约机器码导入到进程内存中的技术,对智能合约代码进行形式化验证,将验证通过后的智能合约代码编译成目标文件,在智能合约部署的时候将目标文件中的函数信息动态映射到系统内存中,并且无需重启系统,以热更新的形式注入到原区块链网络系统中。同时,智能合约动态库句柄存储在系统内存中,随存随取,同样支持冻结和销毁操作,对用户使用方面,与容器化部署方式比较完全无感,无需改变原先用户操作习惯。去容器化后的系统,系统吞吐量提高约为容器化部署方式的十五倍,效果非常显著。
本发明通过动态映射将智能合约机器码导入到进程内存中,实现智能合约去容器化:智能合约完全脱离容器,实现轻量化部署,交易执行过程中与底层系统交互在同一进程内访问同一块内存,无需再建立系统与智能合约容器之间的grpc连接,也无需再进行容器之间的grpc通讯,避免这一通讯消耗后,交易执行速度大大提升,系统tps也随着提高。智能合约不再依赖容器后,系统维护的资源成本也随着降低。
本发明通过动态映射将智能合约机器码导入到进程内存中,实现智能合约采用热更新方式部署:利用动态内存映射的方式实现智能合约的热更新,智能合约部署或升级时无需重启区块链网络系统,在系统运行过程中将智能合约函数机器码映射到系统进程内存中,不影响其他功能,即插即用,同时也支持智能合约冻结和销毁。交易执行过程中,直接调用智能合约函数执行机器码,返回交易执行结果。
本发明实施例还提供一种电子设备,该电子设备可以是台式计算机、平板电脑及移动终端等,本实施例不限于此。在本实施例中,该电子设备可以参照前述实施例,其内容被合并于此,重复之处不再赘述。
图12为本发明实施例的电子设备600的系统构成的示意框图。如图12所示,该电子设备600可以包括中央处理器100和存储器140;存储器140耦合到中央处理器100。值得注意的是,该图是示例性的;还可以使用其他类型的结构,来补充或代替该结构,以实现电信功能或其他功能。
一实施例中,智能合约部署功能可以被集成到中央处理器100中。其中,中央处理器100可以被配置为进行如下控制:
接收用户进行智能合约部署的智能合约代码;
将所述智能合约代码写入节点内存;
将所述智能合约代码在所述节点内存中的调用地址映射至节点进程,实现智能合约部署。
一实施例中,智能合约交易功能也可以被集成到中央处理器100中。其中,将智能合约部署至至区块链节点后,中央处理器100可以被配置为进行如下控制:
接收智能合约交易请求;
根据所述智能合约交易请求从节点进程中确定智能合约代码在节点内存中的调用地址;
根据确定的调用地址从节点内存中获取智能合约代码执行智能合约交易。
在另一个实施方式中,智能合约部署或智能合约交易装置可以与中央处理器100分开配置,例如可以将智能合约部署或智能合约交易装置配置为与中央处理器100连接的芯片,通过中央处理器的控制来实现智能合约部署或智能合约交易功能。
如图12所示,该电子设备600还可以包括:通信模块110、输入单元120、音频处理单元130、显示器160、电源170。值得注意的是,电子设备600也并不是必须要包括图12中所示的所有部件;此外,电子设备600还可以包括图12中没有示出的部件,可以参考现有技术。
如图12所示,中央处理器100有时也称为控制器或操作控件,可以包括微处理器或其他处理器装置和/或逻辑装置,该中央处理器100接收输入并控制电子设备600的各个部件的操作。
其中,存储器140,例如可以是缓存器、闪存、硬驱、可移动介质、易失性存储器、非易失性存储器或其它合适装置中的一种或更多种。可储存上述与失败有关的信息,此外还可存储执行有关信息的程序。并且中央处理器100可执行该存储器140存储的该程序,以实现信息存储或处理等。
输入单元120向中央处理器100提供输入。该输入单元120例如为按键或触摸输入装置。电源170用于向电子设备600提供电力。显示器160用于进行图像和文字等显示对象的显示。该显示器例如可为LCD显示器,但并不限于此。
该存储器140可以是固态存储器,例如,只读存储器(ROM)、随机存取存储器(RAM)、SIM卡等。还可以是这样的存储器,其即使在断电时也保存信息,可被选择性地擦除且设有更多数据,该存储器的示例有时被称为EPROM等。存储器140还可以是某种其它类型的装置。存储器140包括缓冲存储器141(有时被称为缓冲器)。存储器140可以包括应用/功能存储部142,该应用/功能存储部142用于存储应用程序和功能程序或用于通过中央处理器100执行电子设备600的操作的流程。
存储器140还可以包括数据存储部143,该数据存储部143用于存储数据,例如联系人、数字数据、图片、声音和/或任何其他由电子设备使用的数据。存储器140的驱动程序存储部144可以包括电子设备的用于通信功能和/或用于执行电子设备的其他功能(如消息传送应用、通讯录应用等)的各种驱动程序。
通信模块110即为经由天线111发送和接收信号的发送机/接收机110。通信模块(发送机/接收机)110耦合到中央处理器100,以提供输入信号和接收输出信号,这可以和常规移动通信终端的情况相同。
基于不同的通信技术,在同一电子设备中,可以设置有多个通信模块110,如蜂窝网络模块、蓝牙模块和/或无线局域网模块等。通信模块(发送机/接收机)110还经由音频处理器130耦合到扬声器131和麦克风132,以经由扬声器131提供音频输出,并接收来自麦克风132的音频输入,从而实现通常的电信功能。音频处理器130可以包括任何合适的缓冲器、解码器、放大器等。另外,音频处理器130还耦合到中央处理器100,从而使得可以通过麦克风132能够在本机上录音,且使得可以通过扬声器131来播放本机上存储的声音。
本发明实施例还提供一种计算机可读程序,其中当在电子设备中执行所述程序时,所述程序使得计算机在所述电子设备中执行如上面实施例所述的智能合约部署、智能合约交易方法。
本发明实施例还提供一种存储有计算机可读程序的存储介质,其中所述计算机可读程序使得计算机在电子设备中执行上面实施例所述的智能合约部署、智能合约交易。
以上参照附图描述了本发明的优选实施方式。这些实施方式的许多特征和优点根据该详细的说明书是清楚的,因此所附权利要求旨在覆盖这些实施方式的落入其真实精神和范围内的所有这些特征和优点。此外,由于本领域的技术人员容易想到很多修改和改变,因此不是要将本发明的实施方式限于所例示和描述的精确结构和操作,而是可以涵盖落入其范围内的所有合适修改和等同物。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (12)
1.一种智能合约部署方法,其特征在于,所述的方法包括:
接收用户进行智能合约部署的智能合约代码;
将所述智能合约代码写入节点内存;
将所述智能合约代码在所述节点内存中的调用地址映射至节点进程,实现智能合约部署;
其中,所述的将所述智能合约代码写入节点内存包括:
编译智能合约源代码确定智能合约目标文件,其中,所述的目标文件包括:智能合约的符号表、虚拟地址、重定向数组、函数元数据结构及垃圾回收机制;
根据所述智能合约目标文件确定智能合约机器码;
利用内存映射将所述的智能合约机器码存储至节点内存并确定该智能合约机器码的指针地址;
其中,所述的根据所述智能合约目标文件确定智能合约机器码包括:
根据所述的重定向数组、函数元数据结构确定智能合约的机器码、汇编指令及偏移信息,区块链系统将这些内容写入自己的进程中并缓存在系统内存中。
2.如权利要求1所述的智能合约部署方法,其特征在于,所述的利用内存映射将所述的智能合约机器码存储至节点内存并确定该智能合约机器码的指针地址包括:
根据所述的虚拟地址和偏移信息确定物理内存地址;
利用内存映射和确定的物理内存地址将所述智能合约机器码存储至节点内存并确定智能合约机器码的指针地址。
3.如权利要求1所述的智能合约部署方法,其特征在于,所述的将所述智能合约代码写入节点内存还包括:
在所述节点内存中以键值构建存储智能合约调用方式存储结构;其中,键值对的键为智能合约ID,键值对的值包括:包含智能合约属性的结构体、即时区块链高度、状态码以及调用地址。
4.如权利要求3所述的智能合约部署方法,其特征在于,所述的将所述智能合约代码在所述节点内存中的调用地址映射至节点进程包括:
将所述智能合约ID写入节点进程;
利用所述键值对将所述智能合约代码在所述节点内存中的调用地址映射至节点进程。
5.一种智能合约部署装置,其特征在于,所述的装置包括:
接收模块,用于接收用户进行智能合约部署的智能合约代码;
写入模块,用于将所述智能合约代码写入节点内存;
映射模块,用于将所述智能合约代码在所述节点内存中的调用地址映射至节点进程,实现智能合约部署;
其中,所述的写入模块包括:
编译单元,用于编译智能合约源代码确定智能合约目标文件,其中,所述的目标文件包括:智能合约的符号表、虚拟地址、重定向数组、函数元数据结构及垃圾回收机制;
机器码确定单元,用于根据所述智能合约目标文件确定智能合约机器码;
内存映射单元,用于利用内存映射将所述的智能合约机器码存储至节点内存并确定该智能合约机器码的指针地址;
其中,所述的机器码确定单元根据所述的重定向数组、函数元数据结构确定智能合约的机器码、汇编指令及偏移信息,区块链系统将这些内容写入自己的进程中并缓存在系统内存中。
6.如权利要求5所述的智能合约部署装置,其特征在于,所述的内存映射单元包括:
地址确定单元,用于根据所述的虚拟地址和偏移信息确定物理内存地址;
内存映射处理单元,用于利用内存映射和确定的物理内存地址将所述智能合约机器码存储至节点内存并确定智能合约机器码的指针地址。
7.如权利要求5所述的智能合约部署装置,其特征在于,所述写入模块还包括:
存储结构构建单元,用于在所述节点内存中以键值对构建存储智能合约调用方式存储结构;其中,键值对的键为智能合约ID,键值对的值包括:包含智能合约属性的结构体、即时区块链高度、状态码以及调用地址。
8.如权利要求7所述的智能合约部署装置,其特征在于,所述的映射模块包括:
ID写入单元,用于将所述智能合约ID写入节点进程;
映射处理单元,用于利用所述键值对将所述智能合约代码在所述节点内存中的调用地址映射至节点进程。
9.一种智能合约交易方法,其特征在于,所述的方法包括:利用权利要求1-4中任一项所述的智能合约部署方法,将智能合约部署至区块链节点;
接收智能合约交易请求;
根据所述智能合约交易请求从节点进程中确定智能合约代码在节点内存中的调用地址;
根据确定的调用地址从节点内存中获取智能合约代码执行智能合约交易。
10.一种智能合约交易装置,其特征在于,所述的装置包括:利用权利要求5-8中任一项所述的智能合约部署装置,将智能合约部署至区块链节点;
请求接收模块,用于接收智能合约交易请求;
地址确定模块,用于根据所述智能合约交易请求从节点进程中确定智能合约代码在节点内存中的调用地址;
交易模块,用于根据确定的调用地址从节点内存中获取智能合约代码执行智能合约交易。
11.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至4任一项所述方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有执行权利要求1至4任一项所述方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010332543.9A CN111538521B (zh) | 2020-04-24 | 2020-04-24 | 智能合约部署、交易方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010332543.9A CN111538521B (zh) | 2020-04-24 | 2020-04-24 | 智能合约部署、交易方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111538521A CN111538521A (zh) | 2020-08-14 |
CN111538521B true CN111538521B (zh) | 2024-02-09 |
Family
ID=71977214
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010332543.9A Active CN111538521B (zh) | 2020-04-24 | 2020-04-24 | 智能合约部署、交易方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111538521B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111768187A (zh) * | 2020-08-31 | 2020-10-13 | 支付宝(杭州)信息技术有限公司 | 一种部署智能合约的方法、区块链节点和存储介质 |
CN111815330A (zh) * | 2020-08-31 | 2020-10-23 | 支付宝(杭州)信息技术有限公司 | 一种部署智能合约的方法、区块链节点和存储介质 |
CN111770206B (zh) * | 2020-08-31 | 2020-12-29 | 支付宝(杭州)信息技术有限公司 | 一种部署智能合约的方法、区块链节点和存储介质 |
CN112866392B (zh) | 2020-08-31 | 2023-06-30 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法、区块链节点、系统和存储介质 |
CN113220326B (zh) * | 2021-05-11 | 2022-09-16 | 支付宝(杭州)信息技术有限公司 | 智能合约升级方法及区块链系统 |
CN113220327B (zh) * | 2021-05-11 | 2022-09-16 | 支付宝(杭州)信息技术有限公司 | 智能合约升级方法及区块链系统 |
CN114168159A (zh) * | 2021-12-14 | 2022-03-11 | 深圳前海微众银行股份有限公司 | 智能合约部署方法、交易方法、装置及电子设备 |
CN116804949B (zh) * | 2023-07-29 | 2023-11-14 | 腾讯科技(深圳)有限公司 | 基于区块链的数据处理方法、装置、设备及可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108647009A (zh) * | 2018-03-22 | 2018-10-12 | 中钞信用卡产业发展有限公司杭州区块链技术研究院 | 区块链信息交互的装置、方法和存储介质 |
CN109040133A (zh) * | 2018-09-27 | 2018-12-18 | 上海点融信息科技有限责任公司 | 在区块链网络中安装智能合约的方法、装置及存储介质 |
CN110245506A (zh) * | 2019-05-30 | 2019-09-17 | 阿里巴巴集团控股有限公司 | 基于区块链的智能合约管理方法及装置、电子设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019170176A2 (en) * | 2019-06-28 | 2019-09-12 | Alibaba Group Holding Limited | System and method for data processing |
-
2020
- 2020-04-24 CN CN202010332543.9A patent/CN111538521B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108647009A (zh) * | 2018-03-22 | 2018-10-12 | 中钞信用卡产业发展有限公司杭州区块链技术研究院 | 区块链信息交互的装置、方法和存储介质 |
CN109040133A (zh) * | 2018-09-27 | 2018-12-18 | 上海点融信息科技有限责任公司 | 在区块链网络中安装智能合约的方法、装置及存储介质 |
CN110245506A (zh) * | 2019-05-30 | 2019-09-17 | 阿里巴巴集团控股有限公司 | 基于区块链的智能合约管理方法及装置、电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111538521A (zh) | 2020-08-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111538521B (zh) | 智能合约部署、交易方法及装置 | |
US8719810B2 (en) | Program upgrade system and method for over the air-capable mobile terminal | |
US7657886B1 (en) | Mobile device with a MMU for faster firmware updates in a wireless network | |
EP1926022B1 (en) | Apparatus and method for efficient memory use in portable terminal | |
KR101555210B1 (ko) | 휴대용 단말기에서 내장 대용량 메모리를 이용한 컨텐츠 다운로드 방법 및 장치 | |
CN109710185B (zh) | 数据处理方法及装置 | |
CN102012831A (zh) | 基于Linux平台的OTA升级方法 | |
CN114398318B (zh) | 用户空间文件系统的文件操作方法及用户空间文件系统 | |
CN112463230A (zh) | 程序运行方法及装置、电子设备、存储介质 | |
CN116028455A (zh) | 一种数据处理方法、装置、存储介质及电子设备 | |
CN114840214A (zh) | 程序编译和启动方法、设备及存储介质 | |
JP6944576B2 (ja) | キャッシュデバイス、命令キャッシュ、命令処理システム、データ処理方法、データ処理装置、コンピュータ可読記憶媒体及びコンピュータプログラム | |
CN108399076A (zh) | 一种基于uefi的固件更新方法与装置 | |
CN109727183B (zh) | 一种图形渲染缓冲区压缩表的调度方法及装置 | |
CN116166570A (zh) | 一种垃圾回收方法及装置 | |
US8019985B2 (en) | Data-processing arrangement for updating code in an auxiliary processor memory | |
KR20100050098A (ko) | 영상처리장치 및 그 제어 방법 | |
CN109254858A (zh) | 活动窗口的数据共享方法、装置、设备及存储介质 | |
WO2021203591A1 (zh) | 异构云存储系统的数据处理方法及其可读介质和系统 | |
US20080133794A1 (en) | System and method for redirecting input/output (I/O) sequences | |
CN101876898A (zh) | 一种com组件的注册方法及装置 | |
CN114090083A (zh) | 一种可视化组件配置方法、装置、设备及存储介质 | |
CN116643778B (zh) | 一种应用程序优化方法及电子设备 | |
CN111143083B (zh) | 数据的传输方法和装置、存储介质、电子装置 | |
CN116661812B (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 |