多链互联中继系统可视化控制台是一个面向 Relayer 场景的前后端分离项目,用于展示多链接入状态、跨链消息生命周期和跨链流量分布。项目提供 全局概览、消息追踪、统计热力图 三类核心视图,适合用于组内协作、方案演示和真实数据联调。
本项目由前端展示层和后端聚合层组成:
- 前端:基于
Vue 3、Vite、Element Plus、ECharts,负责交互与可视化展示 - 后端:基于
Spring Boot、MyBatis、MySQL,负责聚合 Relayer 相关数据并提供接口 - 数据策略:优先读取生命周期分析表;当分析表数据不足时,自动回退到归档表、消息池和 ACL 相关数据
适用场景包括:
- 快速了解当前多链接入与组件运行状态
- 演示跨链消息在 Relayer 体系中的处理流程
- 接入真实数据库后观察拓扑、消息、证明和统计结果
| 模块 | 路由 | 说明 |
|---|---|---|
| 全局概览 | /overview |
展示接入链路、组件状态、网络拓扑、核心 KPI 和实时消息流 |
| 消息追踪 | /trace/:messageId? |
按 messageId、ucpId 或 messageKey 查看单条消息生命周期 |
| 统计热力图 | /analytics |
按链级、域名级、应用级分析跨链路径、成功率、时延和流向 |
flowchart LR
A["Relayer MySQL 数据库"] --> B["Spring Boot API"]
B --> C["Vue 3 可视化前端"]
A --> D["生命周期分析表"]
A --> E["归档表 / 消息池 / ACL"]
D --> B
E --> B
后端当前提供的核心接口如下:
GET /api/overview/summaryGET /api/overview/topologyGET /api/overview/live-feedGET /api/trace/{messageId}GET /api/analytics/heatmapGET /api/system/status
.
├── backend/ # Spring Boot 后端
│ ├── src/main/java/... # Controller / Service / Mapper
│ └── src/main/resources/ # application.yml 与 MyBatis XML
├── frontend/ # Vue 3 前端
│ ├── src/api/ # 接口封装
│ ├── src/pages/ # 页面入口
│ ├── src/components/ # 图表与业务组件
│ └── .env.live # 前端真实数据配置
├── sql/ # 分析表初始化 SQL
├── scripts/ # 数据探索与辅助脚本
└── out/ # 数据结构分析产物
Vue 3ViteTypeScriptElement PlusEChartsvue-echartsVue Router
Java 17Spring Boot 3.3.3MyBatisMySQLMaven
为保证在真实数据尚未完全沉淀时仍可展示关键页面,后端采用分层读取策略:
- 优先读取分析表
relayer_message_lifecyclerelayer_message_stage_eventrelayer_analytics_hourly
- 分析表不足时回退到归档与业务表
sdp_msg_archiveauth_msg_archiveucp_poolsdp_msg_pool
- 进一步回退到关系类基础表
cross_chain_msg_acldomain_certtpbtaplugin_server_objectsptc_service
这意味着即使生命周期宽表尚未完成灌数,系统仍可展示基础拓扑、部分消息追踪结果和热力分析数据。
当前项目以 本地链真实数据接入 为主,前端默认面向真实后端接口运行;后续接入系统和其他测试链时,无需调整前端整体使用方式。
Java 17Maven 3.9+Node.js 18+npmMySQL 8.x- 已存在的
relayer数据库
如需启用生命周期追踪和热力分析增强能力,先执行:
mysql -h127.0.0.1 -P3306 -uroot -p relayer < sql/relayer_demo_analytics.sqlcd backend
export RELAYER_DB_HOST=127.0.0.1
export RELAYER_DB_PORT=3306
export RELAYER_DB_NAME=relayer
export RELAYER_DB_USER=root
export RELAYER_DB_PASSWORD=你的数据库密码
mvn spring-boot:run默认后端地址:http://127.0.0.1:18081
cd frontend
npm install
npm run dev:live前端通过 Vite 代理将 /api 请求转发到 VITE_BACKEND_TARGET,默认目标为 http://127.0.0.1:18081。
后端配置文件位于 backend/src/main/resources/application.yml。
| 变量 | 默认值 | 说明 |
|---|---|---|
SERVER_PORT |
18081 |
后端服务端口 |
RELAYER_DB_HOST |
127.0.0.1 |
MySQL 主机地址 |
RELAYER_DB_PORT |
3306 |
MySQL 端口 |
RELAYER_DB_NAME |
relayer |
数据库名称 |
RELAYER_DB_USER |
root |
数据库用户名 |
RELAYER_DB_PASSWORD |
change_me |
数据库密码 |
RELAYER_ADMIN_HOST |
127.0.0.1 |
Relayer Admin 地址 |
RELAYER_ADMIN_PORT |
8088 |
Relayer Admin 端口 |
ETHEREUM_RPC |
127.0.0.1:32002 |
默认链 RPC 地址 |
- 当前默认使用
frontend/.env.live - 前端通过
/api代理请求真实后端接口 - 当前适用于本地链真实数据接入场景
- 后续接入其他测试链时,可继续沿用同一套前端刷新与展示逻辑
常用命令:
cd frontend
npm run dev:live
npm run build系统当前采用 前端定时轮询后端接口 的方式刷新页面数据,适合当前本地链联调以及后续接入其他测试链的使用场景。
- 前端通过
/api代理请求真实后端接口 - 后端运行后,前端会自动周期性拉取最新数据
- 当前无需引入 WebSocket 或消息推送机制
- 后续接入其他测试链时,无需修改前端刷新机制,只需保证后端接口持续返回最新状态
当前页面刷新频率如下:
- 全局概览:每
4秒刷新一次 - 消息追踪:每
3秒刷新一次 - 统计热力图:每
10秒刷新一次
因此,在系统运行期间,只要后端接口数据发生变化,前端页面会自动更新,无需手动刷新浏览器。
用于查看系统整体状态,主要包括:
- 物理链与逻辑域名接入数量
- 插件服务、PTC、Relayer 运行状态
- 域名与物理链拓扑关系
- 消息总量、成功率、处理中数量、平均时延
- 最新消息流转记录
用于查看单条消息当前所处阶段,支持:
- 按
messageId、ucpId、messageKey查询 - 展示源链发起、Relayer 捕获、统一证明构建、PTC 验证、目标链执行等阶段
- 当生命周期宽表为空时,自动回退到归档表和 ACL 信息生成追踪结果
用于分析跨链路径分布,支持:
- 链级、域名级、应用级视图
- 时间范围筛选
- 自环过滤
- 成功率、平均时延、最近消息时间和 Sankey 流向展示
sql/relayer_demo_analytics.sql:创建生命周期宽表、阶段表、小时统计表和原始链事件表scripts/explore_relayer_schema.py:扫描本地relayer数据库并输出表结构报告与字段映射建议out/schema_report.md:当前数据库结构探索报告
当前展示能力会受到真实库数据完整度影响,主要包括:
crosschain_channel为空时,无法完整展示通道已建成状态bta与tpbta数据不足时,锚点和 lane 绑定信息会缺失ucp_pool、sdp_msg_pool、auth_msg_pool数据不足时,实时链路细节会减少- 生命周期宽表为空时,系统会自动回退,但精细时延和阶段信息会相应减少
对于首次接触本项目的成员,建议按以下顺序阅读:
- 阅读本
README - 启动前后端联调环境,观察真实数据刷新效果
- 查看
frontend/src/pages/下的页面实现 - 查看
backend/src/main/java/com/demo/relayer/controller/下的接口入口 - 结合
backend/src/main/resources/mapper/xml/理解真实数据来源