BNB New L1:排序很快,结果很慢

SHARE

目录

New L1 是什么

BNB Chain 正在做一条新的 EVM L1,面向对延迟敏感的场景:交易、支付和 AI agent。它 200 ms 出块,没有全局内存池,按声明的 gas limit 收费,并原生支持账户抽象和隐私池。

它还很早期。目前只有内部 devnet:没有公开 RPC、测试网和主网,链 ID 也没定,公开的只有官方文档。下面的内容都来自这些文档,核对日期是 2026-10-26。

一句话概括它的设计: 共识来自 BSC,执行模型来自 Monad,账户抽象来自 Tempo。 前两者分别决定了交易多快落地、大家多快知道交易的结果。这其实是两个不同的数字。

共识:BSC 的 Parlia,不是 MonadBFT

New L1 沿用了 BNB Smart Chain 的 Parlia(PoSA)共识,加上 BLS 快速最终性。

  • 最多 64 个验证者按顺序轮流出块,每人连出 16 块(每轮 3.2 s)。
  • 验证者对链头块签 BLS 票。收齐 2/3 的票后,下一个出块者把它们聚合成一个证明,写进自己的块头。
  • 通常一个块在下一块时 justified,再下一块时 finalized,200 ms 出块下约 0.5 s。
  • 投票只针对块里交易的 顺序 ,不针对执行结果。

所以它是一个更快的 BSC,而不是 Monad。MonadBFT 是 HotStuff 系的流水线 BFT:每一轮按质押换 leader,两轮(600 ms)最终。Parlia 则是一个出块者连续出一段块,再通过单独的投票步骤做最终性。

BNB 说 Parlia 只是当前的默认实现。它正在评估 Minimmit 作为「共识 2.0」,这是 Commonware 提出的两轮最终性 BFT 协议。Tempo 用的 Simplex 共识也出自 Commonware,所以如果换过去,New L1 的共识会更接近 Tempo 这一系。

  New L1 BSC Monad Tempo
共识 Parlia PoSA + BLS Parlia PoSA + BLS MonadBFT Simplex BFT
出块者 轮值,每人连出 16 块 轮值 每轮换 leader VRF 随机选 leader
出块间隔 200 ms 0.45 s 最短 300 ms 约 600 ms
最终性 约 0.5 s 约 2 块内 600 ms 确定性,亚秒级
执行 异步,滞后 D 块 同步 异步,滞后 3 块 —
计费 按声明的 limit 按实际用量 按声明的 limit 用稳定币支付

执行:Monad 的做法

执行这一侧,New L1 和 Monad 几乎一样:

  • 共识只排序,不执行交易。
  • EVM 在之后执行第 N 块,结果(state root、回执、日志)写进第 N+D 块的块头。
  • D 在 1 到治理设定的上限之间自适应,每块最多变化 1:链空闲时接近 1,负载高时变大。BNB 没有公布上限。Monad 的 D 固定为 3。
  • 出块者排序时不知道交易实际会用多少 gas,所以你付的是 tip × gas_limit ,和 EVM 实际消耗无关,也不退款。Monad 按 limit 收费也是这个原因。
  • 准入时检查的是余额减去你所有在途交易的花费,相当于 Monad 的 reserve balance 规则。

好处是吞吐量:出块从不等待执行,区块 gas 上限也不用迁就最慢验证者的执行速度。

一笔交易的时间线

一笔进入第 N 块的交易会经历这些阶段:

阶段 发生在 距第 N 块的时间
preconfirmed 出块者流出包含它的签名子块 约 20 ms,可撤销
ordered 第 N 块被导入 块内
order-finalized 第 N+2 块 约 0.5 s
executed 你的节点执行完第 N 块 落后最新块 D 个块
execution-finalized 第 N+D 块在第 N+D+2 块时最终 约 (D + 2) × 200 ms

最后一行是我按文档设计推算的,不是官方数字:D 为 1 时约 0.6 s,D 为 3 时约 1 s。负载越高越长,而且没有公开的上限。

顺序最终很快,慢的是结果。

t+0 落地是可能的

