4.5 KiB
4.5 KiB
WTFX Indexer Architecture & Principles (索引器架构与核心铁律)
定位:Indexer 不是数据库搬运工,而是 “区块链事实 → WTFX 可查询状态” 的确定性投影系统。 运行形态:第一阶段单进程运行,但严格按照 Fetch -> Decode -> Process -> Project 四层边界设计,支持零停机热追高、全量可重放、幂等去重、防链重组 (Reorg)。
1. 五大核心架构铁律 (Non-Negotiable Principles)
- 【三层数据流转: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)。
- Raw Layer:原样保存链上原始日志 (
- 【绝对可重放性 (Replayability)】:
- 当业务投影算法调整或修复时,严禁手工修数据库;
- 必须支持:清空 Projection 视图 $ ightarrow$ 从指定 Checkpoint 或 Block 0 重新重放 Normalized Events $ ightarrow$ 确定性重新生成 Projection。
- 【幂等去重保证 (Idempotency)】:
- 每个事件唯一凭证为
(chain_id, tx_hash, log_index); - 数据库唯一约束拦截重复写入,重复消费或追高扫描时无脑跳过已存在事件。
- 每个事件唯一凭证为
- 【安全检查点与防重组 (Checkpoint & Reorg Protection)】:
- 维护持久化
indexer_state记录安全落盘水位; - 区分
CONFIRMED(快速响应)与FINALIZED(安全落盘),为最新区块预留回退重测窗口。
- 维护持久化
- 【不直接越权控制业务资金】:
- 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 # 架构铁律