每张 Block Event / Block State 表都有一个 start height:低于这个高度的数据,平台会当成「不存在」处理,不是「还没写」。
这个区别很重要。如果你尝试往低于 start height 的高度写入数据,或者查询低于它的高度,得到的不是”空结果”,而是会被平台拦下来——因为按定义那个高度对这张表来说压根不存在。
为什么需要这个设置
大多数业务表并不关心链的创世块——你可能只关心某个合约部署之后的数据。start height 让你明确声明”这张表的数据从哪里开始有意义”,平台以此为界,拒绝任何声称”更早”的写入或查询,避免出现语义不清的脏数据。
什么时候能改
start height 在建表时可以设置,只有在表还是空的(还没写过任何数据)期间可以修改。一旦表里有了数据,就不能再改了——改动起点会让已有数据的语义变得不确定。
实际影响的地方
- 写入:往低于 start height 的高度写数据会被拒绝,不管走的是哪种写入路径。
- 回填:
backfill(block_start=...) 传的起点不能低于表的 start height,否则会直接报错,不会提交任何任务。
- 查询:查低于 start height 的高度,平台按”不存在”处理,不是返回空。
建表时就想清楚这张表真正需要的数据起点在哪,比事后调整成本低得多。