CN107844294B - 一种高可用的合约执行方法及系统 - Google Patents

一种高可用的合约执行方法及系统 Download PDF

Info

Publication number
CN107844294B
CN107844294B CN201711144715.4A CN201711144715A CN107844294B CN 107844294 B CN107844294 B CN 107844294B CN 201711144715 A CN201711144715 A CN 201711144715A CN 107844294 B CN107844294 B CN 107844294B
Authority
CN
China
Prior art keywords
stack
contract
stack depth
depth
data exchange
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
Application number
CN201711144715.4A
Other languages
English (en)
Other versions
CN107844294A (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.)
Hangzhou Rivtower Technology Co Ltd
Original Assignee
Hangzhou Rivtower Technology Co Ltd
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 Hangzhou Rivtower Technology Co Ltd filed Critical Hangzhou Rivtower Technology Co Ltd
Priority to CN201711144715.4A priority Critical patent/CN107844294B/zh
Publication of CN107844294A publication Critical patent/CN107844294A/zh
Application granted granted Critical
Publication of CN107844294B publication Critical patent/CN107844294B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/24Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种高可用的合约执行方法,该方法包括:(1)根据合约信息编写智能合约代码,所述智能合约代码包含超过最大栈深个数的局部变量、参数或结构体;(2)对智能合约代码进行语法语义解析,生成相应的抽象语法树;(3)将抽象语法树数据结构转换为二进制的字节汇编码序列和相关指令;(4)合约虚拟机解释执行上述字节汇编码序列。针对栈易溢出、无法随机访问栈元素的问题,原有智能合约设计中一般采用小栈深且不同存储空间可交换的规避方案,本发明则从合约编译器、虚拟机实现随机访问指令的方案来实现防止栈溢出、可实现栈元素随机访问。可在该系统上运行更加复杂可用的智能合约,合约编写、编译、执行代价更低。

Description

