新消息:试用 Parsed Events Scan API
Agave 4.4 更新横幅
博客/更新

Agave 4.4 更新:你需要了解的一切

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

简介

Agave 4.4 在 Alpenglow 推进的基础上,进一步简化区块验证和质押奖励计算,并降低存储程序与账户数据所需的 SOL。这些变化提升了日常运行效率,也为异步执行进一步奠定基础。近期目标 slot 时间已缩短至 200ms,使 epoch 缩短到约一天,从而可以更快地激活功能门控。

Agave 4.4 发布周期的重要更新

  • 允许无效手续费支付者: 启用异步执行的关键一步
  • 自动调整程序大小: 在程序升级期间退还多余租金
  • 标准化 shred: 协议现强制采用 32 个数据 shred、32 个编码 shred 的 FEC 集
  • 清理非活跃质押: 从奖励计算中排除非活跃质押
  • 降低租金: 状态保证金降低 90% 计划的最后三个阶段

允许无效的手续费支付者

SIMD-0290:放宽手续费支付者约束的功能门控预计将在 Agave 4.4 发布周期内激活。它改变了区块包含手续费支付者验证失败的交易时所发生的情况,例如支付者持有的 SOL 不足。此前,加入此类交易会导致整个区块无效。根据新的共识规则,交易会保留在区块中,验证者则跳过执行,不对账户状态做任何更改。

随着更早的交易执行,手续费支付者的余额可能会发生变化。因此,要求每笔交易都有有效的手续费支付者,意味着验证者必须先执行部分先前交易,才能判断区块是否有效。将手续费支付者验证失败的交易视为被跳过的交易,可消除这项特定依赖。

这为异步执行奠定了基础。在异步执行模式下,验证者可以先就区块和交易顺序达成一致,再完成执行。执行过程将独立进行,把已达成一致的交易应用到账户状态。Solana 正在向这一设计迈进,以支持未来的改进,例如更短的区块时间和多个并发区块提议者。

Agave 将这些被跳过的交易表示为空操作:它们不执行任何指令,也不支付任何费用。但它们仍会按照完整的请求资源预算或默认资源预算占用区块容量,从而限制领导者可加入的数量。尽管验证者在重放区块时可以接受这些交易,但该实现仍保留了领导者在生成区块期间将其过滤掉的能力。

SIMD-0290 专门适用于使用近期 blockhash 作为有效期说明符的交易。持久 nonce 交易需要额外处理,由 SIMD-0297:放宽无效 Nonce 交易约束单独解决。该变更完全向后兼容,所有此前有效的交易和区块仍然有效。

升级时自动调整程序大小

Agave 4.4 将激活 SIMD-0433:Loader V3:将程序数据设为 ELF 长度的功能门控,使程序升级时可以自动调整存储程序编译代码的账户大小。

Loader v3(即目前部署和升级 Solana 程序所使用的默认 loader)会将程序编译后的 ELF 二进制文件存储在 ProgramData 账户中,并同时存储升级权限等元数据。此前,开发者只能扩展此账户,无法缩小它。因此,升级到更小的二进制文件后会留下未使用的空间,而让该空间保持免租状态所需的 SOL 仍会锁定在账户中。

完成此变更后,Upgrade 指令会将账户大小调整为元数据标头加上新 ELF 的长度。如果二进制文件变小,多余的 lamport 会释放到此次升级的溢出账户,即接收剩余资金的指定账户。如果二进制文件变大,账户会自动扩展,普通升级无需再单独执行扩展步骤。ProgramData 和缓冲区账户必须已包含足够的 lamport,以满足新的租金要求,否则升级将失败。

因此,采用更小二进制文件的开发者可在下次升级时收回 SOL。此前预留的任何备用容量也会被移除。对于通过 CPI 调用的升级,10 KiB 的账户增长上限仍然适用:如需增加更多空间,必须预先扩展账户,或使用顶层升级指令。开发者应在升级前检查溢出账户的目标地址,确保退款发送给预期接收方。

