新消息:Helius 收购 Light Protocol
Solana 的 Gulf Stream
博客/基础知识

Solana 的 Gulf Stream:Mempool 越多,问题越多

研究员X 上的 Lostin
阅读需 13 分钟

可操作的洞察

  • “Gulf Stream”大致可定义为:从节点在网络中接收到一笔交易开始,到该交易抵达当前 slot 的领导者并被 TPU(交易处理单元)的 Fetch Stage 接收为止的整个过程。
  • Solana 的独特之处在于,它从一开始就被设计为无需内存池即可运行。传统区块链通常使用 gossip 协议在整个网络中广泛传播交易,而 Solana 会将每个 slot 的所有交易转发给预先确定的领导验证者,即领导者。领导者每 4 个 slot 轮换一次,所有活跃网络节点都提前知道领导者调度表,从而确保交易得到高效转发。
  • 默认情况下,Solana 交易必须包含一个近期的 blockhash,开发者只需发起一次简单的 API 调用即可获取。近期 blockhash 最多可在 150 个 slot 内保持有效(约 1 分钟)。超过此期限后,它将过期,引用它的交易也会被网络丢弃。这可确保未处理的交易不会长期滞留。近期 blockhash 还有助于交易去重。开发者也可以使用相应方法添加持久 nonce。
  • Gulf Stream 中的交易会经过编码,并通过 QUIC 流发送给领导者。2022 年末采用 QUIC 是一次重要的网络升级,取代了此前使用的 UDP 连接。这一变更主要是为了增强网络过滤垃圾流量的能力。不过,随着 Solana 在 2024 年全年经历前所未有的活跃度,改用 QUIC 也引发了一些争议。
  • 2024 年初引入的质押加权服务质量(SWQoS)深刻改变了交易通过 Gulf Stream 抵达领导者的方式。领导者现在会优先处理由其他已质押验证者代理的交易消息。具体而言,领导者 80% 的容量(2,000 个连接)保留给已质押的对等节点,其余 20%(500 个连接)则分配给来自未质押节点的交易消息。
  • 目前,Solana 超过 80% 的质押量都锁定在运行 Jito-Solana 客户端而非原始 Agave 客户端的验证者上。Jito 引入了协议外区块空间拍卖,进一步增加了交易抵达领导者的复杂性。具体来说,Jito relayer 会加入 200 毫秒的“减速带”,减缓传入交易消息的流速,为搜索者留出足够时间提交 bundle。

简介

“Gulf Stream”一词源自 Solana 创始团队在 2019 年撰写的一系列入门博客文章。他们为 Solana 的许多创新机制赋予了以航空为主题的名称。在这些文章中,Gulf Stream 被定义为 Solana 的“无内存池交易转发协议”。然而,如今在 Solana 代码库中搜索“Gulf Stream”,只会返回一处无关紧要的提及。

从更广泛的 Solana 交易生命周期来看,“Gulf Stream”可以理解为这样一个完整过程:从交易被网络节点(通常是 RPC)接收开始,到它抵达当前 slot 的领导者为止(即被 TPU 的“fetch stage”接收时)。我们也可以将 Gulf Stream 视为 Turbine 的镜像。Turbine 是 Solana 的区块传播机制,因为 Gulf Stream 负责让交易抵达领导者,而 Turbine 则负责让已处理的交易离开领导者。

首先,有必要说明 Solana 语境下的 RPC(远程过程调用)节点。这些节点可以视为与网络交互和读取网络数据的网关。它们充当用户与 Solana 验证者之间的中介。RPC 运行的软件与完整验证者相同,但配置不同,因此能够准确模拟交易,并维护当前状态(bank)的最新视图。不过,RPC 节点没有质押,因此不参与共识。没有质押,它们就无法投票或构建区块。这种设置不同于许多其他区块链,后者的验证者和 RPC 节点通常是同一类节点。就 Gulf Stream 而言,RPC 的作用可以概括为:通过 HTTP 接收交易,将交易转换为 QUIC(后文将详细说明),使用领导者调度表查找当前领导者的地址和端口信息,再将交易转发给当前和下一任领导者。

自网络上线以来,Gulf Stream 至少经历了两次重大升级:QUIC 和质押加权 QoS,本文稍后将详细介绍。由于 Solana 近年来出现前所未有的网络流量,它也可以说是核心协议中承受压力最大的部分。举例来说,当验证者成为领导者时,传入流量可能会激增至每秒超过 1 GB,因为整个网络都会将数据包发送给它。处理如此庞大的数据流入量是一项艰巨的工程挑战。

Mempool 越多,问题越多