一种高可用的合约执行方法及系统
技术领域
本发明涉及区块链智能合约及虚拟机实现领域,是一种基于区块链技术的智能合约执行方法。改进了原有智能合约设计中栈易溢出、无法随机访问栈元素的问题。
背景技术
“智能合约”概念最初由从事数字合约和数字货币的密码学家尼克萨博(NickSzabo)提出,本质上是一种计算机协议,类似于程序的分支选择语句(if‐elsestatements)。当预先编译好的逻辑流程条件被触发时,智能合约程序自动执行相应合同条款。
高级语言编写的智能合约代码在区块链中可通过虚拟机来执行,以太坊智能合约的运行环境则是以太坊虚拟机(Ethereum Virtual Machine,简称EVM)。它被视为以太坊的一个主要创新,由许多相连计算机组成,自动执行任何人可上传的、状态公共可见的程序。程序运行在区块链上,严格按照EVM定义的方法执行。
面向合约编程则是其一个首要目标,以太坊开发有4种专用语言:分别是Serpent(类Python)、Solidity(类JavaScript)、Mutan(类Go)及LLL(类Lisp)。它们均是为面向合约编程而从底层设计,其合约代码执行依赖于使用低级基于栈字节码的EVM代码。EVM的设计基于栈而非寄存器,简单、易于优化,但同时需要更多的opcode。比如用于数据交换的SWAP(数据互换)与DUP(数据复制)操作只能在栈上操作,而栈存储有限、不方便实现数据的随机访问。
发明内容
本发明的目的是针对现有技术的不足,提供一种高可用的合约执行方法及系统。
本发明的目的是通过以下技术方案实现的:一种高可用的合约执行方法,该方法包括:
(1)根据合约信息编写智能合约代码,所述智能合约代码包含超过最大栈深个数的局部变量、参数或结构体。
(2)对上述智能合约代码进行语法语义解析,生成相应含有所述智能合约代码元数据信息的抽象语法树;
(3)对于未超出栈深的部分,将所述抽象语法树数据结构转换为相应的二进制字节码序列,对于超出栈深的部分,通过以下两种方式实现转换:
(a)增加栈数据交换指令,将超出部分的抽象语法树数据结构转换为对应的栈数据交换指令;
(b)将超出栈深的部分转换为栈与其他存储空间的数据交换。
(4)解释执行上述二进制字节码序列和栈数据交换指令。
进一步的,所述二进制字节码序列和栈数据交换指令经代码优化器优化后,被解释执行。
进一步的,对于超过栈深的局部变量,将其栈深当做栈的偏移(offset)推至栈中(如push offset),并为其生成一条数据交换指令(swapx),添加至栈中。
进一步的,对于超过栈深的参数,将其栈深当做栈的偏移(offset)推至栈中(如push offset),并为超过栈深的参数生成一条数据复制指令(dupx),添加至栈中。
进一步的,对于超过栈深的结构体,将其转换为栈与其他存储空间(临时内存、永久内存)的数据交换。
一种实现上述执行方法的系统,包括合约编写模块、合约编译模块和合约执行模块。
本发明的有益效果在于:本发明基于一种更可用的智能合约执行方法,可在该系统上运行更加复杂可用的智能合约,合约编写、编译、执行代价更低。
附图说明
图1为智能合约执行的基本流程图;
图2为实施例1的实施流程图;
图3为实施例2的实施流程图;
图4为实施例3的实施流程图。
具体实施方式
如图1所示,以太坊内置图灵完备编程语言,建立抽象的基础层使得任何人都能创建合约及去中心化应用,并可自定义所有权规则、交易方式及状态转换函数。
面向合约编程则是其一个首要目标,以太坊开发有4种专用语言:分别是Serpent(类Python)、Solidity(类JavaScript,首选语言)、Mutan(类Go)及LLL(类Lisp)。它们均是为面向合约编程而从底层设计,其合约代码执行依赖于使用低级基于栈字节码的EVM代码。
合约编译器(含解析器及代码生成器)则是将上述智能合约程序或脚本编译成抽象语法树结构,并生成二进制或汇编码序列。合约二进制代码是低级基于堆栈的字节码,由一系列字节构成,每一字节代表一种操作。
上述二进制代码即为以太坊合约代码(EVM代码),EVM虚拟机执行代码的过程即程序计数器(PC)加一则执行一次操作,一直无限循环直到代码执行完毕或停止、返回、遇到错误退出。存储数据空间有堆栈、临时内存、永久内存三种。
下面结合实施例和说明书附图对本发明作进一步说明。
实施例1:
图2为ABI支持超过最大栈深个数的(例如用Solidity语言编写允许最多16个)局部变量或参数,添加push offset及swapx或者push offset及dupx字节码序列的实施方案,包含以下步骤:
(1)合约编写人员,根据合约信息可编写超过16个局部变量或参数的相应智能合约代码,不再受到编写合约时局部变量或参数个数的ABI信息约束。
(2)合约语言解析器,将上述ABI扩展的智能合约代码,进行语法及语义解析后,生成相应的抽象语法树。其中,当解析到超过16个局部变量、参数或被组合在表达式、数组中时,将这些扩展信息按原ABI信息一样生成到相应的抽象语法树,不会导致原本的语法或语义错误处理。
(3)对于未超出栈深的部分,采用合约代码生成器,将所述抽象语法树数据结构转换为相应的二进制字节码序列,该字节码序列可以被合约虚拟机解释执行。对于超出栈深的部分,采用合约代码生成器,将超过栈深的局部变量或参数,将其栈深当做栈的偏移(offset)推至栈中(如push offset)。并为超过栈深的局部变量生成一条数据交换指令(swapx),添加至栈中;为超过栈深的参数生成一条数据复制指令(dupx),添加至栈中。这样最终通过生成push offset及swapx或者push offset及dupx来支持任意栈深的随机访问。
(4)作为可选的,代码优化器,将生成的二进制字节码序列、数据交换指令(swapx)和数据复制指令经过指令合并、删除、调整顺序等优化提高虚拟机执行代码的速度,以提高执行性能。
(5)合约虚拟机,针对新生成的push offset及swapx或者push offset及dupx指令,由于swapx或dupx为新增指令,在原swap1,…,swap16或dup1,…,dup16基础上添加这两条新增指令的执行。本实施例,合约编译器实现从高级语言编写的合约转换到合约虚拟机字节码的过程中,添加了随机访问指令,这包含语法语义报错信息适配、添加超过栈深的新指令并生成在二进制字节码中、代码生成优化器能作用于新增指令等;合约虚拟机对含新生成指令的字节码在原基础上进行解释执行。
本实施例从合约编译器、虚拟机角度实现栈元素随机访问指令的方案,可达到合约编写人员在编写复杂合约时不会导致栈溢出、可实现栈元素随机访问的效果。而不会对合约编写人员在编写合约时受到局部变量或参数个数约束而直接产生编译错误,或者只能采用小栈深的规避方案而提高了合约编写的冗余程度。
实施例2
如图3所示,包括以下步骤:
(1)合约编写人员,根据合约信息可编写相应的智能合约代码,ABI支持超过最大栈深元素个数的成员变量结构体,作为函数(包含内部或外部函数)局部变量或作为参数传递。
(2)合约语言解析器,将上述ABI扩展的智能合约代码,进行语法及语义解析后,生成相应的抽象语法树。其中,当解析到超过最大栈深元素个数的成员变量结构体作为函数(包含内部或外部函数)局部变量或作为参数传递时,含结构体本身及其成员变量的的解码(decoder)过程,即将超过最大栈深元素个数的成员变量的结构体本身及成员变量信息反应到抽象语法树上。
(3)对于未超出栈深的部分,合约代码生成器将抽象语法树数据结构转换为二进制的字节码序列,该序列可以被合约虚拟机解释执行;对于超出部分,转换为栈与其他存储空间的数据交换,最终实现与blockchain的交互上链等。
(4)作为可选的,代码优化器,将生成的字节码序列(主要针对上述新生成的指令序列)经过指令合并、删除、调整顺序等优化提高虚拟机执行代码的速度,以提高执行性能。其中优化可能针对字节码序列中的新增指令及与原指令序列的组合。
(5)合约虚拟机,针对上述新生成的二进制字节码指令序列,在原先指令执行基础上添加解释执行步骤。
本实施例以一种支持超过最大栈深的结构体作为局部变量或参数的扩展ABI方式来避免栈溢出、及实现数据的随机访问。
实施例3
如图4所示,包括以下步骤:
(1)合约编写人员,根据合约信息可编写高可用智能合约代码,即在ABI方面支持超过最大栈深的局部变量、函数参数和结构体。
(2)合约语言解析器,将上述ABI扩展的智能合约代码,进行语法语义解析后,生成相应的抽象语法树。其中解析器可解析上述扩展ABI信息、并能进行错误处理,语法树数据结构含上述扩展ABI信息。
(3)对于未超出栈深的部分,将所述抽象语法树数据结构转换为相应的二进制字节码序列,该序列可以被合约虚拟机解释执行。对于超过栈深的局部变量,将其栈深当做栈的偏移(offset)推至栈中(如push offset),并为其生成一条数据交换指令(swapx),添加至栈中。对于超过栈深的参数,将其栈深当做栈的偏移(offset)推至栈中(如pushoffset),并为超过栈深的参数生成一条数据复制指令(dupx),添加至栈中。对于超过栈深的结构体,将其转换为栈与其他存储空间(临时内存、永久内存)的数据交换,最终实现与blockchain的交互上链等。
(4)作为可选的,代码优化器,将生成的字节码序列经过指令合并、删除、调整顺序等优化提高虚拟机执行代码的速度,以提高执行性能。其中优化可能针对字节码序列中的新增指令及与原指令序列的组合。
(5)合约虚拟机,针对上述新生成的二进制字节码指令序列,在原先指令执行基础上添加解释执行过程。

