CN111399850A - 基于区块链的多语言智能合约编译方法 - Google Patents

基于区块链的多语言智能合约编译方法 Download PDF

Info

Publication number
CN111399850A
CN111399850A CN202010227150.1A CN202010227150A CN111399850A CN 111399850 A CN111399850 A CN 111399850A CN 202010227150 A CN202010227150 A CN 202010227150A CN 111399850 A CN111399850 A CN 111399850A
Authority
CN
China
Prior art keywords
compiling
statement
intelligent contract
instruction
conditional
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
CN202010227150.1A
Other languages
English (en)
Other versions
CN111399850B (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.)
Image Chain Network Technology Shanghai Co ltd
Original Assignee
Image Chain Network Technology Shanghai 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 Image Chain Network Technology Shanghai Co ltd filed Critical Image Chain Network Technology Shanghai Co ltd
Priority to CN202010227150.1A priority Critical patent/CN111399850B/zh
Publication of CN111399850A publication Critical patent/CN111399850A/zh
Application granted granted Critical
Publication of CN111399850B publication Critical patent/CN111399850B/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/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

本发明公开了一种基于区块链的多语言智能合约编译方法,包含如下步骤:编译智能合约的表达式和赋值语句;编译智能合约的条件判断语句;编智能合约的循环语句;编译智能合约的函数语句。本发明编译时能够兼容和支持多种编程语言编写的智能合约,提高编译效率,降低对不同程序语言的学习成本,大大降低智能合约的运行门槛。

Description

