背景
在前面的文章中其实简单的介绍过我们的区块链侦听服务的大概框架和模型,本身来说我们是有两个版本事件侦听,正常微服务的情况下我们会用到这个JAVA版本,其实还有一个python版本,那个主要是当时用来测试下大数据的情况下,存储在mongodb里的,整体的配置也是存储在数据库中,因为我们开发过程中大部分情况下是用java版本进行处理的,所以这里介绍的也是java的微服务版本。
表结构
已经上传到代码仓库中
事件侦听流程
侦听初始化
事件初始化由job发起,链和合约相关信息更改后这个定时任务会定期初始化这些配置,其实定时任务也是利用了我们框架集成的quartz的,这部分内容会在框架重构的相关文章中编写。如下是初始化JOB的源代码路径
GitCode - 全球开发者的开源社区,开源代码托管平台GitCode是面向全球开发者的开源社区,包括原创博客,开源代码托管,代码协作,项目管理等。与开发者社区互动,提升您的研发效率和质量。https://gitcode.com/YouYouLongLong/dapp-chain-event/blob/master/dapp-chain-event-app/src/main/java/com/unknown/chainevent/app/job/InitLogFilterJob.javaInitLogFilter
是一个负责初始化和管理区块链日志订阅的核心组件,主要用于处理链配置(ChainConfig
)及其相关的订阅服务。本类的主要职责包括:
- 初始化订阅:根据链配置列表,创建或重置日志过滤器(
BaseLogFilter
),实现对区块链事件的监控。 - 清理订阅:支持清理某条链的日志订阅器,以便更新链配置或禁用订阅。
- 动态更新订阅器:支持根据链的状态和配置,动态调整日志过滤器的状态。
事件确认
事件确认是整个区块链一个必不可以少的部分,其中原因防分叉、防双花等,这里就不多讲。只讲一下具体的相关逻辑和处理,其实也就是简单的比对下当前区块和事件所在区块的相差值和我们配置的高度情况及通过rpc调用交易回执来确认交易是否存在或者被拒绝的情况,其中涉及到web3j的一些api和如何使用的问题,还有eth的rpc的一些方法的问题,详细的可以看下源代码: