CN111338639B - 区块链智能合约虚拟机指令集的实现方法 - Google Patents
区块链智能合约虚拟机指令集的实现方法 Download PDFInfo
- Publication number
- CN111338639B CN111338639B CN202010227149.9A CN202010227149A CN111338639B CN 111338639 B CN111338639 B CN 111338639B CN 202010227149 A CN202010227149 A CN 202010227149A CN 111338639 B CN111338639 B CN 111338639B
- Authority
- CN
- China
- Prior art keywords
- instruction
- type
- instruction set
- stack
- source language
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种区块链智能合约虚拟机指令集的实现方法,包含如下步骤:定义栈式虚拟机的运行栈为Value类型;将待编译的区块链智能合约的源语言指令所需的操作数,以Value类型放入运行栈的栈顶;源语言指令对应的若干指令集的指令获取栈顶的Value类型元素;检查Value类型元素的类型,判断是否符合指令的对象类型的约束;判断符合后,执行指令;将指令的执行结果放入运行栈的栈顶,获得编译后的目标指令;将区块链智能合约的源语言所有指令编译运行完成后获取目标指令集。本发明通过通用的虚拟机指令集,将指令设计为能够兼容多种类型源语言,大大提升了兼容性;并将指令类型检查放在指令执行前实现,最大程度保证了兼容性的实现。
Description
技术领域
本发明涉及区块链系统的虚拟机,特别涉及一种区块链智能合约虚拟机指令集的实现方法。
背景技术
在区块链中,先将合约代码编译为字节码,再通过虚拟机执行,虚拟机执行的是字节码中所包含的指令序列,指令序列是智能合约虚拟机的指令集的一个子集。
现有技术中,由于虚拟机没有考虑为适应多种智能合约编程语言,导致指令集只支持某种类型的语言,因此,大多区块链系统只支持一种或两种智能合约的编程语言,兼容性极差。
发明内容
根据本发明实施例,提供了一种区块链智能合约虚拟机指令集的实现方法,虚拟机为栈式虚拟机,虚拟机包含若干指令集,包含如下步骤:
定义栈式虚拟机的运行栈为Value类型;
将待编译的区块链智能合约的源语言指令所需的操作数,以Value类型放入运行栈的栈顶;
源语言指令对应的若干指令集的指令获取栈顶的Value类型元素;
检查Value类型元素的类型,判断是否符合指令的对象类型的约束;
判断符合后,执行指令;
将指令的执行结果放入运行栈的栈顶,获得编译后的目标指令;
将区块链智能合约的源语言所有指令编译运行完成后获取目标指令集。
进一步,虚拟机中的Value类型为无类型。
进一步,Value类型中,记录有强类型源语言的原始类型信息;Value类型中可存储弱类型源语言的任何类型的数据,用于在对应指令的对象类型的约束下进行计算。
进一步,在执行指令前,从栈顶获取Value类型元素的方式一样。
进一步,若干指令集的指令类型分别对应区块链智能合约的源语言的指令类型,若干指令集的指令类型包含:运算类指令集、逻辑类指令集、关系类指令集、函数调用类指令集、数据结构类指令集。
进一步,运算类指令集支持任意类型的源语言中的数据结构;逻辑类指令集支持任意类型的源语言中的逻辑类语言结构;关系类指令集支持任意类型的源语言中的数据结构;数据结构类指令集支持源语言中的任意类型的数据结构的存储、查询、删除、更新操作;函数调用类指令集支持任意类型的源语言中的函数调用类语言结构。
进一步,将运算类指令集、逻辑类指令集、关系类指令集、数据结构类指令集中的指令的执行结果放入运行栈的栈顶前,调整运行栈的大小。
进一步,执行指令时,根据指令所属类型的指令集的语义规则执行对应的计算方式。
根据本发明实施例的区块链智能合约虚拟机指令集的实现方法,通过通用的虚拟机指令集,将指令设计为能够兼容多种类型源语言,大大提升了兼容性;并将指令类型检查放在指令执行前实现,最大程度保证了兼容性的实现。
要理解的是,前面的一般描述和下面的详细描述两者都是示例性的,并 且意图在于提供要求保护的技术的进一步说明。
附图说明
图1为根据本发明实施例区块链智能合约虚拟机指令集的实现方法的流程图;
图2为根据本发明实施例区块链智能合约虚拟机指令集的实现方法的编译原理示意图。
具体实施方式
以下将结合附图,详细描述本发明的优选实施例,对本发明做进一步阐述。
首先,将结合图1~2描述根据本发明实施例的区块链智能合约虚拟机指令集的实现方法,用于区块链智能合约源语言的编译,应用场景很广。
本发明实施例的区块链智能合约虚拟机指令集的实现方法,虚拟机为栈式虚拟机,虚拟机包含若干指令集,如图1所示,具有如下步骤:
在S1中,定义栈式虚拟机的运行栈为Value类型;在本实施例中,虚拟机中的Value类型为无类型,可兼顾多种语言的基本特性。进一步,为了实现多语言中的数据结构,Value类型中,记录有强类型源语言的原始类型信息;Value类型中可存储弱类型源语言的任何类型的数据,用于在对应指令的对象类型的约束下进行计算。
在S2中,如图2所示,将待编译的区块链智能合约的源语言指令所需的操作数,以Value类型放入运行栈的栈顶。
在S3中,源语言指令对应的若干指令集的指令获取栈顶的Value类型元素,在本实施例中,从栈顶获取Value类型元素的方式一样。
进一步,在本实施例中,若干指令集的指令类型包含:运算类指令集、逻辑类指令集、关系类指令集、函数调用类指令集、数据结构类指令集,分别对应区块链智能合约的源语言的指令类型。
其中,运算类指令集支持任意类型的源语言中的数据结构,如加、减、乘、除、按位操作、赋值等语言结构。
逻辑类指令集支持任意类型的源语言中的逻辑类语言结构。如while循环、for循环、if/else、大于、小于结构等语言结构。
关系类指令集支持任意类型的源语言中的数据结构,如and、or、=、!=、!等语言结构。
数据结构类指令集支持源语言中的任意类型的数据结构的存储、查询、删除、更新操作,如map、list、set的数据结构的存储、查询、删除、更新操作。
函数调用类指令集支持任意类型的源语言中的函数调用类语言结构,如函数调用、函数返回等语言结构。
由于以上各类指令集中的所有指令都设计为接受任意类型的操作数,因而可保证编译时源语言的类型系统都能正常匹配到这些指令集,从而获得多种语言编译后的目标指令集。
在S4中,检查Value类型元素的类型,判断是否符合指令的对象类型的约束,在执行指令前进行类型判断,最大程度保证了兼容性的实现。
在S5中,判断符合后,执行指令。
在S6中,如图2所示,将指令的执行结果放入运行栈的栈顶,根据指令所属类型的指令集的语义规则执行对应的计算方式,获得编译后的目标指令;将区块链智能合约的源语言所有指令编译运行完成后获取目标指令集。
进一步,在本实施例中,将运算类指令集、逻辑类指令集、关系类指令集、数据结构类指令集中的指令的执行结果放入运行栈的栈顶前,调整运行栈的大小。
为进一步说明本发明实施例的区块链智能合约虚拟机指令集的实现方法,以下对不同类型的指令执行进行示例。
以ADD指令执行过程示例运算类指令,根据语义规则,支持整形、浮点、字符串类型的数字相加,ADD指令获取栈顶的2个Value类型元素,检查2个Value类型元素的类型,根据语义规则,支持整形、浮点型和字符串,然后分别执行整形、浮点型和字符串的ADD指令操作:数字类型直接相加,字符串类型将开辟新的内存空间再复制相加,继而,调整栈的大小,将指令执行的结果放在运行栈的栈顶。
以 GT 指令执行过程示例关系类指令,根据语义规则,支持整形、浮点型、字符串、布尔类型的数据比较大小,GT 指令取栈顶的2个 Value 类型元素,检查两个Value 类型元素的类型,根据语义规则,支持整形、浮点型、字符串和布尔型数据的比较操作,然后分别执行整形、浮点型、字符串和布尔型的 GT 指令操作:整形、浮点型、布尔型直接比较大小,字符串类型数据首先比较两个字符串的长度是否一样,如果长度一样则按大写字母优先的方式挨个比较字符。继而,调整栈的大小,将比较的结果作为布尔型数据,放在运行栈的栈顶。
以 CALLFUNC 指令执行过程示例函数调用指令,根据语义规则,在跳转到目标函数之前,创建函数调用栈的帧数据结构保存当前的指令地址和当前运行栈的栈指针的值,保存在函数调用栈中,检查函数类型后,根据 CALLFUNC 的参数获取目标函数对象,从函数对象中获取目标函数的跳转地址,将目标函数的跳转地址赋值给指令指针,跳转到目标函数运行。
以 GETINDEX 指令执行过程示例数据结构指令,规矩语义规则,支持对 map、list、set 容器类型的数据结构根据下标取值,GETINDEX 指令在栈顶获取 2 个 Value 类型元素,对应到对象和 key 值,根据预定的语义规则,检查对象是否为 map、 list、set 容器对象类型,然后分别执行 map、 list、 set 容器类型数据结构的取下标操作,用 key 值获取对应的 value值,继而,调整栈的大小,将 value 值作为结果保存在运行栈的栈顶。
以上,参照图1~2描述了根据本发明实施例的区块链智能合约虚拟机指令集的实现方法,通过通用的虚拟机指令集,将指令设计为能够兼容多种类型源语言,大大提升了兼容性;并将指令类型检查放在指令执行前实现,最大程度保证了兼容性的实现。
需要说明的是,在本说明书中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包含……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。
Claims (6)
1.一种区块链智能合约虚拟机指令集的实现方法,所述虚拟机为栈式虚拟机,所述虚拟机包含若干指令集,其特征在于,包含如下步骤:
定义所述栈式虚拟机的运行栈为Value类型,所述Value类型为无类型,所述Value类型中,记录有强类型源语言的原始类型信息,所述Value类型中可存储弱类型源语言的任何类型的数据,用于在对应指令的对象类型的约束下进行计算;
将待编译的所述区块链智能合约的源语言指令所需的操作数,以Value类型放入所述运行栈的栈顶;
所述源语言指令对应的所述若干指令集的指令获取所述栈顶的Value类型元素;
检查所述Value类型元素的类型,判断是否符合所述指令的对象类型的约束;
判断符合后,执行所述指令;
将所述指令的执行结果放入所述运行栈的栈顶,获得编译后的目标指令;
将所述区块链智能合约的源语言所有指令编译运行完成后获取目标指令集。
2.如权利要求1所述区块链智能合约虚拟机指令集的实现方法,其特征在于,在执行所述指令前,从所述栈顶获取Value类型元素的方式一样。
3.如权利要求1所述区块链智能合约虚拟机指令集的实现方法,其特征在于,所述若干指令集的指令类型分别对应所述区块链智能合约的源语言的指令类型,所述若干指令集的指令类型包含:运算类指令集、逻辑类指令集、关系类指令集、函数调用类指令集、数据结构类指令集。
4.如权利要求3所述区块链智能合约虚拟机指令集的实现方法,其特征在于,所述运算类指令集支持任意类型的源语言中的数据结构;所述逻辑类指令集支持任意类型的源语言中的逻辑类语言结构;所述关系类指令集支持任意类型的源语言中的数据结构;所述数据结构类指令集支持源语言中的任意类型的数据结构的存储、查询、删除、更新操作;所述函数调用类指令集支持任意类型的源语言中的函数调用类语言结构。
5.如权利要求4所述区块链智能合约虚拟机指令集的实现方法,其特征在于,将所述运算类指令集、逻辑类指令集、关系类指令集、数据结构类指令集中的指令的执行结果放入所述运行栈的栈顶前,调整运行栈的大小。
6.如权利要求4所述区块链智能合约虚拟机指令集的实现方法,其特征在于,执行所述指令时,根据所述指令所属类型的指令集的语义规则执行对应的计算方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010227149.9A CN111338639B (zh) | 2020-03-27 | 2020-03-27 | 区块链智能合约虚拟机指令集的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010227149.9A CN111338639B (zh) | 2020-03-27 | 2020-03-27 | 区块链智能合约虚拟机指令集的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111338639A CN111338639A (zh) | 2020-06-26 |
CN111338639B true CN111338639B (zh) | 2023-05-16 |
Family
ID=71182588
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010227149.9A Active CN111338639B (zh) | 2020-03-27 | 2020-03-27 | 区块链智能合约虚拟机指令集的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111338639B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107844294A (zh) * | 2017-11-17 | 2018-03-27 | 杭州秘猿科技有限公司 | 一种高可用的合约执行方法及系统 |
CN109379585A (zh) * | 2018-11-30 | 2019-02-22 | 深圳创维数字技术有限公司 | Hdmi兼容性测试装置及方法 |
CN110704063A (zh) * | 2019-09-30 | 2020-01-17 | 支付宝(杭州)信息技术有限公司 | 编译和执行智能合约的方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019120316A2 (en) * | 2019-03-26 | 2019-06-27 | Alibaba Group Holding Limited | System and method for implementing different types of blockchain contracts |
-
2020
- 2020-03-27 CN CN202010227149.9A patent/CN111338639B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107844294A (zh) * | 2017-11-17 | 2018-03-27 | 杭州秘猿科技有限公司 | 一种高可用的合约执行方法及系统 |
CN109379585A (zh) * | 2018-11-30 | 2019-02-22 | 深圳创维数字技术有限公司 | Hdmi兼容性测试装置及方法 |
CN110704063A (zh) * | 2019-09-30 | 2020-01-17 | 支付宝(杭州)信息技术有限公司 | 编译和执行智能合约的方法及装置 |
Non-Patent Citations (1)
Title |
---|
王立冬,张凯.Java虚拟机中Java栈以及相关指令的实现.计算机工程与应用.2004,(05),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN111338639A (zh) | 2020-06-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106843842B (zh) | 一种应用程序配置文件的更新方法及装置 | |
CN103019787B (zh) | 函数调用关系确定方法、热补丁升级方法及装置 | |
US7386843B2 (en) | Method and system for register allocation | |
CN106406972B (zh) | 程序编译方法和编译器 | |
WO2007114722A1 (en) | An optimal floating-point expression translation method based on pattern matching | |
CN106598828B (zh) | 一种源代码中的无效类确定方法及装置 | |
CN111596945B (zh) | 嵌入式系统动态多分区固件的差分升级方法 | |
CN111984666B (zh) | 数据库访问方法、装置、计算机可读存储介质和计算机设备 | |
CN115982416A (zh) | 一种数据处理方法、装置、可读存储介质及电子设备 | |
US7228527B1 (en) | Method and system for structuring a procedure | |
CN111338639B (zh) | 区块链智能合约虚拟机指令集的实现方法 | |
Rosen | A compiler-building system developed by Brooker and Morris: including a comprehensive discussion of the major features of the system | |
CN106294530A (zh) | 规则匹配的方法和系统 | |
CN100375029C (zh) | 存储器配置系统与方法 | |
CN111399850B (zh) | 基于区块链的多语言智能合约编译方法 | |
CN107766048B (zh) | 一种页面编译方法及装置 | |
CN110806973A (zh) | 一种接口报文的自动生成方法及装置 | |
CN116431127A (zh) | 一种低代码开发方法、系统、设备和可读存储介质 | |
CN110221778A (zh) | 酒店数据的处理方法、系统、存储介质以及电子设备 | |
CN114594960A (zh) | 一种递归函数解析执行方法、装置及存储介质 | |
US8566813B2 (en) | Method and system generating execution file system device | |
CN114791985A (zh) | 域名匹配方法及装置、前缀树更新方法及装置 | |
US6578195B1 (en) | Process for data encapsulation in large scale legacy software | |
CN113391812A (zh) | 应用程序模块的分析方法、装置以及分析工具 | |
CN115794260B (zh) | 一种简单的dsp软件库动态加载方法 |
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 |