基于区块链的多语言智能合约编译方法
技术领域
本发明涉及区块链智能合约技术,特别涉及一种基于区块链的多语言智能合约编译方法。
背景技术
区块链技术是一种新型去中心化信息技术,能安全地存储数字交易和其他数据,信息不可伪造和篡改,是比特币、以太坊等数字货币的底层技术。区块链上的交易确认由所有节点共识完成,共识成功后打包写入区块。区块链维护一个公共的账本,用于存储区块链网络上所有交易,公共账本位于存储区块上任何节点都是一份完整的靠背,从而保证其不可伪造和篡改,并实现信息共享,能提高交易和信息流通的效率。
智能合约是部署在区块链上的一段可自动执行的程序,广泛意义上的智能合约包含编译语言、编译器、虚拟机、事件、状态机、容错机制等。其中,对应用程序开发影响较大的是编程语言以及智能合约的执行引擎,即虚拟机。虚拟机内部执行的智能合约不能直接接触网络、文件系统或者系统中的其他线程等系统资源。合约之间只能进行有限调用。
现有的区块链系统的智能合约在使用时,由于设计上的原因,一般只支持一种或者两种编程语言编写智能合约,例如以太坊支持Solidity语言,EOS支持C++语言。支持编写智能合约的编程语言单一,只是其中一方面的问题,另一个问题是智能合约编程语言的学习成本较高,例如对于以太坊的智能合约编程语言Solidity,需要重新学习。对于EOS的智能合约编程语言C++,学习成本较高,不易熟练掌握。这样就为使用智能合约的普通用户或开发者带来一定的困扰:无法快速学习智能合约的编写,无法深入掌握智能合约编程语言。
发明内容
根据本发明实施例,提供了一种基于区块链的多语言智能合约编译方法,包含如下步骤:
编译智能合约的表达式和赋值语句;
编译智能合约的条件判断语句;
编译智能合约的循环语句;
编译智能合约的函数语句。
进一步,表达式和赋值语句包含:数学运算类表达式、关系和逻辑类表达式、带优先级的表达式、赋值语句。
进一步,编译表达式和赋值语句包含如下步骤:
处理表达式或赋值语句的左侧元素,获取入栈指令;
处理表达式或赋值语句的右侧元素,获取入栈指令;
处理表达式或赋值语句的操作符,获取操作指令。
进一步,若左侧或右侧元素是标识符,将左侧或右侧元素在符号表中的索引值入栈,获取标识符入栈指令;若左侧或右侧元素是值类型元素,将值类型入栈,获取值类型入栈的指令。
进一步,按优先级从高到低的顺序,处理表达式或赋值语句的操作符。
进一步,编译条件判断语句包含如下步骤:
编译条件判断语句的条件表达式,获取当前的指令的相对偏移地址,获取条件跳转指令及条件跳转指令的跳转目标地址;
编译条件判断语句主体,获取目标地址;
将目标地址赋值给条件跳转指令的跳转目标地址。
进一步,编译条件判断语句的条件表达式获取的条件跳转指令的跳转目标地址为空。
进一步,编译循环语句包含如下步骤:
编译循环语句开始处的条件表达式,获取代码相对偏移地址,获取条件跳转指令;
编译循环语句的主体,获取代码偏移地址,用代码偏移地址设置条件跳转指令。
进一步,编译函数语句包含如下步骤:
编译函数语句的所有参数,获取每个参数在符号表中的索引值;
生成函数跳转指令和参数调用指令;
编译函数语句的函数主体,获取函数语句的局部变量的数量;
若函数语句缺少返回指令,补足返回指令。
进一步,生成函数跳转指令时,函数跳转指令的跳转目标地址为空。
根据本发明实施例的基于区块链的多语言智能合约编译方法,编译时能够兼容和支持多种编程语言编写的智能合约,提高编译效率,降低对不同程序语言的学习成本,大大降低智能合约的运行门槛。
要理解的是,前面的一般描述和下面的详细描述两者都是示例性的,并 且意图在于提供要求保护的技术的进一步说明。
附图说明
图1为根据本发明实施例基于区块链的多语言智能合约编译方法的流程图;
图2为图1中编译表达式和赋值语句的流程图;
图3为图1中编译条件判断语句的流程图;
图4为图1中编译循环语句的流程图;
图5为图1中编译函数语句的流程图。
具体实施方式
以下将结合附图,详细描述本发明的优选实施例,对本发明做进一步阐述。
首先,将结合图1~5描述根据本发明实施例的基于区块链的多语言智能合约编译方法,应用前景广阔。
如图1所示,本发明实施例的基于区块链的多语言智能合约编译方法,具有如下步骤,需要说明的是,执行下述步骤时,没有先后顺序,编译顺序取决于编译区块链智能合约本身。
具体地,如图1、2所示,编译智能合约的表达式和赋值语句。在本实施例中,表达式和赋值语句包含数学运算类表达式、关系和逻辑类表达式、带优先级的表达式、赋值语句。
进一步,如图2所示,编译表达式和赋值语句包含如下步骤:
在步骤S11中,处理表达式或赋值语句的左侧元素,获取入栈指令。
在步骤S12中,处理表达式或赋值语句的右侧元素,获取入栈指令。
进一步,步骤S11和S12中,若左侧或右侧元素是标识符,则在符号表中查找元素后,将左侧或右侧元素在符号表中的索引值入栈,获取标识符入栈指令;若左侧或右侧元素是值类型元素,则将值类型入栈,获取值类型入栈的指令。
在步骤S13中,处理表达式或赋值语句的操作符,获取操作指令。
进一步,在本实施例中,由于表达式的优先级一般指的是对于一元操作符、二元操作符,由于每个操作符优先级不同,当读个操作符处于同一个表达式中,就需要在编译时,先处理高优先级的操作符,后处理低优先级的操作符,但是由于操作符在表达式中的位置随机,需处理完一个操作符之后,再查看其后操作符的优先级,如果后操作符高于当前操作符,则继续调用函数递归处理,否则从当前函数返回,返回的过程中和调用函数的过程相反,会先处理高优先级的操作符,而后处理低优先级的操作符。
具体地,如图1、3所示,编译智能合约的条件判断语句。
进一步,如图3所示,编译条件判断语句包含如下步骤:
在步骤S21中,编译条件判断语句的条件表达式,获取当前的指令的相对偏移地址,获取条件跳转指令及条件跳转指令的跳转目标地址,以检查条件判断语句的结果是否为真,但在本实施例中,在本步骤中,条件跳转指令的跳转目标地址为空。
在步骤S22中,编译条件判断语句主体,获取目标地址。
在步骤S23中,将目标地址赋值给条件跳转指令的跳转目标地址,以确定代码执行流的走向。
具体地,如图1、4所示,编译智能合约的循环语句。
进一步,如图4所示,编译循环语句包含如下步骤:
在步骤S31中,编译循环语句开始处的条件表达式,获取代码相对偏移地址,获取条件跳转指令,以检查循环语句的条件表达式的结果是否为真。
在步骤S32中,编译循环语句的主体,获取代码偏移地址,并用代码偏移地址设置编译上述循环条件时产生的条件跳转指令,即可完成循环语句的编译。
具体地,如图1、5所示,编译智能合约的函数语句。
进一步,如图5所示,编译函数语句包含如下步骤:
在步骤S51中,编译函数语句的所有参数,保存函数的名称和其参数长度到函数表,编译函数的参数,将所有参数当作变量声明处理,将所有变量的名称和类型加入符号表,返回并收集每个变量在符号表中的索引值。
在步骤S52中,生成函数跳转指令和参数调用指令,以在运行时跳过函数定义,只有通过函数调用才能运行函数语句,在本步骤中,暂时设置跳转指令的跳转目标地址为空。进一步,在本实施例中,参数调用指令有2个参数,分别是参数的数量和参数在符号表中的索引值。
在步骤S53中,编译函数语句的函数主体,获取函数语句的局部变量的数量,并保存在函数表中。
在步骤S54中,若函数语句缺少返回指令,补足返回指令即可。
由于各种语言中必要的元素大致有:数学运算类表达式、关系和逻辑类表达式、带优先级的表达式、条件判断语句、循环语句、函数语句、赋值语句,而这些语言元素,可以代表大部分语言中必须出现的特性,对这些语言元素的编译,就能处理大部分语言编译到虚拟机指令集的问题,因此,当编译智能合约时,根据智能合约的语言和结构,按照本发明实施例中记载的对表达式和赋值语句、条件判断语句、循环语句、函数语句的编译方法,进行编译,能够兼容和支持多种编程语言编写的智能合约,大大提高了编译效率,降低了对不同程序语言的学习成本,降低了智能合约的运行门槛。
以上,参照图1~5描述了根据本发明实施例的基于区块链的多语言智能合约编译方法,编译时能够兼容和支持多种编程语言编写的智能合约,提高编译效率,降低对不同程序语言的学习成本,大大降低智能合约的运行门槛。
需要说明的是,在本说明书中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包含……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。

