CN109710385A - 一种基于Java虚拟机的智能合约复杂度限制方法 - Google Patents

一种基于Java虚拟机的智能合约复杂度限制方法 Download PDF

Info

Publication number
CN109710385A
CN109710385A CN201811639968.3A CN201811639968A CN109710385A CN 109710385 A CN109710385 A CN 109710385A CN 201811639968 A CN201811639968 A CN 201811639968A CN 109710385 A CN109710385 A CN 109710385A
Authority
CN
China
Prior art keywords
contract
java
gas
calling
intelligent contract
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
Application number
CN201811639968.3A
Other languages
English (en)
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 Qulian Technology Co Ltd
Original Assignee
Hangzhou Qulian 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 Qulian Technology Co Ltd filed Critical Hangzhou Qulian Technology Co Ltd
Priority to CN201811639968.3A priority Critical patent/CN109710385A/zh
Publication of CN109710385A publication Critical patent/CN109710385A/zh
Pending legal-status Critical Current

Links

Abstract

本发明公开一种基于Java虚拟机的智能合约复杂度限制方法,节点在收到外部部署的合约之后先会对其字节大小进行检查,如果检查通过再进行部署,通过计算gas消耗和超时时间设定后存储在节点上;在每一次的外部Java合约调用,每个节点的Java虚拟机都会将合约取出并执行相应的方法,通过将执行过程中执行的每条指令计算gas消耗,如果消耗达到设定上限则拒绝继续执行;同时,在执行过程中会进行计时,如果在规定时间内没有执行完成,则会停止执行。本发明既可以限制Java智能合约的代码大小,也能保证Java智能合约代码的复杂度以及执行过程中的可终止性,也保证超时合约的执行不会影响到共识的过程,保证了区块链的安全性与稳定性。

Description

