
Solana 费用:理论与实践
引言
Solana 的费用结构旨在维持网络性能,同时平衡供需中的非均匀冲击。任何区块链上的费用都用于防止垃圾交易并激励验证者。在 Solana 上,其中一部分费用会根据网络状况动态调整,让网络能够更准确地反映特定时刻的需求价格。
费用是 Solana 社区的热门话题。“本地费用市场”赋予 Solana 一定的定价能力,使其能更准确地为区块空间和特定账户定价。目前的实现远非完美,但确实为每个账户的交易排序提供了宽松保证。Solana 仍处于早期阶段,而随着网络中的质押量和活动增加,我们需要更深入地讨论和分析任何协议内变更的一阶与二阶影响,例如费用模型变更。
本文将介绍费用的理论机制,以及它们在链上的实际表现。有人批评 Solana 过于中心化,认为其按质押权重设计的 QoS 和 Turbine 会推动中心化,但即使经过多年运行,这种说法与现实表现之间仍存在明显差异。同样,我们将全面分析费用如何通过链上行为体现出来。
费用理论
Solana 的费用系统由两部分组成:基础费和优先费。概括而言,每种费用理想情况下分别承担以下作用:
- 基础费:获得使用网络资源的权利
- 优先费:决定交易在领导者交易队列中的顺序
基础费
基础费目前设定为每个签名 0.000005 SOL(5,000 lamports),构成交易成本的基础。这是某个地址为了获得使用网络资源的权利而支付的费用。无论执行交易实际使用了多少资源,甚至无论交易是否执行,这笔费用都需要预先一次性支付给网络。Solana 交易会预先请求指定数量的计算单元(CU);如果超出该数量,交易就会失败。这意味着目前开发者几乎没有经济动力去尽量减少计算单元请求。
优先费
此外,用户可以支付优先费来加快交易,从而提高交易被纳入区块的概率。这为付费获得优先处理的用户提供了一种非确定性保证。目前,提升交易确定性的工作正在推进中,预计 1.18 版本将引入重要的调度器变更。
顺带一提,投票交易没有相关的优先费,其处理方式也与标准交易不同。
验证者纳入含优先费交易的激励存在于运行时之外。领导者将交易纳入其区块后,可获得优先费的 50%,其余 50% 会被销毁。
目前,大多数验证者(80% 以上)运行未经修改的 Solana Labs 或 Jito-Solana 客户端。这意味着这些验证者将“区块生产”交给默认调度器处理(Solana 上有些人把“区块排序”称为“区块生产”,但“区块生产”在 Ethereum 上代表完全不同的概念)。一些团队修改了客户端代码并实现了更复杂的调度器,从而更好地控制排序流程,使某些参与者能够通过重新排序交易或对交易实施三明治攻击来提取 MEV。
优先费的不确定性
当前的调度器实现并不保证优先费更高的交易一定会被纳入特定区块。它只提供一种宽松保证:含优先费的交易更有可能被纳入特定区块。目前的调度器实现使用 4 个执行核心(另有 2 个核心专门保留给投票交易)。
每个线程都运行自己的队列,并独立确定数据包的优先级,不了解其他线程正在处理哪些数据包。每个线程都会从头到尾持续循环,尝试锁定并执行交易。当一个线程完成当前循环后,它会收集更多数据包并重新开始循环。
因此,一笔高优先级交易可能正位于某个线程队列的最前端,而与此同时,另一个线程可能正在处理一笔涉及同一账户的交易,并即将完成自己的队列。
当前及未来调度器实现的具体细节将在另一篇文章中探讨。这里只需理解优先费仅在线程内(自己的通道内)有效,而不在线程之间(不同通道之间)生效,就足以看出调度器远非完美,而且存在“抖动”。
实践中的费用
交易上链
费用是决定交易能否上链的重要因素,但并非唯一因素。例如,交易可能仅仅因为 UDP 网络数据包丢失而未能上链。在网络活动高峰期,验证者收到的交易数量可能超出其处理能力。虽然验证者能够通过 tpu_forwards 机制转发超额交易,但它们只能处理有限的数据量,而且每笔交易的中继次数也有限(直到 blockhash 过期)。按质押权重分配的服务质量可以缓解高质押地址面临的部分问题,为它们提供预留带宽,并提高交易被纳入区块的概率。
此外,还有两个较少被讨论的交易丢弃原因。第一个与 RPC 池内部的差异有关。RPC 池中的一部分节点可能领先于其他节点,从而造成协调问题。例如,如果交易的 recentBlockhash 是从更新程度较高的部分获取的,随后却被提交到较慢的部分,后者可能无法识别更新后的 blockhash,因此会丢弃该交易。如果开发者在 sendTransaction 函数中启用了预检,就能在提交时发现此类问题。
另一个问题与临时网络分叉有关。如果某个验证者处理区块的进度落后,交易可能会进入无法成为规范链的少数分叉。当客户端在交易中引用仅存在于该少数分叉上的 recentBlockhash,而网络在处理交易前就放弃了该分叉时,这笔交易会因无法再找到相应 blockhash 而被丢弃。
优先费
实践证据表明,尽管优先费远非完美,但它在宏观层面确实有效。含优先费的交易更有可能被纳入区块,而设置较高优先费的交易被纳入的概率也更高。
根据 Helius RPC 数据,我们发现含优先费的交易更有可能上链,而且一旦上链,其整体速度也更快:
1 月 21 日,为给下一周正式进行的 JUP 空投预热,mockJUP 空投导致平均优先费激增。尽管区块空间需求发生了显著变化,但实际用户感受到的交易上链率和上链时间变化相对较小。
这种 UX 主要由 Solana RPC 方法 getRecentPrioritizationFees 支持,使开发者能够准确确定应附加到交易中的优先费。该端点会返回过去 150 个区块中的优先费列表;使用相应地址和输入参数时,这些费用都曾成功促使至少一笔交易上链。它提供了设置优先费所需最低值的快照,但实用性相对有限。作为替代方案,Helius 提供了 Priority Fee API,它会进行额外计算,从而给出更准确的优先费估算。
虽然优先费在理论上基本按预期运作,但 1.18 版本即将推出的调度器改进将提升交易纳入区块的确定性。由于交易上链的主导策略将不再要求向链上发送大量垃圾交易,这应该能减少最终上链的垃圾交易数量。
基础费
Solana 的基础费显然过低。区块已经饱和,而基础费却不是动态的,因此无法达到能够出清区块空间市场的价格。在 Ethereum 上,动态基础费通过 EIP-1559 的控制器机制实现。该机制会查看近期区块,并以 50% 的利用率为目标。
Solana 将每个签名的价格固定为 5,000 lamports(通常每笔交易有 1 个签名)。这意味着基础费机制并不有效,因为它无法反映区块空间需求和验证者资源使用量的任何变化。实际上,这使优先费承担了基于市场定价的替代机制角色,导致网络进一步拥堵,因为验证者需要处理更多原本很可能永远不会被纳入区块的交易。此外,当前的主导策略是提交大量仅含最低优先费的交易,以争取被纳入区块。这会给所有网络参与者的 UX 带来巨大的负外部性。
激励机制
RPC 有动力将正确信息向下游传递,以最低成本实现最高的交易纳入率。由于 Solana 的许多机制按质押权重运行,与质押量最高的验证者集成能让 RPC 更准确地了解网络当前状态。由此形成一种共生关系:拥有大量质押且集成 RPC 的验证者可以提高交易处理的效率和可靠性,并可能形成反馈循环,进一步巩固高质押验证者的地位。
此外,目前被视为零质押验证者的 RPC 本身也将按质押权重运行。RPC 无需与验证者合作,也可以自行吸引质押。应用运行自己的验证者以实现更深入的垂直整合并不少见,这能让它们更好地控制终端用户体验以及交易/MEV 供应链。
尽管经济激励意味着质押可能趋于中心化,但 Solana 尚未出现为获取质押权重收益而进行的大规模资本聚集。这可能有以下几个原因:
- 个人可能认为,在自身范围内最大限度提高去中心化程度,才是网络实现长期收益的主导策略。这主要由 Solana 的文化和社会层推动。
- Solana 参与者主要是散户和产消者,他们对回报的敏感度不如专业机构。随着活动水平和绝对回报提高,这可能促使参与者构成及其回报敏感度发生变化。
- 个人无法有效协调差异化产品的营销。
结论
本文详细介绍了 Solana 费用机制的高层理论,以及它对网络链上活动的影响。费用驱动激励机制,而这些机制具有巨大的外部性,并会影响 Solana 上所有参与者的行为。
Solana 的基础费和优先费等机制在当前实现中并不完美。基础费无法调整,也不能反映当前的供需均衡。这会引发网络拥堵和资源分配低效等问题。由于当前调度器的实现方式,优先费也存在一定程度的不确定性。未来的更新(例如预期中的调度器变更)有望提升交易处理的确定性和效率,并可能重塑我们今天观察到的链上行为。
新的提案即将出现,例如对写锁账户收取指数级费用。该提案旨在针对交易任意锁定账户访问权限的行为,更准确地计算其成本。社区还在讨论动态基础费机制,以便更准确地为状态访问定价。
费用、验证者和 RPC 之间的互动构成了一张复杂的激励网络。从理论上讲,验证者和 RPC 有动力相互集成并提高自身的质押权重,这可能引发对中心化的担忧。然而在现实中,Solana 仍成功维持了去中心化的运营者和质押分布,这很可能归因于社区驱动的治理、技术门槛、经济上的反向激励,以及当前并非主要由回报驱动的优化函数。
相关文章
订阅 Helius
及时了解 Solana 开发的最新动态,并在我们发布新内容时收到更新


