[TOC]
AIP-57 - 区块输出大小限制和冲突感知的区块 Gas 限制
一、概述
本项工作是基于 AIP-33 进行的扩展,目的在于提高在各种工作负荷条件下延迟的可预测性。它包括:
- 添加区块输出限制,当达到预定义的输出大小时结束一个区块。
- 将冲突感知(conflict-awareness)添加到区块 Gas 限制中。
因此,有关区块限制是否已达到的信息将无法在链上推断出来,所以我们将引入一种新的StateCheckpoint事务类型(即用BlockEpilogue事务替换它),其中将包含额外的信息。
1. 目标
优化单个区块的执行过程,使其有一个更可预测且范围更明确的预期时间(设置在 250ms 至 750ms 之间),并确保输出具有界限(这样 VFN/PFN 的状态同步就能够以可预测的方式进行)。
二、动机
若单个区块的处理时间不定,则在此期间发起的交易所遭遇的延迟也将难以预测,可能极为漫长。因此,需要严格控制单个区块的执行时间在一秒以内,以确保从发起到完成整个交易过程(end to end)的延迟是可预测的。
三、影响
这应该确保我们在任何工作负荷条件下,都能维持一个可预见且稳定的延迟。(如果链条过载,低费用的交易可能会遇到延迟,而高费用的交易则应当能够正常处理。)
一旦启用了相关功能,StateCheckpoint 交易将被 BlockEpilogue 所取代。BlockEpilogue 设计了灵活的有效载荷,并将包含更多关于区块结束情况的详细信息。
四、替代解决方案
原文缺失
五、规范
它包括:
- 设置区块(block)输出大小的上限,并在输出达到预设大小时终止区块。这样做可以确保状态同步过程中所需的带宽(bandwidth)符合预期,进而保证下游节点——例如 VFNs、PFNs、索引器等——能维持一个稳定且较低的延迟。
- 改进区块 Gas 限制:
- 引入对交易冲突的感知机制。目前,每笔交易所需的 Gas 与其他交易无关,但它的执行速度却受到交易之间相互影响的限制。为了保证区块执行时间的可预测性,每笔交易所消耗的 Gas 将要乘以一个“冲突系数”。
- 引入可灵活调整的计算和 I/O 系数,这样可以提高系统的适应性,同时减少对 Gas 费率表的频繁修改需求。
因此,有关区块限制是否已达到的信息将无法在链上推断出来,因此我们将引入一种新的 StateCheckpoint 事务类型(即用BlockEpilogue 事务替换它),其中将包含额外的信息
因此,链上的参与者无法判断区块限制是否已经达到。为此,我们计划推出一种新的交易类型 —— BlockEpilogue ,即 StateCheckpoint 交易将会被 BlockEpilogue 交易取代。新的 BlockEpilogue 交易会包含更多额外的信息。
六、参考实现
七、测试(可选)
准备各种工作负载,并运行实际网络的锻造(forge)测试,目的是测量延迟和吞吐量的变化。
八、风险和缺点
这对激励机制没有帮助 - 因为这种计算是在现有计算之上进行的,不会改交易需要收取的 Gas 费。除此之外,应该跟进 Gas 计划的改进,以公平地向用户收取使用链的费用。
九、未来潜力
原文缺失
十、时间表
将包含在1.9版本中
十一、安全性考虑
本次 AIP 的更新仅仅改变了区块结束的条件,目的是为了更精确地控制每个区块的执行时间。此项更新并不会影响交易的具体执行过程。
因此,对安全性的唯一影响将是:
- 如果人们可以通过支付低 Gas 费用而填满区块,这可能导致 “服务拒绝攻击 (denial of service)“。根据我们的测试,已经存在某些工作负载通过支付极少的费用来进行这样的操作,此 AIP 的目的就是要解决这一问题。只要这个 AIP 能够在我们用于测试的广泛工作负载中正确执行,我相信它不会增加其他工作负载出现问题的风险。至于 Gas 市场,它仍将正常运作,只不过可能会因此促使人们为使用区块链资源支付更高的费用,虽然这可能在一定程度上是不公平的。
- 如果在计算那些与执行限制进行比较的数值时出现 bug,并且节点验证者之间不能达成一致,这可能会导致系统暂停运行。这个 AIP 新增了两项检查机制:一是对输出大小的估计值,二是基于读/写操作集合的冲突系数。我们在 pull request (拉取请求) 中包含了正确性验证测试,如果系统因此暂停,forge 的测试运行就会被判定为失败。
- 这里有一个需要特别注意的复杂技术细节:我们正在改变 StateCheckpoint 的创建位置,并且(若设置了一个特定的标志)将用 BlockPrologue 来取代 StateCheckpoint,BlockPrologue 附加了一些额外信息。理论上,用户的操作不会影响到这一过程,所以这里主要关注的是防止系统因错误而停止运作的风险。我们进行的测试以及重放验证所取得的结果,应该足以让我们确信这项变动能够正确执行。