返回架构笔记
Arch Day 166

Arch Day 166: 系统设计 — 区块链索引器与价格预言机

索引器解决"如何高效查询链上历史数据",预言机解决"如何将链下数据可信地带到链上"——两者都是Web3基础设施的关键组件。

2026-09-12
第七阶段 - Web3专题深度
系统设计TheGraph索引器Chainlink预言机事件驱动

日期: 2026-09-12 (Day 166) 阶段: 第七阶段 - Web3专题深度 标签: #系统设计 #TheGraph #索引器 #Chainlink #预言机 #事件驱动


核心概念

一句话定义

索引器解决"如何高效查询链上历史数据",预言机解决"如何将链下数据可信地带到链上"——两者都是Web3基础设施的关键组件。


系统设计A:区块链索引器

架构

Blockchain Node (RPC)
    ↓ 轮询新区块
Block Processor
    ↓ 解码交易+日志
Event Decoder (ABI解析)
    ↓ 结构化数据
Database (Postgres/ClickHouse)
    ↓
GraphQL/REST API → DApp

关键设计决策

决策The Graph方案Goldsky方案
查询接口GraphQL(Subgraph)GraphQL兼容+Mirror
部署去中心化网络托管(亚秒延迟)
Reorg处理Subgraph handler回滚自动检测重新索引
延迟秒级亚秒级

Reorg处理(关键!)

检测到reorg:
1. 标记受影响区块的数据为"pending"
2. 重新索引分叉后的正确区块
3. 删除被回滚的数据
4. 通知下游消费者数据已更新

系统设计B:价格预言机

Chainlink架构

多个数据源(交易所API)
    ↓
去中心化预言机网络(多个独立节点)
    ↓ 各自获取价格
聚合合约(取中位数/加权平均)
    ↓
Price Feed合约 → DeFi协议读取

关键Trade-offs

维度ChainlinkPythRedStone
更新频率偏差阈值触发每400ms按需(pull)
成本高(每次更新上链)最低(用户付费)
延迟秒-分钟亚秒按需
适用借贷/稳定币衍生品/高频成本敏感

面试题

问题:如何处理预言机被操纵的风险?

回答:多层防御——1) 多数据源聚合(取中位数而非平均值);2) 偏差检测(价格偏离>X%触发熔断);3) TWAP(时间加权平均价格)防闪电贷攻击;4) 断路器(价格异常时暂停协议);5) 多预言机冗余(Chainlink+Pyth双重验证)。