[TOC]
AIP-7 - 交易手续费分配
一、概述
目前,所有的交易手续费都会在 Aptos 上销毁。这种设计选择并不能激励验证器优先处理价值最高的交易,也不能使用更大的交易块(block),导致系统吞吐量降低。例如,一个验证器可以提交一个空块仍然获得奖励。我们希望通过将交易手续费分配给验证器来解决这个问题。具体来说,我们希望在每个块中收集交易手续费,并存储它们,然后在每个时期结束时重新分配。
二、动机
如果将交易费用重新分配给验证者,我们将能够同时实现以下两个目标:
- 能够保证价值高的交易得到优先处理,
- 增加系统的吞吐量,从而充分利用并行执行带来的性能优势。
三、提案
开启对验证者的交易费用收集机制,并按时期定期分配这些费用。
四、原理
为了保持系统的可配置性,我们有一个在链上的参数,它决定了多少比例的交易手续费应该被销毁(称为burn_percentage)。这样,将100%的交易手续费销毁将使系统具有与当前相同的行为。销毁0%将意味着所有的交易手续费都被收集并分配给验证器。决定要销毁多少、要收集多少的公式如下:
为了使系统可根据需要调整设置,我们设定了一个区块链中的参数(burn_percentage),用来决定应销毁(burnt)交易费用的比例。通过这种方式,若销毁(burning)比例设为100%,系统将维持当前的运作方式不变。若燃烧比例设为0%,则意味着所有交易费用都会被集中并分配给验证者。具体决定销毁和分配比例的公式如下文所示:
burnt_amount = burn_percentage * transaction_fee / 100
deposit_amount = transaction_fee - burnt_amount
根据与社区的讨论,初始销毁百分比可以被设置,然后通过治理提案进行升级。虽然看起来 0% 的销毁可能是一个合理的初始参数值,但必须考虑到对通货膨胀等 token 经济学(tokenomics)的影响。
五、备选方案
备选方案一:每笔交易分配费用
请记住,我们的目的是将交易费用分配给创建这个区块的验证者。如果按照每笔交易来分配,将会带来许多不利之处:
- 在每一笔交易中更新验证者账户余额会给并行处理引擎造成重大负担,因为这需要进行连续的读取、修改和写入操作,从而形成了相互依赖的关系。虽然理论上可以通过制定一个总结账户变动的“余额聚合器”来解决这个问题,但遗憾的是,这项功能在现有系统中尚无法实现。
- 验证者在每个时期(epoch)结束时获取投票奖励,并且智能合约的逻辑也是基于这个规则。如果验证者的余额随每笔交易而变动,那么这种现有逻辑就会被打破,进而导致与现行智能合约的不兼容问题。
备选方案二:每个区块分配费用
为了克服替代方案一中提到的并行处理中的瓶颈问题,我们可以将交易费用累加到一个特殊的聚合余额中。通过这种方式,区块中的每笔交易将各自的手续费添加到该聚合值中,以避免避免并行执行中的读取-修改-写入冲突。在区块完成后,这个累积的总金额便会被分配给那位负责提出该区块的验证者。
请注意,尽管这个方法解决了首个替代方案提到的一部分问题,但它并未涉及该方案的第二个显著缺陷。正是这个未被解决的问题催生了我们进一步的提案。
六、实施
草案 PR:https://github.com/aptos-labs/aptos-core/pull/4967
算法概述
-
在处理区块中的单一交易时,事务的结束阶段会将手续费转入系统账户中的一个专用聚合型硬币(Coin)中。与标准硬币相比,修改聚合型硬币的值在并行处理过程中不会造成冲突。聚合型硬币可以被“耗尽”(drained)以生成标准硬币。
-
在下一个区块的第一个交易(即
BlockMetadata)中,我们以以下方式处理收集到的费用:
- 将聚合型硬币耗尽,以便获得上一个区块中所有交易手续费的总额。正如之前提到的,耗尽操作会产生一个标准硬币。
- 决定应该燃烧多少费用和以后分配多少(请参阅原理中的公式)。
- 确定费用的哪一部分用于销毁,哪一部分将进行后续分配(具体分配比例请参照原理部分的公式说明)。
- 将那些不计划用于分配的金额进行销毁处理。
- 把应当分配的金额存入系统账户中的一个专用表格里。这个过程实质上就是创建(或是更新)一个映射,将提案者的地址与尚未分配的手续费联系起来。
- 记录下这个区块提案者的地址,这样在处理下一个区块时,我们就可以复用之前(2)中手续费处理程序。
- 在当前时期结束时,分配收集到的费用。对于每个待处理的活动和非活动验证器,获取收集到的费用并将其存入验证器的质押池。
注:在当前实现中,对治理提案的费用只是简单地销毁(burnt)。这一做法还在讨论之中,未来或许会有所变动。
七、风险和缺点
去中心化 - 没有影响或更改。
性能 - 使用聚合器避免了并行执行中的冲突。
安全性 - 添加的代码将经过严格的测试和审计。
工具 - 没有影响或更改。
八、未来潜力
这项建议的改动使我们能够控制交易费中有多少比例是被收集起来的,以及有多少比例是被销毁的。将来,这个比例可以通过提交治理提案来调整。
九、时间表
我们正在通过端到端(e2e)Move 测试和烟雾测试(smoke test)来检测这项变动。如果一切顺利,它应该很快就会在测试网络中启用。