以太事件解析 #7 事件侦听_02
前言
续接上篇内容,在上篇介绍了事件的获取和确认的过程,本篇文章集中讲下,后台管理的一些api和配合业务一些内容的说明。
管理类
链配置管理
AdminChainConfigController
用于维护区块链的相关侦听配置信息,包括但不限于区块高度、链的侦听状态以及其他必要信息,为系统提供实时的链状态监控能力。
合约配置管理
AdminContractConfigController
负责管理合约的配置,支持以下功能:
- 配置和更新合约地址。
- 维护合约的运行状态(启用、禁用等)。
- 保存合约相关的附加信息,支持个性化扩展。
日志信息管理
AdminContractLogsController
提供合约日志的查询和管理功能。通过该模块,用户可以便捷地获取和分析合约的运行日志,为问题排查和运行监控提供支持。
外部对接
外部查询主要用于外部接口和日志信息的对接,也就是说让业务模块可以查询通过合约名称、topic0等其它信息查询到未处理的日志信息。
select log.*
from t_contract_logs as log,
t_contract_config as config
where log.contract_config_id = config.contract_config_id
and log.first_topic = #{firstTopic,jdbcType=VARCHAR}
and log.contract_address = config.contract_address
<if test="contractAddress != null">
and log.contract_address = #{contractAddress,jdbcType=VARCHAR}
</if>
<if test="contractName != null">
and config.name = #{contractName,jdbcType=VARCHAR}
</if>
<if test="targetTable != null">
and log.contract_log_id not in (select contract_log_id from `${targetTable}`)
</if>
order by log.block_timestamp, log.contract_log_id
<if test="limit != 0">
limit #{limit,jdbcType=INTEGER}
</if>
典型的业务表的设计如下
其中contract_log_id批的是业务的id,一般我们可以将其设置成唯一索引,这样就可以关联你的业务表和日志表的关系,这里的hash和区块高度和区块时间是冗余在业务表中。用来理文件的查询,当然实际业务过程中有一些特殊的处理,大家可以自己编写SQL进行查询,总体的集成建议是让日志表和业务库是在同一个数据库里,这样能解决你大概90%以上的业务问题。
总结
总结来看,这两篇文章基本完整地描述了当前区块侦听相关功能的设计与实现内容。核心模块涵盖了链配置管理、合约配置管理以及日志信息管理,形成了一套较为完整的区块链侦听解决方案。
具体细节和实现可以直接参考代码。如有更成熟的思路或建议,欢迎随时留言交流,以便共同优化和完善整体功能。