这项变更鼓励开发者升级到更新、性能更高的库和框架,例如 Pinocchio。它还会减少程序在 Accounts DB 中占用的空间。

标准化 Shred

Agave 4.4 将按照 SIMD-0317:强制采用 32 个数据 Shred + 32 个编码 Shred的规定,收紧 Solana 的区块传播规则。这会统一验证者分发和重建区块数据时使用的结构。

Solana 通过 Turbine 分发区块。Turbine 会将区块数据拆分成 shred,并通过多层验证者进行中继。Shred 会被分组为前向纠错(FEC)集,其中包含数据 shred 以及携带恢复信息的编码 shred。如果一个集合按 32 个数据 shred 和 32 个编码 shred 正确构建,接收方就能从 64 个 shred 中的任意 32 个重建原始数据,从而提高对丢包的容忍度。

每个 shred 还会携带一份 Merkle 证明,将其关联到该集合的 Merkle 根,而该根已经过领导者签名认证。对于包含 64 个 shred 的集合,该证明有六个条目,对应从叶节点到根节点之间的六个层级。Agave 的证明大小检查要求证明符合这种固定 32:32 结构的预期大小。

客户端目前已经为每个集合生成 32 个数据 shred 和 32 个编码 shred,但接收数据的验证者过去一直接受更灵活的配置。SIMD-0317 通过将固定的 32:32 结构设为协议要求,弥合了这一差异。这简化了验证:接收方无需等待编码 shred 揭示集合大小,即可确定有效的 shred 索引边界。

固定结构还简化了对双重提议的检测,即领导者分发同一数据的冲突版本。属于同一 FEC 集、具有不同 Merkle 根和有效领导者签名的两个 shred,可以作为这种冲突的证据。因此,格式标准化既降低了实现复杂度,也让双重提议更容易识别。

从奖励计算中移除非活跃质押

Agave 4.4 发布周期将激活 SIMD-0599:从质押委托中移除非活跃质押的功能门控,以简化验证者在每个 epoch 开始时分区计算 epoch 奖励期间处理非活跃质押账户的方式。非活跃质押账户持有的 SOL 可能高于免租最低余额,但其中没有处于活跃或激活过程中的质押。这些 SOL 未被委托,或已完全解除激活。

这些账户无法获得协议奖励,但将其纳入计算可能会影响奖励分发分区的数量,以及用于追踪账户状态的 lattice hash。每个验证者客户端都必须准确重现这种行为,给共识关键代码增加了不必要的复杂性。

这项变更会排除在奖励对应 epoch 内处于非活跃状态的质押,同时保留处于激活中、活跃和解除激活中的质押。因此,如果某个质押账户在新 epoch 开始时变为非活跃状态,它仍会收到在前一个 epoch 解除激活期间赚取的奖励。

进一步降低租金

Agave 4.4 预计将带来 Solana 分阶段降低租金计划的最后三次激活。根据 SIMD-0437 中制定的计划,每字节账户存储所需的最低余额将在五个阶段内从最初的 6,960 lamport 降至 696 lamport(即降低 90%)。

激活项每字节的新 lamport 数量相较初始值的总降幅
SIMD-0437-32,575~ 63%
SIMD-0437-41,322~ 81%
SIMD-0437-569690%

每次激活都有各自的功能门控,让网络可以先评估其对账户创建和状态增长的影响,再继续推进。

降低这项要求,可以减少开发者和用户创建代币账户、PDA 及其他链上状态时必须投入的资金。这对代用户承担账户创建成本的应用尤其有用,例如大规模支付服务。

Ghost 的估算显示,可赎回的 SOL 超过 300 万枚(~$3 亿)。目前已有多款工具可帮助用户收回账户中多余的 SOL。

结语

Agave 4.4 的重点变更以 Alpenglow 为基础,同时推动质押奖励、程序部署和账户成本方面期待已久的改进。这些变更将继续推动 Solana 建设速度更快、更易用的网络。接下来是 Breakpoint London,随后是 Agave 4.5。

更多资源

订阅 Helius

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

放大图片