本文深入探讨了Solana交易的优先费用机制和基本费用机制,分析了当前费用机制在高需求情况下的不足之处,并提出了动态基础费用的新机制以改善交易的包容性和用户体验。此外,文章介绍了多维费用市场的概念,以更有效地分配网络资源。
Note: 在这篇文章中,我们假设读者对某些 Solana 特定术语较为熟悉。如果你不熟悉,可以查看 Solana Fees, Part 1: Solana's Fee Mechanism 来获取帮助性术语表。
Solana 交易从用户提交到区块包含的旅程可能是漫长的。即便交易达到了当前的领导者,它仍需与其他交易竞争有限的区块空间。按先到先得的方式包含交易会鼓励垃圾邮件,并可能阻碍普通用户的高价值交易。为了解决这个问题,我们需要一种 费用机制。
优先费用可以解决这个问题,对吧?不幸的是,对大多数用户来说并不能。
想象这样一个场景。你想去镇上的一个 100 个座位的电影院,但这个电影院有一个异常的售票系统:他们不公布票价。相反,你得告诉他们你愿意支付多少。(假设是 \$50。)如果需求量高,至少有 100 个人提交了更高的价格,那你就没戏了。如果需求较低,你就能进了!问题是:即使电影院是空的,你也得支付 \$50。但是,售票体验并没有就此结束。这个系统还有另一个古怪之处:你需要在离家之前告诉电影院你愿意支付的价格。显然,对于想去电影院的普通人来说,要获取电影票是在潜在的困境中。另一方面,富有而成熟的人可以准确估计票价。他们可以在电影院旁边安装摄像机以实时监测客流。他们可以利用这些客流和收集到的历史数据来估计某一天的需求。甚至可以购买直升机,在告诉电影院他们愿意支付的价格后更快地到达电影院。虽然在理论上,有可能有效地使用这个售票系统,但对大多数想去看电影的人来说,体验是糟糕的。当电影院人满为患时,其中许多人可能根本不会尝试前往。
同样,Solana 交易所需的“真实”优先费用也是难以估计的。它波动 很大。在高拥堵的时段,使用近期平均值的钱包可能会高估所需费用,导致用户支付过多以包括交易。(即使有高优先费用,交易仍然可能不会被包含,这与多线程连续区块生产的性质有关。)理论上,优先费用可以优化分配区块空间,但实际上,它们完全失败。幸运的是,有方法来解决这些问题,最终为大多数用户提供更便宜的交易和更好的包含机会。在深入解决方案之前,让我们先检查一下我们尝试分配的 资源 的一些性质:区块空间。
Solana 上的交易由去中心化的验证者网络独立验证和执行。由于这些验证者的计算资源有限,Solana 限制了每个区块可使用的总计算资源,即计算单元(CUs)的数量。当对区块空间的需求超过有限供应时,这一固定资源必须在竞争的交易之间进行分配。
在某些方面,市场可以通过定价来处理区块空间的分配;对提交者具有更高效用的交易愿意支付更高的价格。然而,当用户不知道区块空间的价格时,这个机制就失效了!如上所述,仅通过优先费用对大多数用户来说会导致交易价格难以估计,并且包含交易的保证较低。其他区块链通过实施交易费用机制来解决这个问题(例如, Ethereum 的 EIP-1559,以及 Avalanche 和 Penumbra 的多维费用)。这些费用机制实施了易于估计的基本费用,为网络提供了可预测的“入场费”;这个基本费用大致近似于交易包括的真实价格。
Solana 目前实施了两种费用机制:基本费用和优先费用。我们可以将基本费用视为使用网络的“入场费”,将优先费用视为额外小费,以激励验证者将一项交易包括在内而非另一项交易。Solana 的基本费用是每个签名固定为 5000 lamports(通常每个交易一个)。因此,提交简单转移的用户支付的基本费用与玩计算密集型链上游戏的用户以及试图捕获复杂 MEV 机会的搜索者支付的基本费用相同。因此,当前收取的基本费用并未准确反映交易的资源使用(以及“外部性”,经济学术语),导致可能资源使用不当 区块空间。
在我们的影院例子中,类似固定的基本费用将对买一个座位的和买所有 100 个座位的观众收取相同的价格。
基本费用应该更应该是资源使用的函数。当前这项消耗是通过计算单元(CUs)来度量的,但也可以包括其他资源,比如账户访问。我们想让用户有一个 更可预测 的参与成本,由动态基本费用提供。设定这些费用是困难的。(有很多学术研究, 包括我们自己,试图解决这个问题!)然而,任何因网络拥塞而遭受失败交易的人都知道,如果我们希望网络增长,费用的准确性也很重要。
最终,许多想提交交易的用户并不确定支付多少优先费用。高估这些费用,他们支付过多。低估这些费用,交易可能不会被包含。另一方面,对于基本费用,用户支付的正是当前公布的费用。我们希望基本费用准确反映交易的 真实包含成本。在这里,我们假设所有交易都达到调度程序,但在计算和账户访问的有限区块空间中进行竞争。在高需求期间,交易无法全部被包含。在这篇文章中,我们概述了动态基本费用机制的步骤,它可以帮助疏通网络,并提供更可预测的交易包含。
优先费用也可以被视为对特定机会的支付,这些机会受到其他因素而非资源消耗的限制。例如,如果两个搜索者同时提交了一个交易以清算某个特定贷款,仅其中一笔交易能成功执行;只有区块中的第一笔交易才能成功清算该贷款。因此,优先费用通常支付交易的 排序 而非 仅仅是包含。优先费用用于捕获 MEV 机会的这种用法与本文的主题略有不同——请参阅 Solana 上的 MEV 进行更进一步的讨论。在本文中,我们集中在基本费用和交易的包含上。
在讨论如何设定基本费用之前,我们将考虑一个虚构的区块包含机制:一个全知的网络设计者为每个区块选择交易,以最大化用户的福利(即被包含的交易所带来的总效用或“幸福感”),减去网络的资源消耗成本,受制于交易的约束(例如,智能合约约束、计算限制等)。当然,用户福利在实际中是未知且无法测量的,网络设计者并不构建区块。然而,我们可以将这个问题作为一个精神基准,构建出一个“最优”区块,该区块由达到调度程序的交易组成。我们的目标是设计一个费机制,使其接近这个基准。
尽管这个虚构的区块构建机制是无法解决的,但我们实际上可以想出一个等效机制,可以实施。这个等效机制试图找到 资源价格,以最小化网络福利与用户福利之间的差距。正确设置资源价格使得网络的资源成本恰好与用户和验证者获得的效用平衡,_即便网络对这一效用毫无头绪,用户也从未明确指明过它。_这些价格最终导致的区块平均来说是“最优”的。因此,我们只需专注于设置这些价格。 (有关更多技术细节,请查看 这篇论文。)
那么,我们如何设置价格以激励最优区块,如上所述?一种初步方法可能是根据交易使用的每个计算单元收取固定金额。不幸的是,这种方法行不通。如果需求低,这种按 CU 计的固定价格会导致用户不提交交易,区块可能会接近空白。如果需求高,那么这个固定价格也许会太低,从而对缓解网络拥堵或近似交易包含的真实成本(我们的初始目标!)没有任何帮助。因此,我们需要某种方式根据网络需求动态增加和减少基本费用,同时也要有办法估计这种需求。
下一步是添加一个控制器,根据过去的使用情况调整每个计算单元的费用。例如,如果每个区块有一个使用目标(即,链的“稳态”理想使用),我们可以根据利用率或距离这一目标的偏差来增加或减少基本费用。许多机制,包括 EIP-1559 等,实施了这一想法。我们可能会想在单个区块内动态更新基本费用,利用实时需求,或鼓励每个领导者选择自己的费用更新规则。然而,这些变化会降低基本费用的可预测性,违背了此费用机制的初衷。 机制的选择最终决定用户体验。
幸运的是,Solana 的快速区块时间允许激进的算法来设置基本费用。例如,我们可以在高需求期间快速提高价格(例如,对每个完整区块将价格翻倍),然后在需求减退时缓慢降低价格。由于 Solana 的短区块时间,价格仍会相对快速地下降。直观地,当特定资源“达到上限”时,网络显著收取不到足够费用,获得的信息也更少,从而更难确定最优价格。在实践中,类似类型的算法被用于 TCP 拥塞控制、无线通信的数据链路层 和 市场优化。
先前的讨论考虑了由所有交易共享的一个联合资源:(全局)计算单元。然而,在 Solana 上,状态访问也显著影响交易的资源使用。如果多笔交易访问同一状态,它们无法并行执行,从而降低网络吞吐量。自然,我们希望这些交易支付更高的基本费用,以激励每个账户(本地)费用市场。(谁获得这些费用的问题超出了本文的范围;更详细的信息将在未来提供。)
作为一个具体的例子,让我们考虑一个受欢迎的 NFT 空投。如果没有每个账户的费用市场,这个空投将显著提高所有其他交易的基本费用。通过每个账户的费用,提交交易以领取一项 NFT(并访问该部分状态)的成本可以增加,而其他交易(例如,补充贷款的抵押品)的费用则基本保持不变。这种每个账户的本地费用市场设计正在一个 草案 Solana 改进文档 中考虑。
这些多维费用也可以考虑合约之间的相关性。例如,如果两个 cNFT 交易所交易许多相同的集合,则它们的合约需要访问许多相同的账户。如果某个交易所的特定集合的交易量剧增,那么在另一个交易所的对应集合的基本费用也会增加,因为基础账户的费用在两者都已提升。这样,“本地”的每个账户费用以“全局”的方式适当地相关,而多维费用则防止通过发布多个合约来操纵系统,以使用相同的应用。
另一方面,如果应用程序本身的状态并行化,费用将会更低。这个特性是期望的;并行化提高了吞吐量,因为它允许在底层账户不重叠的情况下将访问同一应用程序的不同交易放在不同线程上(参见Solana 交易的生命周期)。
这些本地、每个账户费用市场的价格控制器可能与计算单元使用的控制器不同。也许对于这些账户,直到状态明显受到争夺时,我们才收取费用,此时费用迅速提高。分析过去的拥堵时期可以帮助我们制定这些设计决策。
上述讨论的选项并不是唯一设置费用的方法。大多数基本费用机制大致遵循相同的迭代程序:在每个区块...
在上述讨论的例子中,我们对步骤 1 中的资源及步骤 2 和 3 中的更新机制进行了不同的选择。将资源利用偏好转化为具体费用更新规则的方法在这篇论文中进行了讨论。
虽然我们的学术工作大多是理论性的,但简单的玩具示例显示,以分开的方式定价资源,如账户,可以提高网络效率,使网络更 robust 于 DoS 攻击或交易类型变化。在本节中,我们强调单维费用与简单的多维费用机制的区别(详见 我们的论文 第 4 节)。
我们首先模拟一个多维费用机制的稳态行为,交易对资源 1 和资源 2 的需求大致相等。在稳态行为下,统一定价会导致资源使用目标的更高偏差(左),较低的效率也会导致更低的吞吐量(右)。
我们还测试了在分布转变下机制的行为:我们在第 10 个区块中添加了 150 笔需要大量资源 2 的交易。这个场景可能会发生在一个 NFT 铸造中。例如,多个维度定价在分布转变时会显著提高吞吐量(左),通过相应地调整资源价格(右)。
查看单独的资源使用,我们发现多维定价(左)促进了短时间内的峰值容量,而统一定价(右)则没有。
区块链具有有限的计算资源。当用户需求高时,这要求以可预测的方式在竞争用户交易之间分配这些有限的资源。此分配应否通过动态交易基本费用隐性完成。
我们提出了一种理论基础的机制来设定此费用,它不仅可以在高需求时期提高网络吞吐量,还可以通过解耦无关交易并提供可预测的交易包含成本,从而改善用户体验。有关该机制的更多细节,请查看 Tarun 在 Breakpoint 的演讲 和 我们的论文!
感谢 Lucas Bruder 和 Jarry Xiao 对草稿的有益评论!
- 原文链接: umbraresearch.xyz/writin...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!