Claims (5)

1.一种可用的合约执行方法,其特征在于,该方法包括:
(1)根据合约信息编写智能合约代码,所述智能合约代码包含超过最大栈深个数的局部变量、参数或结构体;
(2)对上述智能合约代码进行语法语义解析,生成相应含有所述智能合约代码元数据信息的抽象语法树;
(3)对于未超出栈深的部分,将所述抽象语法树数据结构转换为相应的二进制字节码序列,对于超出栈深的部分,通过以下两种方式实现转换:
(a)增加数据交换指令,将超出部分的抽象语法树数据结构转换为对应的数据交换指令;
(b)将超出栈深的部分转换为栈与其他存储空间的数据交换指令;
(4)解释执行上述二进制字节码序列和数据交换指令。
2.根据权利要求1所述的方法,其特征在于,所述二进制字节码序列和数据交换指令经代码优化器优化后,被解释执行。
3.根据权利要求1所述的方法,其特征在于,对于超过栈深的局部变量,将其栈深当做栈的偏移offset推至栈 push offset中,并为其生成一条数据交换指令swapx,添加至栈中。
4.根据权利要求1所述的方法,其特征在于,对于超过栈深的参数,将其栈深当做栈的偏移offset推至栈 push offset中,并为超过栈深的参数生成一条数据复制指令dupx ,添加至栈中。
5.根据权利要求1所述的方法,其特征在于,对于超过栈深的结构体,将其转换为栈与临时内存、永久内存的数据交换。
CN201711144715.4A 2017-11-17 2017-11-17 一种高可用的合约执行方法及系统 Active CN107844294B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711144715.4A CN107844294B (zh) 2017-11-17 2017-11-17 一种高可用的合约执行方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711144715.4A CN107844294B (zh) 2017-11-17 2017-11-17 一种高可用的合约执行方法及系统

