一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种区块链的JAVA智能合约的事件推送方法与流程

2022-06-01 09:26:55 来源:中国专利 TAG:

一种区块链的java智能合约的事件推送方法
1.本技术是针对申请日为“2019年8月22日”、申请号为“201910776138.3”、名称为“一种区块链的java智能合约的事件推送方法”的中国专利申请提出的分案申请。
技术领域
2.本发明涉及区块链技术,尤其涉及一种区块链的java智能合约的事件推送方法。


背景技术:

3.区块链技术,区块链是一种新型去中心化协议,能安全地存储数字货币交易或其他数据,信息不可伪造和篡改;智能合约是一种可以在区块链网络环境中部署和执行的一段代码,这段代码的部署以及执行都是可以在区块链网络中以交易的形式呈现,其部署和执行结果可以随着交易被全网共识;目前智能合约支持的语言包括solidity、java等等,智能合约也在基于区块链的各种业务应用中广泛应用。
4.传统联盟区块链智能合约执行引擎包括evm和jvm,支持的语言分别为solidity和java,但是在合约执行环境中,是一个区块链节点的沙箱环境,所以导致外部难以感知到合约内部的执行状态,作为用户很难去监控,只能通过合约的返回结果来做判断,尤其是作为java语言编写的智能合约,不像特定的智能合约语言solidity难以实现定制化的事件推送,通过推送的数据来监控合约的执行情况。
5.区块链的去中心化与不可篡改的特性给智能合约提供了一个很好的发展环境,因此近年来,比特币网络、以太坊网络等一系列区块链社区都陆续开始提供了公开的智能合约编程的接口。但在智能合约执行过程中,一直缺少一个事件推送的模式来通知客户端合约执行的中间过程,尤其缺少一种基于当前主流编程语言的智能合约推送方法。


技术实现要素:

