latest、safe、finalized有何区别? 图 1
latest、safe、finalized有何区别? · 图 1

同一时刻查询latest、safe和finalized,得到的区块高度往往不同。越靠近链头越新,越靠近最终性越稳定。标签不是三个“确认数预设”,而是执行层把权益证明共识状态暴露给应用的不同视图。选择时要先回答:业务能承受多大延迟,又能承受多大回滚。

标签位置重组可能性常见用途
latest节点当前规范链头正常短重组可能发生即时界面、待确认监控
safe已justified的安全头需要严重延迟或攻击较稳索引、业务预确认
finalized已最终确定检查点及之前回滚代价极高结算、不可逆业务门槛

latest适合快,但要会回滚

读latest余额或日志能最快反映新交易,可是新区块可能被竞争链替换。索引器应按blockHash保存数据,检测parentHash变化并撤销孤块事件;前端则应把latest状态标成待确认,不能立刻触发不可逆的站外发货。

三种标签对应三层保证

  1. latest指节点当前链头,通常最及时但也最容易受短重组影响。
  2. safe指信标链已经justified的安全链头,在正常网络条件下预期最终进入规范链,但仍不是最终性。
  3. finalized指已经完成共识最终性的区块;回滚它需要严重的共识破坏并导致大量质押被罚没。

safe是中间保证而非最终性

safe head已在信标链获得justification,在正常网络条件下预期会进入最终链。它比固定等待几个执行区块更直接表达共识状态,但仍保留极端回滚可能。应用要处理节点暂不支持标签、返回null或safe高度暂时不前进。

finalized也需要灾难预案

“12个确认就等于finalized”并不严格;确认数是从链头向后数,finalized来自共识检查点。另一方面,finalized也不是数学上永不改变,客户端错误或灾难级社会共识事件仍需运营预案,只是它提供了协议级最强常规保证。

finalized适合高价值结算

finalized区块已经经过权益证明最终性。制造冲突最终性需要大规模共识违规并触发质押罚没,因此风险显著低于链头。代价是数据更旧;交易所可先在safe阶段显示入账待用,在finalized后开放不可逆提现或跨系统结算。

日志索引回滚可结合eth_getLogs与removed处理;交易状态查看回执字段,账户证明应固定区块并参考eth_getProof

索引器的区块标签策略

  1. 为每个业务动作定义所需标签
  2. 同时记录blockNumber和blockHash
  3. 监控标签高度倒退或停止推进
  4. RPC不支持标签时明确降级策略
  5. 不要用手机时间或固定秒数替代共识状态