Publications (2)

Publication Number Publication Date
CN107844294A CN107844294A (zh) 2018-03-27
CN107844294B true CN107844294B (zh) 2020-05-19

Family

ID=61679805

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711144715.4A Active CN107844294B (zh) 2017-11-17 2017-11-17 一种高可用的合约执行方法及系统

Country Status (1)

Country Link
CN (1) CN107844294B (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9918605B2 (en) 2015-04-09 2018-03-20 Irobot Corporation Wall following robot
CN109522008B (zh) * 2018-11-06 2020-07-10 陕西医链区块链集团有限公司 一种区块链智能合约构建方法
CN109933404B (zh) * 2018-12-12 2020-05-12 阿里巴巴集团控股有限公司 一种基于区块链智能合约的编解码方法及系统
CN110048846B (zh) * 2018-12-12 2020-04-14 阿里巴巴集团控股有限公司 一种基于区块链智能合约的签名验证方法及系统
CN111782338B (zh) * 2018-12-12 2024-05-03 创新先进技术有限公司 一种基于区块链智能合约的数据处理方法及系统
CN110046991B (zh) 2018-12-12 2020-08-11 阿里巴巴集团控股有限公司 一种基于区块链智能合约的数据处理方法及系统
CN110032568B (zh) * 2018-12-20 2020-05-12 阿里巴巴集团控股有限公司 数据结构的读取及更新方法、装置、电子设备
CN110335037A (zh) * 2019-04-19 2019-10-15 矩阵元技术(深圳)有限公司 基于区块链和多方安全计算的交易方法、装置及存储介质
SG11202003808PA (en) * 2019-06-28 2020-05-28 Advanced New Technologies Co Ltd System and method for data processing
CN110633076B (zh) * 2019-09-16 2021-05-04 杭州趣链科技有限公司 一种自动生成Solidity智能合约Java客户端程序的方法
CN110688122B (zh) * 2019-09-30 2021-09-21 支付宝(杭州)信息技术有限公司 编译和执行智能合约的方法及装置
CN112685496B (zh) * 2019-10-18 2024-04-23 阿里巴巴集团控股有限公司 分布式系统及其数据处理方法
CN111045793A (zh) * 2020-03-13 2020-04-21 支付宝(杭州)信息技术有限公司 一种在虚拟机中执行功能模块的方法和装置
CN111338639B (zh) * 2020-03-27 2023-05-16 象链网络科技(上海)有限公司 区块链智能合约虚拟机指令集的实现方法
CN111628997B (zh) * 2020-05-26 2022-04-26 中国联合网络通信集团有限公司 一种防止攻击方法及装置
EP3933637B1 (en) * 2020-06-29 2023-08-16 Blockchain 4 All Limited Method and system for deploying a smart contract in a blockchain network

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106709704A (zh) * 2016-11-23 2017-05-24 杭州秘猿科技有限公司 一种基于许可链的智能合约升级方法
CN106951307A (zh) * 2017-03-06 2017-07-14 钱德君 一种智能合约虚拟机实现方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2369264B (en) * 2000-07-31 2004-05-05 Ifr Ltd Signal measurement

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106709704A (zh) * 2016-11-23 2017-05-24 杭州秘猿科技有限公司 一种基于许可链的智能合约升级方法
CN106951307A (zh) * 2017-03-06 2017-07-14 钱德君 一种智能合约虚拟机实现方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于区块链2.0的以太坊初探;李赫等;《中国金融电脑》;20170630;第57-60页 *

Also Published As

Publication number Publication date
CN107844294A (zh) 2018-03-27

Similar Documents

Publication Publication Date Title
CN107844294B (zh) 一种高可用的合约执行方法及系统
CN102637136B (zh) 用于融合来自不同编译器阶段的调试信息的方法和设备
US7219338B2 (en) Multi-language compilation
Maeda Performance evaluation of object serialization libraries in XML, JSON and binary formats
CN110096338A (zh) 智能合约执行方法、装置、设备及介质
JP5936118B2 (ja) コード変換方法、プログラム及びシステム
US20070044083A1 (en) Lambda expressions
US8510724B2 (en) Reconstructing program control flow
US20040003377A1 (en) Converting byte code instructions to a new instruction set
WO2015183526A1 (en) Programming system and language for application development
Myreen et al. A verified runtime for a verified theorem prover
CN103235724A (zh) 基于原子操作语义描述的多源二进制代码一体化翻译方法
CN111768184A (zh) 一种执行智能合约的方法及区块链节点
US9886251B2 (en) Optimized compiling of a template function
DeVito et al. First-class runtime generation of high-performance types using exotypes
US5561801A (en) System and method for multilevel promotion
Wenzel PIDE as front-end technology for Coq
CN103019801B (zh) 一种应用于高速数字io波形引擎的编译器
CN112860233A (zh) 目标语法树的生成方法以及相关设备
WO2022035476A1 (en) Representing asynchronous state machine in intermediate code
JP2000347875A (ja) ファイル移植技術
CN112148283A (zh) 一种跨平台的abi兼容c++组件框架的实现方法
CN111309329B (zh) 一种指令地址自适应重定位方法及程序编译方法
KR101277145B1 (ko) 공통 표현을 이용한 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체
CN115809068A (zh) 基于MapReduce的大数据处理方法及系统

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
TA01 Transfer of patent application right

Effective date of registration: 20200320

Address after: 310012 no.1001, 10 / F, block a, Huaxing Times Square, No.478, Wensan Road, Xihu District, Hangzhou City, Zhejiang Province

Applicant after: Hangzhou Xita Technology Co.,Ltd.

Address before: 310013 Huaxi times square A, No. 478, Wensanlu Road, Hangzhou, Xihu District, Zhejiang 702

Applicant before: CRYPTAPE Co.,Ltd.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant