热门话题
#
Bonk 生态迷因币展现强韧势头
#
有消息称 Pump.fun 计划 40 亿估值发币,引发市场猜测
#
Solana 新代币发射平台 Boop.Fun 风头正劲
这是关于异步执行的入门介绍:我们是如何在Monad中实现它的,为什么EIP-7702破坏了它,以及如何修复它。
为了提供背景,异步执行自从共识和执行客户端相互连接以来就已经在Monad中存在。
异步执行允许执行在交互的角度上滞后于共识固定数量的区块。
大多数区块链都有交错的共识。也就是说,执行发生在共识之前,这意味着将执行压缩到一个小于区块时间的时间预算中(其余时间被环绕世界的消息传递占用,即共识)。这本质上限制了系统的每秒燃气量。
L2通过完全不进行共识来规避这个问题。但我们希望拥有一个分布式、去中心化的L1,其性能保持高效。
异步执行让我们通过将执行移出共识的热路径来规避这个问题。相反,共识和执行在并行的泳道中进行。共识在区块2上进行,而区块1的执行则在并行运行。
不过,共识和执行之间仍然需要达成一致。具体来说,这种一致性是:执行只能滞后于共识最多k个区块,因为区块提案包含一个延迟的默克尔根。此外,共识是在对状态的延迟视图(延迟k个区块)下构建区块的。这意味着存在一个风险,即共识将包括一个发送者的交易,而在我们执行时,发送者的余额可能已经为空。
如果协议允许这种情况发生,那将是非常糟糕的,因为这将打开一个拒绝服务(DOS)向量。因此,为了解决这个问题并安全地启用异步执行,Monad共识客户端计算每个交易的最大MON借记为:
MON_spent = gas_bid * gas_limit + value。
共识客户端在扣除每个发送者发送的交易的MON_spent后,保持一个可用账户余额的运行列表。
基于这个运行余额,共识客户端仅在能够确保交易可以支付的情况下才包括交易。
这是一种悲观的区块构建方法,因为它没有考虑任何账户因转账而增加余额的可能性。
让我用一个例子来解释我的意思。
假设Alice的账户有100 MON。然后,以下3个交易被包含在区块1000中:
Tx 1:Alice向Bob发送20 MON,费用为1 MON
Tx 2:Alice花费70 MON购买一个memecoin,费用为1 MON...
热门
排行
收藏