一种基于Java虚拟机的智能合约复杂度限制方法
技术领域
本发明涉及去中心化区块链智能合约执行过程的设计领域,尤其涉及一种基于Java虚拟机的智能合约复杂度限制方法。
背景技术
区块链技术,区块链是一种新型去中心化协议,能安全地存储数字货币交易或其他数据,信息不可伪造和篡改;智能合约是一种可以在区块链网络环境中部署和执行的一段代码,这段代码的部署以及执行都是可以在区块链网络中以交易的形式呈现,其部署和执行结果可以随着交易被全网共识;由于结果需要交给共识层共识,由此执行的结果必须保证在每个节点上的一致性。
传统联盟区块链智能合约执行引擎包括evm和jvm,以jvm为例,jvm没有在部署时对合约的大小做出限制,无法在执行过程中让执行过程立即停止,因此无法对合约的复杂度做出很好的限制,如何解决Java智能合约在需要停止执行时能够立即停止执行,保证区块链智能合约引擎的稳定安全以及区块链网络的稳定是一项全新的挑战。
发明内容
针对现有技术的不足,本发明提出一种基于Java虚拟机的智能合约复杂度限制方案,即保证了对复杂的智能合约进行部署限制,也保证了执行过程的可立即终止。
本发明的目的是通过以下技术方案实现的:一种基于Java虚拟机的智能合约复杂度限制方法,该方法具体包括如下步骤:
步骤一:区块链节点收到客户端发起的部署合约的请求后,将首先进行合约字节数大小的检查,如果当前收到的合约字节数大于给定的字节数上限值,则拒绝此智能合约的部署;
步骤二:在部署智能合约的时候,会进行部署合约的Java字节码调用,目的是将需要部署的合约的字节码存储在区块链节点的DB中,在进行部署的Java字节码调用的时候,Java字节码在调用前会先指定一个gas的总值,Java字节码会被解释为一个个指令,对于每一个指令的执行,会先判断当前的gas总值是否大于执行当前指令所需要的gas值,如果小于则直接停止执行,否则会在gas的总值的基础上减去当前指令对应gas的数值,直到字节码执行完毕;
步骤三:当调用合约时,区块链节点收到调用合约的请求,将用户需要调用的合约从DB中取出,然后对相应的方法进行解析调用;与步骤二的调用过程类似,Java合约在调用前会先指定一个gas的总值,在调用指令的过程中,先判断是否有足够的gas来执行此条指令,然后不断消耗,直到合约执行完毕;
步骤四:在调用合约的同时,会创建并启动一个计时器Timmer,在智能合约执行的时候Timmer会一直运转,如果在Timmer运转结束,智能合约还没有运行结束,那么会直接停止智能合约的运行。
进一步地,所述的步骤一中,从字节大小方面限制合约的大小;
进一步地,所述的步骤二中,gas总值是在Java合约解释为指令的调用过程中,能都消耗的总数值,一旦消耗完字节码执行过程将会立即终止;在进行部署合约的Java字节码调用的时候,进行调用的计费限制;
进一步地,所述的步骤三中,会在合约方法的字节码调用过程中进行gas的消费计算,可以保证智能合约执行过程的终止性;
进一步地,所述的步骤四中,在Java智能合约的执行过程中加入了超时限制,保证过多的耗时操作不会影响共识的过程。
本发明的有益效果如下:
本发明应用于联盟链背景下的区块链智能合约执行引擎上,既保证了对复杂的智能合约进行部署限制,也保证了执行过程的可立即终止,是区块链虚拟机执行引擎下Java虚拟机执行引擎的大突破。
附图说明
图1是本发明的方法中部署合约流程图;
图2是本发明的方法中调用合约流程图;
具体实施方式
下面根据附图和优选实施例详细描述本发明,本发明的目的和效果将变得更加明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1、图2所示,一种基于Java虚拟机的智能合约复杂度限制方法,该方法具体包括如下步骤:
步骤一:区块链节点收到客户端发起的部署合约的请求后,将首先进行合约字节数大小的检查,如果当前收到的合约字节数大于给定的字节数上限值,则拒绝此智能合约的部署;
步骤二:在部署智能合约的时候,会进行部署合约的Java字节码调用,目的是将需要部署的合约的字节码存储在区块链节点的DB中,在进行部署的Java字节码调用的时候,Java字节码在调用前会先指定一个gas的总值,Java字节码会被解释为一个个指令,对于每一个指令的执行,会先判断当前的gas总值是否大于执行当前指令所需要的gas值,如果小于则直接停止执行,否则会在gas的总值的基础上减去当前指令对应gas的数值,直到字节码执行完毕;
步骤三:当调用合约时,区块链节点收到调用合约的请求,将用户需要调用的合约从DB中取出,然后对相应的方法进行解析调用;与步骤二的调用过程类似,Java合约在调用前会先指定一个gas的总值,在调用指令的过程中,先判断是否有足够的gas来执行此条指令,然后不断消耗,直到合约执行完毕;
步骤四:在调用合约的同时,会创建并启动一个计时器Timmer,在智能合约执行的时候Timmer会一直运转,如果在Timmer运转结束,智能合约还没有运行结束,那么会直接停止智能合约的运行。
进一步地,所述的步骤一中,从字节大小方面限制合约的大小;通过合约的字节数初步进行合约的大小判断,实现了对Java智能合约从合约本身大小的控制。
进一步地,所述的步骤二中,gas总值是在Java合约解释为指令的调用过程中,能都消耗的总数值,一旦消耗完字节码执行过程将会立即终止;在进行部署合约的Java字节码调用的时候,进行调用的计费限制;
进一步地,所述的步骤三中,会在合约方法的字节码调用过程中进行gas的消费计算,可以保证智能合约执行过程的终止性;
进一步地,所述的步骤四中,在Java智能合约的执行过程中加入了超时限制,保证过多的耗时操作不会影响共识的过程。
通过在部署过程中进行指令gas的消耗判断以及超时的限制,使得部署的合约大小方面的复杂性可控,进一步的,在调用合约的时候也进行指令gas的消耗判断以及超时时间的限制,使得合约代码的复杂性可控,并且可以在指令执行的任意一处立即停止执行。
本领域普通技术人员可以理解,以上所述仅为发明的优选实例而已,并不用于限制发明,尽管参照前述实例对发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在发明的精神和原则之内,所做的修改、等同替换等均应包含在发明的保护范围之内。

Claims (5)

