CN115022312A - 多智能合约引擎的实现方法、装置、电子设备及存储介质 - Google Patents
多智能合约引擎的实现方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115022312A CN115022312A CN202210322481.2A CN202210322481A CN115022312A CN 115022312 A CN115022312 A CN 115022312A CN 202210322481 A CN202210322481 A CN 202210322481A CN 115022312 A CN115022312 A CN 115022312A
- Authority
- CN
- China
- Prior art keywords
- intelligent contract
- target
- contract
- codes
- compiler
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 53
- 238000012795 verification Methods 0.000 claims description 33
- 238000002347 injection Methods 0.000 claims description 21
- 239000007924 injection Substances 0.000 claims description 21
- 238000004590 computer program Methods 0.000 claims description 6
- 230000009286 beneficial effect Effects 0.000 abstract description 5
- 230000003044 adaptive effect Effects 0.000 abstract description 3
- 230000006870 function Effects 0.000 description 11
- 230000008569 process Effects 0.000 description 11
- 238000011161 development Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 8
- 239000007787 solid Substances 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 230000006854 communication Effects 0.000 description 7
- 238000007689 inspection Methods 0.000 description 7
- 230000007246 mechanism Effects 0.000 description 6
- 230000006978 adaptation Effects 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 230000002829 reductive effect Effects 0.000 description 5
- 238000011160 research Methods 0.000 description 5
- 239000000243 solution Substances 0.000 description 5
- 238000007726 management method Methods 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- KAICRBBQCRKMPO-UHFFFAOYSA-N phosphoric acid;pyridine-3,4-diamine Chemical compound OP(O)(O)=O.NC1=CC=NC=C1N KAICRBBQCRKMPO-UHFFFAOYSA-N 0.000 description 3
- 244000035744 Hura crepitans Species 0.000 description 2
- 230000009471 action Effects 0.000 description 2
- 230000002411 adverse Effects 0.000 description 2
- 230000007175 bidirectional communication Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 239000003795 chemical substances by application Substances 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000002452 interceptive effect Effects 0.000 description 2
- 238000002955 isolation Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000013075 data extraction Methods 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- GVVPGTZRZFNKDS-JXMROGBWSA-N geranyl diphosphate Chemical compound CC(C)=CCC\C(C)=C\CO[P@](O)(=O)OP(O)(O)=O GVVPGTZRZFNKDS-JXMROGBWSA-N 0.000 description 1
- 230000002427 irreversible effect Effects 0.000 description 1
- 210000001503 joint Anatomy 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000003032 molecular docking Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种多智能合约引擎的实现方法、装置、电子设备及存储介质,该多智能合约引擎的实现方法包括:获取用户在目标编译器中编码目标智能合约对应的智能合约语言代码;通过目标编译器将所述智能合约语言代码编译为合约字节码,得到目标智能合约相应的中间字节码;加载多种智能合约引擎对中间字节码进行智能合约的实现,得到目标智能合约的机器码,目标智能合约的机器码适配多种不同类型的区块链架构。本申请多智能合约引擎可以支持多种引擎同时运行在区块链节点上,支持多种引擎同时加载,以适配不同类型的区块链架构,对合约调用者、应用部署者友好,利于构建友好型区块链生态体系。
Description
技术领域
本申请涉及区块链技术领域,具体涉及一种多智能合约引擎的实现方法、装置、电子设备及存储介质。
背景技术
智能合约是区块链技术最成功的应用之一,区块链智能合约支持创建无信任协议,执行合约的双方可以通过区块链做出承诺,而无需相互了解或信任,在满足合约指定条件后自动执行协议条款,消除对第三方中间机构的需求,使用智能合约代替传统合约可以显着降低交易成本。在加密货币应用领域,智能合约由计算机源代码预先定义的具有特定规则一组数字化协议构成,是在区块链上运行的应用程序。以太坊是用于创建智能合约的最受欢迎的区块链平台,它支持称为图灵完备性的功能,该功能允许创建更多自定义的智能合约。智能合约可以应用于不同的行业和领域,例如智能家居,电子商务,房地产和资产管理等。
基于区块链的智能合约概念被提出后,不少研究集中在合约的应用方面,也有不少学者在智能合约安全方面做了大量研究工作,但专门研究智能合约执行环境,并支持多种合约语言执行的的技术比较少,且现有的区块链架构中,支持单一的智能合约引擎,使得用户学习智能合约的成本较高,无法快速从熟悉的合约编程切换过来,使得链架构的通用性不够。
发明内容
本申请实施例提供一种多智能合约引擎的实现方法、装置、电子设备及存储介质,可以支持多种引擎同时运行在区块链节点上,支持多种引擎同时加载,以适配不同类型的区块链架构,对合约调用者、应用部署者友好,利于构建友好型区块链生态体系。
一方面,本申请提供一种应用于区块链系统,所述区块链系统中包括智能合约引擎适配器,所述智能合约引擎适配器中包括多种智能合约引擎,所述智能合约引擎适配器支持多种编码语言,每种编码语言对应一种编译器,所述方法包括:
获取用户在目标编译器中编码目标智能合约对应的智能合约语言代码;
通过所述目标编译器将所述智能合约语言代码编译为合约字节码,得到所述目标智能合约相应的中间字节码;
加载所述多种智能合约引擎对所述中间字节码进行智能合约的实现,得到目标智能合约的机器码,所述目标智能合约的机器码适配多种不同类型的区块链架构。
在本申请一些实施方案中,所述获取用户在目标编译器中编码目标智能合约对应的智能合约语言代码,包括:
获取用户在所述智能合约引擎适配器支持的多种编码语言中,选择编码所述目标智能合约的编码语言;
启动所述编码语言对应的目标编译器,并获取用户在所述目标编译器中编码所述目标智能合约对应的智能合约语言代码。
在本申请一些实施方案中,所述加载所述多种智能合约引擎对所述中间字节码进行智能合约的实现,得到目标智能合约的机器码,包括:
对所述中间字节码进行验证,得到验证结果;
在所述验证结果为验证通过后,对所述中间字节码注入预设的必要代码,得到注入后字节码;
将所述注入后字节码翻译为机器码,得到目标智能合约的机器码。
在本申请一些实施方案中,所述对所述中间字节码进行验证,得到验证结果,包括:
对所述中间字节码进行ABI检查,得到第一检查结果;
对所述中间字节码对应的虚拟机执行环境进行检查,得到第二检查结果;
对智能合约进行版本检查,以选择目标智能合约对应版本的解释器,得到第三检查结果;
所述验证结果中包括第一检查结果、第二检查结果和第三检查结果。
在本申请一些实施方案中,所述对所述中间字节码注入预设的必要代码,得到注入后字节码,包括:
在所述中间字节码注入所述目标智能合约每一操作消耗的Gas数据,得到 Gas注入后字节码;
在所述Gas注入后字节码中,注入所述目标智能合约实现必要的调用接口和数据,以为所述目标智能合约执行构建合理的上下文环境,得到所述注入后字节码。
在本申请一些实施方案中,所述在所述中间字节码注入所述目标智能合约每一操作消耗的Gas数据,得到Gas注入后字节码,包括:
统计所述目标智能合约每一操作消耗的Gas数据;
将所述中间字节码转换成易于解析的格式化文本;
将所述消耗的Gas数据注入到所述格式化文本中,得到Gas注入后格式化文本;
将所述Gas注入后格式化文本恢复成字节码,得到Gas注入后字节码。
另一方面,本申请提供一种多智能合约引擎的实现装置,应用于区块链系统,所述区块链系统中包括智能合约引擎适配器,所述智能合约引擎适配器中包括多种智能合约引擎,所述智能合约引擎适配器支持多种编码语言,每种编码语言对应一种编译器,所述装置包括:
获取模块,用于获取用户在目标编译器中编码目标智能合约对应的智能合约语言代码;
编译模块,用于通过所述目标编译器将所述智能合约语言代码编译为合约字节码,得到所述目标智能合约相应的中间字节码;
实现模块,用于加载所述多种智能合约引擎对所述中间字节码进行智能合约的实现,得到目标智能合约的机器码,所述目标智能合约的机器码适配多种不同类型的区块链架构。
在本申请一些实施方案中,所述获取模块具体用于:
获取用户在所述智能合约引擎适配器支持的多种编码语言中,选择编码所述目标智能合约的编码语言;
启动所述编码语言对应的目标编译器,并获取用户在所述目标编译器中编码所述目标智能合约对应的智能合约语言代码。
在本申请一些实施方案中,所述实现模块具体用于:
对所述中间字节码进行验证,得到验证结果;
在所述验证结果为验证通过后,对所述中间字节码注入预设的必要代码,得到注入后字节码;
将所述注入后字节码翻译为机器码,得到目标智能合约的机器码。
在本申请一些实施方案中,所述实现模块具体用于:
对所述中间字节码进行ABI检查,得到第一检查结果;
对所述中间字节码对应的虚拟机执行环境进行检查,得到第二检查结果;
对智能合约进行版本检查,以选择目标智能合约对应版本的解释器,得到第三检查结果;
所述验证结果中包括第一检查结果、第二检查结果和第三检查结果。
在本申请一些实施方案中,所述实现模块具体用于:
在所述中间字节码注入所述目标智能合约每一操作消耗的Gas数据,得到 Gas注入后字节码;
在所述Gas注入后字节码中,注入所述目标智能合约实现必要的调用接口和数据,以为所述目标智能合约执行构建合理的上下文环境,得到所述注入后字节码。
在本申请一些实施方案中,所述实现模块具体用于:
统计所述目标智能合约每一操作消耗的Gas数据;
将所述中间字节码转换成易于解析的格式化文本;
将所述消耗的Gas数据注入到所述格式化文本中,得到Gas注入后格式化文本;
将所述Gas注入后格式化文本恢复成字节码,得到Gas注入后字节码。
另一方面,本申请还提供一种电子设备,所述电子设备包括:
一个或多个处理器;
存储器;以及
一个或多个应用程序,其中所述一个或多个应用程序被存储于所述存储器中,并配置为由所述处理器执行以实现第一方面中任一项所述的多智能合约引擎的实现方法。
第四方面,本申请还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器进行加载,以执行第一方面任一项所述的多智能合约引擎的实现方法中的步骤。
本申请实施例中获取用户在目标编译器中编码目标智能合约对应的智能合约语言代码;通过目标编译器将所述智能合约语言代码编译为合约字节码,得到目标智能合约相应的中间字节码;加载多种智能合约引擎对中间字节码进行智能合约的实现,得到目标智能合约的机器码,目标智能合约的机器码适配多种不同类型的区块链架构。本申请多智能合约引擎可以支持多种引擎同时运行在区块链节点上,支持多种引擎同时加载,以适配不同类型的区块链架构,对合约调用者、应用部署者友好,利于构建友好型区块链生态体系。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的多智能合约引擎实现架构的场景示意图;
图2是本申请实施例中提供的智能合约系统的一个场景示意图;
图3是本申请实施例中智能合约引擎适配器的一个结构示意图;
图4是本申请实施例中多智能合约引擎的实现方法的一个实施例流程示意图;
图5是本申请实施例中提供的步骤403一个实施例流程示意图;
图6是本申请实施例中提供的多智能合约引擎的实现装置的一个实施例结构示意图;
图7是本申请实施例中提供的电子设备的一个实施例结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本申请的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“长度”、“宽度”、“厚度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个所述特征。在本申请的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
在本申请中,“示例性”一词用来表示“用作例子、例证或说明”。本申请中被描述为“示例性”的任何实施例不一定被解释为比其它实施例更优选或更具优势。为了使本领域任何技术人员能够实现和使用本申请,给出了以下描述。在以下描述中,为了解释的目的而列出了细节。应当明白的是,本领域普通技术人员可以认识到,在不使用这些特定细节的情况下也可以实现本申请。在其它实例中,不会对公知的结构和过程进行详细阐述,以避免不必要的细节使本申请的描述变得晦涩。因此,本申请并非旨在限于所示的实施例,而是与符合本申请所公开的原理和特征的最广范围相一致。
下面首先对本申请实施例中涉及到的一些基本概念进行介绍:
区块链是一个信息技术领域的术语。从本质上讲,它是一个共享数据库,存储于其中的数据或信息,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。基于这些特征,区块链技术奠定了坚实的“信任”基础,创造了可靠的“合作”机制,具有广阔的运用前景。
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),它本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
区块链节点(Node):节点是区块链分布式系统中的网络节点,是通过网络连接的服务器、计算机、电话等,针对不同性质的区块链,成为节点的方式也会有所不同。
智能合约:是一套以数字形式定义、传播、验证或执行的约定,包括合约参与方可以在上面执行这些约定的协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。在区块链中智能合约用作管理交易,是以脚本代码为主的一组逻辑规则。程序会在执行交易时读取合约代码,执行并处理结果。智能合约的性质不但可以限于特定于某个应用程序的代码,也可以用于将协议的条款和条件编入交易流程中。
创世块:区块链账本里第一个区块数据,作为区块链的首区块。
BFR(Blockchain Framework):是BVM的编译架构,负责BVM中智能合约的编译合约进入BFR模块之后,经过BFR前端、优化、后端编译处理,最终编译为可执行的机器码,运行在区块链上,其中,BVM是基于区块链的虚拟机 (Blockchain Virtual Machine),本申请实施例中描述的多智能合约虚拟机为基于区块链的虚拟机。需要说明的是,本申请中的多智能合约虚拟机,可以支持至少两种智能合约,因此,称作为多智能合约虚拟机。。
智能合约在1994年由Nick Szabo首次提出,他将智能合约定义为:分布式分类账自动执行的合约,之后被称为智能合约。这些数字合约可以转换为代码,并可以在区块链上运行。智能合约能够将协议与用户界面相结合的一种工具,从而对计算机网络进行规范化和安全加固。
直到区块链技术出现,才逐步得到发展。运行在区块链上的智能合约,直到以太坊出现之后才得到广泛应用,以太坊智能合约运行在虚拟机之上,合约语言Solidity具有图灵完备性,支持多种应用程序开发。不同类型区块链网络具有不同类别的智能合约。智能合约作为一种系统,一旦满足预定义规则,该系统便会进行数字资产交易或信息通信,所有网络节点会复制和执行合约源码。
智能合约具有帐户余额、私有存储和可执行代码。合约状态包括合约存储和余额,状态存储在区块链上,每次调用时都会更新,下图2描绘了智能合约系统。每个智能合约将被分配给固定字节的唯一地址,一旦将智能合约部署到区块链中,就无法更改合约内容。首先用户只将交易发送到合约地址来签订合约,然后交易将由网络中的每个共识节点(矿工)执行,以就交易达成共识,最后更新合约状态。合约可以基于收到的交易,对账户数据进行读写,将数字资产存入帐户,从用户或其它合约接收消息或数字资产,甚至创建新合约。
智能合约有两种类型:确定性智能合约和非确定性智能合约。确定性智能合约在运行时不需要任何外部(来自区块链外部)的信息。非确定性智能合约是一种依赖于外部信息的合约,例如要求运行当前天气信息的合约在区块链上不可用。
基于区块链的智能合约概念被提出后,不少研究集中在合约的应用方面,如下文献1,也有不少学者在智能合约安全方面做了大量研究工作,如下文献 2,但专门研究智能合约执行环境,并支持多种合约语言执行的的技术比较少,下面将介绍几种与合约执行系统相关的几种研究:
文献1:提供了一种智能合约高速重放和数据抽取的工具Geth-query,该工具在EVM虚拟机中捕获交易执行的中间过程信息,记录每一区块在虚拟机中按顺序执行交易后世界状态的差异,实现以最小的代价维护整个区块链系统的关键状态转移信息。另外,其通过索引保存每个交易在EVM中执行过程的关键trace信息,保留交易的执行过程信息。这种方案可以实现多维度的执行过程重放、任意区块内的所有交易执行重放、任意交易的执行过程重放、任意合约执行过程中的虚拟机状态重放,最终快速恢复智能合约在历史任意时刻的状态,调整并行参数以最大限度地提高本机资源的利用效率。
文献2:提出了一种包括高级智能合约层、智能合约层和机器代码执行层的三层智能合约系统框架,在创痛的智能合约层、机器代码执行层上加入了一层高级智能合约层。首先,用户可以根据现实合同或真实意图进行高级智能合约语言的编写;然后,通过高级智能合约语言的编译器,将合约转化为传统程序语言编写的智能合约;最后,生成机器代码并将其部署运行在区块链中。该智能合约系统中合约语言更接近于自然语言,便于阅读与理解,支持高效的智能合约生成,生成更系统的目标语言智能合约的程序框架。
但是上述现有技术中智能合约语言的学习成本和开发门槛较高,无法兼容多种虚拟机架构,时间性能和易用性较低。
基于此,本申请针对智能合约引擎的兼容性问题,通过对引擎适配器的研究,设计了一种支持多种智能合约引擎的实现方案,支持多种高级智能合约语言,可降低合约语言的学习成本和开发门槛,同时兼容多种虚拟机架构,时间性能和易用性更强。
具体的,本申请实施例提供一种多智能合约引擎的实现方法、装置、电子设备及存储介质,以下分别进行详细说明。
请参阅图1,图1为本申请实施例所提供的多智能合约引擎可插拔架构的场景示意图,包括智能合约引擎适配模块、分布式应用、开发工具、预言机等组成部分。通过可插拔的引擎、智能预言机等多种技术的融合,实现数据不可被篡改、图灵完备、执行结果一致、数据可交互性、合约可交互等特性。
具体的,多智能合约引擎实现架构如图1所示,包含了如下几个部分:
(1)DAPP
DAPP是Decentralized Application的缩写,中文叫分布式应用/去中心化应用,通常来说,不同的DAPP会采用不同的底层区块链开发平台和共识机制,或者自行发布代币(也可以使用基于相同区块链平台的通用代币)。
DAPP的预定义业务规则由部署在区块链上的智能合约定义,向区块链账本发起交易和接收交易的回执信息,确定性执行,有效降低信任成本,应用消耗的资源通过区块链中的代币规则计量。
(2)开发工具:智能合约的集成开发环境,用来发布智能合约。包括如下几部分:
编辑器:开发工具以编辑器为主题部分,提供多种操作的快键键,方便代码的编辑。
调试器:在调试代码时,可直接在源代码中的变量旁显示变量值。当变量的值更改时高亮显示,可以更好地理解状态是如何随代码改变的。
框架选择器:通过选择不同的框架可以快速生成不同的语言模板。
多语言支持:可以理解多种语言,包括solidity、java、C++、C等。
(3)多智能合约虚拟机:包括编译、验证、注入、执行层。核心模块中通过多智能合约引擎适配器组件,动态适配EVM、WASM、JVM等引擎,可以执行JavaScript、Solidity、C/C++、Go等多种语言;另外多智能合约引擎适配器组件在各个区块链节点,提供友好的调试开发环境,更便捷地编写和调试合约;提供了多样化的智能合约模板,如转账模板、代币模板、签名模板等,可快速构建安全可靠的智能合约。
(4)预言机:通过预言机连接至数据提供商、web API、物联网设备、支付系统等各种链下环境以及其他区块链,可以获取数据和输出数据。在链上和链下同时运行,链上模块与区块链交互,等待数据响应、节点共识。链下模块处理数据请求、获取链下数据并转换格式、将区块链数据发送至链下系统中进行运算。
(5)区块链网络:区块链底层账本结构,包括区块链节点,区块链节点中包括共识、状态、存储,多智能合约虚拟机通过ChainVMC(Chain Client-VM Connector API)与区块链节点的交互,抽象出ChainVMC接口标准,通过 ChainVMC,区块链节点可以对接多种多智能合约虚拟机。
本申请实施例中多智能合约引擎的实现方法可以是区块链节点,其中,区块链节点对应的电子设备,该电子设备主要获取用户在目标编译器中编码目标智能合约对应的智能合约语言代码;通过所述目标编译器将所述智能合约语言代码编译为合约字节码,得到所述目标智能合约相应的中间字节码;加载所述多种智能合约引擎对所述中间字节码进行智能合约的实现,得到目标智能合约的机器码,所述目标智能合约的机器码适配多种不同类型的区块链架构。
本申请实施例中,区块链节点可以为电子设备,例如用户终端或服务器,其中,服务器可以是独立的服务器,也可以是服务器组成的服务器网络或服务器集群,例如,本申请实施例中所描述的服务器,其包括但不限于计算机、网络主机、单个网络服务器、多个网络服务器集或多个服务器构成的云服务器。其中,云服务器由基于云计算(Cloud Computing)的大量计算机或网络服务器构成。本申请的实施例中,服务器与用户终端之间可通过任何通信方式实现通信,包括但不限于,基于第三代合作伙伴计划(3rd GenerationPartnership Project,3GPP)、长期演进(Long Term Evolution,LTE)、全球互通微波访问(Worldwide Interoperability for Microwave Access,WiMAX)的移动通信,或基于TCP/IP 协议族(TCP/IP Protocol Suite,TCP/IP)、用户数据报协议(User DatagramProtocol,UDP)协议的计算机网络通信等。
可以理解的是,本申请实施例中所使用的用户终端既包括接收和发射硬件的设备,即具有能够在双向通信链路上,执行双向通信的接收和发射硬件的设备。这种用户终端设备可以包括:蜂窝或其他通信设备,其具有单线路显示器或多线路显示器或没有多线路显示器的蜂窝或其他通信设备。具体的用户终端具体可以是台式终端或移动终端,用户终端具体可以手机、平板电脑、笔记本电脑等中的一种。
本领域技术人员可以理解,图1中示出的应用环境,仅仅是与本申请方案一种应用场景,并不构成对本申请方案应用场景的限定,其他的应用环境还可以包括比图1中所示更多或更少的模块,具体此处不作限定。
需要说明的是,图1所示的多智能合约引擎实现架构仅仅是一个示例,本申请实施例描述的区块链系统以及场景是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域普通技术人员可知,随着区块链系统的演变和新业务场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
基于上述内容,本申请实施例中首先提供一种多智能合约引擎的实现方法,该多智能合约引擎的实现方法的执行主体为多智能合约引擎的实现装置,该多智能合约引擎的实现装置应用于电子设备,该多智能合约引擎的实现方法包括:获取用户在目标编译器中编码目标智能合约对应的智能合约语言代码;通过所述目标编译器将所述智能合约语言代码编译为合约字节码,得到所述目标智能合约相应的中间字节码;加载所述多种智能合约引擎对所述中间字节码进行智能合约的实现,得到目标智能合约的机器码,所述目标智能合约的机器码适配多种不同类型的区块链架构。
如图3所示,为本申请实施例中多智能合约虚拟机中智能合约引擎适配器结构框架示意图。
智能合约引擎适配器可以支持多种智能合约引擎同时运行在区块链节点上,支持多种智能合约引擎同时加载,以适配不同类型的区块链架构,智能合约引擎适配器主要包含以下部分:
(1)语言层:可以支持多种语言:如JavaScript、Solidity、C/C++、 JAVA;
(2)编译层:针对不同的高级语言对接不同的不同类别的编译器,如 solidity接入solc编译器、java接入javac编译器,C/C++接入gcc编译器,编译单元将输入的高级智能合约语言通过编译适配器编译为字节码,不同高级智能合约语言输出不同后缀名的字节码文件,如solidity源文件.sol经过solc编译器接口编译后产生的字节码文件为sol的智能合约文件,java源文件a.java经过javac编译器接口编译后产生的字节码文件为a.class(执行java a);C系列语言 souceC.cpp经过gcc编译(gcc、g++)接口编译后产生文件为ouceC.out(执行命令./a.out);go语言source.go经过gccgo编译接口(go build)编译后产生的字节码文件为source(执行命令./程序名)。
编译适配接口接入不同的编译器单元,不同种类的智能合约经过适配接口后教育不同的编译器单元处理,输出不同的字节码文件。输出的字节码是编码后的数值常量、引用、指令等构成的序列,与特定机器代码无关,需要解释器转译后才能成为机器代码的中间代码。
(3)引擎层:可以支持JSVM、EVM、WASM、JVM等智能合约引擎,以可插拔的方式实现,由于不同类型的智能合约包含了不同的字节码特征,可插拔虚拟机引擎接口通过对特征的识别,可以判断该段字节码需要使用哪种虚拟机进行执行,选择对应虚拟机后加载字节码,解析字节码,然后根据指令去执行对应的函数功能。
(4)实现层:分为验证、注入、解释、执行等模块,以支撑不同的智能合约引擎的实现。
1)验证:验证模块会对智能合约字节码及传参进行一些验证,包含ABI 检查、环境检查与版本检查三个环节:
ABI验证:利用智能合约ABI对用户发送的智能合约调用及参数进行校验。
环境检查:检查虚拟机执行环境环境是否符合预期、配置字段、字节码是否合法、以及类型是否正确;解释器模块是否准备好。
版本检查:检查智能合约版本,选择对应版本的解释器。
2)注入:注入模块主要对智能合约字节码注入一些必要的代码。
Gas Metering:
统计每一个操作所须花费的Gas(gas是在以太坊虚拟机上执行一个交易所需要使用的指令的数量),实现Env_api方法useGas;接着将字节码恢复成易于解析的格式化文本(如JSON);接着将useGas注入到格式化文本中;最后将格式化文本重新恢复成字节码。
Gas Metering若部署在编译层,虽然只须要注入一次,节省了执行时的开销,但恶意用户只须要更改编译器的Gas表即可作恶,安全性大大降低;同时无法再对已部署的旧合约更新Gas Metering,导致新老合约的Gas收费标准不一致。
部署在执行层中,智能合约在每次执行时进行一次Gas Metering注入,虽然牺牲了一些执行效率,但Gas可以灵活变更,这对于不断调整、迭代的公链项目至关重要。
上下文构建:
为合约执行构建合理的上下文环境,提供必要的内部模块和数据以供合约使用,包括:区块链账本实例,提供区块、交易等信息的调用接口;状态数据库实例,提供状态数据的增删改查的调用接口;当前Transaction与Action的相关数据;当前区块高度和区块时间。
3)解释:将字节码翻译为机器码,构建相应的Env_api。Env_api是区块链提供给合约用于与区块链进行交互的接口。env模块由虚拟机利用解释器的 API构建原生模块,并实现预先设计的Env_api。Env_api都须要用原生语言实现。利用解释器的模块解析器moduleResolver在执行代码前加载。ChainVMC 提供了一套虚拟机和客户端之间的通用交互接口,不同的虚拟机只需要实现这些接口,即可为区块链客户端提供交互功能。将客户端与虚拟机实现相互分离,而且能够根据实际情况灵活切换底层虚拟机实现。
4)执行:虚拟机的核心模块,负责执行合约字节码并返回结果。对于相同参数和上下文,无论在什么设备上运行,何时运行,运行几次,运行结果都一致。高效执行:虚拟机的执行时间不大于共识算法给于交易执行的最大时间。提供了相应的停机与回滚机制,在执行失败时须要对本次执行涉及的所有状态变更进行回滚。沙箱环境保证合约与合约之间、合约与宿主系统之间的资源隔离,能够防备恶意和故障合约的不良影响。
如图4所示,为本申请实施例中多智能合约引擎的实现方法的一个实施例流程示意图,该多智能合约引擎的实现方法包括如下步骤401~403:
401、获取用户在目标编译器中编码目标智能合约对应的智能合约语言代码。
其中,目标编译器为多种编码语言对应的编译器中的一种,例如支持 solidity的solc编译器、支持java接入javac编译器,支持C/C++接入gcc编译器等,具体此处不作限定。
进一步的,所述获取用户在目标编译器中编码目标智能合约对应的智能合约语言代码,包括:获取用户在所述智能合约引擎适配器支持的多种编码语言中,选择编码所述目标智能合约的编码语言;启动所述编码语言对应的目标编译器,并获取用户在所述目标编译器中编码所述目标智能合约对应的智能合约语言代码。
具体的,获取用户在目标编译器中编码目标智能合约对应的智能合约语言代码的方式:可以是接收用户通过目标编译器输出的智能合约和智能合约相关的参数。该与智能合约相关的参数具体可以包括但不限于:智能合约采用的语言、运行的虚拟机的类别、智能合约的类别、智能合约的权限等。
根据目标编译器输出的智能合约和智能合约相关的参数可以确定智能合约对接的智能合约虚拟机。具体的,可以确定该智能合约对接的虚拟机接口类别,每个智能合约虚拟机对应一个虚拟机接口类别。根据该虚拟机接口类别可以确定唯一的智能合约虚拟机。
402、通过所述目标编译器将所述智能合约语言代码编译为合约字节码,得到所述目标智能合约相应的中间字节码。
具体的,智能合约引擎适配器中的编译适配接口接入不同的编译器单元,不同种类的智能合约经过适配接口后教育不同的编译器单元处理,输出不同的字节码文件。输出的字节码是编码后的数值常量、引用、指令等构成的序列,与特定机器代码无关,需要解释器转译后才能成为机器代码的中间代码。
例如,智能合约引擎适配器中编译单元将输入的高级智能合约语言通过编译适配器编译为字节码,不同高级智能合约语言输出不同后缀名的字节码文件,如solidity源文件.sol经过solc编译器接口编译后产生的字节码文件为sol的智能合约文件,java源文件a.java经过javac编译器接口编译后产生的字节码文件为 a.class(执行java a);C系列语言souceC.cpp经过gcc编译(gcc、g++)接口编译后产生文件为ouceC.out(执行命令./a.out);go语言source.go经过gccgo编译接口(go build)编译后产生的字节码文件为source(执行命令./程序名)。
智能合约引擎适配器可以支持JSVM、EVM、WASM、JVM等智能合约引擎,以可插拔的方式实现,由于不同类型的智能合约包含了不同的字节码特征,可插拔虚拟机引擎接口通过对特征的识别,可以判断该段字节码需要使用哪种多智能合约虚拟机进行执行,选择对应虚拟机后加载字节码,解析字节码,然后根据指令去执行对应的函数功能。
优选的,在输出该中间字节码文件之前,还可以对该中间字节码文件做相应的优化处理。
403、加载所述多种智能合约引擎对所述中间字节码进行智能合约的实现,得到目标智能合约的机器码,所述目标智能合约的机器码适配多种不同类型的区块链架构。
其中,所述目标智能合约的机器码适配多种不同类型的区块链架构,可以适配不同的智能合约编程语言。
本申请实施例中获取用户在目标编译器中编码目标智能合约对应的智能合约语言代码;通过目标编译器将所述智能合约语言代码编译为合约字节码,得到目标智能合约相应的中间字节码;加载多种智能合约引擎对中间字节码进行智能合约的实现,得到目标智能合约的机器码,目标智能合约的机器码适配多种不同类型的区块链架构。本申请多智能合约引擎可以支持多种引擎同时运行在区块链节点上,支持多种引擎同时加载,以适配不同类型的区块链架构,对合约调用者、应用部署者友好,利于构建友好型区块链生态体系。
在本申请一些实施方案中,如图5所示,所述加载所述多种智能合约引擎对所述中间字节码进行智能合约的实现,得到目标智能合约的机器码,可以包括如下步骤501~503:
501、对所述中间字节码进行验证,得到验证结果。
502、在所述验证结果为验证通过后,对所述中间字节码注入预设的必要代码,得到注入后字节码。
503、将所述注入后字节码翻译为机器码,得到目标智能合约的机器码。
步骤501~503在智能合约引擎适配器的实现层实现:分为验证、注入、解释、执行等模块,以支撑不同的智能合约引擎的实现。
在本申请一些实施方案中,所述对所述中间字节码进行验证,得到验证结果,包括:对所述中间字节码进行ABI检查,得到第一检查结果;对所述中间字节码对应的虚拟机执行环境进行检查,得到第二检查结果;对智能合约进行版本检查,以选择目标智能合约对应版本的解释器,得到第三检查结果;所述验证结果中包括第一检查结果、第二检查结果和第三检查结果。当第一检查结果,第二检查结果通过,即表示上述验证结果为验证通过。
其中,智能合约引擎适配器中验证模块会对智能合约字节码及传参进行一些验证,包含ABI检查、环境检查与版本检查三个环节,ABI验证:利用合约ABI 对用户发送的合约调用及参数进行校验。环境检查:检查虚拟机执行环境环境是否符合预期、配置字段、字节码是否合法、以及类型是否正确;解释器模块是否ready。版本检查:检查合约版本,选择对应版本的解释器。
具体的,第一检查结果即含ABI检查结果,第二检查结果为环境检查结果,第三检查结果为版本检查结果。
进一步的,所述对所述中间字节码注入预设的必要代码,得到注入后字节码,包括:在所述中间字节码注入所述目标智能合约每一操作消耗的Gas数据,得到Gas注入后字节码;在所述Gas注入后字节码中,注入所述目标智能合约实现必要的调用接口和数据,以为所述目标智能合约执行构建合理的上下文环境,得到所述注入后字节码。
其中,所述在所述中间字节码注入所述目标智能合约每一操作消耗的Gas 数据,得到Gas注入后字节码,包括:统计所述目标智能合约每一操作消耗的Gas 数据;将所述中间字节码转换成易于解析的格式化文本;将所述消耗的Gas数据注入到所述格式化文本中,得到Gas注入后格式化文本;将所述Gas注入后格式化文本恢复成字节码,得到Gas注入后字节码。
本申请实施例中通过智能合约引擎适配器的注入模块对智能合约字节码注入一些必要的代码。
其中,注入模块包括Gas Metering步骤:用于统计每一个操作所须花费的 Gas。实现Env_api方法useGas;接着将字节码恢复成易于解析的格式化文本 (如JSON);接着将useGas注入到格式化文本中;最后将格式化文本重新恢复成字节码。Gas Metering若部署在编译层,虽然只须要注入一次,节省了执行时的开销,但恶意用户只须要更改编译器的Gas表即可作恶,安全性大大降低;同时无法再对已部署的旧智能合约更新Gas Metering,导致新老智能合约的Gas收费标准不一致。部署在执行层中,智能合约在每次执行时进行一次Gas Metering注入,虽然牺牲了一些执行效率,但Gas可以灵活变更,这对于不断调整、迭代的公链项目至关重要。
上下文环境构建步骤:为智能合约执行构建合理的上下文环境,提供必要的内部模块和数据以供合约使用,包括:区块链账本实例,提供区块、交易等信息的调用接口;状态数据库实例,提供状态数据的增删改查的调用接口;当前Transaction与Action的相关数据;当前区块高度和区块时间。
在本申请一些实施方式中,步骤503中将所述注入后字节码翻译为机器码,得到目标智能合约的机器码,可以是通过智能合约引擎适配器中解释器将字节码翻译为机器码,首先构建相应的Env_api,Env_api是区块链提供给合约用于与区块链进行交互的接口,env模块由虚拟机利用解释器的API构建原生模块,并实现预先设计的Env_api。Env_api都须要用原生语言实现。利用解释器的模块解析器moduleResolver在执行代码前加载。
ChainVMC提供了一套虚拟机和客户端之间的通用交互接口,不同的虚拟机只需要实现这些接口,即可为区块链客户端提供交互功能。将客户端与虚拟机实现相互分离,而且能够根据实际情况灵活切换底层虚拟机实现。
多智能合约虚拟机的执行模块,负责执行智能合约字节码并返回结果。对于相同参数和上下文,无论在什么设备上运行,何时运行,运行几次,运行结果都一致。高效执行:多智能合约虚拟机的执行时间不大于共识算法给于交易执行的最大时间。提供了相应的停机与回滚机制,在执行失败时须要对本次执行涉及的所有状态变更进行回滚。沙箱环境保证智能合约与智能合约之间、智能合约与宿主系统之间的资源隔离,能够防备恶意和故障智能合约的不良影响。
为了更好实施本申请实施例中多智能合约引擎的实现方法,在多智能合约引擎的实现方法基础之上,本申请实施例中还提供一种多智能合约引擎的实现装置,该多智能合约引擎的实现装置应用于区块链系统,所述区块链系统中包括智能合约引擎适配器,所述智能合约引擎适配器中包括多种智能合约引擎,所述智能合约引擎适配器支持多种编码语言,每种编码语言对应一种编译器,如图6所示,所述多智能合约引擎的实现装置600包括:
获取模块601,用于获取用户在目标编译器中编码目标智能合约对应的智能合约语言代码;
编译模块602,用于通过所述目标编译器将所述智能合约语言代码编译为合约字节码,得到所述目标智能合约相应的中间字节码;
实现模块603,用于加载所述多种智能合约引擎对所述中间字节码进行智能合约的实现,得到目标智能合约的机器码,所述目标智能合约的机器码适配多种不同类型的区块链架构。
本申请实施例中获取模块601获取用户在目标编译器中编码目标智能合约对应的智能合约语言代码;编译模块602通过目标编译器将所述智能合约语言代码编译为合约字节码,得到目标智能合约相应的中间字节码;实现模块603 加载多种智能合约引擎对中间字节码进行智能合约的实现,得到目标智能合约的机器码,目标智能合约的机器码适配多种不同类型的区块链架构。本申请多智能合约引擎可以支持多种引擎同时运行在区块链节点上,支持多种引擎同时加载,以适配不同类型的区块链架构,对合约调用者、应用部署者友好,利于构建友好型区块链生态体系。
在本申请一些实施方案中,所述获取模块601具体用于:
获取用户在所述智能合约引擎适配器支持的多种编码语言中,选择编码所述目标智能合约的编码语言;
启动所述编码语言对应的目标编译器,并获取用户在所述目标编译器中编码所述目标智能合约对应的智能合约语言代码。
在本申请一些实施方案中,所述实现模块603具体用于:
对所述中间字节码进行验证,得到验证结果;
在所述验证结果为验证通过后,对所述中间字节码注入预设的必要代码,得到注入后字节码;
将所述注入后字节码翻译为机器码,得到目标智能合约的机器码。
在本申请一些实施方案中,所述实现模块603具体用于:
对所述中间字节码进行ABI检查,得到第一检查结果;
对所述中间字节码对应的虚拟机执行环境进行检查,得到第二检查结果;
对智能合约进行版本检查,以选择目标智能合约对应版本的解释器,得到第三检查结果;
所述验证结果中包括第一检查结果、第二检查结果和第三检查结果。
在本申请一些实施方案中,所述实现模块603具体用于:
在所述中间字节码注入所述目标智能合约每一操作消耗的Gas数据,得到 Gas注入后字节码;
在所述Gas注入后字节码中,注入所述目标智能合约实现必要的调用接口和数据,以为所述目标智能合约执行构建合理的上下文环境,得到所述注入后字节码。
在本申请一些实施方案中,所述实现模块603具体用于:
统计所述目标智能合约每一操作消耗的Gas数据;
将所述中间字节码转换成易于解析的格式化文本;
将所述消耗的Gas数据注入到所述格式化文本中,得到Gas注入后格式化文本;
将所述Gas注入后格式化文本恢复成字节码,得到Gas注入后字节码。
本申请实施例还提供一种电子设备,其集成了本申请实施例所提供的任一种多智能合约引擎的实现装置,所述电子设备包括:
一个或多个处理器;
存储器;以及
一个或多个应用程序,其中所述一个或多个应用程序被存储于所述存储器中,并配置为由所述处理器执行上述多智能合约引擎的实现方法实施例中任一实施例中所述的多智能合约引擎的实现方法中的步骤。
本申请实施例还提供一种电子设备,其集成了本申请实施例所提供的任一种多智能合约引擎的实现装置。如图7所示,其示出了本申请实施例所涉及的电子设备的结构示意图,具体来讲:
该电子设备可以包括一个或者一个以上处理核心的处理器701、一个或一个以上计算机可读存储介质的存储器702、电源703和输入单元704等部件。本领域技术人员可以理解,图7中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器701是该电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器702内的软件程序和/或模块,以及调用存储在存储器702内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器701可包括一个或多个处理核心;优选的,处理器701可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器701中。
存储器702可用于存储软件程序以及模块,处理器701通过运行存储在存储器702的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器702 可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器702可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器702还可以包括存储器控制器,以提供处理器701对存储器702的访问。
电子设备还包括给各个部件供电的电源703,优选的,电源703可以通过电源管理系统与处理器701逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源703还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该电子设备还可包括输入单元704,该输入单元704可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
尽管未示出,电子设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,电子设备中的处理器701会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器702中,并由处理器701来运行存储在存储器702中的应用程序,从而实现各种功能,如下:
获取用户在目标编译器中编码目标智能合约对应的智能合约语言代码;通过所述目标编译器将所述智能合约语言代码编译为合约字节码,得到所述目标智能合约相应的中间字节码;加载所述多种智能合约引擎对所述中间字节码进行智能合约的实现,得到目标智能合约的机器码,所述目标智能合约的机器码适配多种不同类型的区块链架构。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请实施例提供一种计算机可读存储介质,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。其上存储有计算机程序,所述计算机程序被处理器进行加载,以执行本申请实施例所提供的任一种多智能合约引擎的实现方法中的步骤。例如,所述计算机程序被处理器进行加载可以执行如下步骤:
获取用户在目标编译器中编码目标智能合约对应的智能合约语言代码;通过所述目标编译器将所述智能合约语言代码编译为合约字节码,得到所述目标智能合约相应的中间字节码;加载所述多种智能合约引擎对所述中间字节码进行智能合约的实现,得到目标智能合约的机器码,所述目标智能合约的机器码适配多种不同类型的区块链架构。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见上文针对其他实施例的详细描述,此处不再赘述。
具体实施时,以上各个单元或结构可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元或结构的具体实施可参见前面的方法实施例,在此不再赘述。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
以上对本申请实施例所提供的一种多智能合约引擎的实现方法、装置、电子设备及存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种多智能合约引擎的实现方法,其特征在于,应用于区块链系统,所述区块链系统中包括智能合约引擎适配器,所述智能合约引擎适配器中包括多种智能合约引擎,所述智能合约引擎适配器支持多种编码语言,每种编码语言对应一种编译器,所述方法包括:
获取用户在目标编译器中编码目标智能合约对应的智能合约语言代码;
通过所述目标编译器将所述智能合约语言代码编译为合约字节码,得到所述目标智能合约相应的中间字节码;
加载所述多种智能合约引擎对所述中间字节码进行智能合约的实现,得到目标智能合约的机器码,所述目标智能合约的机器码适配多种不同类型的区块链架构。
2.根据权利要求1所述的多智能合约引擎的实现方法,其特征在于,所述获取用户在目标编译器中编码目标智能合约对应的智能合约语言代码,包括:
获取用户在所述智能合约引擎适配器支持的多种编码语言中,选择编码所述目标智能合约的编码语言;
启动所述编码语言对应的目标编译器,并获取用户在所述目标编译器中编码所述目标智能合约对应的智能合约语言代码。
3.根据权利要求1所述的多智能合约引擎的实现方法,其特征在于,所述加载所述多种智能合约引擎对所述中间字节码进行智能合约的实现,得到目标智能合约的机器码,包括:
对所述中间字节码进行验证,得到验证结果;
在所述验证结果为验证通过后,对所述中间字节码注入预设的必要代码,得到注入后字节码;
将所述注入后字节码翻译为机器码,得到目标智能合约的机器码。
4.根据权利要求3所述的多智能合约引擎的实现方法,其特征在于,所述对所述中间字节码进行验证,得到验证结果,包括:
对所述中间字节码进行ABI检查,得到第一检查结果;
对所述中间字节码对应的虚拟机执行环境进行检查,得到第二检查结果;
对智能合约进行版本检查,以选择目标智能合约对应版本的解释器,得到第三检查结果;
所述验证结果中包括第一检查结果、第二检查结果和第三检查结果。
5.根据权利要求3所述的多智能合约引擎的实现方法,其特征在于,所述对所述中间字节码注入预设的必要代码,得到注入后字节码,包括:
在所述中间字节码注入所述目标智能合约每一操作消耗的Gas数据,得到Gas注入后字节码;
在所述Gas注入后字节码中,注入所述目标智能合约实现必要的调用接口和数据,以为所述目标智能合约执行构建合理的上下文环境,得到所述注入后字节码。
6.根据权利要求5所述的多智能合约引擎的实现方法,其特征在于,所述在所述中间字节码注入所述目标智能合约每一操作消耗的Gas数据,得到Gas注入后字节码,包括:
统计所述目标智能合约每一操作消耗的Gas数据;
将所述中间字节码转换成易于解析的格式化文本;
将所述消耗的Gas数据注入到所述格式化文本中,得到Gas注入后格式化文本;
将所述Gas注入后格式化文本恢复成字节码,得到Gas注入后字节码。
7.一种多智能合约引擎的实现装置,其特征在于,应用于区块链系统,所述区块链系统中包括智能合约引擎适配器,所述智能合约引擎适配器中包括多种智能合约引擎,所述智能合约引擎适配器支持多种编码语言,每种编码语言对应一种编译器,所述装置包括:
获取模块,用于获取用户在目标编译器中编码目标智能合约对应的智能合约语言代码;
编译模块,用于通过所述目标编译器将所述智能合约语言代码编译为合约字节码,得到所述目标智能合约相应的中间字节码;
实现模块,用于加载所述多种智能合约引擎对所述中间字节码进行智能合约的实现,得到目标智能合约的机器码,所述目标智能合约的机器码适配多种不同类型的区块链架构。
8.根据权利要求7所述的多智能合约引擎的实现装置,其特征在于,所述获取模块具体用于:
获取用户在所述智能合约引擎适配器支持的多种编码语言中,选择编码所述目标智能合约的编码语言;
启动所述编码语言对应的目标编译器,并获取用户在所述目标编译器中编码所述目标智能合约对应的智能合约语言代码。
9.一种电子设备,其特征在于,所述电子设备包括:
一个或多个处理器;
存储器;以及
一个或多个应用程序,其中所述一个或多个应用程序被存储于所述存储器中,并配置为由所述处理器执行以实现权利要求1至6中任一项所述的多智能合约引擎的实现方法。
10.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述计算机程序被处理器进行加载,以执行权利要求1至6任一项所述的多智能合约引擎的实现方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210322481.2A CN115022312A (zh) | 2022-03-30 | 2022-03-30 | 多智能合约引擎的实现方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210322481.2A CN115022312A (zh) | 2022-03-30 | 2022-03-30 | 多智能合约引擎的实现方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115022312A true CN115022312A (zh) | 2022-09-06 |
Family
ID=83066887
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210322481.2A Pending CN115022312A (zh) | 2022-03-30 | 2022-03-30 | 多智能合约引擎的实现方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115022312A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116880857A (zh) * | 2023-09-07 | 2023-10-13 | 中国民航信息网络股份有限公司 | 一种跨区块链引擎的智能合约生成方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111736954A (zh) * | 2020-06-24 | 2020-10-02 | 陈鹏 | 多智能合约虚拟机实现方法、多智能合约虚拟机及系统 |
US20210318897A1 (en) * | 2020-08-31 | 2021-10-14 | Alipay (Hangzhou) Information Technology Co., Ltd. | Methods, blockchain nodes, and node devices for executing smart contract |
CN113688186A (zh) * | 2021-08-25 | 2021-11-23 | 工银科技有限公司 | 智能合约执行方法、引擎及区块链节点 |
CN114116134A (zh) * | 2021-12-01 | 2022-03-01 | 上海研晓实业发展有限公司 | 智能合约部署和执行方法、设备及存储介质 |
CN116934330A (zh) * | 2023-07-24 | 2023-10-24 | 蚂蚁区块链科技(上海)有限公司 | 一种调用智能合约的方法及执行方法、计算机设备及存储介质 |
-
2022
- 2022-03-30 CN CN202210322481.2A patent/CN115022312A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111736954A (zh) * | 2020-06-24 | 2020-10-02 | 陈鹏 | 多智能合约虚拟机实现方法、多智能合约虚拟机及系统 |
US20210318897A1 (en) * | 2020-08-31 | 2021-10-14 | Alipay (Hangzhou) Information Technology Co., Ltd. | Methods, blockchain nodes, and node devices for executing smart contract |
CN113688186A (zh) * | 2021-08-25 | 2021-11-23 | 工银科技有限公司 | 智能合约执行方法、引擎及区块链节点 |
CN114116134A (zh) * | 2021-12-01 | 2022-03-01 | 上海研晓实业发展有限公司 | 智能合约部署和执行方法、设备及存储介质 |
CN116934330A (zh) * | 2023-07-24 | 2023-10-24 | 蚂蚁区块链科技(上海)有限公司 | 一种调用智能合约的方法及执行方法、计算机设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
黄洁华;高灵超;许玉壮;白晓敏;胡凯;: "众筹区块链上的智能合约设计", 信息安全研究, no. 03, 5 March 2017 (2017-03-05) * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116880857A (zh) * | 2023-09-07 | 2023-10-13 | 中国民航信息网络股份有限公司 | 一种跨区块链引擎的智能合约生成方法及系统 |
CN116880857B (zh) * | 2023-09-07 | 2024-01-26 | 中国民航信息网络股份有限公司 | 一种跨区块链引擎的智能合约生成方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11941381B2 (en) | Method for compiling from a high-level scripting language to a blockchain native scripting language | |
Honda et al. | Scribbling interactions with a formal foundation | |
CN105808266B (zh) | 代码运行方法及装置 | |
CN112104709B (zh) | 智能合约的处理方法、装置、介质及电子设备 | |
US20130159981A1 (en) | Extension mechanism for scripting language compiler | |
CN111831538B (zh) | 调试方法、装置以及存储介质 | |
CN102023856A (zh) | 根据用户的需求格式化输出及操作伺服端业务数据的方法 | |
CN111309620B (zh) | 一种游戏协议测试方法、装置、电子设备和存储介质 | |
CN110968437A (zh) | 一种基于Java智能合约的单个合约并行执行的方法、装置、设备及介质 | |
CN110795091B (zh) | 一种模块化路由解耦方法、存储介质、电子设备及系统 | |
CN112148278A (zh) | 可视化的区块链智能合约框架及智能合约开发部署方法 | |
CN109753639B (zh) | 前后台统一校验方法,装置,存储介质及电子设备 | |
CN115022312A (zh) | 多智能合约引擎的实现方法、装置、电子设备及存储介质 | |
WO2020041411A2 (en) | Object oriented smart contracts for utxo-based blockchains | |
US10606569B2 (en) | Declarative configuration elements | |
Cysneiros et al. | Traceability and completeness checking for agent-oriented systems | |
CN110018831B (zh) | 程序处理方法、装置及计算机可读存储介质 | |
US11803786B2 (en) | Enterprise integration platform | |
US11694197B2 (en) | Object oriented smart contracts for UTXO-based blockchains | |
CN114816361A (zh) | 拼搭工程生成方法、装置、设备、介质和程序产品 | |
Moebius et al. | Modeling security-critical applications with UML in the SecureMDD approach | |
CN111399842A (zh) | 一种代码编译方法及装置 | |
Jumnongsaksub et al. | Reducing smart contract runtime errors on ethereum | |
CN110737431A (zh) | 软件开发方法、开发平台、终端设备及存储介质 | |
CN116185425B (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 |