重组与确认数:等几个区块才安全?
每一个要为充值入账的后端,都必须回答一个问题:一笔交易何时才算 “足够终局”、可以据此行动?把某个区块太早当作终局,一次重组就可能抹掉你已经入账的充值。等太久,又会让用户不耐烦。正确答案是按链而定。
重组究竟为何发生
当两个有效区块几乎在同一高度被产出时,网络会短暂地对链头产生分歧。随着更多区块在其中一条分支上叠加,这条分支胜出,而落败分支里的交易则回到 mempool。这是正常的共识行为,不是攻击。一到两个区块的短重组,在多数链上都会例行发生。
终局性模型各不相同
像 Bitcoin 这样的工作量证明链具有概率性终局:确认越深,被回滚的几率呈指数级下降,但永远不会正好为零。Ethereum 在 Merge 之后,通过大约每两个 epoch(约 13 分钟)一次的检查点引入了经济终局,此后要回滚就得罚没三分之一的质押。L2 则从其定序器(sequencer)加结算层继承了各自的重组面。一个阈值无法适配所有情形。
实用阈值
常见的生产设置:Bitcoin 视金额取 3–6 个确认,Ethereum 取 12–32 个区块(或等待 finalized 标签),高吞吐 EVM 链因出块时间更短而按比例取更多区块。对任何高价值场景,都应以 finalized/justified 标签为准,而非原始的区块计数,这样你才能继承该链自身的终局性保证。
在后端里检测重组
记录你据以入账的那个区块哈希,而不仅仅是高度。每来一个新链头,就往回走,确认各父哈希仍与你记录的一致;一旦不匹配,就意味着发生了重组,你必须通过撤销临时入账来处理它。订阅新链头并对账哈希,比事后去排查一次重复入账要便宜得多。
常见问题
我能不能干脆多等一会儿,图个万无一失?
多等能降低风险,但在概率性链上永远到不了零,而且会损害用户体验。在有终局性标签的链上使用该标签,比单纯地加大区块计数是更好的杠杆。
L2 会重组吗?
会。中心化的定序器可以对未确认交易重新排序或丢弃,而且 L2 还依赖其结算层。请把 L2 的终局性视为定序器与 L1 结算共同作用的结果。
相关
充值、拿密钥、上线。
自助开通。支持加密货币或银行卡。按额度计费——重型原语更贵,简单调用很便宜。
获取 API 密钥