数据模型
BlockDB 提供三类逻辑表:普通表,以及业务抽象层的 Block State 表、Block Event 表 与 Time 表。它们面向不同的数据形态,服务于不同的业务场景。三类逻辑表概览
普通表(Table)
普通表直接对应一张物理在线表(1:1),用于存储非链上的业务数据,或链上数据处理后的高价值数据。它提供行级、语义化的读写与扫描 API。Block State 表
作用:维护链上实体的最新状态,以及任意历史高度的状态。每当新高度的数据进入,BlockDB 会保存该高度的历史快照,并异步更新最新状态表。 业务场景示例:- 用户地址的代币余额(Balance)。
- 智能合约的当前状态变量。
- NFT 的当前持有人。
0xabc... 在区块高度 18000000 时的 USDC 余额”——Block State 表能按区块时刻返回任意历史高度的状态。
Block Event 表
作用:维护链上发生的每一条事件,例如token_transfer 转账事件。事件在特定高度发生后就是唯一、不可变的,只有追加,没有更新。
业务场景示例:
- 代币转账流水(token_transfer)。
- 合约抛出的事件。
- 交易所的每笔撮合记录。
transfer 事件,即可实时统计每一笔转账的 from / to / value。
Time 表
作用:维护某对象随现实世界(物理挂钟)时间变化的状态序列,例如 token 的美元价格表。 业务场景示例:- token 每分钟的美元价格。
- 每分钟的 TVL 快照。
- 任何随物理时间变化的指标。
Block State 表与 Block Event 表的模型与链上语义详见 Block State 与 Block Event 表;Time 表详见 Time 表。
影子表机制
业务抽象表本身不直接对应一张物理表。创建一张业务抽象表时,BlockDB 会自动在存储层创建多张协作的普通表(影子表),按职责分离维护不同维度的数据:子表名使用下划线前缀:
<业务抽象名>._archive / _height / _bundle。_height表:记录height_start/height_end闭区间,标识哪些高度区间已被连续处理,也用于判断共识高度。排查数据是否断档时使用,写代码几乎用不到。_archive表:保存历史快照。与源表结构一致,但id字段变为original_id,并新增新的id字段。_bundle表:维护每 1000 个 block 的数据 hash,主要供 S3 同步等离线系统使用。
GetRow / BatchGetRows / FilterRows)直接访问,方便排查数据或做专业模式读取。但禁止使用普通表写入 API 直接修改派生表——所有写入必须通过业务抽象表自身的区块 / 时间语义写接口完成。
Block State 影子表示意

Block Event 影子表示意

_height 进度表示意
