Solana 客户端 Agave 4.0 更新:你需要知道的一切

  • Helius
  • 发布于 3 天前
  • 阅读 43

Agave 4.0是Solana核心验证器客户端的重要升级,带来了多项性能优化和功能增强。

感谢 0xIchigo 和 Brian Wong 对本文早期版本的审阅。

引言

随着 Agave 4.0 的发布,Solana 的核心验证器客户端又向前迈进了一步,在改进核心性能路径的同时,为更大的区块和备受期待的 Alpenglow 共识更新做好了网络准备。

Agave 4.0 发布周期值得注意的更新

  • XDP 极大地加速了 Turbine 的重传
  • 更低延迟的重放阶段
  • Alpenglow 就绪:快速领导者交接标记和链式区块 ID 验证*
  • 扩展的加密支持:G2 算术和 BLS12-381 syscalls*
  • 使用 Wincode 改进了序列化
  • 通过 Stake Program v5 提高最低质押委托额度*
  • 重新启用 ZK ElGamal 证明程序*
  • SBPFv3 程序支持*

\* 功能开关控制的升级

无论你是验证器操作者还是开发者,本指南都将为你提供最新的更新和见解,帮助你充分利用这些最新改进。本文的每个部分都是独立的,读者可以专注于与自己最相关的主题。

截至撰写本文时,Agave v4.0.0-rc.0 被视为主网升级候选版本(MUC),Anza 正在寻找志愿者帮助将该版本推广到 25% 的质押份额。验证者们:是时候升级了!

XDP 已准备好更广泛采用

XDP(eXpress Data Path 的缩写)是 Agave 用于加速 Turbine 的高性能网络路径。它允许 Agave 在网络接口卡附近加载一个 eBPF 程序,使分片流量绕过大部分标准 Linux 数据包处理路径。

这一点很重要,因为随着 Solana 朝着更高的区块限制推进,Turbine 成为了主要瓶颈。领导者必须将分片扇出到数百个对等节点,而在当前条件下,大型验证器已经可能接近每秒 150,000 个出站数据包。随着网络朝着长久以来的 1 亿 CU 区块目标迈进,数据包分发和重传性能需要与执行吞吐量一起扩展。XDP 通过使区块传播速度极快,创造了这种增长空间。

在 Agave 4.0 中,XDP 已准备好被更多验证器采用。它已在各种配置下经过了压力测试,进一步加固,并进行了额外的路由改进。生产结果非常令人鼓舞,Turbine 重传速度提升了数个数量级。

Agave 4.0 传输阶段性能对比

关于 XDP 为何意义重大,更多背景信息请参阅我们之前对 Anza 工程师 Alessandro Decina 的采访

更快的重放阶段

Agave 4.0 通过将两个昂贵的验证步骤移出重放线程的关键路径来加速重放。在 v4.0 中,条目验证和交易签名验证都被异步调度,允许重放在后台任务确认该 Slot 有效的同时继续处理。

第一个更改将 PoH 条目验证移到后台。以前,重放在继续之前会内联验证条目哈希链。第二个更改对交易签名应用了相同的思路,但有一个重要的区分:Agave 现在将交易哈希/消息验证与 Ed25519 签名验证分开。哈希路径仍然在前端运行,以便交易可以被清理并安全执行,而更昂贵的签名检查在后台运行,并在区块被接受之前合并。

实际影响是重放阶段的阻塞大大减少,尤其是在繁忙的 Slot 中,签名检查随交易数量增加而扩展。

进一步采用 Wincode

Wincode 是一个由 Anza 开发 的序列化和反序列化库,专为原地初始化和直接内存写入而构建,以最小化中间缓冲。它在 Rust 序列化器中提供顶级性能,同时与更流行的 bincode 完全兼容。

在 Agave 4.0 中,更多性能关键的序列化路径正在从 bincode 迁移到 wincode。由于 Solana 中几乎所有写入磁盘或通过网络发送的数据都依赖于 bincode,优化这些路径具有广泛影响。

最低质押委托额度提高(Stake Program v5)

Agave 4.0 带来了 Stake Program 的重要更新。这一功能开关控制的变更,如 SIMD-0490 所述,是为 Solana 降低质押债券(也称为租金)的更广泛推动做准备。

最显著的变化是 最低质押委托从 1 lamport 提高到 1 SOL。这可以防止随着租金要求降低,创建和维护质押账户的成本变得过低,从而可能引入攻击向量。虽然存在许多低于此阈值的较小质押账户,但它们仅占总活跃质押的 0.02%,并且一旦更新上线,它们将被保留。

此次升级还清理了质押账户处理的几个部分。它切换租金计算以使用 Rent sysvar 而不是依赖每个账户存储的 rent_exempt_reserve,使 sysvar 账户输入对于质押程序操作变为可选,并重写了 Split 实现以修复长期存在的边缘情况。

验证器操作者社区对新的 1 SOL 最低额度表示满意。与质押程序交互的工具和 dapp 需要检查其逻辑以适应新的最低额度。

