一、概述

对触发不变性违规错误的交易进行收费,而不是丢弃它们。

二、动机

不变性违规错误 是在 Aptos VM 中触发的一种特殊类型的错误,当一些意外的不变性被违反时就会触发。现在,触发这种错误的交易将被标记为丢弃,这可能成为我们网络的 DDoS 矢量,因为它允许用户提交计算而不被收费。

可能触发不变性违规错误的交易的一个例子是违反 Move 虚拟机的偏执类型检查器的交易。

三、影响

用户不应该期望有任何影响,因为这只是一种预防性的改变。我们期望从 Move 编译器编译的交易不会受到这种改变的影响。

四、基本原理

这个 AIP 试图解决的问题是,如果用户找到一种确定性地创建不变性违规错误的方法(这通常表示我们自己的实现中存在一个 bug),用户可以发送一些触发这种行为的交易而不被收费。这将很容易消耗我们的计算资源,并可能导致网络中断。

五、规范

改变自身应该很直接。我们只需要将不变性违规交易的状态从 discard 改为 keep,并确保我们调用了适当的尾缀。我们唯一需要确保的是,我们不会混淆其他错误类别中的错误转换逻辑,因为这可能会导致向后兼容性问题。

六、参考实现

https://github.com/aptos-labs/aptos-core/pull/8213/files

七、风险和缺点

潜在的风险在于节点软件的整体可维护性。若现在我们开始坚持导致不变性违规错误的 TXNs,我们就需要在出现这样的错误时重现 “error” 行为。不过这是可以缓解的,因为我们可以在我们的测试管道中标记这样的交易不再可重现。

八、未来潜力

TIP

原作者注:N/A

九、时间线

1. 建议的实施时间表

我们计划通过这个网址来进行修复: https://github.com/aptos-labs/aptos-core/pull/8213/files.

2. 建议的开发者平台支持时间表

TIP

原作者注:N/A

3. 建议的部署时间表

我们正在寻找在 testnet/ mainnet 上激活这个变更的 1.5 版本。

十、安全考虑

这个改变将在一个功能标志下进行,所以在设置了治理提案之前它不会被激活。

十一、测试(可选)

参考 PR 测试部分。 其中使用了一个故障注入来确保这个改变受到功能标志的保护。