[发明专利]一种基于JAVA的智能合约的跨合约调用方法有效
申请号: | 201910550382.8 | 申请日: | 2019-06-24 |
公开(公告)号: | CN110297721B | 公开(公告)日: | 2021-08-03 |
发明(设计)人: | 李伟;邱炜伟;梁秀波;尹可挺;汤凯凯 | 申请(专利权)人: | 杭州趣链科技有限公司 |
主分类号: | G06F9/54 | 分类号: | G06F9/54;G06Q40/04 |
代理公司: | 杭州求是专利事务所有限公司 33200 | 代理人: | 贾玉霞 |
地址: | 310051 浙江省杭州市*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种基于JAVA的智能合约的跨合约调用的方法,该方法通过实现一个自定义类加载器来加载指定合约地址ContractAddress对应的合约类,并根据相应调用接口基于链上账本数据实例化一个对应的contract实例或者library实例的对象。该对象中的变量体现了该合约的最新状态,用户通过该对象的方法使用指定合约的功能服务,在合约执行的持久化阶段,所有在contract实例上的变更均会在账本中体现,即会修改对应合约账户的状态,而所有在library实例上的变更均会被抛弃,即对应合约账户的状态不会被改变。由于相关接口的使用无其他限制,所以用户可以进行多重的跨合约调用。 | ||
搜索关键词: | 一种 基于 java 智能 合约 调用 方法 | ||
【主权项】:
1.一种基于JAVA的智能合约的跨合约调用方法,其特征在于,该方法具体包括如下步骤:步骤一:编写使用接口的合约:根据业务需求在合约中定义相应的合约方法,当需要复用其他合约的工具方法逻辑时,通过获取library实例的接口来满足;当需要访问其他机构发布的合约服务以此实现跨机构合作时,通过获取contract实例的接口来满足;获取library实例和contract实例的接口,均接受一个合约地址ContractAddress作为参数,并返回一个合约对象,通过声明一个合约对象类型变量进行赋值。步骤二:调用合约,根据合约地址ContractAddress获取合约对象:首先,对合约地址ContractAddress进行长度检查,若长度未通过,则抛出异常;若长度通过,再作如下判断:若非首次创建,则表明在本次合约调用中已经获取过合约地址ContractAddress对应的合约对象,此时对于获取library实例的场景,作一次深拷贝,然后进行步骤三;对于获取contract实例的场景,则直接进行步骤三;若为首次创建,先进行下面流程:(1)智能合约执行引擎将根据合约地址ContractAddress试图从账本中该地址对应的合约账户中取出该合约对应的JAVA合约字节码,若未取到,则抛出异常;若取到,则进行安全性检查;(2)加载合约字节码:获得JAVA合约字节码后先进行安全性检查,若不通过,则抛出异常并退出;若检查通过,则通过自定义类加载器,将合约类字节码加载进虚拟机,并返回合约主体类的Class对象;(3)根据合约主体类Class对象创建合约对象并初始化:通过JAVA反射机制,调用主体类无参构造方法,若构造失败则抛出异常;若构造成功,则通过JAVA反射机制依次扫描该对象的成员变量,并从账本中取出该变量对应的值进行初始化;然后,如果获取的是contract实例,那么将该对象另外缓存于内存中,然后进行步骤三;如果获取的是library实例,那么直接进行步骤三。步骤三:触发合约对象的合约创建钩子函数,判断钩子函数是否运行正常,若是,则直接返回之前创建的对象;若否,则抛出异常;步骤四:调用结束,持久化:扫描本次调用中缓存的全部contract实例,得到对合约账户的修改集,并将修改集应用到对应的合约账户;所述的钩子函数,是指被调用合约作者自定义的重写的合约方法,在合约实例创建时被触发;所述的合约地址ContractAddress为固定长度的16进制字符串。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州趣链科技有限公司,未经杭州趣链科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201910550382.8/,转载请声明来源钻瓜专利网。
- 上一篇:通知装置、通知方法及存储通知程序的介质
- 下一篇:线程任务通信方法及相关产品