Claims (10)

1.一种基于区块链的多语言智能合约编译方法,其特征在于,包含如下步骤:
编译所述智能合约的表达式和赋值语句;
编译所述智能合约的条件判断语句;
编译所述智能合约的循环语句;
编译所述智能合约的函数语句。
2.如权利要求1所述基于区块链的多语言智能合约编译方法,其特征在于,所述表达式和赋值语句包含:数学运算类表达式、关系和逻辑类表达式、带优先级的表达式、赋值语句。
3.如权利要求2所述基于区块链的多语言智能合约编译方法,其特征在于,编译所述表达式和赋值语句包含如下步骤:
处理所述表达式或赋值语句的左侧元素,获取入栈指令;
处理所述表达式或赋值语句的右侧元素,获取入栈指令;
处理所述表达式或赋值语句的操作符,获取操作指令。
4.如权利要求3所述基于区块链的多语言智能合约编译方法,其特征在于,若所述左侧或右侧元素是标识符,将所述左侧或右侧元素在符号表中的索引值入栈,获取标识符入栈指令;若所述左侧或右侧元素是值类型元素,将所述值类型入栈,获取值类型入栈的指令。
5.如权利要求3所述基于区块链的多语言智能合约编译方法,其特征在于,按优先级从高到低的顺序,处理所述表达式或赋值语句的操作符。
6.如权利要求1所述基于区块链的多语言智能合约编译方法,其特征在于,编译所述条件判断语句包含如下步骤:
编译所述条件判断语句的条件表达式,获取当前的指令的相对偏移地址,获取条件跳转指令及所述条件跳转指令的跳转目标地址;
编译所述条件判断语句主体,获取目标地址;
将所述目标地址赋值给所述条件跳转指令的跳转目标地址。
7.如权利要求6所述基于区块链的多语言智能合约编译方法,其特征在于,编译所述条件判断语句的条件表达式获取的所述条件跳转指令的跳转目标地址为空。
8.如权利要求1所述基于区块链的多语言智能合约编译方法,其特征在于,编译所述循环语句包含如下步骤:
编译所述循环语句开始处的条件表达式,获取代码相对偏移地址,获取条件跳转指令;
编译所述循环语句的主体,获取代码偏移地址,用所述代码偏移地址设置所述条件跳转指令。
9.如权利要求1所述基于区块链的多语言智能合约编译方法,其特征在于,编译所述函数语句包含如下步骤:
编译所述函数语句的所有参数,获取所述每个参数在符号表中的索引值;
生成函数跳转指令和参数调用指令;
编译所述函数语句的函数主体,获取所述函数语句的局部变量的数量;
若所述函数语句缺少返回指令,补足返回指令。
10.如权利要求9所述基于区块链的多语言智能合约编译方法,其特征在于,生成所述函数跳转指令时,所述函数跳转指令的跳转目标地址为空。
CN202010227150.1A 2020-03-27 2020-03-27 基于区块链的多语言智能合约编译方法 Active CN111399850B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010227150.1A CN111399850B (zh) 2020-03-27 2020-03-27 基于区块链的多语言智能合约编译方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010227150.1A CN111399850B (zh) 2020-03-27 2020-03-27 基于区块链的多语言智能合约编译方法

