Files
wtf-indexer/ARCHITECTURE.md

74 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# WTFX Indexer Architecture & Principles (索引器架构与核心铁律)
> **定位**:Indexer 不是数据库搬运工,而是 **“区块链事实 → WTFX 可查询状态” 的确定性投影系统**。
> **运行形态**:第一阶段单进程运行,但严格按照 **Fetch -> Decode -> Process -> Project** 四层边界设计,支持**零停机热追高、全量可重放、幂等去重、防链重组 (Reorg)**。
---
## 1. 五大核心架构铁律 (Non-Negotiable Principles)
1. **【三层数据流转:Raw -> Normalized -> Projection】**
- **Raw Layer**:原样保存链上原始日志 (`raw_logs`, `raw_blocks`)。
- **Normalized Layer**:解析为跨链统一的标准事件字典 (`chain_events`: `ORDER_FILLED`, `MARKET_CREATED`, `SETTLEMENT`)。
- **Projection Layer**:生成业务最终可查询的只读视图 (`markets`, `trades`, `positions`, `token_balances`)。
2. **【绝对可重放性 (Replayability)】**
- 当业务投影算法调整或修复时,**严禁手工修数据库**;
- 必须支持:清空 Projection 视图 $
ightarrow$ 从指定 Checkpoint 或 Block 0 重新重放 Normalized Events $
ightarrow$ 确定性重新生成 Projection。
3. **【幂等去重保证 (Idempotency)】**
- 每个事件唯一凭证为 `(chain_id, tx_hash, log_index)`
- 数据库唯一约束拦截重复写入,重复消费或追高扫描时无脑跳过已存在事件。
4. **【安全检查点与防重组 (Checkpoint & Reorg Protection)】**
- 维护持久化 `indexer_state` 记录安全落盘水位;
- 区分 `CONFIRMED`(快速响应)与 `FINALIZED`(安全落盘),为最新区块预留回退重测窗口。
5. **【不直接越权控制业务资金】**
- Indexer 只负责**“发现链上发生了什么”**,严禁直接在 Indexer 内部修改用户余额;
- 资金结算与账本生成交由 Backend 的 Settlement Service 处理。
---
## 2. 目录结构全景
```
wtf-indexer/
├── src/
│ ├── main.py # 索引器服务入口与管道调度器 (Pipeline Runner)
│ ├── config.py # RPC、链配置、数据库与扫描区间配置
│ │
│ ├── core/ # 核心抽象与不可变数据模型
│ │ ├── events.py # 规范化事件定义 (Normalized Event Schema)
│ │ ├── checkpoint.py # Checkpoint 水位管理器与 Reorg 检测
│ │ └── models.py # 基础类型与接口抽象
│ │
│ ├── ingestion/ # 链上数据拉取层 (Fetcher)
│ │ ├── fetcher.py # RPC 批量抓块与重试调度 (Batch eth_getLogs)
│ │ └── queue.py # 内存/Redis 缓冲队列
│ │
│ ├── decoding/ # 事件解析层 (Decoder)
│ │ ├── evm.py # EVM ABI 日志解码器 (WTFMarketV2, Controller)
│ │ └── base.py # 解码器抽象基类
│ │
│ ├── processors/ # 业务领域处理器 (Processor)
│ │ ├── market.py # 市场创建/状态流转处理
│ │ ├── trading.py # 订单成交与代币铸造/赎回处理
│ │ └── settlement.py # 到期裁决与兑付结算处理
│ │
│ ├── projections/ # 确定性投影层 (Projection Views)
│ │ ├── markets.py # 市场聚合状态表投影
│ │ ├── trades.py # 逐笔交易记录投影
│ │ └── positions.py # 用户持仓与成本投影
│ │
│ ├── chains/ # 链适配器 (Chain Adapters)
│ │ ├── robinhood.py # Robinhood Chain (Testnet/Mainnet) 适配器
│ │ └── base.py # 通用 EVM 适配器
│ │
│ └── infrastructure/ # 底层设施
│ ├── postgres.py # 异步 PostgreSQL 连接与投影持久化
│ ├── redis.py # Redis 锁与事件总线广播
│ └── rpc.py # 健壮的多节点 RPC 客户端
├── tests/ # 可重放测试与解码单元测试
├── Dockerfile # 容器构建镜像
├── requirements.txt # 依赖包配置
└── ARCHITECTURE.md # 架构铁律
```