改进的加密支持

Agave 4.0 发布周期中的若干功能激活旨在扩展 Solana 的原生加密能力,为现代用例(包括 ZK 证明和 BLS 签名)提供更好的支持。

重新启用 ZK ElGamal 证明程序

ZK ElGamal 证明程序 是一个 Solana 原生程序,用于验证 Token-2022 机密转移中使用的零知识证明,从而能够在不泄露底层数据的情况下验证加密余额和交易。它作为基于 ElGamal 的加密证明的通用验证器,构成 Solana 隐私保护代币功能的关键组成部分。

2025 年 6 月的一起安全事件 后,该程序在主网上被禁用。该事件中,证明验证逻辑存在缺陷,具体是 Fiat-Shamir 转换哈希中缺少一个元素,使得可以构建能够通过验证的伪造证明。虽然未观察到实际利用,但潜在影响导致该程序被功能开关关闭,机密转移暂停,等待修复和审计完成。随着问题的解决和实现的加固,该程序现在计划在主网上重新激活。

alt_bn128 的 G2 算术

SIMD-0302: 添加 alt_bn128 G2 Syscalls 扩展了 Solana 现有的 BN254 (alt_bn128) 加密 syscall,以支持 G2 曲线点上的原生操作,包括加法、减法和标量乘法。G1 和 G2 是配对密码学中使用的两个椭圆曲线群,其中 G2 定义在更大的扩展域上。

这填补了当前 syscall 集的一个重要空白,该集主要关注 G1 操作,并解锁了更完整的链上配对密码学支持,特别是对于 BLS 签名验证和高级 ZK 证明系统等用例。

在缺乏原生 G2 支持的情况下,一些项目依赖自定义实现,例如 solana-alt-bn128-bls,这是由 Blueshift 的 Dean Little 基于现有 syscall 构建的端到端 BLS 签名库。在 syscall 级别启用 G2 操作将消除对这些变通方法的需求,使在 Solana 上原生构建生产级加密协议变得更加容易。

alt_bn128 的小端支持

SIMD-0284: 为 alt_bn128 添加小端兼容性 扩展了 Solana 现有的 alt_bn128 加密 syscall,以支持小端输入和输出格式。以前,这些 syscall 只接受大端编码,给使用工具和库的开发者带来了摩擦,特别是那些来自以太坊生态系统的开发者,因为 Solana 上的大多数 ZK 团队使用 ark-bn254,后者以小端运行。该更改向后兼容,并扩大了现有涉及 alt_bn128 椭圆曲线操作用例的支持范围。

BLS12-381 Syscalls

最后,SIMD-0388: BLS12-381 Syscalls 引入了对 BLS12-381 椭圆曲线加密操作的原生支持,为 Solana 程序带来了一个现代化的、128 位安全性的配对友好曲线。到目前为止,Solana 一直依赖 BN254 (alt_bn128) 进行配对密码学,但这未达到此安全标准,并限制了与其他广泛采用的生态系统(如以太坊)的兼容性。

此次升级并非引入全新的 syscall 接口,而是用新的标识符扩展现有曲线 syscall,以支持 BLS12-381 G1 和 G2 操作。这允许开发者使用熟悉的接口执行群算术、点验证、解压缩和批量配对检查,同时显著扩展了加密能力。

除了对零知识证明和 BLS 签名验证的通用改进外,这项工作也是 Alpenglow 共识的关键推动因素。特别是,它允许验证器在链上验证 BLS 所有权证明,从而防止流氓密钥攻击。这引出了我们的下一节内容。

Alpenglow 就绪

BLS12-381 syscalls 只是 Agave 4.0 发布周期中为 Alpenglow 共识升级奠定基础的若干功能开关激活之一。以下是促成该部署的其他激活项,该部署目前计划于 2026 年第三季度与 Agave 4.1 一起在主网上线。

链式区块 ID 验证

SIMD-0340: 验证链式区块 ID 定义了验证器必须如何验证区块祖先,以确保在 TowerBFT 和 Alpenglow 共识下保持一致的规范链。由于 Slot 编号本身不能唯一标识区块,特别是在存在双签的情况下(同一 Slot 可能产生多个区块),客户端不能依赖 Slot 顺序来确定正确的父子关系。

此更改引入了明确的链验证规则,以确保每个区块正确引用其父区块,防止分叉,并帮助网络收敛到单一历史。在 TowerBFT 下,通过要求 FEC 集在 Slot 内和跨 Slot 引用其父区块的 Merkle 根来强制执行。Alpenglow 使用跨一个 Slot 中所有 FEC 集的双重 Merkle 根结构。如果这些检查失败,则该区块或 Slot 被标记为失效。强制执行这些规则加强了共识安全性,并确保验证器能够从接收不正确或冲突的区块中恢复。

快速领导者交接标记

