Solana的slot、block、epoch有何区别? 图 1
Solana的slot、block、epoch有何区别? · 图 1

把slot翻成“区块”会制造一连串误差。slot只是某个领导者被安排产块的机会;领导者离线、分叉未被采用或区块无效时,这个slot可能没有可用block。于是absolute slot可以继续增加,block height却只在实际区块产生时增加。epoch再把许多slots组织成调度周期。

四个时间单位不能混写

  1. slot是领导者有机会产出区块的时间段;领导者未产出有效区块时会出现skipped slot,因此slot不必一一对应block。
  2. block height只随实际产生的区块增加,而absoluteSlot包含被跳过的slot,两者不能直接当作同一个计数。
  3. epoch是一组slots,用于领导者调度和质押相关周期;getEpochInfo同时返回epoch、slotIndex、slotsInEpoch、absoluteSlot和blockHeight。

skipped slot为何不是缺失区块

查询某slot得到空结果,可能是该位置没有被规范链接受的block,而不是RPC丢数据。索引器应把“slot存在但无block”与“节点未保留历史”区分,重试后仍需记录skip状态,不能自行把前后区块编号补成连续。

block height不能用slot代替

block height按实际区块计数,因此在发生skips时小于absoluteSlot。Solana交易blockhash的lastValidBlockHeight语义依赖block height;拿当前slot与它比较会错误判断过期。RPC响应应保留字段名称和单位,避免数据库统一叫height。

epoch是调度周期而非固定日历

getEpochInfo会同时返回epoch、slotIndex、slotsInEpoch、absoluteSlot和blockHeight。slotIndex表示当前epoch内部位置。由于实际slot时间和网络状态会波动,不能用“剩余slots乘固定毫秒”承诺精确结束时间,只能做估算并持续刷新。

单位是否每次都产出数据主要用途
slot不一定,可能跳过领导者调度、时间位置
block是,代表实际账本记录交易与区块数据查询
block height只随block增长blockhash有效期等逻辑
epoch包含一组slots质押、领导者计划和周期统计

Solana数据表的字段约束

  1. 保留slot、blockHeight和epoch独立字段
  2. 允许slot查询返回skip
  3. 用lastValidBlockHeight判断交易过期
  4. epoch倒计时标注估算而非承诺
  5. 数据报表写明RPC节点和commitment

slot增长不等于block增长

slot数增加不表示产生了同样数量的block,epoch切换也不代表所有质押状态在一个瞬间完成更新。浏览器显示的时间戳、slot与block height来自不同语义,异常排查要逐项比对,而不是寻找一个“Solana区块号”代替全部。

v0交易账户解析可看Solana ALT,blockhash过期与离线签名参考Durable Nonce,模拟与提交差异可结合交易状态核验