CN113688186B - 智能合约执行方法、引擎及区块链节点 - Google Patents
智能合约执行方法、引擎及区块链节点 Download PDFInfo
- Publication number
- CN113688186B CN113688186B CN202110980479.XA CN202110980479A CN113688186B CN 113688186 B CN113688186 B CN 113688186B CN 202110980479 A CN202110980479 A CN 202110980479A CN 113688186 B CN113688186 B CN 113688186B
- Authority
- CN
- China
- Prior art keywords
- intelligent contract
- contract
- block chain
- execution
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请实施例提供一种智能合约执行方法、引擎及区块链节点,可用于区块链技术领域,方法包括:基于智能合约全生命周期管理入口获取针对目标区块链节点的区块链数据处理请求对应的目标处理类型;确定目标区块链节点中的虚拟机内的目标处理类型对应的智能合约实例;基于多语言合约工具包执行智能合约实例对应的智能合约代码以生成区块链数据处理请求对应的智能合约执行结果;与目标区块链节点的账本通讯以生成变更账本数据,并根据变更账本数据和智能合约执行结果生成对应的区块。本申请能够有效提高智能合约执行的通用性、效率、易扩展性及易用性,使得智能合约运行在区块链节点内部的独立环境中以防止被破坏,提高智能合约执行的安全性。
Description
技术领域
本申请涉及数据处理技术领域,特别涉及区块链技术领域,具体涉及智能合约执行方法、引擎及区块链节点。
背景技术
自以太坊将区块链系统应用扩展到了数字资产与通用智能合约的范畴以来,智能合约已经成为第二代区块链的核心标识。以太坊系统提供以太坊虚拟机EVM(EthereumVirtual Machine),合约代码在EVM内部运行,以太坊用户使用特定的语言编写智能合约代码,并编译成EVM字节码运行;超级账本(Hyperledger Fabric)提供另一种图灵完备的智能合约实现方式,它利用Docker容器环境来运行多种语言实现的智能合约,即智能合约能用多种不同的语言进行编写,之后被编译器编译并打包进Docker镜像,以容器作为运行环境。
目前联盟链中主流的智能合约实现方案都是基于Docker以容器的方式在区块链节点外部运行智能合约,智能合约在运行中通过建立GRPC链接来实现与区块链节点的信息交换。
然而,现有的以Docker+GRPC的方式,因其定义了一套标准的GRPC接口,且语言支持依赖于GRPC协议,因此使得现有的智能合约运行方式存在因GRPC协议的使用导致多语言支持工作量大且易用性差、因采用GRPC接口等导致的通用性差以及因脱离节点运行等造成的安全性差等问题。
发明内容
针对现有技术中的问题,本申请提供一种智能合约执行方法、引擎及区块链节点,能够有效提高智能合约执行的通用性,并能够有效提高智能合约执行的效率、易扩展性及易用性,能够使得智能合约运行在区块链节点内部的独立环境中以防止被其他恶意程序破坏,提高智能合约执行的安全性。
为解决上述技术问题,本申请提供以下技术方案:
第一方面,本申请提供一种智能合约执行方法,包括:
基于预设的智能合约全生命周期管理入口获取针对目标区块链节点的区块链数据处理请求对应的目标处理类型;
确定所述目标区块链节点中的虚拟机内的所述目标处理类型对应的智能合约实例;
基于预设的多语言合约工具包执行所述智能合约实例对应的智能合约代码以生成所述区块链数据处理请求对应的智能合约执行结果;
与所述目标区块链节点的账本通讯以生成对应的变更账本数据,并根据该变更账本数据和所述智能合约执行结果生成对应的区块。
进一步地,所述基于预设的智能合约全生命周期管理入口获取针对目标区块链节点的区块链数据处理请求对应的目标处理类型,包括:
基于预设的智能合约全生命周期管理入口接收针对目标区块链节点的区块链数据处理请求,其中,该区块链数据处理请求由客户端设备发送至目标区块链节点,并经该目标区块链节点调取预设的网络协议及共识算法,将所述区块链数据处理请求同步至目标区块链中的其他区块链节点;
获取所述区块链数据处理请求对应的目标处理类型,该目标处理类型包括:创建、部署或调用。
进一步地,所述确定所述目标区块链节点中的虚拟机内的所述目标处理类型对应的智能合约实例,包括:
基于所述目标处理类型和所述区块链数据处理请求对应的执行参数,创建或调用所述目标区块链节点中的虚拟机内的智能合约实例;
以及,为所述智能合约实例添加对应的运行环境数据。
进一步地,所述基于预设的多语言合约工具包执行所述智能合约实例对应的智能合约代码以生成所述区块链数据处理请求对应的智能合约执行结果,包括:
基于预设的多语言合约工具包执行所述智能合约实例对应的智能合约代码,以生成对应的智能合约执行结果;
调用预设的节点通讯机制与所述目标区块链节点对应的通讯连接模块之间通讯。
进一步地,所述与所述目标区块链节点的账本通讯以生成对应的变更账本数据,并根据该变更账本数据和所述智能合约执行结果生成对应的区块,包括:
基于所述通讯连接模块与所述目标区块链节点的账本通讯,以根据预设的智能合约代码逻辑参数对实现所述目标区块链节点的账本和缓存之间的操作,生成存储有对应的变更账本数据的读写集;
基于所述读写集、所述智能合约执行结果、目标区块链当前最新的区块哈希值以及默克尔树根哈希值,生成所述目标区块链对应的新区块。
第二方面,本申请提供一种智能合约执行引擎,包括:
合约管理模块,用于基于预设的智能合约全生命周期管理入口获取针对目标区块链节点的区块链数据处理请求对应的目标处理类型;
解析执行模块,用于确定所述目标区块链节点中的虚拟机内的所述目标处理类型对应的智能合约实例;
合约语言工具包模块,用于基于预设的多语言合约工具包执行所述智能合约实例对应的智能合约代码以生成所述区块链数据处理请求对应的智能合约执行结果;
通讯连接模块,用于与所述目标区块链节点的账本通讯以生成对应的变更账本数据,并根据该变更账本数据和所述智能合约执行结果生成对应的区块。
进一步地,所述智能合约执行引擎还包括:运行环境模块,用于为所述智能合约实例添加对应的运行环境数据;
所述运行环境模块、解析执行模块和合约语言工具包模块构成所述智能合约执行引擎的一核心层,所述核心层、通讯连接模块和合约管理模块构成所述智能合约执行引擎的一调用层;
所述调用层经由所述通讯连接模块与所述目标区块链节点的节点存储层之间通讯,其中,该节点存储层用于存储账本、缓存、区块、历史记录以及读写集;
所述合约管理模块与所述目标区块链节点的交易处理层之间连接。
进一步地,所述智能合约执行引擎中的所述解析执行模块包括WASM解析执行模块;
相对应的,所述核心层还包括:第三方工具,该第三方工具包括:wagon解释器、wasmer解释器和wavm解释器中的至少一种。
第三方面,本申请提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述区块链节点上安装有一智能合约执行引擎,该智能合约执行引擎用于执行所述的智能合约执行方法,所述处理器执行所述计算机程序时与所述智能合约执行引擎之间进行数据交互。
第四方面,本申请提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时与一智能合约执行引擎之间进行数据交互,该智能合约执行引擎用于执行所述的智能合约执行方法。
由上述技术方案可知,本申请提供的一种智能合约执行方法、引擎及区块链节点,方法包括:基于预设的智能合约全生命周期管理入口获取针对目标区块链节点的区块链数据处理请求对应的目标处理类型;确定所述目标区块链节点中的虚拟机内的所述目标处理类型对应的智能合约实例;基于预设的多语言合约工具包执行所述智能合约实例对应的智能合约代码以生成所述区块链数据处理请求对应的智能合约执行结果;与所述目标区块链节点的账本通讯以生成对应的变更账本数据,并根据该变更账本数据和所述智能合约执行结果生成对应的区块;通过智能合约全生命周期管理入口以及与所述目标区块链节点的账本通讯的技术设计,能够有效使得区块链适用于不同的应用场景,能够支持智能合约的动态加载,进而能够使得区块链平台支持不同智能合约的同时运行,同时能够对合约生命周期进行管理,具体包括智能合约的部署、实例化、更新、停用等阶段,进而能够有效提高智能合约执行的通用性;通过多语言合约工具包以及与所述目标区块链节点的账本通讯的技术设计,使得针对不同语言并不需要额外实现一套单独的GRPC接口,因此能够有效降低扩展多语言工作量,实现友好的多语言支持,进而能够有效提高智能合约执行的效率、易扩展性及易用性;通过在目标区块链节点中的虚拟机内执行智能合约,能够使得智能合约运行在独立的环境中以防止被其他恶意程序破坏,进而能够使得区块链同一时间可能运行着的多个不同业务的智能合约之间互不干扰彼此独立,进而能够有效提高智能合约执行的安全性,使得智能合约执行方法具备独立性、图灵完备、多语言支持、灵活扩展等特性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例中的智能合约执行引擎、区块链节点与客户端设备之间的关系示意图。
图2是本申请实施例中的智能合约执行方法的第一种流程示意图。
图3是本申请实施例中的智能合约执行方法的第二种流程示意图。
图4是本申请实施例中的智能合约执行方法的第三种流程示意图。
图5是本申请实施例中的智能合约执行方法的第四种流程示意图。
图6是本申请实施例中的智能合约执行方法的第五种流程示意图。
图7是本申请实施例中的智能合约执行引擎的结构示意图。
图8是本申请提供的智能合约执行引擎与区块链的整体架构分层示意图。
图9是本申请应用实例提供的调用层与核心层的子系统划分示意图。
图10是本申请应用实例提供的基于智能合约执行引擎实现的智能合约执行方法的总体流程示意图。
图11是本申请应用实例提供的智能合约内部的执行流程示意图。
图12是本申请应用实例提供的合约管理模块的整体执行流程示意图。
图13是本申请应用实例提供的合约管理模块的功能示意图。
图14是本申请应用实例提供的通讯连接模块的功能示意图。
图15是本申请应用实例提供的WASM的功能示意图。
图16是本申请应用实例提供的运行环境模块的功能示意图。
图17是本申请应用实例提供的合约语言工具包模块的功能示意图。
图18是本申请实施例中的电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请公开的智能合约执行方法和装置可用于区块链技术领域,也可用于除区块链技术领域之外的任意领域,本申请公开的智能合约执行方法和装置的应用领域不做限定。
在本申请的一个或多个实施例中,智能合约最早可以追溯到1995年,最初定义为“一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议”,是由用户通过交易部署到区块链中的可执行代码,被指定的交易调用在节点上执行一些功能,如传递信息、修改区块链状态、进行图灵完备计算等。区块链与智能合约的结合是区块链2.0的核心也是后续区块链应用与扩展的基石。一方面,区块链为智能合约的执行提供了无需第三方的可信交易环境,保证合约产生的交易内容可追踪且不可逆转;另一方面,智能合约也赋予了区块链支撑复杂业务逻辑的能力,极大的扩宽了区块链的应用场景,为区块链从传统的金融记账领域向其他领域发展打下了基础。
在本申请的一个或多个实施例中,WASM(WebAssembly)是一种新型的能够,运行在浏览器中的字节码。它类似于汇编语言,其二进制格式具有很高的紧凑性,能够极大的缩小目标代码文件的大小、提高应用程序分发效率。此外WASM字节码具有高效率运行的优势,同时WASM能够提供像C/C++、Rust、Golang等类型语言的编译目标,使得采用这些语言编写的应用程序能够运行于浏览器中。智能合约系统使用WASM字节码来表示和执行智能合约程序代码,通过wagon、wasmer、wavm等第三方工具作为智能合约虚拟机执行引擎。
在本申请的一个或多个实施例中,RPC的语义是远程过程调用,实际上是指提供一套机制,使得应用程序之间可以镜像通讯,并且也遵循server/client模型,使用时client端调用server端提供的接口就像调用本地的函数一样,一般基于TCP长连接进行数据交互达成。而GRPC就是一套高性能、开源的通用RPC框架。
在本申请的一个或多个实施例中,容器Docker:一种轻量化沙盒虚拟机的实现技术,容器Docker可以让开发者打包应用以及依赖包到一个轻量级、可移植的容器中,然后可发布到任何Linux机器上实现虚拟化。容器完全使用沙箱机制,相互之间不会有任何接口并且性能开销极低。
现有的智能合约执行方式以Docker+GRPC的方式,定义了一套标准的GRPC接口,其多语言的支持依赖于GRPC协议对多语言支持,其主要缺点如下:
(1)对多语言支持不够友好:针对不同语言除了SDK外都需要额外实现一套单独的GRPC接口,扩展多语言工作量大;
(2)通用性较差:基于固定的一套GRPC接口接入方式,使得其难以适用于其他区块链底层;
(3)存在安全风险:智能合约以Docker容器的方式脱离节点运行提了高区块链的安全风险,若智能合约容器受到攻击则整个区块链系统都会收到影响。
智能合约作为区块链核心业务执行单元,在区块链的交易流程中扮演者至关重要的作用,因此,基于上述现有的智能合约执行方式存在的问题,本申请的提供的智能合约执行方法及其中的智能合约,能够与区块链中其他模块相互配合以达到在性能、通用性方面的改进,因此对于智能合约系统有以下几个方面的需求:
(1)通用性方面:为了使得区块链适用于不同的应用场景,合约支撑系统需要支持智能合约的动态加载,以保证区块链平台支持不同智能合约的同时运行,对合约生命周期进行管理,具体包括智能合约的部署、实例化、更新、停用等阶段;
(2)安全性方面:区块链同一时间可能运行着多个不同业务的智能合约,每个合约有自己独立的数据和代码,因此需要保证合约之间互不干扰彼此独立,合约应该运行在独立的环境中以防止被其他恶意程序破坏;
(3)易用性方面:合约需要实现对多语言的支持并在对外的模块设计上使用面向接口的设计方式,定义标准接口实现,达到多语言易扩展、区块链底层易接入的目标。
本申请克服了现有技术中扩展较复杂、通用性较差以及安全性较差等缺点,提供了一种易接入、易扩展的区块链多语言的智能合约执行方法、引擎及区块链节点。
基于此,针对现有的智能合约执行方法存在扩展较复杂、通用性较差以及安全性较差等问题,本申请实施例提供一种智能合约执行方法,基于预设的智能合约全生命周期管理入口获取针对目标区块链节点的区块链数据处理请求对应的目标处理类型;确定所述目标区块链节点中的虚拟机内的所述目标处理类型对应的智能合约实例;基于预设的多语言合约工具包执行所述智能合约实例对应的智能合约代码以生成所述区块链数据处理请求对应的智能合约执行结果;与所述目标区块链节点的账本通讯以生成对应的变更账本数据,并根据该变更账本数据和所述智能合约执行结果生成对应的区块;通过智能合约全生命周期管理入口以及与所述目标区块链节点的账本通讯的技术设计,能够有效使得区块链适用于不同的应用场景,能够支持智能合约的动态加载,进而能够使得区块链平台支持不同智能合约的同时运行,同时能够对合约生命周期进行管理,具体包括智能合约的部署、实例化、更新、停用等阶段,进而能够有效提高智能合约执行的通用性;通过多语言合约工具包以及与所述目标区块链节点的账本通讯的技术设计,使得针对不同语言并不需要额外实现一套单独的GRPC接口,因此能够有效降低扩展多语言工作量,实现友好的多语言支持,进而能够有效提高智能合约执行的效率、易扩展性及易用性;通过在目标区块链节点中的虚拟机内执行智能合约,能够使得智能合约运行在独立的环境中以防止被其他恶意程序破坏,进而能够使得区块链同一时间可能运行着的多个不同业务的智能合约之间互不干扰彼此独立,进而能够有效提高智能合约执行的安全性,使得智能合约执行方法具备独立性、图灵完备、多语言支持、灵活扩展等特性。
基于上述内容,本申请还提供一种用于实现本申请一个或多个实施例中提供的智能合约执行方法的智能合约执行引擎,该智能合约执行引擎可以以虚拟机的形式安装在区块链节点上,所述区块链节点可以为服务器,参见图1,该区块链节点可以自行或通过第三方服务器等与各个客户端设备之间依次通信连接。
前述的智能合约执行引擎进行智能合约执行的部分可以在如上述内容的服务器中执行,在另一种实际应用情形中,若所述区块链节点也为一客户端设备,那么前述的智能合约执行引擎进行智能合约执行的部分也可以所有的操作都在该客户端设备中完成。具体可以根据所述用户端设备的处理能力,以及用户使用场景的限制等进行选择。本申请对此不作限定。若所有的操作都在所述客户端设备中完成,所述客户端设备还可以包括处理器,用于智能合约执行的具体处理。
可以理解的是,所述客户端设备可以包括智能手机、平板电子设备、网络机顶盒、便携式计算机、个人数字助理(PDA)、车载设备、智能穿戴设备等任何能够装载应用的移动设备。其中,所述智能穿戴设备可以包括智能眼镜、智能手表、智能手环等。
上述的客户端设备可以具有通信模块(即通信单元),可以与远程的服务器进行通信连接,实现与所述服务器的数据传输。所述服务器可以包括任务调度中心一侧的服务器,其他的实施场景中也可以包括中间平台的服务器,例如与任务调度中心服务器有通信链接的第三方服务器平台的服务器。所述的服务器可以包括单台计算机设备,也可以包括多个服务器组成的服务器集群,或者分布式装置的服务器结构。
上述服务器与所述客户端设备之间可以使用任何合适的网络协议进行通信,包括在本申请提交日尚未开发出的网络协议。所述网络协议例如可以包括TCP/IP协议、UDP/IP协议、HTTP协议、HTTPS协议等。当然,所述网络协议例如还可以包括在上述协议之上使用的RPC协议(Remote Procedure Call Protocol,远程过程调用协议)、REST协议(Representational State Transfer,表述性状态转移协议)等。
具体通过下述各个实施例及应用实例分别进行详细说明。
为了解决现有的智能合约执行方法存在扩展较复杂、通用性较差以及安全性较差等问题,本申请提供一种智能合约执行方法的实施例,参见图2,基于智能合约执行引擎执行的所述智能合约执行方法具体包含有如下内容:
步骤100:基于预设的智能合约全生命周期管理入口获取针对目标区块链节点的区块链数据处理请求对应的目标处理类型。
在步骤100中,智能合约执行引擎中的合约管理模块为其所在的区块链节点提供智能合约生命周期管理的统一入口,合约管理模块负责提供合约的部署、更新、调用、验证等方法给节点的执行层或交易处理层调用,以基于预设的智能合约全生命周期管理入口获取针对目标区块链节点的区块链数据处理请求对应的目标处理类型。在本申请的一个或多个实施例中,合约管理模块可以写作Manager。
可以理解的是,区块链中各个区块链节点在虚拟机中执行合约代码(也可称作调用智能合约),就执行结果达成共识,并相应地更新区块链上智能合约的状态。智能合约可以基于其收到的交易读/写用户私人存储,将钱存入其账户余额,可以发送/接收消息或来自用户/其他智能合约的数字资产,甚至创建新的智能合约。
步骤200:确定所述目标区块链节点中的虚拟机内的所述目标处理类型对应的智能合约实例。
在步骤200中,智能合约执行引擎中的解析执行模块能够确定(创建新的或调用已存在的)所述目标区块链节点中的虚拟机内的所述目标处理类型对应的智能合约实例。解析执行模块为智能合约执行引擎的核心模块,负责解析和执行合约文件,编译后的合约文件具备高效率、轻量化、跨平台和多语言支持的特性,配合运行环境提供的各类系统与通讯方法,实现合约的跨平台多语言灵活调用和执行。同时解析执行模块也提供了一套统一的接口标准,便于集成扩展更优秀的解析工具。其中,解析执行模块可以采用WASM实现,具体可以写作WASM模块或WASM解析执行模块。
步骤300:基于预设的多语言合约工具包执行所述智能合约实例对应的智能合约代码以生成所述区块链数据处理请求对应的智能合约执行结果。
在步骤300中,智能合约执行引擎中的合约语言工具包模块基于预设的多语言合约工具包执行所述智能合约实例对应的智能合约代码以生成所述区块链数据处理请求对应的智能合约执行结果。
可以理解的是,合约语言工具包模块主要为智能合约的编写提供通用的依赖与引用,让合约开发者不需要关注底层实现,如:节点通讯、反射、上下文解析、账本操作、区块与区块高度查询等。具体可以采用SDK来满足多语言支持的特性,需要根据不同的语言实现不同版本的封装,并且需要与运行环境配合联调实现。
步骤400:与所述目标区块链节点的账本通讯以生成对应的变更账本数据,并根据该变更账本数据和所述智能合约执行结果生成对应的区块。
在步骤400中,智能合约执行引擎中的通讯连接模块与所述目标区块链节点的账本通讯以生成对应的变更账本数据,并根据该变更账本数据和所述智能合约执行结果生成对应的区块。其中,通讯连接模块可以写作Bridge。
可以理解的是,通讯连接模块是节点和合约的中间层,在负责节点与合约运行时通讯的同时还作为节点与合约虚拟机交互的统一入口,为节点提供合约实例创建、虚拟机管理、存储、合约持久化等交互方法。合约编写中的账本/缓存、事件等常用系统级方法的调用也在通讯连接模块Bridge中实现,有效的对合约环境和节点环境进行了隔离,便于后续扩展和集成更多的合约执行模式;同时,通讯连接模块也定义了各类交互的参数和接口规范。
从上述描述可知,本申请实施例提供的智能合约执行方法,通过智能合约全生命周期管理入口以及与所述目标区块链节点的账本通讯的技术设计,能够有效使得区块链适用于不同的应用场景,能够支持智能合约的动态加载,进而能够使得区块链平台支持不同智能合约的同时运行,同时能够对合约生命周期进行管理,具体包括智能合约的部署、实例化、更新、停用等阶段,进而能够有效提高智能合约执行的通用性;通过多语言合约工具包以及与所述目标区块链节点的账本通讯的技术设计,使得针对不同语言并不需要额外实现一套单独的GRPC接口,因此能够有效降低扩展多语言工作量,实现友好的多语言支持,进而能够有效提高智能合约执行的效率、易扩展性及易用性;通过在目标区块链节点中的虚拟机内执行智能合约,能够使得智能合约运行在独立的环境中以防止被其他恶意程序破坏,进而能够使得区块链同一时间可能运行着的多个不同业务的智能合约之间互不干扰彼此独立,进而能够有效提高智能合约执行的安全性,使得智能合约执行方法具备独立性、图灵完备、多语言支持、灵活扩展等特性。
为了对合约生命周期进行管理,在本申请提供的智能合约执行方法的一个实施例,参见图3,所述智能合约执行方法的步骤100具体包含有如下内容:
步骤110:基于预设的智能合约全生命周期管理入口接收针对目标区块链节点的区块链数据处理请求,其中,该区块链数据处理请求由客户端设备发送至目标区块链节点,并经该目标区块链节点调取预设的网络协议及共识算法,将所述区块链数据处理请求同步至目标区块链中的其他区块链节点。
步骤120:获取所述区块链数据处理请求对应的目标处理类型,该目标处理类型包括:创建、部署或调用。
具体来说,合约管理模块Manager负责对节点上的合约进行管控,作为智能合约管理入口,为节点提供全生命周期管理服务。合约管理模块Manager围绕着合约的生命周期管理来设计,合约的生命周期分为合约部署、合约实例化、合约更新、合约停用和合约重用等阶段。平台使用者按照合约开发规范编写智能合约后,通过部署接口即可将合约部署到平台的每个分布式节点上,每个节点都将保存一份独立的智能合约;之后调用实例化接口,生命周期合约管理模块将为合约的运行做好相应的准备并启动以server形式运行的合约;此时合约即可对外提供服务,通过合约调用接口发送合约调用请求后将触发合约具体方法的执行;如果合约功能需要停用或更新时调用合约停用和更新接口即可完成。
从上述描述可知,本申请实施例提供的智能合约执行方法,通过提供合约的部署、更新、调用、验证等方法给节点的执行层或交易处理层调用,使区块链节点不需要关注合约引擎内部的实现,简化了接入过程与调用过程,能够有效使得区块链适用于不同的应用场景,能够支持智能合约的动态加载,进而能够使得区块链平台支持不同智能合约的同时运行,同时能够对合约生命周期进行管理,具体包括智能合约的部署、实例化、更新、停用等阶段,进而能够有效提高智能合约执行的通用性。
为了使得智能合约运行在独立的环境中以防止被其他恶意程序破坏,在本申请提供的智能合约执行方法的一个实施例,参见图4,所述智能合约执行方法的步骤200具体包含有如下内容:
步骤210:基于所述目标处理类型和所述区块链数据处理请求对应的执行参数,创建或调用所述目标区块链节点中的虚拟机内的智能合约实例。
步骤220:为所述智能合约实例添加对应的运行环境数据。
具体来说,利用解析执行模块中Export输出与Import引入等特性构建中间方实现合约执行、合约通讯、数据交换等系统方法,规范合约编写机制。其中,通讯连接模块Bridge作为通讯层实现了区块链节点与wasm虚拟机的通讯机制;合约SDK制定了各类语言的合约编写规范,封装了合约相关方法,使合约开发者不需要关注底层实现;合约管理模块Manager为节点提供了智能合约生命周期管理的统一入口;运行环境Runtime为wasm虚拟机提供了运行环境和系统方法的支持,包括合约数据交换、方法执行等;解析执行模块实现了底层智能合约虚拟机运行机制,负责处理智能合约实例化、注销以及执行等操作。
从上述描述可知,本申请实施例提供的智能合约执行方法,通过负责解析和执行智能合约文件,编译后的智能合约文件具备高效率、轻量化、跨平台和多语言支持的特性,配合运行环境提供的各类系统与通讯方法,实现合约的跨平台多语言灵活调用和执行,能够使得智能合约运行在独立的环境中以防止被其他恶意程序破坏,进而能够使得区块链同一时间可能运行着的多个不同业务的智能合约之间互不干扰彼此独立,进而能够有效提高智能合约执行的安全性,使得智能合约执行方法具备独立性、图灵完备、多语言支持、灵活扩展等特性。
为了提高智能合约执行的效率、易扩展性及易用性,在本申请提供的智能合约执行方法的一个实施例,参见图5,所述智能合约执行方法的步骤300具体包含有如下内容:
步骤310:基于预设的多语言合约工具包执行所述智能合约实例对应的智能合约代码,以生成对应的智能合约执行结果。
步骤320:调用预设的节点通讯机制与所述目标区块链节点对应的通讯连接模块之间通讯。
具体来说,智能合约支持GO、C/C++、Java等常用语言开发,编写时可通过合约SDK提供的方法实现合约开发获取、插入、删除、获取交易ID等常用操作。WASM本身只是一个指令集,并没有限定运行环境,因此只要实现相应的解释器,WASM也可以运行在非浏览器环境。智能合约的运行正是这样的应用场景,通过用C++、GO、Rust等高级语言来编写智能合约,再编译成WASM字节码,最后由基于第三方工具封装的虚拟机来运行。基于WASM多语言支持的特性,智能合约将能够用可以编译成WASM的任何语言开发,并通过其Import的特性实现合约与节点的信息交换与其他系统级功能(内存与资源分配等)的支持,同时集成相应的编译工具以支持主流语言编译成WASM。
从上述描述可知,本申请实施例提供的智能合约执行方法,通过为合约的编写提供通用的依赖与引用,让合约开发者不需要关注底层实现,如:节点通讯、反射、上下文解析、账本操作、区块与区块高度查询等,SDK能够满足多语言支持的特性,可以根据不同的语言实现不同版本的封装,能够有效降低扩展多语言工作量,实现友好的多语言支持,进而能够有效提高智能合约执行的效率、易扩展性及易用性。
为了提高智能合约执行的通用性、易扩展性及易用性,在本申请提供的智能合约执行方法的一个实施例,参见图6,所述智能合约执行方法的步骤400具体包含有如下内容:
步骤410:基于所述通讯连接模块与所述目标区块链节点的账本通讯,以根据预设的智能合约代码逻辑参数对实现所述目标区块链节点的账本和缓存之间的操作,生成存储有对应的变更账本数据的读写集。
步骤420:基于所述读写集、所述智能合约执行结果、目标区块链当前最新的区块哈希值以及默克尔树根哈希值,生成所述目标区块链对应的新区块。
可以理解的是,通讯连接模块作为中间层继承了合约创建、部署、管理、存储、上下文等合约操作层面的方法,为节点提供了统一的合约访问与调用的入口。
从上述描述可知,本申请实施例提供的智能合约执行方法,通过负责节点与合约运行时通讯的同时还作为节点与合约虚拟机交互的统一入口,为节点提供合约实例创建、虚拟机管理、存储、合约持久化等交互方法,合约编写中的账本/缓存、事件等常用系统级方法的调用也在通讯模块中实现,有效的对合约环境和节点环境进行了隔离,便于后续扩展和集成更多的合约执行模式,能够有效提高智能合约执行的通用性、易扩展性及易用性。
从软件层面来说,为了解决现有的智能合约执行方法存在扩展较复杂、通用性较差以及安全性较差等问题,本申请提供一种用于执行所述智能合约执行方法中全部或部分内容的智能合约执行引擎的实施例,参见图7,所述智能合约执行引擎具体包含有如下内容:
合约管理模块10,用于基于预设的智能合约全生命周期管理入口获取针对目标区块链节点的区块链数据处理请求对应的目标处理类型;
解析执行模块20,用于确定所述目标区块链节点中的虚拟机内的所述目标处理类型对应的智能合约实例;
合约语言工具包模块30,用于基于预设的多语言合约工具包执行所述智能合约实例对应的智能合约代码以生成所述区块链数据处理请求对应的智能合约执行结果;
通讯连接模块40,用于与所述目标区块链节点的账本通讯以生成对应的变更账本数据,并根据该变更账本数据和所述智能合约执行结果生成对应的区块。
本申请提供的智能合约执行引擎的实施例具体可以用于执行上述实施例中的智能合约执行方法的实施例的处理流程,其功能在此不再赘述,可以参照上述方法实施例的详细描述。
从上述描述可知,本申请实施例提供的智能合约执行引擎,通过智能合约全生命周期管理入口以及与所述目标区块链节点的账本通讯的技术设计,能够有效使得区块链适用于不同的应用场景,能够支持智能合约的动态加载,进而能够使得区块链平台支持不同智能合约的同时运行,同时能够对合约生命周期进行管理,具体包括智能合约的部署、实例化、更新、停用等阶段,进而能够有效提高智能合约执行的通用性;通过多语言合约工具包以及与所述目标区块链节点的账本通讯的技术设计,使得针对不同语言并不需要额外实现一套单独的GRPC接口,因此能够有效降低扩展多语言工作量,实现友好的多语言支持,进而能够有效提高智能合约执行的效率、易扩展性及易用性;通过在目标区块链节点中的虚拟机内执行智能合约,能够使得智能合约运行在独立的环境中以防止被其他恶意程序破坏,进而能够使得区块链同一时间可能运行着的多个不同业务的智能合约之间互不干扰彼此独立,进而能够有效提高智能合约执行的安全性,使得智能合约执行方法具备独立性、图灵完备、多语言支持、灵活扩展等特性。
在本申请提供的智能合约执行引擎的一个实施例,所述智能合约执行引擎还具体包含有如下内容:
运行环境模块,用于为所述智能合约实例添加对应的运行环境数据;所述运行环境模块、解析执行模块和合约语言工具包模块构成所述智能合约执行引擎的一核心层,所述核心层、通讯连接模块和合约管理模块构成所述智能合约执行引擎的一调用层;所述调用层经由所述通讯连接模块与所述目标区块链节点的节点存储层之间通讯,其中,该节点存储层用于存储账本、缓存、区块、历史记录以及读写集;所述合约管理模块与所述目标区块链节点的交易处理层之间连接。
从上述描述可知,本申请实施例提供的智能合约执行引擎,通讯连接模块作为通讯层实现了区块链节点与虚拟机的通讯机制;合约语言工具包模块制定了各类语言的合约编写规范,封装了合约相关方法,使合约开发者不需要关注底层实现;合约管理模块为节点提供了智能合约生命周期管理的统一入口;运行环境为虚拟机提供了运行环境和系统方法的支持,包括合约数据交换、方法执行等;解析执行模块实现了底层智能合约虚拟机运行机制,负责处理智能合约实例化、注销以及执行等操作。
在本申请提供的智能合约执行引擎的一个实施例,所述解析执行模块包括WASM解析执行模块;相对应的,所述核心层还包括:第三方工具,该第三方工具包括:wagon解释器、wasmer解释器和wavm解释器中的至少一种。
从上述描述可知,本申请实施例提供的智能合约执行引擎,利用WASM中Export输出与Import引入等特性构建中间方实现合约执行、合约通讯、数据交换等系统方法,规范合约编写机制。智能合约支持GO、C/C++、Java等常用语言开发,编写时可通过合约SDK提供的方法实现合约开发获取、插入、删除、获取交易ID等常用操作。合约编写完成之后利用工具生成wasm可执行文件,智能合约系统使用整合好的第三方工具进行解析或编译,如:wagon、wasmer、wavm等。
参见图8,智能合约执行引擎的整体架构分层中各层说明如下:
(1)核心层:智能合约核心逻辑实现,提供WASM第三方工具处理、多语言SDK支持、虚拟机运行环境系统方法、智能合约的编译、实例化、运行等核心生命周期方法等。
其中,核心层中的第三方是指第三方工具,底层利用wasmer工具作为wasm的解析器,也可用其他wasm解析器替代,如wagon、wavm等。因此在图1中,具体可以采用如wagon、wasmer、wavm等wasm解释器,wasmer结合了各种独立的运行时与工具包,用于编译并定位WebAssembly二进制代码,包括WebAssembly模块、CLI可执行应用以及嵌入至现有代码中的二进制库等等;wavm是用于WebAssembly的独立虚拟机,它使用可以将WebAssembly代码编译为具有接近本机性能的机器代码。
其中,核心层中的Runtime是指wasm的运行环境模块,其中实现了不同语言与编译工具依赖的系统级方法,确保wasm能被后续模块正常解析执行。且其中的GO、C/C++以及Java均是指计算机编程语言,Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Go语言一般指go。Go(又称Golang)是Google的Robert Griesemer、Rob Pike及Ken Thompson开发的一种静态强类型、编译型语言。Go语言语法与C相近,但功能上有:内存安全,GC(垃圾回收),结构形态及CSP-style并发计算。C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。
(2)调用层:作为智能合约与区块链节点通讯的入口,主要分为合约管理模块Manager和通讯连接模块Bridge两个部分,合约管理模块Manager为节点提供智能合约全生命周期管理入口;通讯连接模块Bridge则作为智能合约与节点通讯的实现,包括wasm虚拟机与节点、wasm虚拟机与账本或存储层等。
其中,合约管理模块中的Deploy为合约部署入口、Invoke为合约方法调用入口,Validate提供了合约校验确保合约能正常部署与管理,Upgrade为合约升级入口。
(3)节点存储层:实现区块链数据存储缓存机制,统一处理智能合约读写集与世界账本和区块、交易数据相关。
(4)交易处理层:是区块链接入层,负责交易转换、签名、验证并通过参数与智能合约的调用层进行通讯实现智能合约的全生命周期控制。
其中,交易处理层中的GRPC是指通用RPC框架;HTTP是指超文本传输协议(Hypertext Transfer Prtcl)。
为了进一步说明本方案,本申请应用实例提供一种用于实现智能合约执行方法的易接入、易扩展的区块链多语言的智能合约执行引擎,具体说明如下:
智能合约不仅仅是区块链上的一段可执行代码,而且是构建在区块链上包含智能合约语言运行环境、执行方法等的一个完整计算系统。本发明的多语言智能合约系统采用基于WASM的虚拟机方式实现,具备独立性、图灵完备、多语言支持、灵活扩展等特性,其与区块链的整体架构分层参见图8。
其中,调用层与核心层为智能合约执行引擎的核心组成部分,调用层与核心层的子系统划分参见图9,本申请应用实例整体思路为利用WASM中Export输出与Import引入等特性构建中间方实现合约执行、合约通讯、数据交换等系统方法,规范合约编写机制。其中,通讯连接模块Bridge作为通讯层实现了区块链节点与wasm虚拟机的通讯机制;合约SDK制定了各类语言的合约编写规范,封装了合约相关方法,使合约开发者不需要关注底层实现;合约管理模块Manager为节点提供了智能合约生命周期管理的统一入口;运行环境Runtime为wasm虚拟机提供了运行环境和系统方法的支持,包括合约数据交换、方法执行等;WASM实现了底层智能合约虚拟机运行机制,负责处理智能合约实例化、注销以及执行等操作。
综上所述,智能合约支持GO、C/C++、Java等常用语言开发,编写时可通过合约SDK提供的方法实现合约开发获取、插入、删除、获取交易ID等常用操作。合约编写完成之后利用工具生成wasm可执行文件,智能合约系统使用整合好的第三方工具进行解析或编译,如:wagon、wasmer、wavm等,并通过wasm的Import特性引入runtime运行时模块,实现系统级相关的通用方法;节点通讯方面,通讯连接模块Bridge中封装并实现了访问节点账本与缓存等内容的常用方法;runtime集成了通用方法,实现了对bridge的通讯和调用;brigde则作为中间层继承了合约创建、部署、管理、存储、上下文等合约操作层面的方法,为节点提供了统一的合约访问与调用的入口。Manager负责提供合约的部署、更新、调用、验证等方法给节点的执行层或交易处理层调用。
(一)总体流程
区块链中各个节点在虚拟机中执行合约代码(也可称作调用智能合约),就执行结果达成共识,并相应地更新区块链上智能合约的状态。智能合约可以基于其收到的交易读/写用户私人存储,将钱存入其账户余额,可以发送/接收消息或来自用户/其他智能合约的数字资产,甚至创建新的智能合约。参见图10,基于智能合约执行引擎实现的智能合约执行方法的总体流程如下:
①发起交易:客户端向区块链节点发起交易,区块链节点对交易进行分析处理,根据条件进入共识阶段。
②共识阶段:节点根据一定的网络协议和共识算法,将交易同步到其他区块链节点并保证其一致性。
③合约执行:构建/调用虚拟机实例,执行智能合约代码。
④合约通讯:调用合约中的虚拟机实例的运行时和系统级方法访问Bridge通讯连接模块,实现与节点的通讯。
⑤账本处理:通过Bridge通讯连接模块完成账本和缓存的互操作,生成读写集或变更账本数据,实现智能合约业务逻辑处理。
⑥区块生成:基于智能合约执行结果、上个区块哈希、读写集、默克尔树根哈希等信息,生成新的区块。
本申请应用实例中区块链底层接入主要通过Manager合约管理与Bridge通讯连接两个模块实现。Bridge通讯连接模块则作为中间层连接合约引擎与区块链节点数据层实现合约执行过程中与区块链节点的数据交换。因此区块链底层接入合约需要按规范实现基本的数据存储接口来实现合约引擎能与区块链数据层的通讯。执行过程中,在合约内部合约代码通过SDK层提供的相应接口访问到Bridge模块与区块链节点层进行通讯,SDK层封装了智能合约多种语言的调用层实现,为合约开发者实现了一套统一的调用机制。
参见图11,基于上述的智能合约执行方法的总体流程,其中的智能合约内部的执行流程如下:
①发起调用:通过Manager模块提供的接口以及相关执行参数,发起合约的执行。
②实例创建:Bridge模块根据合约语言类型、合约代码字节流、交易类型、方法名称等执行参数,创建相应的WASM虚拟机实例。
③方法导入:Runtime模块负责实现各类语言的系统方法依赖,这些方法实现了节点通讯与虚拟机环境调用等核心功能。
④合约执行:WASM模块通过wasm虚拟机实例,传递相应参数,调用智能合约指定方法。
⑤合约通讯:合约执行时,通过合约SDK模块封装的通用标准方法,调用Runtime模块引入的节点通讯机制,实现与节点Bridge模块通讯。
⑥账本处理:根据智能合约代码逻辑以及相应参数对账本以及节点缓存进行操作并返回结果。
其中,合约管理模块Manager中集成了合约的创建、部署、验证、调用、查询、更新、删除等合约生命周期管理方法,Manager是合约访问的统一入口,它的存在使区块链节点不需要关注合约引擎内部的实现,简化了接入过程与调用过程。合约在创建之后便会将合约信息加载到Manager的合约清单中接受Manager模块管控到部署时再进行实例化并加载到实例化清单供后续调用。区块链底层在完成处理交易时可根据相应的交易请求解析确认合约参数,如果是创建合约则解析交易中合约二进制文件调用Manager中的创建接口;如果是执行合约则访问Manager中的调用接口在实例化清单中找到指定的合约实例调用指定方法。合约管理模块的整体执行流程参见图12。
(二)各模块介绍
(1)合约管理模块
参见图13,合约管理模块Manager负责对节点上的合约进行管控,作为智能合约管理入口,为节点提供全生命周期管理服务。合约管理模块Manager围绕着合约的生命周期管理来设计,合约的生命周期分为合约部署、合约实例化、合约更新、合约停用和合约重用等阶段。各个阶段对合约状态的影响如图13所示。平台使用者按照合约开发规范编写智能合约后,通过部署接口即可将合约部署到平台的每个分布式节点上,每个节点都将保存一份独立的智能合约;之后调用实例化接口,生命周期合约管理模块将为合约的运行做好相应的准备并启动以server形式运行的合约;此时合约即可对外提供服务,通过合约调用接口发送合约调用请求后将触发合约具体方法的执行;如果合约功能需要停用或更新时调用合约停用和更新接口即可完成。其中,Deploy为合约部署入口、Invoke为合约方法调用入口,Validate提供了合约校验确保合约能正常部署与管理,Upgrade为合约升级入口,List为列表。
(2)通讯连接模块
参见图14,通讯连接模块Bridge是节点和合约的中间层,在负责节点与合约运行时通讯的同时还作为节点与合约虚拟机交互的统一入口,为节点提供合约实例创建、虚拟机管理、存储、合约持久化等交互方法。合约编写中的账本/缓存、事件等常用系统级方法的调用也在通讯连接模块Bridge中实现,有效的对合约环境和节点环境进行了隔离,便于后续扩展和集成更多的合约执行模式;同时,通讯连接模块Bridge也定义了各类交互的参数和接口规范。CodeProvider:提供合约持久化存储的具体实现,为Manager模块提供合约持久化服务。
Instance:合约实例调用的入口,定义了wasm实例接口规范,对内与wasm模块进行交互,为底层各类语言的wasm实例提供注册;对外则可根据不同的参数配置提供不同类型的wasm实例创建服务。
Registry:实例注册入口,对外提供合约实例注册调用。
Context:智能合约执行层上下文管理服务,上下文提供智能合约执行核心方法和信息,如:账本交互、交易ID、用户、交易类型、合约执行结果和读写集等;并按需求扩展跨合约与跨链调用入口,支撑与跨链模块无缝集成。
SysCall:处理通讯,为合约提供节点账本/缓存等需要与节点交互的通用调用。
Event:实现事件注册和监听相关处理。
(3)WASM
参见图15,WASM为智能合约系统的核心模块,负责解析和执行wasm合约文件,编译后的wasm合约文件具备高效率、轻量化、跨平台和多语言支持的特性,配合Runtime提供的各类系统与通讯方法,实现合约的跨平台多语言灵活调用和执行。同时WASM模块也提供了一套统一的接口标准,便于集成扩展更优秀的wasm解析工具。主要功能模块如下:
Creator:实现合约虚拟机创建Create、移除Remove、解析Compile等功能;
Instance:合约实例,实现合约执行Exec、发布Release、上下文Context解析、内存Memory占用等功能;
(4)运行环境模块
参见图16,运行环境模块Runtime是智能合约执行层的核心模块,通过wasm的Import特性将各个运行时方法引入到合约虚拟机中。由于不同语言对wasm的处理不一样,导致其编译之后的wasm内部执行机制的实现也不一样,因此不同语言我们需要实现不用的Runtime实例来实现一些系统级或通用的方法辅助wasm虚拟机完整的执行整个智能合约业务逻辑;同时Runtime是整个智能合约与节点通讯机制的核心,是Bridge与合约通讯、系统方法调用等相关功能的具体实现。
其中的语言Language包括:Go语言、C++语言、Rust语言等等。
Common:合约启动、退出、事件以及虚拟机通用方法等;
Call:与Bridge通讯的实现,提供Put、Get、Delete、Iterator等核心调用方法;
Env:提供合约虚拟机hash、序列化、反序列化等应用功能,并集成环境、内存、日志等系统级通用方法;
从整体上看Runtime实现并不复杂,但其多语言支持导致各类实现并不一致,下面将针对Golang语言为例,分析Runtime模块数据结构和接口设计。
Runtime结构体中实现了大量的数据处理和数据转换方法,由于wasm内部支持的数据类型有限,合约代码中的相应类型最终都会通过上述方法转换成wasm内部可识别的类型,Runtime就为wasm提供并实现了这些功能,其中针对复杂类型如Array和Object,Runtime中也定义了中转的数据类型,作为中间转换器并实现了相关处理。不同的语言由于对wasm支持和处理机制不一致也会有不同的实现。
(5)合约语言工具包模块
参见图17,合约语言工具包模块SDK主要为合约的编写提供通用的依赖与引用,让合约开发者不需要关注底层实现,如:节点通讯、反射、上下文解析、账本操作、区块与区块高度查询等。智能合约SDK(Smart Contract SDK)需满足多语言支持的特性,需要根据不同的语言实现不同版本的封装,并且需要与Runtime模块配合联调实现。其中的语言包括:Go语言、C语言、C++语言、Java等。
本申请应用实例引入WebAssembly(WASM)作为合约底层执行引擎,主流语言通过编译工具编译成可执行的WASM文件。WASM作为可执行文件具备以下优势:
性能方面:WebAssembly有一套完整的语义,实际上wasm是体积小且加载快的二进制格式,其目标就是充分发挥硬件能力以达到原生执行效率;
安全方面:WebAssembly运行在一个沙箱化的执行环境中,甚至可以在现有的JavaScript虚拟机中实现。在web环境中,WebAssembly将会严格遵守同源策略以及浏览器安全策略;
多语言支持方面:WASM本身只是一个指令集,并没有限定运行环境,因此只要实现相应的解释器,WASM也可以运行在非浏览器环境。智能合约的运行正是这样的应用场景,通过用C++、GO、Rust等高级语言来编写智能合约,再编译成WASM字节码,最后由基于第三方工具封装的虚拟机来运行。基于WASM多语言支持的特性,智能合约将能够用可以编译成WASM的任何语言开发,并通过其Import的特性实现合约与节点的信息交换与其他系统级功能(内存与资源分配等)的支持,同时集成相应的编译工具以支持主流语言编译成WASM。
除去上述WASM本身带来的优点之外,本申请应用实例引入了Manager模块不仅实现了对WASM实例生命周期的管理,还为外部调用提供了统一的入口,使接入的区块链底层不需要关注智能合约模块的底层实现,充分体现了易接入、易使用的特性,提升了区块链底层与智能合约引擎的对接效率。
综上所述,本申请应用实例具有如下创新点:
(1)引入WASM作为合约执行引擎;
(2)构建一套基于WASM的合约通讯、执行与数据交换机制;
(3)构建了Go、Rust、C/C++、Java的编译、执行机制;
(4)实现了面向接口的易扩展、易接入模块。
从硬件层面来说,为了解决现有的智能合约执行方法存在扩展较复杂、通用性较差以及安全性较差等问题,本申请提供一种安装有用于实现所述智能合约执行方法中的全部或部分内容的智能合约执行引擎的区块链节点的实施例,该区块链节点具体可以提现为一电子设备,所述电子设备具体包含有如下内容:
图18为本申请实施例的电子设备9600的系统构成的示意框图。如图18所示,该电子设备9600可以包括中央处理器9100和存储器9140;存储器9140耦合到中央处理器9100。值得注意的是,该图18是示例性的;还可以使用其他类型的结构,来补充或代替该结构,以实现电信功能或其他功能。
在一实施例中,与智能合约执行引擎之间进行数据交互的功能可以被集成到中央处理器中。其中,中央处理器可以被配置为进行如下控制:
步骤1:接收客户端设备发送的真的目标区块链的区块链数据处理请求;
步骤2:调取预设的网络协议及共识算法,将所述区块链数据处理请求同步至目标区块链中的其他区块链节点;
步骤3:将所述区块链数据处理请求经所述智能合约执行引擎的智能合约全生命周期管理入口发送至所述智能合约执行引擎以使该智能合约执行引擎执行如步骤100至步骤400等的智能合约执行方法。
从上述描述可知,本申请实施例提供的电子设备,通过将所述区块链数据处理请求经所述智能合约执行引擎的智能合约全生命周期管理入口发送至所述智能合约执行引擎以使该智能合约执行引擎执行如步骤100至步骤400等的智能合约执行方法,使得智能合约执行引擎通过智能合约全生命周期管理入口以及与所述目标区块链节点的账本通讯的技术设计,能够有效使得区块链适用于不同的应用场景,能够支持智能合约的动态加载,进而能够使得区块链平台支持不同智能合约的同时运行,同时能够对合约生命周期进行管理,具体包括智能合约的部署、实例化、更新、停用等阶段,进而能够有效提高智能合约执行的通用性;通过多语言合约工具包以及与所述目标区块链节点的账本通讯的技术设计,使得针对不同语言并不需要额外实现一套单独的GRPC接口,因此能够有效降低扩展多语言工作量,实现友好的多语言支持,进而能够有效提高智能合约执行的效率、易扩展性及易用性;通过在目标区块链节点中的虚拟机内执行智能合约,能够使得智能合约运行在独立的环境中以防止被其他恶意程序破坏,进而能够使得区块链同一时间可能运行着的多个不同业务的智能合约之间互不干扰彼此独立,进而能够有效提高智能合约执行的安全性,使得智能合约执行方法具备独立性、图灵完备、多语言支持、灵活扩展等特性。
在另一个实施方式中,与智能合约执行引擎之间进行数据交互的功能可以与中央处理器9100分开配置,例如可以将与智能合约执行引擎之间进行数据交互的功能配置为与中央处理器9100连接的芯片,通过中央处理器的控制来实现智能合约执行功能。
如图18所示,该电子设备9600还可以包括:通信模块9110、输入单元9120、音频处理器9130、显示器9160、电源9170。值得注意的是,电子设备9600也并不是必须要包括图18中所示的所有部件;此外,电子设备9600还可以包括图18中没有示出的部件,可以参考现有技术。
如图18所示,中央处理器9100有时也称为控制器或操作控件,可以包括微处理器或其他处理器装置和/或逻辑装置,该中央处理器9100接收输入并控制电子设备9600的各个部件的操作。
其中,存储器9140,例如可以是缓存器、闪存、硬驱、可移动介质、易失性存储器、非易失性存储器或其它合适装置中的一种或更多种。可储存上述与失败有关的信息,此外还可存储执行有关信息的程序。并且中央处理器9100可执行该存储器9140存储的该程序,以实现信息存储或处理等。
输入单元9120向中央处理器9100提供输入。该输入单元9120例如为按键或触摸输入装置。电源9170用于向电子设备9600提供电力。显示器9160用于进行图像和文字等显示对象的显示。该显示器例如可为LCD显示器,但并不限于此。
该存储器9140可以是固态存储器,例如,只读存储器(ROM)、随机存取存储器(RAM)、SIM卡等。还可以是这样的存储器,其即使在断电时也保存信息,可被选择性地擦除且设有更多数据,该存储器的示例有时被称为EPROM等。存储器9140还可以是某种其它类型的装置。存储器9140包括缓冲存储器9141(有时被称为缓冲器)。存储器9140可以包括应用/功能存储部9142,该应用/功能存储部9142用于存储应用程序和功能程序或用于通过中央处理器9100执行电子设备9600的操作的流程。
存储器9140还可以包括数据存储部9143,该数据存储部9143用于存储数据,例如联系人、数字数据、图片、声音和/或任何其他由电子设备使用的数据。存储器9140的驱动程序存储部9144可以包括电子设备的用于通信功能和/或用于执行电子设备的其他功能(如消息传送应用、通讯录应用等)的各种驱动程序。
通信模块9110即为经由天线9111发送和接收信号的发送机/接收机9110。通信模块(发送机/接收机)9110耦合到中央处理器9100,以提供输入信号和接收输出信号,这可以和常规移动通信终端的情况相同。
基于不同的通信技术,在同一电子设备中,可以设置有多个通信模块9110,如蜂窝网络模块、蓝牙模块和/或无线局域网模块等。通信模块(发送机/接收机)9110还经由音频处理器9130耦合到扬声器9131和麦克风9132,以经由扬声器9131提供音频输出,并接收来自麦克风9132的音频输入,从而实现通常的电信功能。音频处理器9130可以包括任何合适的缓冲器、解码器、放大器等。另外,音频处理器9130还耦合到中央处理器9100,从而使得可以通过麦克风9132能够在本机上录音,且使得可以通过扬声器9131来播放本机上存储的声音。
本申请的实施例还提供能够实现与上述实施例中的智能合约执行方法中全部步骤的智能合约执行引擎之间进行数据交互的一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现与上述实施例中的智能合约执行引擎之间进行数据交互的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:
步骤1:接收客户端设备发送的真的目标区块链的区块链数据处理请求;
步骤2:调取预设的网络协议及共识算法,将所述区块链数据处理请求同步至目标区块链中的其他区块链节点;
步骤3:将所述区块链数据处理请求经所述智能合约执行引擎的智能合约全生命周期管理入口发送至所述智能合约执行引擎以使该智能合约执行引擎执行如步骤100至步骤400等的智能合约执行方法。
从上述描述可知,本申请实施例提供的计算机可读存储介质,通过将所述区块链数据处理请求经所述智能合约执行引擎的智能合约全生命周期管理入口发送至所述智能合约执行引擎以使该智能合约执行引擎执行如步骤100至步骤400等的智能合约执行方法,使得智能合约执行引擎通过智能合约全生命周期管理入口以及与所述目标区块链节点的账本通讯的技术设计,能够有效使得区块链适用于不同的应用场景,能够支持智能合约的动态加载,进而能够使得区块链平台支持不同智能合约的同时运行,同时能够对合约生命周期进行管理,具体包括智能合约的部署、实例化、更新、停用等阶段,进而能够有效提高智能合约执行的通用性;通过多语言合约工具包以及与所述目标区块链节点的账本通讯的技术设计,使得针对不同语言并不需要额外实现一套单独的GRPC接口,因此能够有效降低扩展多语言工作量,实现友好的多语言支持,进而能够有效提高智能合约执行的效率、易扩展性及易用性;通过在目标区块链节点中的虚拟机内执行智能合约,能够使得智能合约运行在独立的环境中以防止被其他恶意程序破坏,进而能够使得区块链同一时间可能运行着的多个不同业务的智能合约之间互不干扰彼此独立,进而能够有效提高智能合约执行的安全性,使得智能合约执行方法具备独立性、图灵完备、多语言支持、灵活扩展等特性。
本领域内的技术人员应明白,本发明的实施例可提供为方法、装置、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(装置)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (10)
1.一种智能合约执行方法,其特征在于,包括:
基于预设的智能合约全生命周期管理入口获取针对目标区块链节点的区块链数据处理请求对应的目标处理类型;
确定所述目标区块链节点中的虚拟机内的所述目标处理类型对应的智能合约实例;
基于预设的多语言合约工具包执行所述智能合约实例对应的智能合约代码以生成所述区块链数据处理请求对应的智能合约执行结果;
利用节点与合约虚拟机交互的统一入口与所述目标区块链节点的账本通讯以生成对应的变更账本数据,并根据该变更账本数据和所述智能合约执行结果生成对应的区块;
所述基于预设的多语言合约工具包执行所述智能合约实例对应的智能合约代码包括以下步骤:
步骤一、发起调用:通过合约管理模块提供的接口以及相关执行参数,发起合约的执行;
步骤二、通讯连接模块根据合约语言类型、合约代码字节流、交易类型、方法名称等执行参数,创建相应的WASM虚拟机实例;
步骤三、方法导入:运行环境模块负责实现各类语言的系统方法依赖,这些方法实现了节点通讯与虚拟机环境调用等核心功能;
步骤四、合约执行:WASM模块通过wasm虚拟机实例,传递相应参数,调用智能合约指定方法;
步骤五、合约通讯:合约执行时,通过合约SDK模块封装的通用标准方法,调用Runtime模块引入的节点通讯机制,实现与节点通讯连接模块通讯;
步骤六、账本处理:根据智能合约代码逻辑以及相应参数对账本以及节点缓存进行操作并返回结果。
2.根据权利要求1所述的智能合约执行方法,其特征在于,所述基于预设的智能合约全生命周期管理入口获取针对目标区块链节点的区块链数据处理请求对应的目标处理类型,包括:
基于预设的智能合约全生命周期管理入口接收针对目标区块链节点的区块链数据处理请求,其中,该区块链数据处理请求由客户端设备发送至目标区块链节点,并经该目标区块链节点调取预设的网络协议及共识算法,将所述区块链数据处理请求同步至目标区块链中的其他区块链节点;
获取所述区块链数据处理请求对应的目标处理类型,该目标处理类型包括:创建、部署或调用。
3.根据权利要求1所述的智能合约执行方法,其特征在于,所述确定所述目标区块链节点中的虚拟机内的所述目标处理类型对应的智能合约实例,包括:
基于所述目标处理类型和所述区块链数据处理请求对应的执行参数,创建或调用所述目标区块链节点中的虚拟机内的智能合约实例;
以及,为所述智能合约实例添加对应的运行环境数据。
4.根据权利要求1至3任一项所述的智能合约执行方法,其特征在于,所述基于预设的多语言合约工具包执行所述智能合约实例对应的智能合约代码以生成所述区块链数据处理请求对应的智能合约执行结果,包括:
基于预设的多语言合约工具包执行所述智能合约实例对应的智能合约代码,以生成对应的智能合约执行结果;
调用预设的节点通讯机制与所述目标区块链节点对应的通讯连接模块之间通讯。
5.根据权利要求4所述的智能合约执行方法,其特征在于,所述与所述目标区块链节点的账本通讯以生成对应的变更账本数据,并根据该变更账本数据和所述智能合约执行结果生成对应的区块,包括:
基于所述通讯连接模块与所述目标区块链节点的账本通讯,以根据预设的智能合约代码逻辑参数对实现所述目标区块链节点的账本和缓存之间的操作,生成存储有对应的变更账本数据的读写集;
基于所述读写集、所述智能合约执行结果、目标区块链当前最新的区块哈希值以及默克尔树根哈希值,生成所述目标区块链对应的新区块。
6.一种智能合约执行引擎,其特征在于,包括:
合约管理模块,用于基于预设的智能合约全生命周期管理入口获取针对目标区块链节点的区块链数据处理请求对应的目标处理类型;
解析执行模块,用于确定所述目标区块链节点中的虚拟机内的所述目标处理类型对应的智能合约实例;
合约语言工具包模块,用于基于预设的多语言合约工具包执行所述智能合约实例对应的智能合约代码以生成所述区块链数据处理请求对应的智能合约执行结果;
通讯连接模块,用于与所述目标区块链节点的账本通讯以生成对应的变更账本数据,并根据该变更账本数据和所述智能合约执行结果生成对应的区块,通讯连接模块为节点与合约虚拟机交互的统一入口;
所述基于预设的多语言合约工具包执行所述智能合约实例对应的智能合约代码包括以下步骤:
步骤一、发起调用:通过合约管理模块提供的接口以及相关执行参数,发起合约的执行;
步骤二、通讯连接模块根据合约语言类型、合约代码字节流、交易类型、方法名称等执行参数,创建相应的WASM虚拟机实例;
步骤三、方法导入:运行环境模块负责实现各类语言的系统方法依赖,这些方法实现了节点通讯与虚拟机环境调用等核心功能;
步骤四、合约执行:WASM模块通过wasm虚拟机实例,传递相应参数,调用智能合约指定方法;
步骤五、合约通讯:合约执行时,通过合约SDK模块封装的通用标准方法,调用Runtime模块引入的节点通讯机制,实现与节点通讯连接模块通讯;
步骤六、账本处理:根据智能合约代码逻辑以及相应参数对账本以及节点缓存进行操作并返回结果。
7.根据权利要求6所述的智能合约执行引擎,其特征在于,还包括:运行环境模块,用于为所述智能合约实例添加对应的运行环境数据;
所述运行环境模块、解析执行模块和合约语言工具包模块构成所述智能合约执行引擎的一核心层,所述核心层、通讯连接模块和合约管理模块构成所述智能合约执行引擎的一调用层;
所述调用层经由所述通讯连接模块与所述目标区块链节点的节点存储层之间通讯,其中,该节点存储层用于存储账本、缓存、区块、历史记录以及读写集;
所述合约管理模块与所述目标区块链节点的交易处理层之间连接。
8.根据权利要求7所述的智能合约执行引擎,其特征在于,所述解析执行模块包括WASM解析执行模块;
相对应的,所述核心层还包括:第三方工具,该第三方工具包括:wagon解释器、wasmer解释器和wavm解释器中的至少一种。
9.一种区块链节点,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述区块链节点上安装有一智能合约执行引擎,该智能合约执行引擎用于执行权利要求1至5任一项所述的智能合约执行方法,所述处理器执行所述计算机程序时与所述智能合约执行引擎之间进行数据交互。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时与一智能合约执行引擎之间进行数据交互,该智能合约执行引擎用于执行权利要求1至5任一项所述的智能合约执行方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110980479.XA CN113688186B (zh) | 2021-08-25 | 2021-08-25 | 智能合约执行方法、引擎及区块链节点 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110980479.XA CN113688186B (zh) | 2021-08-25 | 2021-08-25 | 智能合约执行方法、引擎及区块链节点 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113688186A CN113688186A (zh) | 2021-11-23 |
CN113688186B true CN113688186B (zh) | 2022-11-22 |
Family
ID=78582513
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110980479.XA Active CN113688186B (zh) | 2021-08-25 | 2021-08-25 | 智能合约执行方法、引擎及区块链节点 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113688186B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113867709B (zh) * | 2021-12-01 | 2022-04-12 | 深圳前海微众银行股份有限公司 | 区块链智能合约读写集构建方法及装置 |
CN114564500A (zh) * | 2022-02-28 | 2022-05-31 | 蚂蚁区块链科技(上海)有限公司 | 在区块链系统中实现结构化数据存储和查询的方法和系统 |
CN115022312A (zh) * | 2022-03-30 | 2022-09-06 | 中国信息通信研究院 | 多智能合约引擎的实现方法、装置、电子设备及存储介质 |
CN117593129B (zh) * | 2024-01-19 | 2024-05-03 | 腾讯科技(深圳)有限公司 | 交易的执行方法、装置、计算机可读介质及电子设备 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110417905B (zh) * | 2019-08-02 | 2022-06-07 | 深圳市迅雷网络技术有限公司 | 一种合约发布方法、装置、设备和联盟链系统 |
CN111770205B (zh) * | 2020-08-31 | 2020-12-04 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法、区块链节点、系统和存储介质 |
CN112199221B (zh) * | 2020-12-04 | 2021-03-30 | 杭州趣链科技有限公司 | 事件推送方法、系统、区块链平台、合约调用端及介质 |
-
2021
- 2021-08-25 CN CN202110980479.XA patent/CN113688186B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN113688186A (zh) | 2021-11-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113688186B (zh) | 智能合约执行方法、引擎及区块链节点 | |
US10839141B2 (en) | System and method for provisioning a mobile software application to a mobile device | |
US6385661B1 (en) | System and method for dynamic generation of remote proxies | |
US20140304716A1 (en) | Software framework for a storage device | |
Fortier et al. | Dyninka: a FaaS framework for distributed dataflow applications | |
US20140280767A1 (en) | Web services provided from software framework | |
CN110347448B (zh) | 一种构造终端应用行为的运行时模型的方法 | |
CN114237760B (zh) | 一种将工业机理模型封装为容器镜像并发布web服务的方法 | |
WO2022078057A1 (zh) | 应用包发布方法、应用方法、装置、介质、服务器及设备 | |
US20040163086A1 (en) | WebDAV servlet | |
CN117056317B (zh) | 数据处理方法、装置、设备及计算机可读存储介质 | |
Wood et al. | Triton: a domain specific language for cyber-physical systems | |
CN111290746A (zh) | 对象访问方法、装置、设备及存储介质 | |
CN117093286B (zh) | 插件生成方法、装置、设备及计算机可读存储介质 | |
CN117851087A (zh) | 一种基于Java动态字节码的远程调用动态扩展方法 | |
CN117850922A (zh) | 一种基于serverless架构的Golang运行时实现方法 | |
KR101671991B1 (ko) | 가상 프로토콜 스택 인터페이스 기반의 시뮬레이터 | |
CN117149162A (zh) | 一种sdk自动生成方法、装置、电子设备及存储介质 | |
Tzagarakis et al. | Supporting the Evolution of Service Oriented Web Applications using Design Patterns | |
CN117971313A (zh) | 微服务至单体服务包的转化方法、系统、存储介质 | |
Sadou et al. | A delegation-based approach for the unanticipated dynamic evolution of distributed objects | |
Hartinger | Automated Migration of Seam 2 Applications to the Java EE 6 Environment | |
Ekabua | Using Aspect Oriented Techniques to Build-in Software Quality | |
Bauer | Deployment of SDL systems using UML |
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 |