1.一种基于Java虚拟机的智能合约复杂度限制方法,其特征在于,该方法具体包括如下步骤:
步骤一:区块链节点收到客户端发起的部署合约的请求后,将首先进行合约字节数大小的检查,如果当前收到的合约字节数大于给定的字节数上限值,则拒绝此智能合约的部署。
步骤二:在部署智能合约的时候,会进行部署合约的Java字节码调用,目的是将需要部署的合约的字节码存储在区块链节点的DB中,在进行部署的Java字节码调用的时候,Java字节码在调用前会先指定一个gas的总值,Java字节码会被解释为一个个指令,对于每一个指令的执行,会先判断当前的gas总值是否大于执行当前指令所需要的gas值,如果小于则直接停止执行,否则会在gas的总值的基础上减去当前指令对应gas的数值,直到字节码执行完毕。
步骤三:当调用合约时,区块链节点收到调用合约的请求,将用户需要调用的合约从DB中取出,然后对相应的方法进行解析调用;与步骤二的调用过程类似,Java合约在调用前会先指定一个gas的总值,在调用指令的过程中,先判断是否有足够的gas来执行此条指令,然后不断消耗,直到合约执行完毕。
步骤四:在调用合约的同时,会创建并启动一个计时器Timmer,在智能合约执行的时候Timmer会一直运转,如果在Timmer运转结束,智能合约还没有运行结束,那么会直接停止智能合约的运行。
2.根据权利要求1所述的基于Java虚拟机的智能合约复杂度限制方法,其特征在于,所述的步骤一中,从字节大小方面限制合约的大小。
3.根据权利要求1所述的基于Java虚拟机的智能合约复杂度限制方法,其特征在于,所述的步骤二中,gas总值是在Java合约解释为指令的调用过程中,能都消耗的总数值,一旦消耗完字节码执行过程将会立即终止;在进行部署合约的Java字节码调用的时候,进行调用的计费限制。
4.根据权利要求1所述的基于Java虚拟机的智能合约复杂度限制方法,其特征在于,所述的步骤三中,会在合约方法的字节码调用过程中进行gas的消费计算,可以保证智能合约执行过程的终止性。
5.根据权利要求1所述的基于Java虚拟机的智能合约复杂度限制方法,其特征在于,所述的步骤四中,在Java智能合约的执行过程中加入了超时限制,保证过多的耗时操作不会影响共识的过程。
CN201811639968.3A 2018-12-29 2018-12-29 一种基于Java虚拟机的智能合约复杂度限制方法 Pending CN109710385A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811639968.3A CN109710385A (zh) 2018-12-29 2018-12-29 一种基于Java虚拟机的智能合约复杂度限制方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811639968.3A CN109710385A (zh) 2018-12-29 2018-12-29 一种基于Java虚拟机的智能合约复杂度限制方法

Publications (1)

Publication Number Publication Date
CN109710385A true CN109710385A (zh) 2019-05-03

Family

ID=66260255

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811639968.3A Pending CN109710385A (zh) 2018-12-29 2018-12-29 一种基于Java虚拟机的智能合约复杂度限制方法

Country Status (1)