Publications (2)

Publication Number Publication Date
CN111399850A true CN111399850A (zh) 2020-07-10
CN111399850B CN111399850B (zh) 2023-05-16

Family

ID=71436696

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010227150.1A Active CN111399850B (zh) 2020-03-27 2020-03-27 基于区块链的多语言智能合约编译方法

Country Status (1)

Country Link
CN (1) CN111399850B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113190234A (zh) * 2021-05-21 2021-07-30 电子科技大学 针对区块链智能合约函数签名自动化恢复的方法及系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130247017A1 (en) * 2010-10-28 2013-09-19 Innowake Gmbh Method and system for generating code
CN106598579A (zh) * 2016-12-06 2017-04-26 北京果仁宝科技有限公司 区块链上集成动态类型编程语言方法和装置
CN109522008A (zh) * 2018-11-06 2019-03-26 陕西医链区块链集团有限公司 一种区块链智能合约构建方法
CN109753288A (zh) * 2019-01-14 2019-05-14 杭州云象网络技术有限公司 一种适用于形式化验证的智能合约编译方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130247017A1 (en) * 2010-10-28 2013-09-19 Innowake Gmbh Method and system for generating code
CN106598579A (zh) * 2016-12-06 2017-04-26 北京果仁宝科技有限公司 区块链上集成动态类型编程语言方法和装置
CN109522008A (zh) * 2018-11-06 2019-03-26 陕西医链区块链集团有限公司 一种区块链智能合约构建方法
CN109753288A (zh) * 2019-01-14 2019-05-14 杭州云象网络技术有限公司 一种适用于形式化验证的智能合约编译方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李鑫;: "一种C语言编译程序中语句处理的实现算法" *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113190234A (zh) * 2021-05-21 2021-07-30 电子科技大学 针对区块链智能合约函数签名自动化恢复的方法及系统

Also Published As

Publication number Publication date
CN111399850B (zh) 2023-05-16

Similar Documents

Publication Publication Date Title
CN100470480C (zh) 分析程序加速器装置以及更新其的方法
JP5897816B2 (ja) 依存性グラフのパラメータのスコーピング
CN100462920C (zh) 为优化的程序生成展开信息
WO2022033229A1 (zh) 一种软件代码编译方法及系统
US5367683A (en) Smart recompilation of performing matchup/difference after code generation
EP0855056B1 (en) Object-oriented method maintenance mechanism that does not require cessation of the computer system
CN109492017A (zh) 业务信息查询处理方法、系统、计算机设备和存储介质
CN102722432A (zh) 追踪内存访问的方法和装置
CN107924326A (zh) 对经更新的类型的迁移方法进行覆盖
CN110955431A (zh) 编译环境的处理方法及装置
US20080034359A1 (en) Software transactional protection of managed pointers
US5978586A (en) Method for tracking changes in source locations in a compiler
CN111399850B (zh) 基于区块链的多语言智能合约编译方法
US5446899A (en) Hint generation in smart recompilation
CN111240772A (zh) 一种基于区块链的数据处理方法、装置及存储介质
CN110780863B (zh) 一种存储系统的跨平台开发方法、装置、设备及介质
CN100375029C (zh) 存储器配置系统与方法
CN111596970A (zh) 动态库延迟加载方法、装置、设备和存储介质
CN114594960A (zh) 一种递归函数解析执行方法、装置及存储介质
US7266814B2 (en) Namespace based function invocation
JP3241214B2 (ja) 分散処理装置及びプロセス実行方法
CN112506613A (zh) Gitlab-ci自动识别Maven变更子模块并推送docker镜像的方法
US6311227B1 (en) Procedure calling method
CN117978554B (zh) 一种基于配置的微服务隔离运行方法、设备及介质
Freak A Fortran to Pascal translator

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