Agave 4.0是Solana核心验证器客户端的重要升级,带来了多项性能优化和功能增强。
感谢 0xIchigo 和 Brian Wong 对本文早期版本的审阅。
随着 Agave 4.0 的发布,Solana 的核心验证器客户端又向前迈进了一步,在改进核心性能路径的同时,为更大的区块和备受期待的 Alpenglow 共识更新做好了网络准备。
\* 功能开关控制的升级
无论你是验证器操作者还是开发者,本指南都将为你提供最新的更新和见解,帮助你充分利用这些最新改进。本文的每个部分都是独立的,读者可以专注于与自己最相关的主题。
截至撰写本文时,Agave v4.0.0-rc.0 被视为主网升级候选版本(MUC),Anza 正在寻找志愿者帮助将该版本推广到 25% 的质押份额。验证者们:是时候升级了!
XDP(eXpress Data Path 的缩写)是 Agave 用于加速 Turbine 的高性能网络路径。它允许 Agave 在网络接口卡附近加载一个 eBPF 程序,使分片流量绕过大部分标准 Linux 数据包处理路径。
这一点很重要,因为随着 Solana 朝着更高的区块限制推进,Turbine 成为了主要瓶颈。领导者必须将分片扇出到数百个对等节点,而在当前条件下,大型验证器已经可能接近每秒 150,000 个出站数据包。随着网络朝着长久以来的 1 亿 CU 区块目标迈进,数据包分发和重传性能需要与执行吞吐量一起扩展。XDP 通过使区块传播速度极快,创造了这种增长空间。
在 Agave 4.0 中,XDP 已准备好被更多验证器采用。它已在各种配置下经过了压力测试,进一步加固,并进行了额外的路由改进。生产结果非常令人鼓舞,Turbine 重传速度提升了数个数量级。

关于 XDP 为何意义重大,更多背景信息请参阅我们之前对 Anza 工程师 Alessandro Decina 的采访。
Agave 4.0 通过将两个昂贵的验证步骤移出重放线程的关键路径来加速重放。在 v4.0 中,条目验证和交易签名验证都被异步调度,允许重放在后台任务确认该 Slot 有效的同时继续处理。
第一个更改将 PoH 条目验证移到后台。以前,重放在继续之前会内联验证条目哈希链。第二个更改对交易签名应用了相同的思路,但有一个重要的区分:Agave 现在将交易哈希/消息验证与 Ed25519 签名验证分开。哈希路径仍然在前端运行,以便交易可以被清理并安全执行,而更昂贵的签名检查在后台运行,并在区块被接受之前合并。
实际影响是重放阶段的阻塞大大减少,尤其是在繁忙的 Slot 中,签名检查随交易数量增加而扩展。
Wincode 是一个由 Anza 开发 的序列化和反序列化库,专为原地初始化和直接内存写入而构建,以最小化中间缓冲。它在 Rust 序列化器中提供顶级性能,同时与更流行的 bincode 完全兼容。
在 Agave 4.0 中,更多性能关键的序列化路径正在从 bincode 迁移到 wincode。由于 Solana 中几乎所有写入磁盘或通过网络发送的数据都依赖于 bincode,优化这些路径具有广泛影响。
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 证明程序 是一个 Solana 原生程序,用于验证 Token-2022 机密转移中使用的零知识证明,从而能够在不泄露底层数据的情况下验证加密余额和交易。它作为基于 ElGamal 的加密证明的通用验证器,构成 Solana 隐私保护代币功能的关键组成部分。
在 2025 年 6 月的一起安全事件 后,该程序在主网上被禁用。该事件中,证明验证逻辑存在缺陷,具体是 Fiat-Shamir 转换哈希中缺少一个元素,使得可以构建能够通过验证的伪造证明。虽然未观察到实际利用,但潜在影响导致该程序被功能开关关闭,机密转移暂停,等待修复和审计完成。随着问题的解决和实现的加固,该程序现在计划在主网上重新激活。
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 上原生构建生产级加密协议变得更加容易。
SIMD-0284: 为 alt_bn128 添加小端兼容性 扩展了 Solana 现有的 alt_bn128 加密 syscall,以支持小端输入和输出格式。以前,这些 syscall 只接受大端编码,给使用工具和库的开发者带来了摩擦,特别是那些来自以太坊生态系统的开发者,因为 Solana 上的大多数 ZK 团队使用 ark-bn254,后者以小端运行。该更改向后兼容,并扩大了现有涉及 alt_bn128 椭圆曲线操作用例的支持范围。
最后,SIMD-0388: BLS12-381 Syscalls 引入了对 BLS12-381 椭圆曲线加密操作的原生支持,为 Solana 程序带来了一个现代化的、128 位安全性的配对友好曲线。到目前为止,Solana 一直依赖 BN254 (alt_bn128) 进行配对密码学,但这未达到此安全标准,并限制了与其他广泛采用的生态系统(如以太坊)的兼容性。
此次升级并非引入全新的 syscall 接口,而是用新的标识符扩展现有曲线 syscall,以支持 BLS12-381 G1 和 G2 操作。这允许开发者使用熟悉的接口执行群算术、点验证、解压缩和批量配对检查,同时显著扩展了加密能力。
除了对零知识证明和 BLS 签名验证的通用改进外,这项工作也是 Alpenglow 共识的关键推动因素。特别是,它允许验证器在链上验证 BLS 所有权证明,从而防止流氓密钥攻击。这引出了我们的下一节内容。
BLS12-381 syscalls 只是 Agave 4.0 发布周期中为 Alpenglow 共识升级奠定基础的若干功能开关激活之一。以下是促成该部署的其他激活项,该部署目前计划于 2026 年第三季度与 Agave 4.1 一起在主网上线。
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。
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 开销,并可以在常见流程中节省数千个计算单元,为未来的开发者提供更清晰、更高性能的路径。由于这是作为新指令引入的,而不是对现有指令的修改,因此它完全向后兼容。
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 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!
作者暂未设置收款二维码