如果你的策略是对链上事件做反应,关键问题是你的交易能不能和触发它的交易落在同一个块里。在 Solana 上这很常见:机器人读 leader 的 shred,在同一个 slot 内就能上链。

在 New L1 上,落地只需要被排序,而排序只做几项轻量检查:签名、nonce 和上面那个余额检查,不需要等待执行。所以 t+0 是可能的,前提是你在同一个 200 ms 块内看到触发交易。这取决于你从哪里看:

  • 标准 RPC ( eth_getLogs 、回执、 latest )返回的是已执行的状态,比最新排序的块落后 D。靠它的机器人最早也只能在 t+D 落地,比 BSC 还慢。
  • 子块流 ( newl1_subscribeSubBlocks )在出块者打包触发交易后约 20 ms 就能看到它。机器人如果直接根据触发交易的 calldata 做决定,不等状态,再把交易直接发给当前出块者,就能紧跟在它后面落地。子块只追加不重排,而且同一个出块者会连续出块 3.2 s,目标不会变。

没有公开内存池,所以这一切都要经过出块者。

但还没有人能读到结果

t+0 落地不代表别人在 t+0 就能 用 这笔交易。它的回执、日志和它改变的余额,要等执行完、也就是 D 个块之后,才能通过 RPC 看到。等回执的钱包会比链上实际确定结果晚几百毫秒才显示成功。想先看到买入成功再卖出的机器人,也得等。

有两点能缓解:

  1. 顺序确定时,结果就确定了。 执行是确定性的,第 N 块的顺序一旦最终,结果就不会再变,只是还没公布。自己跑高速执行器的人可以立刻知道结果,只有依赖公共 RPC 的客户端要等 D 个块。
  2. 可以不等结果直接连发。 发后续交易不需要先拿到前一笔的结果。排序保证它在前一笔之后执行,前一笔失败的话它会回滚。代价是:回滚的交易照样付全部 gas limit。另外,前一笔交易会收到的 BNB 不能用来付下一笔的 gas,因为准入检查只扣在途花费、不计在途收入。

所以这个设计造成了不对称:自己跑执行的玩家在 t+0 就能看到结果,用标准 RPC 的人要晚 D 个块。Solana 和 BSC 的出块者在打包时就执行交易,交易一上链结果就有了。Monad 和 New L1 有同样的差距。

对开发者意味着什么

  • 钱包: 预确认或已排序都不代表成功。把「已打包」和「已成功」分开显示,资金要等执行最终后再算到账。
  • 机器人: 盯子块,不要盯日志。需要比 RPC 更早拿到结果,就自己跑执行。gas limit 要设紧,多留的部分会被全额收费。
  • 从 BSC 迁移的合约: block.number 每秒前进约 5 次, block.timestamp 大约连续 5 个块相同, block.prevrandao 是时间戳的毫秒部分,不是随机数。
  • 延迟测量: 要报两个数。一个是交易什么时候落地(按排序头算 t+N),一个是结果什么时候可见(按执行头算 t+N,或者回执时间)。一个在 t+0 落地的产品,对只看 RPC 的用户来说仍可能显得慢。

账户抽象来自 Tempo

New L1 的原生账户抽象交易类型是 0x76 ,字段和 Tempo 一样: calls 、 nonce_key 、 key_authorization 、 fee_payer_signature ,以及 valid_after / valid_before 。支持的签名方式也相同(secp256k1、P256、WebAuthn),预编译同名( AccountKeychain 和 SignatureVerifier )。区别是:New L1 强制 nonce_key 为 0,gas 用 BNB 而不是稳定币支付,预编译地址不同,并且去掉了 7702 式委托。详见官方的限制表。

未解答的问题

  • 真实负载下 D 会多大。它决定了结果晚多久,而 BNB 还没公布上限。
  • 吞吐量。文档没有给出 TPS 或每秒 gas,并行执行也还在设计中。
  • 出块者在一个块里最晚还接收多晚的交易,以及到出块者的网络延迟。这决定了 t+0 是真能做到,还是只在理论上可行。
  • 出块者能看到订单流,怎么防止它抢跑。文档只说没有全局内存池,没有说明对出块者的约束。

这些在有公开网络之前都没法测。

参考资料