详细描述了 Solana 费用机制的高层理论以及其对链上网络的影响
Solana 的手续费结构旨在在供需非均衡冲击的情况下维持网络的性能。任何区块链上的手续费都是为了防止垃圾信息并激励验证者。在 Solana 上,一些手续费根据网络条件动态调整,使网络能够更准确地定价特定时间的需求。
Solana 的手续费是一个热门话题,其中“本地手续费市场”为 Solana 提供了一定的表达能力,以更准确地为区块空间和特定账户定价。当前的实现离完美还有很大差距,但确实在每个账户的排序上提供了松散的保证。虽然 Solana 仍处于早期阶段,但网络中更多的权益和活动需要更深入地讨论和分析协议变更的一级和二级影响,比如手续费模型的变更。
在本文中,我们将讨论理论中的手续费以及它们在链上的表现。虽然一些人批评 Solana 过于中心化,并且在 QoS 和 Turbine 的权益加权设计方面存在着中心化的力量,但实际上,即使经过多年,这种情况在现实中的表现也存在明显的差异。同样,我们也会全面分析手续费是如何通过链上行为表现出来的。
Solana 的手续费系统由两个组成部分组成:基础手续费(base fee)和优先手续费(priority fee)。广义上,每个手续费组件理想地服务于以下目的:
基础手续费目前设定为每个签名 0.000005 SOL(5,000 lamports),构成了交易成本的基础。这是由一个地址支付的费用,以便获得使用网络资源的权利。这是一个一次性的总费用,无论实际使用多少资源来执行交易(或者交易是否执行),都需要预先支付给网络。Solana 交易会预先请求指定数量的计算单元(CUs),如果超出这个数量,交易将失败。这意味着开发者目前几乎没有任何财务激励来最小化计算单元的请求。
此外,用户可以支付优先手续费以加快其交易被包含在区块中的可能性。这对于用户来说是一种非确定性的保证,以换取优先权。正在进行改进交易确定性的工作,预计 1.18 版本将会有重大的调度器更新。
值得一提的是,投票交易是没有相关的优先手续费的,且与标准交易处理方式不同。
验证者包含具有优先手续费的交易的激励存在于运行时之外。领导者收取包含在其区块中交易的优先手续费的 50%,另外 50% 被销毁。
今天,大多数验证者(80%以上)运行的是未经修改的 Solana Labs 或 Jito-Solana 客户端版本。这意味着这些验证者将“区块生产”外包给了默认的调度器(Solana 上的一些人将“区块排序”称为“区块生产”,而在以太坊上它意味着完全不同的东西)。一些团队修改了客户端代码,并实现了一个更复杂的调度器,可以更好地控制排序流程,使一些人能够通过重新排序或夹在交易中提取 MEV。
当前调度器的实现不能保证具有更高优先手续费的交易将被包含在给定的区块中。相反,它松散地保证具有优先手续费的交易更有可能被包含在给定的区块中。当前调度器的实现启用了 4 个执行核心(额外的 2 个核心保留给投票交易)。
每个线程操作其自己的队列,独立地对数据包进行优先处理,而不知道其他线程正在处理的数据包。每个线程不断地循环从开始到结束,尝试锁定和执行交易。当一线程完成其当前循环时,它将收集更多的数据包并再次启动循环。
因此,你可能正在处理一个位于一个线程队列顶部的高优先级交易,同时,另一个线程可能正在处理涉及相同账户的交易并完成其自己的队列。
当前调度器的具体细节和未来实现将在另一篇文章中探讨。了解优先手续费仅在线程内(在其自己的通道内)起作用,而不在线程间(在通道之间)起作用,就足以理解调度器远非完美,并表现出“抖动”。
虽然手续费是交易是否落地的一个重要因素,但并不是唯一的决定因素。例如,由于 UDP 网络数据包的丢失,交易可能无法落地。在网络活动高峰期,验证者可能会收到比他们能够处理的更多交易。虽然验证者有能力通过 tpu_forwards 机制传递多余的交易,但他们只能处理有限的数据量,每个交易只能被中继有限次数(直到区块哈希过期)。基于权益的服务质量减轻了一些这些问题,为具有更高权益的地址提供了保留带宽,并增加了交易被包含的可能性。
还存在两个不太常见的交易丢失原因。第一个涉及 RPC 池内的差异。RPC 池的一个部分可能领先于其他部分,造成协调问题。例如,如果交易的 recentBlockhash 是从更新更快的部分获取的,然后提交到较慢的部分线程节点,后者可能无法识别更新的区块哈希,结果就会丢弃交易。如果开发者在 sendTransaction 函数中激活了预检查,他们可以在提交时发现这样的问题。
另一个问题涉及临时网络分叉。如果验证者在处理其区块时滞后,交易可能会落在一个不成为规范的少数分叉上。当客户端在其交易中引用一个只存在于这个少数分叉上的 recentBlockhash,然后网络在处理交易之前放弃了该分叉,交易将被丢弃,因为无法再找到区块哈希。
实际上,我们看到的证据表明,尽管优先费用远非完美,但它们在宏观尺度上是有效的。包含优先费用的交易更有可能被包含在区块中,设置更高优先费用的交易更有可能被包含。
根据 Helius RPC 数据,我们发现包含优先费用的交易更有可能被确认,并且一旦确认,它们的确认速度更快:
True = 包含优先费用的交易,y 轴 = 交易百分比
在 1 月 21 日,由于 mockJUP 空投,平均优先费用出现了激增,为即将到来的 JUP 空投做准备。虽然对区块空间的需求发生了显著变化,但实际用户在交易确认率和时间方面的变化相对较小。
这种用户体验主要得到 Solana RPC 方法 getRecentPrioritizationFees 的支持,该方法允许开发人员准确确定要附加到交易的优先费用。该端点返回了最近 150 个区块中用于成功确认至少一笔交易的优先费用列表,以及相应地址和输入参数。这提供了设置优先费用的最低要求值的快照,但其实用性相对有限。作为替代,Helius 提供了一个 优先费用 API,该 API 进行了额外的计算,以提供更好的优先费用估算。
虽然优先费用在理论上在某种程度上起到了预期的作用,但 1.18 版本中即将到来的调度程序变更将增加更多确定性,以改进交易确认的机制。这应该会减少链上的垃圾邮件数量,因为主导策略不再需要通过向链发送大量交易来实现交易确认。
Solana 上的基础费用明显过低,区块饱和且不具备动态性,无法使基础费用达到市场清算价格以获取区块空间。在以太坊上,通过 EIP-1559 机制实现了动态基础费用,该机制查看最近的区块并针对 50% 的利用率进行调整。
Solana 静态定价为每个签名 5,000 lamports(通常每笔交易 1 个签名)。这意味着基础费用不会反映对区块空间和验证器资源使用的需求变化,这实际上将优先费用外部化为优先费用的市场替代品,进一步拥堵网络,因为验证器处理了可能永远不会被包含的额外交易。此外,主导策略是提交大量具有最低优先费用以获得确认的交易。这对所有网络参与者的用户体验造成了巨大的外部性。
RPC 被激励向下游传递正确的信息,以提供最低成本的交易确认率。与头部质押验证器集成使 RPC 能够更准确地了解网络当前状态,因为 Solana 的许多机制都是质押权重的。验证器与 RPC 之间形成了一种共生关系,具有重大质押权重的验证器和集成的 RPC 可以增强交易处理的效率和可靠性,可能产生进一步巩固头部质押验证器地位的反馈循环。
此外,目前被视为零质押的 RPC 本身未可能成为有权重质押。RPC 本身可以寻求吸引质押权重,而无需与验证器合作。对于应用程序自身来说,运行自己的验证器以实现更垂直的整合并不罕见,这可以增强对最终用户体验和交易/MEV 供应链的额外控制。
尽管经济激励表明趋势是向质押权重的中心化发展,但 Solana 并未看到大规模的资本聚集以获取质押权重收益。这可能是由于以下原因:
在本文中,我们详细描述了 Solana 费用机制的高层理论以及其对链上网络的影响。费用驱动激励,对 Solana 上所有参与者的行为产生了巨大的外部性影响。
Solana 上的基础费用和优先费用等机制在当前实施中并不完美。基础费用是不可调整的,也不能反映当前供需均衡。这导致了网络拥堵和资源分配的低效。由于当前调度程序的实施方式,优先费用表现出一定程度的不确定性。未来的更新,比如预期的调度程序变更,承诺为交易处理带来更多确定性和效率,可能重塑我们今天观察到的链上行为。
新的提案正在涌现,比如 对写锁定账户实施指数费用,旨在通过任意锁定对账户的访问来更准确地定价交易成本。还在就更准确定价对状态的访问的动态基础费用机制进行讨论。
费用、验证器和 RPC 之间的相互作用是一种复杂的激励网络。理论上,验证器和 RPC 有激励去集成和增加他们的质押权重,可能引发对中心化的担忧。然而,在现实中,Solana 已成功保持了一组去中心化的运营商和质押权重,这可能是由于其社区驱动的治理、技术障碍、经济反激励以及当前主要不是由收益驱动的优化功能。
原文:https://www.helius.dev/blog/solana-fees-in-theory-and-practice
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!