SIMD-0337: Alpenglow 快速领导者交接标记 定义了明确的信号规则,让验证器能够确定父 Slot 何时完全完成且可以安全地在其上构建,这是快速领导者切换的前提条件。此更改对 DATA_COMPLETE_SHRED 引入了更严格的放置要求,并引入了一个新的“父就绪”标记,以确保从分片流本身就能明确检测到区块的完成状态。

目前,关于一个 Slot 是否完全传输的歧义可能会延迟下一个领导者,因为他们可能需要等待额外的分片,或者冒风险在未完成数据上构建。通过标准化完成信号的方式,此更改允许下一个领导者更早地开始生产区块,而无需额外的协调或猜测。

这是 Alpenglow 快速领导者交接设计的关键组成部分,其中最小化领导者之间的间隔直接提高了网络吞吐量。

投票交易成本模型更新

SIMD-0458: 停止使用静态 SimpleVote 交易成本 移除了对投票交易使用固定 CU 成本的做法,使其与非投票交易的标准成本模型保持一致。

目前,简单投票交易根据关于确定性执行成本的旧假设,被收取恒定的 3,428 CUs。在新模型下,投票交易将像任何其他交易一样动态计量,使成本核算更加一致,并消除了单独投票 CU 限制的需要。

虽然投票交易的实际运行时 CU 消耗保持不变,但它们在区块打包过程中的核算方式确实发生了变化。具体来说,投票现在将包括额外的约 1.6 万估计 CUs,例如账户数据加载成本,导致领导者在构建区块时 upfront CU 预留更高。

总消耗 CU 总预留 CU
成本模型更新前 3,428 3,428
成本模型更新后 3,428 19,812

此更改紧随 SIMD-0387(投票账户中的 BLS 公钥管理)之后,后者消除了投票程序具有静态执行配置文件的假设。

其他值得注意的升级

Agave 4.0 发布周期的其他亮点包括对 SBPFv3 程序的支持、创建预注资账户的能力,以及用于解压快照的直接 I/O。

SBPFv3 程序支持

Agave 4.0 发布周期包含一个功能开关,允许部署和执行 SBPFv3 程序。Solana Berkeley Packet Filter (SBPF) 是 Solana 基于 Rust 对 eBPF 的分支:即链上程序在执行前编译成的低级字节码格式和虚拟机。此更新结合了三个 SIMD 中概述的工作:SIMD-0178、SIMD-0189 和 SIMD-0377。

SIMD-0178 引入了静态 syscall,允许 syscall 引用在链接时解析,而不是通过运行时 ELF 重定位。目前,这些重定位给程序加载器增加了复杂性;移除它们简化了执行并降低了安全风险。

SIMD-0189 则收紧了对程序 ELF 布局的限制,要求更严格的文件结构,以便验证器需要解析的边缘情况更少,处理的意外数据也更少。这对开发者应该是透明的,因为链接工具链应能自动生成符合规范的二进制文件。

最后,SIMD-0377 更新了 SBPF 虚拟机,以更好地匹配 LLVM 生成的现代 eBPF 指令集,包括对额外指令(如 32 位跳转操作)的支持。目标是使 Solana 的虚拟机与上游工具更兼容,同时允许程序编译成更高效的字节码。对开发者而言,实际结果是更快的程序加载、更小的攻击面,以及在不更改应用逻辑的情况下可能更低的计算使用量。

预注资账户创建

SIMD-0312: CreateAccountAllowPrefund 计划在 Agave 4.0 发布周期内在主网上激活。这将在系统程序中引入一个新指令,移除了新创建的账户必须以零 lamport 余额开始的要求。这允许在账户创建前预注资,简化了常见的开发者工作流程,并减少了不必要的指令。

以前,CreateAccount 指令在目标账户已持有 lamports 时会失败。因此,开发者不得不将账户初始化拆分为多个步骤,通常是转移,然后分配和指派,这增加了复杂性并增加了额外的计算成本。这种模式在预先向账户注资的程序中尤其常见。

新指令通过允许直接初始化预注资账户,将这些步骤合并为一次调用。在实践中,这减少了 CPI 开销,并可以在常见流程中节省数千个计算单元,为未来的开发者提供更清晰、更高性能的路径。由于这是作为新指令引入的,而不是对现有指令的修改,因此它完全向后兼容。

用于解压快照的直接 I/O

Agave 4.0 更改了快照解压,默认使用直接 I/O,而不是通过操作系统页面缓存路由快照写入,从而改善了启动时间和快照恢复性能。这特别有用,因为快照数据通常是流式写入磁盘的,不需要将更热的验证器数据从内存中移出。如果文件系统不支持 O_DIRECT,操作者可以使用 --no-accounts-db-snapshots-direct-io 选择退出。直接 I/O 预计将在未来版本中扩展到快照创建。

结论

Agave v4.0 是一个重大的客户端升级,带来了一系列性能改进和运行时优化。这些更改旨在使网络更快、更安全,并更容易在其上构建。

展望未来,下一个里程碑是 Agave 4.1 和 Alpenglow 共识更新。

更多资源

  • 原文链接: helius.dev/blog/agave-v4...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Helius
Helius
https://www.helius.dev/