创始团队最初对 Gulf Stream 的定义强调了它没有内存池。内存池(字面意思是“内存池”)可以定义为一组由用户提交、正在等待网络处理的交易。这些交易在公开等待期间通常未加密 或未受保护,并通过 gossip 协议在整个网络中传播。根据网络的不同,已签名交易可能无限期地留在内存池中,直到满足执行条件。对于那些将交易费(每单位计算量的价格)设置得远低于正常市场费率范围的交易,尤其如此。在极端情况下,如果网络条件不利于将它们纳入区块,这些交易可能需要数天甚至数周才能执行。

这种情况在 Solana 上不可能发生。Solana 不仅原生没有内存池概念,而且所有交易消息都必须包含近期 blockhash。开发者可以通过 JSON RPC API 调用 getLatestBlockhash 方法,轻松请求近期 blockhash。该 blockhash 会嵌入交易消息中,最多可在 150 个 slot 内保持有效。由于每个 slot 的目标时间为 400 毫秒,因此有效期约为 1 分钟。经过 150 个 slot 后,blockhash 会过期,引用它的交易也会被网络丢弃。默认情况下,RPC 会尝试每 2 秒转发一次交易,但近期 blockhash 一旦过期,交易就会被丢弃,确保它永远不会在链上执行。

近期 blockhash 也可用于检测和删除重复交易。在其他网络上,这通常需要强制加入 nonce(仅使用一次的数字)来实现。尽管开发者可以在特定的小众场景中为 Solana 交易添加持久 nonce,但标准 Solana 交易并不要求包含 nonce。

Solana 的 Gulf Stream 系统之所以可行,是因为所有活跃节点始终能够提前知道领导者调度表。每当 slot 高度跨越一个 epoch 边界时,节点都会更新领导者调度表,间隔约为 2 天。某个 epoch 的领导者调度表根据上一个 epoch 开始时的账本状态计算得出,其生成算法如下:

  • 定期使用历史证明(PoH)的 tick 高度(即单调递增的计数器)为稳定的伪随机算法提供种子。
  • 在该高度上,从 bank 中抽样选取所有已质押账户,这些账户的领导者身份必须在集群配置的 tick 数内投过票。该样本称为活跃集。
  • 按质押权重对活跃集排序。
  • 使用随机种子按质押权重选择节点,创建质押加权排序。
  • 经过集群配置的 tick 数后,该排序生效。

来源:Solana 官方文档

质押加权可确保质押量较高、可信度较高的节点更有可能频繁当选领导者,而质押量较低的节点则较少被选中,甚至完全不会被选中。 

‍质押加权资源分配是 Solana 核心协议中反复出现的主题,涵盖投票奖励、Turbine 树、领导者调度表和 gossip 网络*。甚至 Gulf Stream 也采用了质押加权,本文稍后将对此进行介绍。

关于 QUIC

Gulf Stream 的第一次重大更新发生在2022 年末 ,当时它采用 QUIC 网络协议来处理发送给领导者的交易消息。此次升级源于 DDoS 攻击以及 NFT 铸造期间垃圾交易涌入链上造成的网络中断。随着 QUIC 在 1.13.4 版本中全面集成至 Mainnet-Beta,网络稳定性得到提升。

此前,Solana 依赖 UDP(用户数据报协议)网络协议将交易从 RPC 节点发送到当前领导者。UDP 虽然快速高效,但它是无连接协议,既没有流量控制,也没有接收确认机制。因此,几乎无法有效阻止或缓解滥用行为。为了控制网络流量,验证者的交易接收协议(即 TPU 的 Fetch Stage)使用 QUIC 重新实现。

QUIC 最初由 Google 于 2012 年开发,旨在结合 TCP 与 UDP 的优势。它支持类似 UDP 的快速异步通信,同时具备 TCP 的安全会话和高级流量控制策略。因此,网络可以限制单个流量来源,将资源集中用于处理真实交易。它还支持彼此独立的流,因此即使一笔交易被丢弃,也不会阻塞其他交易。在整个 Web2 领域,Google 一直是推动采用 QUIC 的主要力量。与 Google 服务器的连接使用 QUIC 建立,这意味着 Google 旗下的许多应用都基于 QUIC,例如 Hangouts、Gmail 和 YouTube。顺带一提,QUIC 并不是首字母缩略词,而是该协议的正式名称。 

尽管如此,QUIC 在 Solana 上的实现是否有效仍存在争议。当网络流量激增时,验证者可能因大量 QUIC 握手而不堪重负。可以说,它并未成为一些人最初所期待的万能方案,无法彻底解决网络层的拥堵问题。值得注意的是,除 Solana 的实现外,QUIC 在区块链行业中的采用率很低。Solana 验证者社区的一些成员公开批评了该协议,认为采用 QUIC 是一个错误决定。

