一、概述
对触发不变性违规错误的交易进行收费,而不是丢弃它们。
二、动机
不变性违规错误 是在 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 测试部分。 其中使用了一个故障注入来确保这个改变受到功能标志的保护。