6.针对现有技术的不足,本发明提出了一种区块链的java智能合约的事件推送方法,从智能合约事件的生成、触发、推送、订阅、解码等方面的过程来实现整个推送事件流程,具体技术方案如下:
7.一种区块链的java智能合约的事件推送方法,其特征在于,
8.所述的事件的虚拟机执行引擎为java虚拟机,该虚拟机执行引擎接受以jar形式的合约文件部署在区块链平台上,通过自定义的类加载器加载合约文件并初始化出合约实例,并通过接口的形式调用智能合约;
9.所述的java智能合约继承自basecontract虚类,所述的事件推送方法定义在所述的java智能合约的父类中,所述的事件包括topics过滤条件和data数据部分;
10.所述的事件推送方法具体包括如下步骤:
11.s1:所述的java智能合约定义的事件接收用户输入的三个参数,第一个参数为object类型的任意类型数据,即为用户最终想要推送到客户端的数据;第二个参数为字符串类型,即用户自定义的当前事件的名称,该名称最终也会作为topics过滤条件的一部分;
第三个参数为类型为任意数量和任意长度的字符串数组,用于用户增加过滤条件;
12.s2:当包含事件的智能合约方法被调用时,事件被触发,所述的执行引擎将用户期望推送的数据序列化后,同topics过滤条件一起发送给区块链节点,区块链节点收到java智能合约发过来的事件推送信息后,将当前事件的合约地址、区块号、事件的topics过滤条件和data数据部分保存到状态数据库中;
13.s3:当包含合约事件的交易所属的区块落盘后,所述的事件分发被触发,所述的区块链节点将用户对订阅事件指定的topics过滤条件和当前区块的状态数据库中保存的事件topics进行对比,当两者完全相同时,该事件被分发到用户的订阅列表中,并依据用户指定的推送形式将消息发送到客户端。
14.进一步地,所述的topics过滤条件和data数据部分在所述的推送事件被执行前指定或从合约方法参数动态传入时指定。
15.进一步地,所述的执行引擎通过jni方法将在java中的数据发送到区块链节点。
16.本发明的有益效果:
17.本发明应用于区块链平台上,提供了一套全新的智能合约事件推送的方法,实现了合约事件的生成、触发、推送、订阅、解码,为用户合约监控提供了便捷。同时,合约事件产生的记录会保存在区块链状态数据库中,方便之后用户查询。
附图说明
18.图1是合约事件结构图;
19.图2是合约事件推送图。
具体实施方式
20.下面根据附图和优选实施例详细描述本发明,本发明的目的和效果将变得更加明白,应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
21.如图1-2所示,一种区块链的java智能合约的事件推送方法,其特征在于,
22.所述的事件的虚拟机执行引擎为java虚拟机,该虚拟机执行引擎接受以jar形式的合约文件部署在区块链平台上,通过自定义的类加载器加载合约文件并初始化出合约实例,并通过接口的形式调用智能合约;
23.所述的java智能合约继承自basecontract虚类,所述的事件推送方法定义在所述的java智能合约的父类中,所述的事件包括topics过滤条件和data数据部分;
24.所述的事件推送方法具体包括如下步骤:
25.s1:所述的java智能合约定义的事件接收用户输入的三个参数,第一个参数为object类型的任意类型数据,即为用户最终想要推送到客户端的数据;第二个参数为字符串类型,即用户自定义的当前事件的名称,该名称最终也会作为topics过滤条件的一部分;第三个参数为类型为任意数量和任意长度的字符串数组,用于用户增加过滤条件;
26.s2:当包含事件的智能合约方法被调用时,事件被触发,所述的执行引擎将用户期望推送的数据序列化后,同topics过滤条件一起发送给区块链节点,区块链节点收到java智能合约发过来的事件推送信息后,将当前事件的合约地址、区块号、事件的topics过滤条件和data数据部分保存到状态数据库中;
27.s3:当包含合约事件的交易所属的区块落盘后,所述的事件分发被触发,所述的区块链节点将用户对订阅事件指定的topics过滤条件和当前区块的状态数据库中保存的事件topics进行对比,当两者完全相同时,该事件被分发到用户的订阅列表中,并依据用户指定的推送形式将消息发送到客户端。
28.用户在客户端按所需的推送形式,可以采用mq或者websocket,向区块链节点发送订阅请求并获取到推送的网络连接,之后符合条件的事件将通过该条网络连接来发送,用户订阅的时候可以指定订阅的合约地址、区块号区间、event事件的topics过滤条件。在收到节点的推送数据后,通过解析数据格式,取出用户在合约中希望推送的数据后,将数据反序列化为对应的数据结构即可使用,若用户期望指定不同的过滤条件,则可以向节点发送多次订阅来创建多个推送连接,从而获取不同订阅的事件推送数据。
29.所述的步骤一中,定义的event事件可以指定任意类型的数据,最终序列化推送到客户端的数据形式很轻量;可以定义多个topics过滤条件,为用户订阅扩展了更多的过滤形式。
30.所述的步骤一中,用户定义了合约事件的topics过滤条件后,事件推送数据可以是合约执行过程中的某些关键数据变更状态,将特殊的数据推送给指定的topics过滤条件,可以让用户做更加精确地事件推送接受并处理。同时事件的使用也很方便,用户只需要调用父类方法即可。
31.所述的步骤二中,合约事件定义在合约方法内部,随着该合约方法执行时,自动触发定义的合约事件,同时将合约某些数据通过参数的形式传送给event事件,而topics则可以在合约方法执行之前通过硬编码决定,也可以是执行时动态指定。
32.所述的步骤二中,当合约指定过程中触发了合约事件后,java虚拟机执行引擎通过jni方法将在java中的数据发送到区块链平台,通过这种跨语言的形式减少了很多传输的开销,同时还可以共享一片内存。在节点收到事件推送的数据后,保存到状态数据库中。
33.所述的步骤二中,等交易所在区块落盘后,区块链节点便从状态数据库中,开始分发不同的事件到指定的订阅通道中,需要将事件的topics和订阅的topics做一一对比后,都相同才会推送。
34.所述的步骤二中,用户可以开启mq或者websocket的连接方式向平台获取订阅的数据,订阅的规则可以指定合约地址、区块号范围、topics过滤条件等。
35.本领域普通技术人员可以理解,以上所述仅为发明的优选实例而已,并不用于限制发明,尽管参照前述实例对发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在发明的精神和原则之内,所做的修改、等同替换等均应包含在发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献