质押加权服务质量(SWQoS)

2024 年初,Solana 采用了质押加权服务质量(SWQoS),以防止垃圾流量并增强女巫攻击抵抗能力。该系统允许领导者优先处理经由已质押验证者路由的交易消息。质押量越高的验证者,向领导者传输交易消息数据包的容量也会按比例增加,从而有效缓解来自网络中未质押或低质押节点的女巫攻击。由于 QUIC 可以验证 IP 地址,这种流量划分得以实现,验证者也因此能够针对特定连接设置流量优先级和限制。 

借助 SWQoS,验证者可以将其质押加权容量租给 RPC 节点。作为回报,RPC 节点可获得更高带宽,从而提高交易被纳入区块的比例。值得注意的是,领导者 80% 的容量(2,000 个连接)保留给质押加权 QoS,其余 20%(500 个连接)则分配给来自其他节点的交易消息。这种分配策略类似于高速公路上的优先车道,驾驶者通过支付通行费来避开拥堵。

目前,要成为已质押对等节点,最低质押量须达到总质押量的 0.04%。截至本文撰写时,总质押量为 3.84 亿 SOL,因此最低要求为 15,360 SOL。‍

SWQoS 提高了向领导者转发交易的门槛,并降低了垃圾流量攻击的有效性,对 Solana 生态系统产生了重大影响。这项变更推动高流量应用对其运营进行垂直整合。应用通过运行自己的验证者节点,可以确保获得访问领导者的优先权限,从而增强交易处理能力。Helius 很自豪能够运营网络中按质押量排名领先的验证者之一,从而帮助我们确保更高的交易纳入率。要了解如何通过我们进行质押,请阅读此处的详细质押指南。

Jito 减速带

本文不能不提 Jito。截至撰写时,网络中超过 80% 的质押量都使用 Jito 验证者客户端,这进一步增加了交易通常如何抵达领导者的复杂性。Jito-Solana 验证者客户端(Github)是 Agave 客户端(Github)的一个分叉,而 Agave 的前身是 Solana Labs 客户端。它引入了协议外区块空间拍卖,并允许验证者通过小费获得额外的经济激励。

全面研究 Jito 客户端超出了本文范围,因此我们将分析限定在 Jito 客户端如何影响普通交易通过 Gulf Stream 的流动。交易有两条可能的路径——从 RPC 流向与其配对的验证者,再到当前领导者(质押加权路径);或者直接转发给领导者(开放连接路径)。无论采用哪条路径,如果领导者运行 Jito-Solana 客户端,这些交易都会先被发送到 Jito-Relayer(Github)。这是一款充当交易代理路由器的开源软件。 

其他网络节点并不知道 Jito-Relayer 的存在;它们只会将交易发送到领导者选择通过 gossip 网络广播为其 ingress_socket 的地址和端口配置。relayer 会将交易延迟 200 毫秒再转发给领导者。这个“减速带”机制会减缓传入交易消息的流速,并支持高效的离散时间拍卖。200 毫秒后,无论拍卖结果如何,relayer 都会以乐观方式释放这些交易。

Jito 此前运营过一个标准的协议外内存池服务,但现已弃用。当 Jito-Solana 验证者担任领导者时,搜索者仍可提交由多笔原子执行交易组成的交易组,即 bundle,用于不依赖内存池的其他类型 MEV 交易,例如套利交易和清算。

要了解更多信息,请参阅介绍 Solana MEV 的 Helius 博客文章,点击此处阅读。

总结

本文探讨了 Solana Gulf Stream 的多个方面,包括 QUIC 网络协议、质押加权 QoS 和 Jito 验证者配置。我们将 Gulf Stream 与更传统的内存池架构进行了对比,并概述了 Solana 方法在提高效率和降低延迟方面的优势。 

毫无疑问,Gulf Stream 将继续演进。Solana 协议及其更广泛的生态系统正在快速发展,预计将迎来重大升级。举例来说,Solana 联合创始人 Anatoly Yakovenko 一直积极倡导实现多个并发领导者。多个并发领导者可让世界各地的多个节点同时对用户交易进行排序,从而降低延迟,并避免在交易加入区块链前出现最坏情况下的完整全球往返。

Solana 不会停滞不前,包括 Gulf Stream 在内的整个协议都将迎来令人期待的未来。因此,开发者可以期待后续出现更多更新和优化。

感谢你读到这里!欢迎加入我们的 Discord 社区、在 X 上关注我们,或在下方订阅我们的邮件列表。‍

衷心感谢 Jacob Creech 和 0xIchigo 审阅本文的早期版本。‍

其他资源

‍

订阅 Helius

及时了解 Solana 开发的最新动态,并在我们发布新内容时收到更新

放大图片