CN117215544A - 一种智能合约专用指令集的实现及运行方法 - Google Patents

一种智能合约专用指令集的实现及运行方法 Download PDF

Info

Publication number
CN117215544A
CN117215544A CN202311483233.7A CN202311483233A CN117215544A CN 117215544 A CN117215544 A CN 117215544A CN 202311483233 A CN202311483233 A CN 202311483233A CN 117215544 A CN117215544 A CN 117215544A
Authority
CN
China
Prior art keywords
intelligent contract
instruction
special
special function
function
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
Application number
CN202311483233.7A
Other languages
English (en)
Other versions
CN117215544B (zh
Inventor
曾靖
康跃馨
夏清
方明哲
郑龙帅
张亚丰
刘昊穹
李玉成
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Software of CAS
Original Assignee
Institute of Software of CAS
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Institute of Software of CAS filed Critical Institute of Software of CAS
Priority to CN202311483233.7A priority Critical patent/CN117215544B/zh
Publication of CN117215544A publication Critical patent/CN117215544A/zh
Application granted granted Critical
Publication of CN117215544B publication Critical patent/CN117215544B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

本申请提供了一种智能合约专用指令集的实现及运行方法,涉及区块链智能合约技术领域,方法包括:根据智能合约专用指令集对智能合约源码进行编译处理,得到智能合约中间表示,智能合约中间表示包括由多个原生功能指令和多个专用功能指令形成的指令序列;保持原生功能指令不变,将每个专用功能指令转译为对应的专用功能方法调用指令,以得到智能合约源码对应的智能合约编译结果;利用智能合约执行引擎将智能合约编译结果实例化为可执行智能合约程序,以实现智能合约在区块链中的运行。本申请通过预设专用功能指令集简化智能合约执行程序,保证智能合约在区块链中的传输性能和加载执行性能降低运行成本。

Description

一种智能合约专用指令集的实现及运行方法
技术领域
本申请涉及区块链智能合约运行技术领域,尤其涉及一种智能合约专用指令集的实现及运行方法。
背景技术
现有关于智能合约专用指令集的实现及运行方案,主要可概括为以下两种:
其一是完全基于底层专用功能硬件及机器指令去设计实现和运行智能合约专用指令,该方法需要设计实现并集成相关专用功能硬件,比如设计实现支持执行相应新型机器指令的专用芯片,其在工程复杂性以及经济上都具有较高的实现成本。
另一种是基于已有底层原生功能指令集将每条智能合约专用功能指令转译为与之功能等价的复杂冗长的已有原生指令序列,比如将一条大整数计算指令转译为若干条整数计算指令组合成的指令序列,然后在相应虚拟机中执行,该方法会显著增加智能合约最终含有指令序列的体积,从而影响其在不同区块链节点间进行同步传输以及虚拟机加载执行智能合约的性能。
发明内容
有鉴于此,本申请的目的在于至少提供一种智能合约专用指令集的实现及运行方法,通过预设专用功能指令集简化智能合约执行程序,保证智能合约在区块链中的传输性能和加载执行性能,降低运行成本。
本申请主要包括以下几个方面:
第一方面,本申请实施例提供一种智能合约专用指令集的实现及运行方法,方法包括:根据智能合约专用指令集对智能合约源码进行编译处理,得到智能合约中间表示,智能合约中间表示包括由多个原生功能指令和多个专用功能指令形成的指令序列;保持原生功能指令不变,将每个专用功能指令转译为对应的专用功能方法调用指令,以得到智能合约源码对应的智能合约编译结果;利用智能合约执行引擎将智能合约编译结果实例化为可执行智能合约程序,以实现智能合约在区块链中的运行。
在一种可能的实施方式中,智能合约专用指令集包括原生功能指令集和专用功能指令集,其中,通过以下方式确定智能合约中间表示:对智能合约源码进行功能识别,得到多个功能逻辑语句;针对每个功能逻辑语句,执行以下处理:若该功能逻辑语句为专用功能逻辑语句,则利用专用功能指令集,将该功能逻辑语句编译为对应的专用功能指令,专用功能指令集包括用于实现不同功能的多个专用功能指令;若该功能逻辑语句为基本功能逻辑语句,则利用原生功能指令集,将该功能逻辑语句编译为对应的原生功能指令。
在一种可能的实施方式中,通过以下方式对每个专用功能指令进行转译处理:识别智能合约中间表示中的多个专用功能指令;针对每个专用功能指令,根据预设映射关系表将该专用功能指令替换为对应的专用功能方法调用指令,预设映射关系表包括专用功能指令、专用功能方法调用指令及外部方法引入信息之间的映射关系;统计智能合约中间表示所调用的全部专用功能方法,记录形成智能合约对应的专用功能方法列表;针对专用功能方法列表中所记录的每个专用功能方法,利用预设映射关系表在智能合约中间表示中添加该专用功能方法对应的方法类型声明以及外部方法引入信息,以完成对每个专用功能指令的转译处理。
在一种可能的实施方式中,识别智能合约中间表示中的多个专用功能指令的步骤包括:获取智能合约中间表示的数据格式;若智能合约中间表示的数据格式为二进制格式,则根据专用功能指令集中所记录的每个专用功能指令对应的二进制操作码识别出多个专用功能指令;若智能合约中间表示的数据格式为文本格式,则根据专用功能指令集中所记录的每个专用功能指令对应的指令名识别出多个专用功能指令。
在一种可能的实施方式中,智能合约执行引擎中集成能解析运行原生功能指令的虚拟机以及专用功能方法库,专用功能方法库包括预先设置的多个专用功能方法,其中,利用智能合约执行引擎将智能合约编译结果实例化为可执行智能合约程序,以实现智能合约在区块链中的运行的步骤包括:针对每个专用功能方法调用指令,从专用功能方法库中调取与该专用功能方法调用指令对应的专用功能方法并将其引入到智能合约编译结果,得到可执行智能合约程序;利用虚拟机运行可执行智能合约程序,以实现智能合约在区块链中的运行。
第二方面,本申请实施例提供一种智能合约专用指令集的实现及运行装置,装置包括:编译模块,用于根据智能合约专用指令集对智能合约源码进行编译处理,得到智能合约中间表示,智能合约中间表示包括由多个原生功能指令和多个专用功能指令形成的指令序列;转译模块,用于保持原生功能指令不变,将每个专用功能指令转译为对应的专用功能方法调用指令,以得到智能合约源码对应的智能合约编译结果;执行模块,用于利用智能合约执行引擎将智能合约编译结果实例化为可执行智能合约程序,以实现智能合约在区块链中的运行。
在一种可能的实施方式中,智能合约专用指令集包括原生功能指令集和专用功能指令集,编译模块还用于:对智能合约源码进行功能识别,得到多个功能逻辑语句;针对每个功能逻辑语句,执行以下处理:若该功能逻辑语句为专用功能逻辑语句,则利用专用功能指令集,将该功能逻辑语句编译为对应的专用功能指令,专用功能指令集包括用于实现不同功能的多个专用功能指令;若该功能逻辑语句为基本功能逻辑语句,则利用原生功能指令集,将该功能逻辑语句编译为对应的原生功能指令。
在一种可能的实施方式中,转译模块还用于:识别智能合约中间表示中的多个专用功能指令;针对每个专用功能指令,根据预设映射关系表将该专用功能指令替换为对应的专用功能方法调用指令,预设映射关系表包括专用功能指令、专用功能方法调用指令及外部方法引入信息之间的映射关系;统计智能合约中间表示所调用的全部专用功能方法,记录形成智能合约对应的专用功能方法列表;针对专用功能方法列表中所记录的每个专用功能方法,利用预设映射关系表在智能合约中间表示中添加该专用功能方法对应的方法类型声明以及外部方法引入信息,以完成对每个专用功能指令的转译处理。
第三方面,本申请实施例还提供一种电子设备,包括:处理器、存储器和总线,存储器存储有处理器可执行的机器可读指令,当电子设备运行时,处理器与存储器之间通过总线进行通信,机器可读指令被处理器运行时执行上述第一方面或第一方面中任一种可能的实施方式中的智能合约专用指令集的实现及运行方法的步骤。
第四方面,本申请实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器运行时执行上述第一方面或第一方面中任一种可能的实施方式中的智能合约专用指令集的实现及运行方法的步骤。
本申请实施例提供的一种智能合约专用指令集的实现及运行方法,方法包括:对智能合约源码进行编译处理,得到智能合约中间表示,智能合约中间表示包括多个原生功能指令和多个专用功能指令;保持原生功能指令不变,将每个专用功能指令转译为对应的专用功能方法调用指令,以得到智能合约源码对应的智能合约编译结果;利用智能合约执行引擎将智能合约编译结果实例化为可执行智能合约程序,以实现智能合约在区块链中的运行。本申请通过预设专用功能指令集简化智能合约执行程序,保证智能合约在区块链中的传输性能和加载执行性能,降低运行成本。
为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例所提供的一种智能合约专用指令集的实现及运行方法的流程图;
图2示出了本申请实施例提供的一种智能合约专用指令集的构成关系示意图;
图3示出了本申请实施例提供的一种专用功能指令、专用功能方法调用指令及外部方法引入信息之间的映射关系表;
图4示出了本申请实施例提供的一种转译示意图;
图5示出了本申请实施例提供的一种智能合约执行引擎架构示意图;
图6示出了本申请实施例提供的一种智能合约专用指令集的实现及运行装置的功能模块图;
图7示出了本申请实施例所提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解,本申请中的附图仅起到说明和描述的目的,并不用于限定本申请的保护范围。另外,应当理解,示意性的附图并未按实物比例绘制。本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。应当理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。
另外,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的全部其他实施例,都属于本申请保护的范围。
随着区块链技术的不断发展完善,区块链逐渐成为数据可信共享、跨机构间协作以及可验证追溯等需求场景下相应解决方案的支撑技术之一,而区块链中的智能合约作为一种数字化合约,其本质是运行于区块链中的应用程序逻辑,其对于产业应用集成区块链技术助力数字化发展而言至关重要。
智能合约本身需要基于高级编程语言来编写实现,并经由相应编译器工具链编译处理后形成含机器指令序列或虚拟指令序列的编译结果以在智能合约引擎中执行。
智能合约专用高级编程语言在其语言语法层面直接支持智能合约专用功能,能有效提升智能合约的开发效率及合约执行性能。基于智能合约专用高级编程语言的智能合约源码中包括合约执行所需要的不同功能,主要包括原生功能和专用功能两种,原生功能是指所有场景下程序运行所需要的共性功能,比如一般整数(32位或64位)的计算、程序逻辑流程控制、内存访问及方法调用等,专用功能是指在智能合约场景下需要使用的除基本功能以外的功能,如大整数计算、超高精度浮点数计算、加解密以及哈希计算等,这些功能不属于共性功能,原生功能可直接使用虚拟机内部已支持的原生功能指令集完成实现,但是对于专用功能,原生功能指令集无法直接实现。
基于上述,现有智能合约的执行方案,主要在于对智能合约内专用功能的实现,具体包括以下两种:
其一是完全基于底层专用功能硬件去设计实现和运行智能合约内的专用功能,该方法需要设计实现并集成相关专用功能硬件,比如设计实现支持执行相应新型机器指令的专用芯片,其在工程复杂性以及经济上都具有较高的实现成本。
另一种是基于底层已有的原生功能指令集,将每个专用功能转译为与之功能等价的复杂冗长的原生指令序列,比如将一条大整数计算指令转译为若干条整数计算指令组合成的指令序列,然后在相应虚拟机中执行,该方法会显著增加智能合约最终含有指令序列的体积,从而影响其在不同区块链节点间进行同步传输以及虚拟机加载执行智能合约的性能。
基于此,本申请实施例提供了一种智能合约专用指令集的实现及运行方法,通过预设专用功能指令集简化智能合约执行程序,保证智能合约在区块链中的传输性能和加载执行性能,降低运行成本,具体如下:
请参阅图1,图1为本申请实施例所提供的一种智能合约专用指令集的实现及运行方法的流程图。如图1所示,本申请实施例提供的方法,包括以下步骤:
S100、根据智能合约专用指令集对智能合约源码进行编译处理,得到智能合约中间表示。
智能合约中间表示包括由多个原生功能指令和多个专用功能指令形成的指令序列。
S200、保持原生功能指令不变,将每个专用功能指令转译为对应的专用功能方法调用指令,以得到智能合约源码对应的智能合约编译结果。
S300、利用智能合约执行引擎将智能合约编译结果实例化为可执行智能合约程序,以实现智能合约在区块链中的运行。
在步骤S100~步骤S300中,先获取智能合约对应的智能合约源码,智能合约源码是基于智能合约专用高级编程语言编写的,然后可利用智能合约专用指令集对智能合约源码进行编译处理,将其中的智能合约专用功能相关语句逻辑编译为智能合约中间表示,然后进一步将智能合约中间表示中的专用功能指令转译为一条精简的专用功能方法调用指令,得到智能合约编译结果,一方面,相较于将智能合约专用功能指令转译为与之功能等价的非调用外部方法的复杂冗长原生虚拟指令序列的方式而言,能保障智能合约所含虚拟指令序列的精简度,从而有利于优化智能合约在区块链节点间的同步传输性能以及相应虚拟机加载执行智能合约的性能,另一方面,外部方法调用指令的引入,可以使现有虚拟机也可实现对智能合约中专用功能的运行从而避免了完全依赖专用功能硬件及机器指令的方式带来的较高工程实现成本及经济成本。
在具体实施中,在步骤S100之前,要先创建智能合约专用指令集,具体的,在虚拟机支持的原生功能指令集的基础上,添加支撑智能合约内专用功能的专用功能指令集,由原生功能指令集和专用功能指令集共同形成智能合约专用指令集,其中,原生功能指令集包括多个原生功能指令,专用功能指令集包括多个专用功能指令。
请参阅图2,图2示出了本申请实施例提供的一种智能合约专用指令集的构成关系示意图。如图2所示,智能合约专用指令集SCPIS=原生功能指令集BIS∪专用功能指令集PIS,其中,将WebAssembly原生标准指令集作为原生功能指令集BIS,包括多条原生功能指令,如表示32位整数及64位整数计算的指令:i32.add、i64.sub等,表示程序逻辑流程控制的指令:if、loop、br等,表示内存读写的指令:i32.load、i64.store等,表示方法调用的指令:call等。
专用功能指令集PIS包括预先创建的多个专用功能指令,专用功能指令是支撑智能合约的专用功能的指令,如图2所示PIS中包括表示大整数(128位及1024位等)计算的指令:i128.add、i1024.sub等,表示超高精度浮点数计算的指令:f1024.add、f1024.mul等,表示加密的指令:sm2.enc等,表示哈希计算的指令:sm3.hash等。
在一个具体实施例中,在原生功能指令集BIS的基础上,设计扩展添加若干如下表1所示的多个专用功能指令:
表1
表1示出了创建的多个专用功能指令,如表1所示,上述表格包括多条专用功能指令记录,每个专用功能指令记录表示一条专用功能指令,每个专用功能指令记录包括指令类别、指令名称、指令含义、指令操作码、指令操作数和指令说明,使用二进制表示指令操作码,包括两个字节,第一个字节的值固定为“0xF0”,“0xF0”在WebAssembly原生标准指令集中属于保留操作码,本申请中,将“0xF0”作为扩展添加的专用功能指令的指令操作码的前缀。
例如,专用功能指令“i128.add”表示对128比特的大整数进行加法计算,其中,“0xF0 0x07”为表示128比特整数加法的指令操作码,操作数“addr1”与“addr2”分别表示被加数与加数所在的内存地址,操作数“addr3”表示加法结果所在的内存地址,即专用功能指令“i128.add”的语义逻辑为对内存地址为“addr1”和“addr2”的128比特整数进行加法计算,将计算结果写入地址为“addr3”的内存空间,根据该指令对应的指令说明,专用功能指令“i128.add”同时适用于有符号数signed及无符号数unsigned。
再如,专用功能指令“f1024.ass” 表示对1024比特的超高精度浮点数进行赋值操作,其中,“0xF0 0x75”为表示1024比特超高精度浮点数赋值的指令操作码,指令操作数“addr1”表示赋值变量的内存地址,指令操作数“addr2”表示被赋值变量的内存地址,即该指令的语义逻辑为将内存地址为“addr1”的1024比特超高精度浮点数变量的值赋值给内存地址为“addr2”的1024比特超高精度浮点数变量。
另如表1中专用功能指令“sm3.hash”表示对数据进行SM3算法哈希计算,其中,“0xF0 0x87”为表示SM3哈希计算的操作码,指令操作数“addr1”表示被计算数据所在的内存地址,在该指令中,指令操作数“size1”表示被计算数据在内存中所占的字节数,指令操作数“addr2”表示计算结果所在的内存地址,即该指令的语义逻辑为对内存地址为“addr1”且字节长度为“size1”的数据进行SM3哈希计算,将计算结果写入地址为“addr2”的内存空间。
在一优选实施例中,步骤S100包括:
对智能合约源码进行功能识别,得到多个功能逻辑语句,针对每个功能逻辑语句,执行以下处理:若该功能逻辑语句为专用功能逻辑语句,则利用专用功能指令集,将该功能逻辑语句编译为对应的专用功能指令,预设专用功能指令集包括用于实现不同功能的多个专用功能指令,若该功能逻辑语句为基本功能逻辑语句,则利用原生功能指令集,将该功能逻辑语句编译为对应的原生功能指令。
具体的,某种编写智能合约所使用的专用高级编程语言在其语法层面支持大整数计算、超高精度浮点数计算、SM2/SM4加解密以及SM3哈希计算等智能合约专用功能,基于该专用高级编程语言编写的智能合约源码包括多个不同的多个功能逻辑语句,多个功能逻辑语句用于实现不同功能,本申请中,针对每个功能逻辑语句,根据该功能逻辑语句所实现功能的功能类型,使用原生功能指令集所记载的原生功能指令或专用功能指令集中所记载的多个专用功能指令作为该功能逻辑语句的编译目标,得到智能合约中间表示,其包括由多个原生功能指令和多个专用功能指令形成的指令序列,该过程可在预设编译器中执行。
在步骤S200中,通过以下方式对每个专用功能指令进行转译处理:
识别智能合约中间表示中的多个专用功能指令,针对每个专用功能指令,根据预设映射关系表将该专用功能指令替换为对应的专用功能方法调用指令,预设映射关系表包括专用功能指令、专用功能方法调用指令及外部方法引入信息之间的映射关系,统计智能合约中间表示所调用的全部专用功能方法,记录形成智能合约对应的专用功能方法列表,针对专用功能方法列表中所记录的每个专用功能方法,利用预设映射关系表在智能合约中间表示中添加该专用功能方法对应的方法类型声明以及外部方法引入信息,以完成对每个专用功能指令的转译处理。
在一具体实施例中,可使用预设指令转译器完成上述转译过程,预设指令转译器以智能合约中间表示为输入,在转译处理过程中,对遇到的所有WebAssembly原生功能指令及元数据信息不做任何处理,而将所有专用功能指令转译为对应的专用功能方法调用指令,其中,每个专用功能指令对应调用一种专用功能方法。
在一实例中,智能合约中间表示中含有如下文本格式表示的指令序列片段:
i32.const 16
local.get 1
i32.sub
local.set 2
i32.const 10240
i32.const 10260
i32.const 10280
i128.add
i32.const 10280
i32.const 16
local.get 3
sm3.hash
该文本格式表示的指令序列片段基于栈式虚拟机来执行,每个功能指令对应的操作数按顺序入栈和出栈,对该指令序列片段进行识别,可知,指令“i128.add”和“sm3.hash”属于专用功能指令,除“i128.add”和“sm3.hash”以外的所有功能指令都是原生功能指令,在转译处理时对原生功能指令保持不变,需要将专用功能指令转译为对应的专用功能方法调用指令,具体的,根据预设关系映射表,将专用功能指令“i128.add”转译为“call $i128add”,将专用功能指令“sm3.hash”转译为“call $sm3hash”,其中,“call”为原生功能指令集中表示调用方法的指令名,“$i128add”和“$sm3hash”代表具体被调用的方法,转译前,针对每个智能合约中间表示中的每个专用功能指令的指令操作数,在转译后自动成为被调用的专用功能方法的参数。
在另一优选实施例中,识别智能合约中间表示中的多个专用功能指令的步骤包括:
获取智能合约中间表示的数据格式,若智能合约中间表示的数据格式为二进制格式,则根据专用功能指令集中所记录的每个专用功能指令对应的二进制操作码识别出多个专用功能指令,若智能合约中间表示的数据格式为文本格式,则根据专用功能指令集中所记录的每个专用功能指令对应的指令名识别出多个专用功能指令。
在获取到智能合约中间表示后,本申请根据智能合约中间表示的数据格式,还提供了两种专用功能指令的识别方式,具体的,当智能合约中间表示的数据格式为二进制格式时,说明智能合约中间表示中的功能指令是由二进制指令操作码表示的,此时,可根据表1中记录的每个专用功能指令对应的指令操作码,一一对比识别出专用功能指令,当智能合约中间表示的数据格式为文本格式时,说明智能合约中间表示中的功能指令是由指令名表示的,则根据表1中记录的每个专用功能指令对应的指令名,一一对比识别出专用功能指令。
请参阅图3,图3示出了本申请实施例提供的一种专用功能指令、专用功能方法调用指令及外部方法引入信息之间的映射关系表。以专用功能指令“i128.add”为例,根据如图3所示的映射关系表可知,专用功能指令“i128.add”对应的专用功能方法调用指令为“call $i128add”,对应的外部方法引入信息为“import "" "i128add"”,外部方法引入信息中的/>用于进行方法类型声明。
上述指令序列片段经初步转译处理后,得到如下指令序列片段:
i32.const 16
local.get 1
i32.sub
local.set 2
i32.const 10240
i32.const 10260
i32.const 10280
call $i128add
i32.const 10280
i32.const 16
local.get 3
call $sm3hash
统计上述指令序列片段出现的所有专用功能方法,得到专用功能方法列表,其形式如:[“i128add”,“sm3hash”],在智能合约中间表示中添加与专用功能方法列表中记录的专用功能方法对应的方法类型声明以及外部方法引入信息,形成含有如下所示信息的智能合约编译结果:
(type (;0;) (func (param i32) (param i32) (param i32) (result i32)))
(import "" "i128add" (func $i128add (type 0)))
(import "" "sm3hash" (func $sm3hash (type 0)))
……
i32.const 16
local.get 1
i32.sub
local.set 2
i32.const 10240
i32.const 10260
i32.const 10280
call $i128add
i32.const 10280
i32.const 16
local.get 3
call $sm3hash
……
其中,“(type (;0;) (func (param i32) (param i32) (param i32) (resulti32)))”是专用功能方法类型声明,其类型为“type 0”,专用功能方法类型由专用功能方法对应的参数数量及类型和返回值数量及类型决定,表示将参数为三个32位整数,返回值为一个32位整数的功能方法定义为“type 0”类型,即“(type (;0;) (func (param i32)(param i32) (param i32) (result i32)))”表示“type 0”的定义声明,由于该实例中所用到的专用功能方法正好在参数及返回值的数量和类型上都相同(可参考表1中的指令说明,指令说明内容相同,说明专用功能指令所对应的专用功能方法的类型相同),因此该实例中只需要添加一个方法类型声明,而“(import "" "i128add" (func $i128add (type0)))”和“(import "" "sm3hash" (func $sm3hash (type 0)))”为外部方法引入信息,分别对应专用功能方法“$i128add”和“$sm3hash”,它们的方法类型都是”type 0”,在根据预设映射关系表将对应的外部方法引入信息引入时,还需要在外部方法引入信息中声明方法类型,即先引入“(import "" "i128add")”,再在“(import "" "i128add")”中添加方法类型声明,将“(import "" "i128add")”变为“(import "" "i128add" (func $i128add(type 0)))”,从而引入完整的外部方法引入信息。
上述智能合约编译结果是符合WebAssembly标准的wasm格式数据,其具体内容包括了WebAssembly对应的原生功能指令、专用功能调用指令、方法类型声明、外部引入信息、符号表信息以及内存信息等。
请参阅图4,图4示出了本申请实施例提供的一种转译示意图。如图4所示,对于形成智能合约中间表示的指令序列A,其包括由多个专用功能指令形成的专用功能指令序列A1以及由多个原生功能指令形成的原生功能指令序列A2,对其进行转译处理后,将专用功能指令序列A1转换为专用功能方法调用指令序列A11,最终由专用功能方法调用指令序列A11和原生功能指令序列A2形成智能合约编译结果B。
在步骤S300中,智能合约执行引擎中集成能解析运行原生功能指令的虚拟机以及专用功能方法库,专用功能方法库包括预先设置的多个专用功能方法。
在一优选实施例中,步骤S300包括:
针对每个专用功能方法调用指令,从专用功能方法库中调取与该专用功能方法调用指令对应的专用功能方法并将其引入到智能合约编译结果,得到可执行智能合约程序,利用虚拟机运行可执行智能合约程序,以实现智能合约在区块链中的运行。
在一个具体实施例中,智能合约执行引擎中集成开源WebAssembly虚拟机Wasmer以及开源大数计算库Boost Multiprecision和开源密码算法库OpenSSL。其中,基于Wamser虚拟机来运行智能合约编译结果,基于Boost Multiprecision和OpenSSL来实现专用功能方法库,其中,Boost Multiprecision用于实现整数计算以及超高精度浮点数计算等智能合约专用功能方法,基于OpenSSL来实现SM2/SM4加解密及SM3哈希计算等专用功能方法库。
在将智能合约编译结果实例化为可执行智能合约程序的过程中,根据智能合约对应的专用功能方法列表中所记录的信息,将专用功能方法库中与之对应的每个专用功能方法作为外部方法引入到智能合约程序中,得到可运行的智能合约程序。
在一优选实施例中,本申请提供的方法还在智能合约运行系统中运行,其中,智能合约运行系统包括编译器、专用功能指令转译器和智能合约执行引擎,编译器用于实现对智能合约源码的编译处理,得到智能合约中间表示,专用功能指令转译器用于将每个专用功能指令转译为对应的专用功能方法调用指令,以得到智能合约源码对应的智能合约编译结果,智能合约执行引擎用于将智能合约编译结果实例化为可执行智能合约程序,以实现智能合约在区块链中的运行。
上述实施例中,专用功能指令转译器和智能合约执行引擎可以各自独立实现,也可以将二者进行融合集成实现。
在另一具体实施例中,请参阅图5,图5示出了本申请实施例提供的一种智能合约执行引擎架构示意图。如图5所示,在智能合约执行引擎中,集成有智能合约实例化模块、WebAssembly虚拟机和专用功能方法库。在智能合约实例化模块中集成了专用功能指令转译器,智能合约实例化模块以智能合约中间表示为输入,使用内部集成的专用功能指令转译器对智能合约中间表示进行处理得到wasm格式的智能合约编译结果和专用功能方法列表,根据专用功能方法列表将专用功能方法库中涉及的所有专用功能方法作为外部引入方法,并将所有外部引入方法与智能合约编译结果相结合进行实例化得到可执行智能合约程序,最后WebAssembly虚拟机加载并执行可执行智能合约程序,执行过程中,在运行到专用功能方法调用指令时,虚拟机会自动从专用功能方法库中调用并执行对应的专用功能方法。
在一具体示例中,在智能合约执行引擎中集成的专用功能方法库,可以是纯软件方法库,也可以是集成相应专用计算硬件的方法库。
在另一个具体实施例中,基于集成和依赖大数计算专用芯片的方法库来实现大整数计算以及超高精度浮点数计算等专用功能方法,基于集成和依赖加密计算专用芯片的方法库来实现SM2/SM4加解密及SM3哈希计算等专用功能方法,在智能合约执行过程中调用相应专用功能方法时,其底层逻辑实现将自动使用相应专用计算芯片来实现更高效的计算性能。
基于同一申请构思,本申请实施例中还提供了与上述实施例提供的智能合约专用指令集的实现及运行方法对应的智能合约专用指令集的实现及运行装置,由于本申请实施例中的装置解决问题的原理与本申请上述实施例的智能合约专用指令集的实现及运行方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
请参阅图6,图6示出了本申请实施例提供的一种智能合约专用指令集的实现及运行装置的功能模块图。如图6所示,装置包括:
编译模块400,用于根据智能合约专用指令集对智能合约源码进行编译处理,得到智能合约中间表示,智能合约中间表示包括由多个原生功能指令和多个专用功能指令形成的指令序列。
转译模块410,用于保持原生功能指令不变,将每个专用功能指令转译为对应的专用功能方法调用指令,以得到智能合约源码对应的智能合约编译结果。
执行模块420,用于利用智能合约执行引擎将智能合约编译结果实例化为可执行智能合约程序,以实现智能合约在区块链中的运行。
优选的,智能合约专用指令集包括原生功能指令集和专用功能指令集,编译模块400还用于:对智能合约源码进行功能识别,得到多个功能逻辑语句;针对每个功能逻辑语句,执行以下处理:若该功能逻辑语句为专用功能逻辑语句,则利用专用功能指令集,将该功能逻辑语句编译为对应的专用功能指令,专用功能指令集包括用于实现不同功能的多个专用功能指令;若该功能逻辑语句为基本功能逻辑语句,则利用原生功能指令集,将该功能逻辑语句编译为对应的原生功能指令。
优选的,转译模块410还用于:识别智能合约中间表示中的多个专用功能指令;针对每个专用功能指令,根据预设映射关系表将该专用功能指令替换为对应的专用功能方法调用指令,预设映射关系表包括专用功能指令、专用功能方法调用指令及外部方法引入信息之间的映射关系;统计智能合约中间表示所调用的全部专用功能方法,记录形成智能合约对应的专用功能方法列表;针对专用功能方法列表中所记录的每个专用功能方法,利用预设映射关系表在智能合约中间表示中添加该专用功能方法对应的方法类型声明以及外部方法引入信息,以完成对每个专用功能指令的转译处理。
优选的,转译模块410还用于:获取智能合约中间表示的数据格式;若智能合约中间表示的数据格式为二进制格式,则根据专用功能指令集中所记录的每个专用功能指令对应的二进制操作码识别出多个专用功能指令;若智能合约中间表示的数据格式为文本格式,则根据专用功能指令集中所记录的每个专用功能指令对应的指令名识别出多个专用功能指令。
优选的,智能合约执行引擎中集成能解析运行原生功能指令的虚拟机以及专用功能方法库,专用功能方法库包括预先设置的多个专用功能方法,其中,执行模块420还用于:针对每个专用功能方法调用指令,从专用功能方法库中调取与该专用功能方法调用指令对应的专用功能方法并将其引入到智能合约编译结果,得到可执行智能合约程序;利用虚拟机运行可执行智能合约程序,以实现智能合约在区块链中的运行。
基于同一申请构思,请参阅图7,图7示出了本申请实施例提供的一种电子设备的结构示意图,电子设备500包括:处理器510、存储器520和总线530,存储器520存储有处理器510可执行的机器可读指令,当电子设备500运行时,处理器510与存储器520之间通过总线530进行通信,机器可读指令被处理器510运行时执行如上述实施例中任一提供的智能合约专用指令集的实现及运行方法的步骤。
基于同一申请构思,本申请实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器运行时执行上述实施例提供的智能合约专用指令集的实现及运行方法的步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应所述理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者所述技术方案的部分可以以软件产品的形式体现出来,所述计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。

Claims (10)

1.一种智能合约专用指令集的实现及运行方法,其特征在于,所述方法包括:
根据智能合约专用指令集对智能合约源码进行编译处理,得到智能合约中间表示,所述智能合约中间表示包括由多个原生功能指令和多个专用功能指令形成的指令序列;
保持原生功能指令不变,将每个专用功能指令转译为对应的专用功能方法调用指令,以得到智能合约源码对应的智能合约编译结果;
利用智能合约执行引擎将所述智能合约编译结果实例化为可执行智能合约程序,以实现智能合约在区块链中的运行。
2.根据权利要求1所述的方法,其特征在于,智能合约专用指令集包括原生功能指令集和专用功能指令集,
其中,通过以下方式确定所述智能合约中间表示:
对所述智能合约源码进行功能识别,得到多个功能逻辑语句;
针对每个功能逻辑语句,执行以下处理:
若该功能逻辑语句为专用功能逻辑语句,则利用专用功能指令集,将该功能逻辑语句编译为对应的专用功能指令,所述专用功能指令集包括用于实现不同功能的多个专用功能指令;
若该功能逻辑语句为基本功能逻辑语句,则利用原生功能指令集,将该功能逻辑语句编译为对应的原生功能指令。
3.根据权利要求1所述的方法,其特征在于,通过以下方式对每个专用功能指令进行转译处理:
识别所述智能合约中间表示中的多个专用功能指令;
针对每个专用功能指令,根据预设映射关系表将该专用功能指令替换为对应的专用功能方法调用指令,所述预设映射关系表包括专用功能指令、专用功能方法调用指令及外部方法引入信息之间的映射关系;
统计智能合约中间表示所调用的全部专用功能方法,记录形成智能合约对应的专用功能方法列表;
针对所述专用功能方法列表中所记录的每个专用功能方法,利用预设映射关系表在所述智能合约中间表示中添加该专用功能方法对应的方法类型声明以及外部方法引入信息,以完成对每个专用功能指令的转译处理。
4.根据权利要求3所述的方法,其特征在于,识别所述智能合约中间表示中的多个专用功能指令的步骤包括:
获取所述智能合约中间表示的数据格式;
若所述智能合约中间表示的数据格式为二进制格式,则根据专用功能指令集中所记录的每个专用功能指令对应的二进制操作码识别出多个专用功能指令;
若所述智能合约中间表示的数据格式为文本格式,则根据专用功能指令集中所记录的每个专用功能指令对应的指令名识别出多个专用功能指令。
5.根据权利要求1所述的方法,其特征在于,所述智能合约执行引擎中集成能解析运行原生功能指令的虚拟机以及专用功能方法库,所述专用功能方法库包括预先设置的多个专用功能方法,
其中,利用智能合约执行引擎将所述智能合约编译结果实例化为可执行智能合约程序,以实现智能合约在区块链中的运行的步骤包括:
针对每个专用功能方法调用指令,从所述专用功能方法库中调取与该专用功能方法调用指令对应的专用功能方法并将其引入到智能合约编译结果,得到可执行智能合约程序;
利用所述虚拟机运行可执行智能合约程序,以实现智能合约在区块链中的运行。
6.一种智能合约专用指令集的实现及运行装置,其特征在于,所述装置包括:
编译模块,用于根据智能合约专用指令集对智能合约源码进行编译处理,得到智能合约中间表示,所述智能合约中间表示包括由多个原生功能指令和多个专用功能指令形成的指令序列;
转译模块,用于保持原生功能指令不变,将每个专用功能指令转译为对应的专用功能方法调用指令,以得到智能合约源码对应的智能合约编译结果;
执行模块,用于利用智能合约执行引擎将所述智能合约编译结果实例化为可执行智能合约程序,以实现智能合约在区块链中的运行。
7.根据权利要求6所述的装置,其特征在于,智能合约专用指令集包括原生功能指令集和专用功能指令集,编译模块还用于:
对所述智能合约源码进行功能识别,得到多个功能逻辑语句;
针对每个功能逻辑语句,执行以下处理:
若该功能逻辑语句为专用功能逻辑语句,则利用专用功能指令集,将该功能逻辑语句编译为对应的专用功能指令,所述专用功能指令集包括用于实现不同功能的多个专用功能指令;
若该功能逻辑语句为基本功能逻辑语句,则利用原生功能指令集,将该功能逻辑语句编译为对应的原生功能指令。
8.根据权利要求6所述的装置,其特征在于,转译模块还用于:
识别所述智能合约中间表示中的多个专用功能指令;
针对每个专用功能指令,根据预设映射关系表将该专用功能指令替换为对应的专用功能方法调用指令,所述预设映射关系表包括专用功能指令、专用功能方法调用指令及外部方法引入信息之间的映射关系;
统计智能合约中间表示所调用的全部专用功能方法,记录形成智能合约对应的专用功能方法列表;
针对所述专用功能方法列表中所记录的每个专用功能方法,利用预设映射关系表在所述智能合约中间表示中添加该专用功能方法对应的方法类型声明以及外部方法引入信息,以完成对每个专用功能指令的转译处理。
9.一种电子设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过所述总线进行通信,所述机器可读指令被所述处理器运行时执行如权利要求1至5任一所述的智能合约专用指令集的实现及运行方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如权利要求1至5任一所述的智能合约专用指令集的实现及运行方法的步骤。
CN202311483233.7A 2023-11-09 2023-11-09 一种智能合约专用指令集的实现及运行方法 Active CN117215544B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311483233.7A CN117215544B (zh) 2023-11-09 2023-11-09 一种智能合约专用指令集的实现及运行方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311483233.7A CN117215544B (zh) 2023-11-09 2023-11-09 一种智能合约专用指令集的实现及运行方法

Publications (2)

Publication Number Publication Date
CN117215544A true CN117215544A (zh) 2023-12-12
CN117215544B CN117215544B (zh) 2024-02-09

Family

ID=89046676

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311483233.7A Active CN117215544B (zh) 2023-11-09 2023-11-09 一种智能合约专用指令集的实现及运行方法

Country Status (1)

Country Link
CN (1) CN117215544B (zh)

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109933404A (zh) * 2018-12-12 2019-06-25 阿里巴巴集团控股有限公司 一种基于区块链智能合约的编解码方法及系统
CN110688122A (zh) * 2019-09-30 2020-01-14 支付宝(杭州)信息技术有限公司 编译和执行智能合约的方法及装置
CN110704064A (zh) * 2019-09-30 2020-01-17 支付宝(杭州)信息技术有限公司 编译和执行智能合约的方法及装置
CN110704063A (zh) * 2019-09-30 2020-01-17 支付宝(杭州)信息技术有限公司 编译和执行智能合约的方法及装置
CN111078290A (zh) * 2019-12-17 2020-04-28 西安电子科技大学 一种用于可扩展指令集的编译器及编译方法
US20200174937A1 (en) * 2019-08-30 2020-06-04 Alibaba Group Holding Limited Deploying a smart contract
CN111381938A (zh) * 2020-05-29 2020-07-07 支付宝(杭州)信息技术有限公司 一种基于基础指令集执行区块链中智能合约的方法及系统
CN111399990A (zh) * 2020-05-29 2020-07-10 支付宝(杭州)信息技术有限公司 解释执行智能合约指令的方法及装置
CN114327778A (zh) * 2021-12-30 2022-04-12 博雅正链(北京)科技有限公司 一种基于Webassembly字节码的智能合约虚拟机
CN115495086A (zh) * 2022-08-31 2022-12-20 蚂蚁区块链科技(上海)有限公司 一种编译方法和编译器、Wasm虚拟机

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109933404A (zh) * 2018-12-12 2019-06-25 阿里巴巴集团控股有限公司 一种基于区块链智能合约的编解码方法及系统
US20200174937A1 (en) * 2019-08-30 2020-06-04 Alibaba Group Holding Limited Deploying a smart contract
CN110688122A (zh) * 2019-09-30 2020-01-14 支付宝(杭州)信息技术有限公司 编译和执行智能合约的方法及装置
CN110704064A (zh) * 2019-09-30 2020-01-17 支付宝(杭州)信息技术有限公司 编译和执行智能合约的方法及装置
CN110704063A (zh) * 2019-09-30 2020-01-17 支付宝(杭州)信息技术有限公司 编译和执行智能合约的方法及装置
CN111078290A (zh) * 2019-12-17 2020-04-28 西安电子科技大学 一种用于可扩展指令集的编译器及编译方法
CN111381938A (zh) * 2020-05-29 2020-07-07 支付宝(杭州)信息技术有限公司 一种基于基础指令集执行区块链中智能合约的方法及系统
CN111399990A (zh) * 2020-05-29 2020-07-10 支付宝(杭州)信息技术有限公司 解释执行智能合约指令的方法及装置
CN114327778A (zh) * 2021-12-30 2022-04-12 博雅正链(北京)科技有限公司 一种基于Webassembly字节码的智能合约虚拟机
CN115495086A (zh) * 2022-08-31 2022-12-20 蚂蚁区块链科技(上海)有限公司 一种编译方法和编译器、Wasm虚拟机

Also Published As

Publication number Publication date
CN117215544B (zh) 2024-02-09

Similar Documents

Publication Publication Date Title
US8037461B2 (en) Program code conversion
JP5325925B2 (ja) Nベースタイプの演算式の最適化
JP2000047874A (ja) プレロ―ドクラスのフットプリント低減装置及び方法
US7761861B2 (en) Method for generating interpretable code for storage in a device having limited storage
JP3606561B2 (ja) 第1ビット・アーキテクチャの命令を第2ビット・アーキテクチャの命令に変換する方法、システム、プログラムおよびデータ構造
US10152313B1 (en) Shared library transformation on the same architecture
US20050235268A1 (en) Optimisation of a compiler generated program code
US7814467B2 (en) Program optimization using object file summary information
CN111625279A (zh) 基于动态链接库的动静融合二进制翻译方法及系统
CN115408004A (zh) 一种Web应用系统存算一体化适配优化方法及装置
JP2002524792A (ja) プロセッサのワークメモリに後ロードされたプログラムモジュールをチップカード上でリンクする方法
CN117215544B (zh) 一种智能合约专用指令集的实现及运行方法
US6314564B1 (en) Method for resolving arbitrarily complex expressions at link-time
US5694605A (en) Program translator with selective data value amendment and processor with data extension instructions
EP1091292B1 (en) A method for translating a source operation to a target operation, and computer program for the method
CN114579135B (zh) 一种安装包生成方法及装置
Tanenbaum et al. Description of a machine architecture for use with block structured languages
CN115309405B (zh) 一种代码链接优化方法
EP4350504A1 (en) Cross-linking method and apparatus, electronic device, and storage medium
JP6475888B1 (ja) プログラム変換システム
CN114489683B (zh) 一种类java语言基于JVM的函数式编程语法实现方法
CN114936063A (zh) 一种基于扩展的智能合约执行方法、装置和电子设备
Ranger The portability of BCPL to the MC68000 via the intermediate language SLIM
Sitton et al. The PL/EXUS language and virtual machine
CN114185556A (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