[发明专利]一种安全的Java智能合约解释执行引擎及方法有效
申请号: | 201811636117.3 | 申请日: | 2018-12-29 |
公开(公告)号: | CN109710384B | 公开(公告)日: | 2021-02-23 |
发明(设计)人: | 邱炜伟;李启雷;李伟;梁秀波;尹可挺 | 申请(专利权)人: | 杭州趣链科技有限公司 |
主分类号: | G06F9/455 | 分类号: | G06F9/455 |
代理公司: | 杭州求是专利事务所有限公司 33200 | 代理人: | 邱启旺 |
地址: | 310012 浙江省杭州*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 安全 java 智能 合约 解释 执行 引擎 方法 | ||
1.一种安全的Java智能合约解释执行引擎的执行方法,所述安全的Java智能合约解释执行引擎包括如下模块:
(1)定制的Java虚拟机模块,其特征是:仅支持解释执行,不会对代码进行动态优化;精简了包括文件、网络、硬件信息访问、随机数值、日期时间这些会导致执行结果差异的功能;实现了严格一致的数学与大整数库;实现了平台无关的基本类型类;
(2)API模块,负责接收外部用户发起的部署调用请求;
(3)安全检查模块,负责对用户合约字节码进行预检查,对用户代码中危险操作进行防御性检查;
(4)状态存储模块,为Java虚拟机提供JNI接口,允许Java虚拟机能够操作区块链状态,以实现智能资产的操作;
其特征在于,具体包括如下步骤:
步骤一:用户按照既定规则使用Java语言编写智能合约,并通过标准的Java语言编译器,将原始码编译成对应的字节码;在编译过程当中,Java智能合约需要同对应的预载环境Java代码一同编译;编译完成之后,将编译完成的class文件通过标准Jar压缩协议打包成Jar文件,在jar文件的Manifest文件中需要置入对应的MainClass配置项,以指定智能合约的入口主类;用户通过SDK将打包好的智能合约发送至区块链平台进行部署;
步骤二:区块链平台接收到智能合约部署交易之后,对智能合约部署交易的格式进行验证,然后对交易签名进行验证,验证通过之后,对部署交易的载荷进行安全检查,部署阶段的载荷即打包完成的智能合约字节码,平台需要对智能合约的字节码进行敏感操作检查,防止智能合约对宿主环境进行危险操作造成安全隐患;检查通过之后,将对智能合约进行解包,执行引擎中的Java虚拟机根据Manifest中MainClass配置对代码进行预解释执行,来验证合约代码的合法性;预执行通过之后,区块链平台将生成一个全局唯一的标识,作为该合约在网络中的对应表示,然后将标识与代码映射存储到区块链网络状态当中;
步骤三:合约部署完成之后,用户根据业务需要,对特定合约方法发起调用,发起调用时,需要提供合约标识、被调方法签名和参数列表;当区块链平台接收到标识、方法签名和方法参数之后,执行引擎将从区块链网络状态存储中将对应的合约代码进行检索,检索完成之后,将智能合约字节码、被调函数签名和被调函数参数列表作为执行引擎的输入,执行引擎通过Java虚拟机进行解释执行;解释执行期间,Java虚拟机将会收集智能合约中对将对区块链网络状态进行修改操作集合,最后在执行阶段末尾,将所有修改操作集合提交应用,完成区块链网络状态的修改;
步骤四:状态修改完成之后,将合约逻辑中需要返回的返回值进行序列化之后,返回给调用客户端SDK,客户端SDK依照协议进行反序列化,将返回值封装为客户端本地类型数据进行返回。
2.根据权利要求1所述的一种安全的Java智能合约解释执行引擎的执行方法,其特征在于,所述的步骤一中,预载环境Java代码指的是,为了完成用户编写的代码能够符合智能合约引擎解释执行规范,以及能够对一些内置变量进行预先设置,所需要遵循的接口和继承规范,因此预载Java代码需要同用户合约一同进行编译。
3.根据权利要求1所述的一种安全的Java智能合约解释执行引擎的执行方法,其特征在于,所述的步骤二中,对部署交易的载荷进行的安全检查指的是,由于区块链网络是分布式系统,需要对Java语言的能力进行限制,需要禁止用户对文件、网络、硬件信息访问、随机数值、日期时间敏感资源的访问,也需要防止用户使用Java反射技术对执行环境进行的攻击;因此通过对载荷中的智能合约字节码进行检查是必要的,通过对标准Class文件的格式进行解析,分析代码中的上下文信息,确定是否有加载敏感操作类,来防御相关敏感操作。
4.根据权利要求1所述的一种安全的Java智能合约解释执行引擎的执行方法,其特征在于,所述的步骤二中,对智能合约代码进行解析执行是指按照Java虚拟机规范对符合标准的Class文件进行解释执行,对Class文件中所定义的字节码进行解析之后,按照确定的顺序对指令进行执行,为了能够保证执行过程的可确定性,Java虚拟机不能够对代码进行动态优化,仅仅能够按照既定方式解释执行。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州趣链科技有限公司,未经杭州趣链科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811636117.3/1.html,转载请声明来源钻瓜专利网。