Country Link
CN (1) CN109710385A (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110675256A (zh) * 2019-08-30 2020-01-10 阿里巴巴集团控股有限公司 部署和执行智能合约的方法及装置
CN111179086A (zh) * 2019-12-31 2020-05-19 杭州趣链科技有限公司 一种基于WebAssembly的智能合约虚拟机
US10783082B2 (en) 2019-08-30 2020-09-22 Alibaba Group Holding Limited Deploying a smart contract
CN112258325A (zh) * 2020-12-22 2021-01-22 杭州趣链科技有限公司 一种智能合约执行方法、装置及存储介质
CN112330453A (zh) * 2020-11-23 2021-02-05 杭州趣链科技有限公司 基于区块链的智能合约调用方法、装置、设备和存储介质
CN112346820A (zh) * 2020-11-16 2021-02-09 杭州复杂美科技有限公司 区块链jvm应用方法、设备和存储介质
WO2021032177A1 (zh) * 2019-08-21 2021-02-25 杭州趣链科技有限公司 智能合约处理方法、系统、计算机设备和可读存储介质
WO2022140947A1 (zh) * 2020-12-28 2022-07-07 杭州趣链科技有限公司 智能合约的部署方法、执行方法、装置及终端设备
CN112330453B (zh) * 2020-11-23 2024-05-10 杭州趣链科技有限公司 基于区块链的智能合约调用方法、装置、设备和存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106598824A (zh) * 2016-11-25 2017-04-26 深圳前海微众银行股份有限公司 区块链的性能分析方法及装置
CN106951307A (zh) * 2017-03-06 2017-07-14 钱德君 一种智能合约虚拟机实现方法
CN107392619A (zh) * 2017-07-31 2017-11-24 众安信息技术服务有限公司 智能合约处理方法及装置
CN107526624A (zh) * 2017-07-18 2017-12-29 杭州趣链科技有限公司 一种基于Java虚拟机的智能合约执行引擎
CN107967539A (zh) * 2017-11-29 2018-04-27 暨南大学 基于机器学习和区块链技术的预测以太坊上交易的燃料限制的方法
CN108960830A (zh) * 2018-07-16 2018-12-07 百度在线网络技术(北京)有限公司 智能合约的部署方法、装置、设备及存储介质
CN109034814A (zh) * 2018-09-14 2018-12-18 百度在线网络技术(北京)有限公司 基于以太坊虚拟机的智能合约处理方法和装置
CN109064325A (zh) * 2018-06-25 2018-12-21 浙江超脑时空科技有限公司 一种基于区块链的智能合约实现方法和装置

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106598824A (zh) * 2016-11-25 2017-04-26 深圳前海微众银行股份有限公司 区块链的性能分析方法及装置
CN106951307A (zh) * 2017-03-06 2017-07-14 钱德君 一种智能合约虚拟机实现方法
CN107526624A (zh) * 2017-07-18 2017-12-29 杭州趣链科技有限公司 一种基于Java虚拟机的智能合约执行引擎
CN107392619A (zh) * 2017-07-31 2017-11-24 众安信息技术服务有限公司 智能合约处理方法及装置
CN107967539A (zh) * 2017-11-29 2018-04-27 暨南大学 基于机器学习和区块链技术的预测以太坊上交易的燃料限制的方法
CN109064325A (zh) * 2018-06-25 2018-12-21 浙江超脑时空科技有限公司 一种基于区块链的智能合约实现方法和装置
CN108960830A (zh) * 2018-07-16 2018-12-07 百度在线网络技术(北京)有限公司 智能合约的部署方法、装置、设备及存储介质
CN109034814A (zh) * 2018-09-14 2018-12-18 百度在线网络技术(北京)有限公司 基于以太坊虚拟机的智能合约处理方法和装置

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021032177A1 (zh) * 2019-08-21 2021-02-25 杭州趣链科技有限公司 智能合约处理方法、系统、计算机设备和可读存储介质
US11681509B2 (en) 2019-08-21 2023-06-20 Hangzhou Qulian Technology Co., Ltd. Smart contract processing method and system, computer device, and readable storage medium
US10783082B2 (en) 2019-08-30 2020-09-22 Alibaba Group Holding Limited Deploying a smart contract
CN110675256A (zh) * 2019-08-30 2020-01-10 阿里巴巴集团控股有限公司 部署和执行智能合约的方法及装置
US11010303B2 (en) 2019-08-30 2021-05-18 Advanced New Technologies Co., Ltd. Deploying a smart contract
US11307990B2 (en) 2019-08-30 2022-04-19 Advanced New Technologies Co., Ltd. Deploying a smart contract
CN111179086B (zh) * 2019-12-31 2024-01-02 杭州趣链科技有限公司 一种基于WebAssembly的智能合约虚拟机
CN111179086A (zh) * 2019-12-31 2020-05-19 杭州趣链科技有限公司 一种基于WebAssembly的智能合约虚拟机
CN112346820A (zh) * 2020-11-16 2021-02-09 杭州复杂美科技有限公司 区块链jvm应用方法、设备和存储介质
CN112330453A (zh) * 2020-11-23 2021-02-05 杭州趣链科技有限公司 基于区块链的智能合约调用方法、装置、设备和存储介质
CN112330453B (zh) * 2020-11-23 2024-05-10 杭州趣链科技有限公司 基于区块链的智能合约调用方法、装置、设备和存储介质
CN112258325A (zh) * 2020-12-22 2021-01-22 杭州趣链科技有限公司 一种智能合约执行方法、装置及存储介质
WO2022140947A1 (zh) * 2020-12-28 2022-07-07 杭州趣链科技有限公司 智能合约的部署方法、执行方法、装置及终端设备

Similar Documents

Publication Publication Date Title
CN109710385A (zh) 一种基于Java虚拟机的智能合约复杂度限制方法
CN107526624B (zh) 一种基于Java虚拟机的智能合约执行引擎
CN110333940A (zh) 基于条件的任务调度方法、装置、设备及存储介质
CN105009082B (zh) 减少过多的编译时间
JP2692609B2 (ja) マルチタスクのプログラムデバッグ方法とその装置
CN107092501B (zh) 一种Android系统中广告通用接口的实现方法及装置
CN107678776A (zh) 多模块版本依赖关系构建方法、装置、服务器和存储介质
CN105893320B (zh) 一种面向多核处理器的远程任务函数调用方法
CN106681811A (zh) 基于线程池的多线程调度方法及装置
CN106095540B (zh) 一种基于Quartz框架的任务流程处理方法
CN110532038A (zh) 一种基于Java智能合约的并行执行方法
CN108833161A (zh) 一种建立基于雾计算的智能合约微服务模型的方法
US10007495B2 (en) Code generation method for scheduling processors using hook function and exception handling function
CN106022108B (zh) 一种同步管理方法及终端设备
CN109033540B (zh) 一种芯片随机验证过程中的激励管理方法及系统
CN109408216A (zh) 任务生成方法、装置、设备及存储介质
CN105653934A (zh) 移动终端及其应用保护方法
CN105975346B (zh) 调度线程资源的方法、装置及系统
CN104978170B (zh) 一种基于图形化表示的多智能体系统生成方法
CN109711118A (zh) 一种基于插件化的iOS安全编译器及安全编译方法
JP2021535522A (ja) 人工知能の実行加速のための人工知能実行モデル設定方法と人工知能実行加速システム
US20140173635A1 (en) System and method for adding local resources for use by a mobile agent object
CN107688555A (zh) 一种函数托管计算中依赖服务的通用提供方法
CN110502284A (zh) 单片机的led指示灯闪烁方法、装置及可读存储介质
CN110597731A (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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20190503