
权益加权服务质量:你需要了解的一切
简介
Solana 是一个高吞吐量、低延迟的网络,处于区块链技术前沿,不断突破去中心化网络能力的边界。然而,这也带来了重大挑战。Solana 发展过程中的一个关键事件是 2022 年 4 月 30 日的宕机。这次事件凸显出,Solana 需要更稳健的机制来处理大量交易,并在高负载下维持网络性能。
权益加权服务质量(SWQoS)正是为应对这次事件而创建的。该机制根据验证者持有的质押量确定网络流量的优先级,确保质押量更高的验证者能够以更高优先级发送交易。SWQoS 旨在防止低质押验证者拖垮网络,从而增强 Solana 的韧性和效率。
本文将探讨 SWQoS、Solana 的交易处理模型,以及 SWQoS 对该模型的影响。还会介绍质押连接及其配置方式,并说明 SWQoS 与优先费之间的区别。此外,本文还将讨论未来影响,尤其是验证者和流动性质押代币(LST)日益增长的重要性、准入门槛,以及该系统固有的信任假设。
本文假设你已了解 Solana 的编程模型和 QUIC。如果你不熟悉这些主题,建议先阅读以下文章,再继续阅读本文:
不过,我们仍会在必要时提供相关背景。
什么是权益加权服务质量?
权益加权服务质量(SWQoS)是一种根据验证者持有的质押量确定网络流量优先级的机制。该机制确保质押量更高的验证者能够更有效地发送交易,从而提升其服务质量。
鉴于 Solana 是一个权益证明网络,将权益权重扩展到交易性能是很自然的做法。简单来说,Solana 使用质押(即锁定在验证者处、用于保护网络安全的资金)来表明验证者的可信程度。验证者持有的质押越多,他们就越有动力维护网络的安全性与可靠性。此外,服务质量是一个网络概念,指优先处理特定数据包,使其在网络上获得更可靠的性能。因此,Solana 通过优先连接路由交易,让已质押验证者获得更可靠的交易发送性能。
SWQoS 的主要目的是防止低质押验证者用大量交易淹没网络,从而挤掉由质量更高或质押量更高的验证者发送的交易。例如,如果某个验证者持有总质押量的 5%,它就可以向领导者发送数据包总量的 5%。SWQoS 可以视为一种女巫攻击抵抗机制,让恶意行为者更难用“低质量”交易淹没网络。
想象一下,你正在参加一场热门活动,例如演唱会或游乐园活动,而门票数量有限。普通购票队伍允许任何人排队买票,但队伍可能很长,速度也很慢。同时,还有专为付费更高的顾客设置的 VIP 通道。由于只有符合特定条件的人才能进入,例如持有特定会员资格,而且每次会保证一定人数入场,因此 VIP 通道更短、更快。在 Solana 中,SWQoS 就像这样的 VIP 通道,访问权限取决于验证者持有的质押量。质押越多,获得的 VIP 权限(即优先连接)就越多,从而确保更快、更可靠地处理门票(交易)。
那么,这在实践中如何运作?首先,必须了解 Solana 如何处理交易。
Solana 如何处理交易
Solana 的交易处理单元(TPU)负责高效处理和执行交易。整个处理流程分为多个不同阶段,以确保交易在网络中得到验证、执行和传播。这些阶段分别是获取阶段、签名验证阶段、Banking 阶段、历史证明(PoH)服务和广播阶段。
获取阶段
获取阶段通过网络接收来自客户端的传入交易。它会批量处理来自 UDP 套接字的输入,并将其分为三种主要套接字:
tpu:用于代币转账、NFT 铸造和程序交互等普通交易tpu_vote:用于投票交易tpu_forwards:如果当前领导者无法处理所有交易,则将未处理的数据包转发给下一位领导者。
这些套接字在 Gossip 中创建,并存储在 ContactInfo 结构体中,按对应套接字进行标记。
获取阶段使用一种机制合并同时接收的数据包,在提升吞吐量的同时减少单独处理数据包的次数。收到转发的数据包时,它会使用 FORWARDED 标志对其进行标记,确保后续阶段能够正确识别。如果节点不是当前领导者,这些转发的数据包会被丢弃,以避免不必要的处理。但如果节点是领导者,就会接受并处理这些数据包。
获取阶段会创建无界通道(例如 packet_sender、packet_receiver),将交易传递到下一阶段,即签名验证阶段。这些通道将 TPU 的各个阶段解耦,使它们能够并发运行而不会相互阻塞。unbounded 函数会创建容量不受限的通道,确保数据包不会因通道溢出而被丢弃。
交易会先按每组 128 个数据包进行批处理,然后再转发到签名验证阶段。批处理有助于提高交易处理效率,并减少逐个处理数据包的开销。
需要注意的是,获取阶段通过多个线程运行,以处理高吞吐量。每个线程负责特定任务,例如接收数据包、处理批次和转发交易。系统使用 streamer::receiver 函数为每种套接字类型(即 tpu、tpu_vote、tpu_forwards)创建一个线程。每个线程监听分配给它的套接字,处理传入的数据包,并通过适当的通道发送。
获取阶段通过高效管理传入流量并对交易进行分类,为 Solana TPU 的所有后续处理阶段奠定基础。
签名验证阶段
签名验证阶段是 Solana 交易处理流水线的第二阶段。它对于确保交易的完整性和真实性至关重要。
在这一阶段,TPU 通过无界通道接收来自获取阶段的批量交易。这里的主要任务是使用 Ed25519 签名方案验证交易签名。这项密码学验证用于确认交易确实由相关账户的正确所有者签署。
签名验证阶段专为高性能而设计,利用现代 CPU 和 GPU 的并行处理能力验证签名。默认情况下,所有处理都由 CPU 完成。不过,由于该过程具有并行特性,在性能库可用时,将任务卸载到 GPU 可以显著加快处理速度。
该流程从 new 函数开始。此函数会初始化签名验证阶段,并设置从获取阶段接收数据包所需的接收通道。verifier 函数负责接收批次并验证签名。它会执行去重、丢弃过量数据包,并验证剩余数据包。该函数使用签名验证的 ed25519_verify 方法。在交易量较高时,系统会进行负载卸除,即签名验证阶段会丢弃过量数据包。具体方法是按来源 IP 地址对数据包分组,并为每个地址分配可处理数据包数量的上限。
签名无效的交易会被标记并丢弃。此过程确保只有有效交易才能继续流转,防止欺诈或错误交易进入下一阶段。
签名验证完成后,有效交易会通过另一组无界通道传递至下一阶段,即 Banking 阶段。这可以确保各阶段保持解耦并并发运行。请注意,此阶段使用多个线程运行,每个线程处理一部分交易、验证签名,并执行去重和负载卸除。
Banking 阶段
Banking 阶段是 Solana 交易处理流水线的第三阶段。这个阶段至关重要,因为交易会在这里执行并应用到当前账本状态。Banking 阶段利用 Solana 独有的 Sealevel 运行时,实现高吞吐量的并行交易处理。
Banking 阶段共有六个线程,其中两个专门处理来自 TPU 或 Gossip 的投票交易,另外四个处理非投票交易。每个线程独立运行,从共享通道接收数据包(请注意,这将在 1.18 之后发生变化),签名验证阶段会将数据包分批发送至该通道。每个线程从共享通道中提取交易,并将其存储在本地缓冲区中。本地缓冲区充当优先队列,并动态更新,以反映交易状态和网络需求的实时变化。
这些交易的处理方式取决于验证者是否即将进入领导者调度。如果验证者距离成为领导者还很远,它会将数据包转发给即将上任的领导者,然后将其丢弃。当验证者即将轮值(距离约 ~20 个时隙)时,它会继续转发数据包,但同时保留它们,以防接下来的领导者未能处理。当验证者距离成为领导者仅剩两个时隙时,它会保留数据包,确保自己成为领导者后可以处理这些数据包。
在区块生产期间,每个线程都会从本地队列中提取优先级最高的 128 笔交易进行处理。该流程包括锁定、检查、加载、执行、记录、提交和解锁等步骤。
Banking 阶段使用多迭代器方法批量处理交易。该方法支持同时遍历数据集,将交易组成互不冲突的批次。交易首先被序列化到一个基于优先级的向量中。随后,多迭代器会将迭代器放置在交易不存在冲突的位置,创建包含 128 笔交易的批次。存在冲突的交易会被跳过,并在冲突解决后纳入后续批次。批次形成后,系统会执行交易。成功的交易会记录到历史证明服务中,并通过 Turbine 广播到网络。
历史证明(PoH)服务
历史证明(PoH)服务是 Solana 交易处理流水线的基础组件。它提供了一种可验证的方式,用于跟踪网络中的时间和事件顺序,确保交易得到高效、安全的排序。它通过哈希链生成密码学序列,作为交易的时间戳。这条连续的哈希链会形成历史记录,证明事件之间经过的时间。
PoH 服务确保所有网络参与者无需中央计时机构,就能就交易顺序达成一致。它还有助于同步整个网络中的验证者。PoH 服务通过提供可靠的时间戳来支持 Solana 的领导者选举流程,以确定验证者何时应成为领导者并生成下一个区块。
PoH 服务首先初始化一个种子值,用它生成哈希序列。收到交易后,系统会使用 PoH 序列中的当前哈希为交易添加标记,从而赋予其唯一时间戳。随后,验证者会验证哈希序列,以确认交易的顺序和时间。
要进一步了解历史证明,请阅读我们的文章历史证明、权益证明与工作量证明详解。如果密码学对你来说如同一门外语,我们还建议阅读密码学工具入门:哈希函数与 Merkle 树详解。
广播阶段
广播阶段是 Solana 交易处理流水线的最后一步。它负责将经过验证和确认的交易分发到网络其他部分。
交易在 Banking 阶段完成处理和提交后,会被组成条目。随后,这些条目会被打包为称作 shred 的数据结构。广播阶段会对这些 shred 进行序列化和签名,并生成纠删码,以增强数据完整性和恢复能力。shred 通过名为 Turbine 的结构化树状传播流程发送给对等节点。这是一种高效且具备冗余能力的分发流程,纠删码则允许验证者重建缺失或损坏的数据。
要更全面地了解 Turbine,请阅读我们的文章 Turbine:Solana 上的区块传播。
采用 SWQoS 的交易生命周期
与其他区块链不同,Solana 没有供交易等待处理的内存池。交易会直接路由到当前领导者,并由其 TPU 处理。用户通过钱包或应用直接或间接创建交易,并通过 JSON RPC API 将其提交至 RPC 节点。这些节点充当用户与 Solana 验证者之间的中介。重要的是,它们不应在网络中拥有任何质押。也就是说,RPC 节点不参与质押、不投票,因此也不参与共识。
现在,与领导者之间的连接通过 QUIC 建立。Solana 在 TPU 接收用户交易的端口中加入了 QUIC,以替代 UDP。由于 QUIC 需要握手,因此可以限制某个参与者的流量,让网络专注于处理真实交易,同时过滤垃圾流量。当然,这正是实施 QUIC 的初衷,本文不会讨论其当前成效。这里的重点是,与领导者之间的连接通过 QUIC 建立。
连接分为两种类型:
- 500 个可供任何 RPC 节点使用的开放连接
- 2000 个仅供已质押验证者使用的权益加权连接。验证者会根据其质押量按比例获得这些连接
为了有效中继交易,RPC 必须与已质押验证者建立对等连接。由于 RPC 在网络中没有任何质押,验证者需要以虚拟方式扩展其质押。验证者可以使用 --staked-nodes-overrides 标志,将一部分质押连接分配给特定 RPC 节点。
验证者必须使用 --staked-nodes-overrides flag 指定 YAML 文件路径,以配置其权益加权连接。YAML 文件包含以下形式的映射:
staked_map_id:
<pubkey_of_RPC>: 80000000000000000给定 RPC 身份的每个公钥都需要一个以 lamports 表示的值。该值指定你希望赋予 RPC 身份的质押权重。例如,如果指定一百万 SOL,分配给它的权重就是一百万 SOL 除以总活跃质押量。实质上,你是在向 RPC 节点提供质押连接,将其视为在网络中拥有相应质押量的验证者。你相当于在说:“在我的本地视图中,当这个 RPC 身份与我的验证者通信时,把它视为拥有 x 数量的质押。”请注意,此配置不要求重启验证者,你可以修改文件并即时重新加载。
此外,Jito 中继器支持质押节点覆盖标志。为了优化性能,建议在运行质押节点的同一台机器上运行中继器。
要使用这些质押连接,RPC 运营者必须使用 --rpc-send-transaction-tpu-peer 标志,该标志需要已质押验证者 TPU 的 IP 和端口。TPU 端口通常是 Gossip 中找到的动态端口范围起始值加三。对于 Jito,流量将发送到运营者自己运行的中继器,因为不能使用公共 Jito 中继器。RPC 运营者应检查日志中是否有 solana_quic_client 和 warm 等条目,以验证连接。请注意,此配置要求 RPC 节点运行 v1.17.28 或更高版本的 Agave 客户端,以支持所需标志。
总体而言,采用 SWQoS 的交易生命周期与普通交易基本相同。用户通过 RPC 节点创建和提交交易,随后将其发送给领导者。不过,当 RPC 节点与已质押验证者建立对等连接并使用 --rpc-send-transaction-tpu-peer 标志时,交易会通过质押连接发送。总结如下:
- 创建交易:用户使用钱包、应用或以编程方式创建交易
- 提交至 RPC 节点:交易通过 JSON RPC API 提交至 RPC 节点
- QUIC 连接:RPC 节点与领导者建立 QUIC 连接,并根据配置使用开放连接或权益加权连接
- 权益加权 QoS:如果 RPC 节点已与已质押验证者建立对等连接,它就会使用该验证者的质押连接,从而提升交易性能
- 转发至领导者:交易通过这些质押连接发送给领导者,延迟或被丢弃的可能性更低
- 处理交易:如前所述,交易会经过 TPU 并由领导者处理
SWQoS 确保已质押验证者及其对等 RPC 节点能够更顺畅地连接领导者,从而降低交易因网络拥堵而延迟的可能性,改善交易生命周期。该机制与优先费协同工作,以提升交易性能。
SWQoS 与优先费:明确区分
在网络拥堵时,SWQoS 可以降低高质押验证者交易延迟或被丢弃的可能性。人们可以而且经常把这个系统比作收费公路:质押量更高的验证者可以使用拥堵程度较低的路径,就像高速公路上拥有更多车道。以上图为例。在科罗拉多州,驾驶者可以选择堵在车流中,也可以多付几美元驶入收费车道。快速车道是科罗拉多州的高端车道网络,其价格会持续调整,保持在足以让车流顺畅通行的水平。因此,我们可以把 Solana 的质押连接比作科罗拉多州的快速车道,因为两者都是旨在为高端用户减少拥堵的优先通道。
不过,必须区分 SWQoS 和优先费,因为常见的收费公路类比可能会模糊这两个概念之间的差异:
- 优先费在 Banking 阶段发挥作用,此时领导者会根据支付的费用确定交易优先级。其理念是,支付更高费用的交易会更早得到处理,让愿意支付更多费用的用户获得更快的执行速度。
- SWQoS 改善连接访问,但不会影响领导者交易队列中的交易优先级。SWQoS 确保已质押验证者能更顺畅地访问网络,降低交易因网络拥堵而延迟或被丢弃的可能性
优先费会影响交易进入领导者队列后的排序和处理方式,而 SWQoS 则确保已质押验证者发送的交易能够通过优先通道到达领导者。两种机制都旨在提升网络性能,但作用于交易生命周期的不同阶段。
SWQoS 之战
未来,SWQoS 将成为 Solana 网络基础设施的基础组成部分。它通过优化交易处理,并优先处理从已质押验证者到领导者的连接,对生态系统产生重大影响。这一点再怎么强调都不为过。
可以说,当网络并不拥堵且交易对时间不敏感时,使用高质押验证者的优势会开始减弱。这是因为无论交易背后的质押权重如何,网络都有足够的容量快速处理交易。然而,随着大规模采用临近,Solana 的需求不断增加,网络可能无法始终在不发生延迟或偶尔丢包的情况下处理每笔交易。这并不是说 Solana 无法扩展,因为它即使不是最有希望实现可扩展区块链的项目,也绝对位居前列。重点在于,随着需求增长,SWQoS 将继续成为实现卓越用户体验的关键。
因此,验证者的作用会变得更加关键,从而推动更多竞争与创新,以提供尽可能优质的服务。那么,所有人自然都会想运行自己的验证者,对吗?
验证者与流动性质押代币(LST)
趋势已经很明确:每个认真发展的 Solana 协议都会运行验证者。因为这是支持其应用所必需的。如果你有兴趣运行自己的验证者,可以参考 Helius 博客上的入门指南。
Solana 上的 LST 即将迎来一次大规模的寒武纪爆发,而 SWQoS 将进一步加速这一趋势。仅本月,总质押量(即原生质押 + LST)就增加了约 320 万。仅 LST 本月的市场价值目前就达到 60 亿至 90 亿美元。Sanctum 等协议有望成为重要参与者,因为其平台允许验证者和应用创建自己的 LST。此外,Picasso Network 在 Solana 上实现再质押,充当 LST 中心,为其提供更强的实用性和更高收益。因此,创建具备额外实用性的 LST 已成为现实,并正在蓬勃发展。
不过,我们必须考虑一些潜在的准入门槛。
准入门槛
尽管 SWQoS 可能带来诸多好处,但它也引入了若干准入门槛。具体来说,Agave 客户端 v1.17.31 引入了最低质押要求,将低质押验证者视为未质押对等节点。此前的问题在于,质押量较低的质押节点可以通过获得不成比例的带宽来滥用质押连接。现在,质押比例低于以下公式计算结果的节点会被视为未质押节点:
stake / total_stake < 1 / (max packet per 100ms)这意味着质押量低于约 15,000 SOL 的客户端现在会被归类为未质押验证者。这项要求可能进一步增加运行 Solana 验证者本就很高的资金和技术门槛,导致规模较小的参与者和独立验证者无法参与网络。按当前价值计算,这项要求约等于 300 万美元,乍看之下确实很高。
不过,正如 Austin Federa 指出的那样,该门槛仅为总质押量的二万五千分之一,可以说并不高。此外,如果大多数争取质押的验证者不断提升性能,以提供尽可能优质的服务并最大化自身回报,整个网络都将从中受益。这正是 Toly 所描述的 SWQoS 总体目标。
Helius 正在降低准入门槛:所有通过付费套餐发送交易并采用 Helius 建议费用的用户都能受益。也就是说,任何通过付费共享套餐发送交易的用户,只要采用或超过我们的 Priority Fee API 提供的建议值,其交易现在都会通过我们的质押连接路由。我们还通过 Node.js 和 Rust SDK 中新增的智能交易功能简化了这一流程。无论使用哪个 SDK,最基本的操作都是用户提供密钥对和希望执行的指令,其余工作由我们处理。现在,用户只需选择每月 50 美元的 Developer 套餐,即可使用共享质押连接。请注意,我们也提供专用质押连接,可保证质押连接带宽,适合企业、量化团队和交易公司。如果你对专用质押连接感兴趣,请联系我们的销售团队。
需要注意的是,质押很可能会开始集中到由大型协议和 RPC 提供商运营的验证者手中,因为它们可以收取 0% 的佣金。以 Helius 为例,我们可以从其他业务中获得收入,用来补贴运行验证者的成本。我们这样做是为了改善网络的去中心化程度:由深耕 Solana 的团队运行顶级验证者,同时获得更多质押连接,改善用户体验。
信任假设
如果质押可能集中到由大型协议和 RPC 提供商运营的验证者手中,那么将资产质押给真正重视 Solana 最大利益的验证者就非常重要。SWQoS 引入了若干信任假设。
主要信任假设之一,是验证者与 RPC 节点之间必须保持高度信任。如前文所述,SWQoS 允许领导者识别来自已质押验证者的交易并优先处理。由于 RPC 节点不参与质押、不投票且不参与共识,因此无法像已质押验证者一样直接从交易优先处理中获益。因此,验证者与 RPC 节点必须建立可信关系,才能利用 SWQoS 的优势。
这种信任关系至关重要,因为启用 SWQoS 涉及共享敏感的网络配置,并允许 RPC 节点影响交易优先级。验证者必须确保与其建立对等连接的 RPC 节点会以网络的最大利益行事,不会出于恶意目的滥用扩展的质押。验证者与 RPC 节点应事先达成协议,并就质押连接的使用方式形成共识。理想情况下,这种配置应建立在高度信任的实体之间,例如长期合作伙伴,或同一组织内的不同实体。
目前,这些关系通常并不透明。展望未来,我无法想象 RPC 运营者不与验证者协商质押覆盖配置的情形。我们需要提高透明度,让普通用户知道自己支持哪些 RPC 和验证者。随着时间推移,这种需求只会越来越强。
总结
SWQoS 有望彻底改变 Solana 的网络基础设施。它带来了许多好处,包括提升交易性能和增强女巫攻击抵抗能力,但也引入了新的挑战和信任假设,必须谨慎应对。虽然 SWQoS 旨在优先处理已质押验证者发送的交易,但目前没有任何机制强制执行这种优先级。严肃运营的验证者通常会覆盖默认设置,甚至可能屏蔽特定参与者。这凸显了验证者与 RPC 节点之间建立信任和提高透明度的必要性,以确保公平、有效地使用 SWQoS。无论如何,SWQoS 的实施标志着 Solana 朝着高效、强韧的网络方向迈出了重要一步。
本文探讨了 SWQoS 及其对交易处理的影响。我们还介绍了 SWQoS 与优先费之间的区别等重要概念。此外,我们讨论了验证者和 LST 的兴起、潜在准入门槛,以及相关信任假设,为未来讨论提供了关键起点。理解所有这些要素,对于有效利用 SWQoS 并从整体上改善 Solana 至关重要。
如果你读到了这里,感谢你,匿名朋友!请务必在下方输入邮箱地址,这样就不会错过 Solana 的任何最新动态。准备好深入探索了吗?立即阅读 Helius 博客上的最新文章,继续你的 Solana 之旅。
其他资源
相关文章
订阅 Helius
及时了解 Solana 开发的最新动态,并在我们发布新内容时收到更新


