
关于 Solana v1.16 更新,你需要了解的一切
本文讲了什么?
Solana 验证者网络在采用最新的 Solana Labs 验证者客户端升级版本 1.16 方面,已成功达到绝对多数。经过全面审计,并在志愿者和金丝雀节点的不懈努力下,这一里程碑为近十个月的严格开发工作画上了句号。
接下来,我们将深入介绍 v1.16 的测试方式以及 Solana 的功能门控系统。该框架用于管理新功能如何分阶段部署到网络。随后,我们会介绍 v1.16 实现的新功能。
v1.16 是如何测试的?
过去几个月,v1.16 经历了严格测试。v1.16 版本自 2023 年 6 月 7 日起一直在测试网运行,并接受了多次压力测试。此外,从 2023 年 8 月 23 日开始,一小部分志愿者节点升级到了 v1.16。这些志愿者发现并解决了多项问题,例如 RPC 节点启动缓慢和一般保护错误。Solana Labs 还在主网 Beta 版部署了多个金丝雀节点,以监控 v1.16 节点在真实环境中的稳定性。要查看这些金丝雀节点过去的活动和进展,请访问 Solana Tech Discord 中的 #canaries-monitoring 频道。
为了捕获边界情况或不常出现的竞争条件,团队使用了多个运行时模糊测试工具来执行部分随机化的交易。这些交易会在不同的运行时版本上执行,以确保性能一致。v1.16 还接受了 Halborn 的全面审计。审计报告将在完成后陆续发布到此代码仓库。
功能门控
需要注意的是,我们将在后续章节讨论的部分功能目前尚未上线。这些功能会通过功能门控系统逐步推出。系统会根据相对优先级及功能在其他网络上的激活顺序,在特定 epoch 激活功能。到目前为止,功能门控的激活安排会根据一系列标准进行临时调整,具体标准可在此处查看。通常,这些门控应先在测试网激活,然后是开发网,最后是主网 Beta 版。要激活功能,持有必要激活密钥对的工程师会发送一笔交易。该交易处理完成后,功能将在下一个 epoch 上线。为确保正常运行,每个网络一次只能激活一个功能门控。还需要注意,部分功能可能需要一段“观察”期,这可能会推迟较低优先级门控的激活。
功能门控系统旨在确保破坏共识的变更不会导致运行新版本的验证者从规范链分叉出去后继续出块。例如,v1.14 验证者不了解 v1.16 的新功能,当出现分歧时可能导致网络崩溃。本周合并到 Solana 代码库的一项提交建议所有破坏共识的变更都应具备 Solana 改进文档(SIMD)。现在,功能门控的议题模板会要求提供对应议题的 SIMD。这有助于标准化开发流程,并通过文档提高新变更的透明度。
机密转账
机密转账是 Token2022 引入的一项功能,它利用零知识证明加密 SPL 代币的余额和交易金额。该功能主要通过强调保密性而非匿名性来改善用户隐私。
机密转账利用扭曲 ElGamal 加密对加密金额执行数学运算。这些转账通过 Sigma 协议进行验证。Sigma 协议是一类特殊的零知识证明,其中一方(证明者)可以向另一方(验证者)证明自己知道某个秘密,而无须真正披露该秘密。要深入了解机密转账的工作原理,请务必阅读我们的文章 什么是 Token2022?。
伴随机密转账推出的一项实用功能是新增了命令行界面(CLI)支持。create-token 命令现已扩展,加入 --enable-confidential-transfers 标志,用户可借此铸造启用了机密转账的代币。此外,还新增了 update-confidential-transfer-settings 命令,以便动态更改指定铸币账户的机密转账配置。这样即可更新审计员密钥和审批设置。
更完善的零知识证明运行时支持
v1.16 版本增强了对零知识计算的运行时支持,尤其是 128 位椭圆曲线运算,从而提升了 Solana 的零知识能力。v1.16 引入了 alt_bn128 系统调用,这对高效生成证明至关重要。
alt_bn128 指用于加密运算的一种特定椭圆曲线实现,即 Barreto-Naehrig 曲线(BN-128)。BN-128 是一种特定的配对友好型椭圆曲线,能够高效实现 zk-SNARK(零知识简洁非交互式知识论证)。顺便说明,如果一条椭圆曲线能让某些计算更高效地完成,就可以认为它“配对友好”。因此,在这里使用 BN-128 曲线可以大幅加快零知识数学运算和证明处理速度。
Syscall 即系统调用,用于向操作系统内核请求服务。在 Solana 中,系统调用允许运行于 Solana 虚拟机(SVM)中的程序与外部资源交互。
因此,alt_bn128 系统调用是 Solana 程序用来与高效 BN-128 曲线交互的调用。它简化了零知识证明的验证流程,为 Solana 带来更完善的安全和隐私功能。近期还新增了 alt_bn128 g1 和 g2 系统调用,可用于压缩 Groth16 证明。这一点非常重要,因为每个此类证明会占用 256 字节的指令数据,而隐私 Solana 程序(PSP)目前需要验证两个 Groth16 证明。通过 g1 和 g2 压缩,每个证明所需的字节数可减半至 128 字节,这对提高空间效率至关重要。
此外,如果基于 Solidity 的合约调用以下用于椭圆曲线运算的预编译合约,就会遇到与 Solana 的兼容性问题:
- bn256Add - 执行椭圆曲线加法运算
- bn256ScalarMult - 执行椭圆曲线标量乘法运算
- bn256Pairing - 在区块 gas 限制内执行 zkSNARKs 验证的椭圆曲线配对运算
这些运算已通过 EIP-196、EIP-197 和 EIP-198 在 Ethereum 上实现标准化。alt_bn128 系统调用的引入,是弥合兼容性差距的重要一步。依赖这些椭圆曲线运算的 Solidity 合约现在可以更轻松地迁移到 Solana,甚至与 Solana 互操作。
Solana v1.16 更新加入 alt_bn128 系统调用,标志着 Solana 在高效、安全地处理零知识证明方面取得了重大进展。如果你想进一步了解 alt_bn128 系统调用,请查看以下拉取请求:
验证者
v1.16 更新大幅降低了验证者的 RAM 使用量。Solana 之前依赖 RAM 为账户建立索引。现在,系统已重新配置,默认在磁盘上为账户建立索引,从而显著减少 RAM 使用量。来自 Luganodes 的 Yanshu 指出,自 v1.16 发布以来,他们的验证者仅使用约 ~39 GB RAM 就能流畅运行,而之前版本需要约 ~120 GB:
v1.16 版本还引入了重新设计的 gossip 拉取请求对等节点采样系统。这个新系统可以有效降低验证者启动时的带宽使用量。在之前的版本中,大量 gossip 拉取请求可能导致验证者遇到带宽限制。这会拖慢验证者,甚至使其不堪重负。v1.16 通过引入“距上次请求的时间”变量来解决这一问题。该变量用于评估传入流量水平并实施速率限制,防止验证者在启动时过载。
落后于网络的质押验证者现在可以借助新的修复请求功能更快追上当前状态,该功能会按质押量分配资源。当质押量较大的验证者从网络分叉出去时,它们会发出修复请求。由于持有较大质押量,该验证者现在能更快获得 shred。这样可以确保验证者不再脱离网络分叉,并能继续做出贡献。对于修复请求,质押验证者的优先级高于 RPC 节点,因为 RPC 节点并不负责出块。
发起 shred 修复的延迟阈值也从 100ms 提高到了 200ms。此项更改旨在减少针对最终会通过 Turbine 传输的 shred 所发出的修复请求。顺便说明,Turbine 是 Solana 用来向所有节点广播账本条目的多层区块传播机制。在该机制中,Solana 集群会划分为多个节点层级,每个层级中的节点负责将数据传播到下游层级。这项调整至关重要,因为它可以尽量减少不必要的修复请求,从而提高 Turbine 数据传播的效率。
运行自己的验证者从未如此简单。如果你有意运营自己的验证者,Solana 提供了 Solana 验证者培训,这是一系列可在其 YouTube 频道观看的验证者研讨会。
支持可调整大小的账户
在 Solana 上部署程序时,为程序分配的空间始终是程序大小的两倍。v1.16 允许你使用可调整大小的数据账户部署程序。这意味着,你可以先使用较小的账户部署程序,之后再扩展账户大小,并为增加的内存支付费用。对可调整大小账户的支持,为在 Solana 上部署应用的开发者提供了更大的灵活性和更合理的资源分配方式。
Epoch 账户哈希
在之前的版本中,区块和状态中所有账户的验证存在问题。如果验证者长时间未与某个账户交互,该验证者可能持有此账户的损坏版本,却对此毫不知情。这是因为没有交易修改该账户的状态,因此其账户状态不会与其他验证者节点持有的状态进行核对。
v1.16 通过引入 Epoch 账户哈希解决了这一问题。它是所有账户的哈希值,会在每个 epoch 结束时生成,即使这些账户从未发生交互。Epoch 账户哈希允许网络识别持有损坏数据的节点,并将其从网络中分叉出去,从而提升 Solana 的完整性和安全性。
系统调优
系统调优是优化验证者操作系统和硬件配置以实现最佳性能的过程。在 v1.16 版本中,solana-sys-tuner 已被移除,现在建议进行手动测试。之所以移除它,是因为在之前的版本中,RocksDB 的 TransactionStatus 和 AddressSignature 列无法得到妥善清理。此外,周期性压缩这一用于回收存储空间的流程默认处于禁用状态。这导致使用 --enable-rpc-transaction-history 标志的节点中,这些列会无限增长。得益于以下提交,现在使用该标志的验证者可以更高效地管理存储空间。通过不再存储不必要的交易状态和地址签名,这项改进显著简化了验证者的存储要求。
总结
Solana v1.16 版本凝聚了十个月的开发成果,是一个重要里程碑。由于 QUIC 被优先处理,该版本发布较慢,因此机密转账、零知识支持和验证者优化方面的这些进展可谓姗姗来迟。尽管如此,这些改进仍具有开创性。该版本将 Solana 的效率和隐私提升到了新高度。
展望未来,Solana Labs 正在转向更敏捷的发布周期,目标是大约每三个月发布一个新版本。未来版本的规模会比 v1.16 小得多。这将加快迭代速度,并降低部署风险。你可以在此处查看 v1.17 的发布计划。它同样备受期待,将提供更完善的零知识支持,并可能引入 Posidon 系统调用。
如果你已经读到这里,匿名朋友,谢谢你!随着发布周期变得更加敏捷,并不断推出新功能和改进,Solana 的未来比以往任何时候都更值得期待。无论你是开发者、投资者、验证者,还是 Solana 爱好者,都请密切关注即将发布的新版本!你的 Solana 之旅才刚刚开始。
其他资源 / 延伸阅读
相关文章
订阅 Helius
及时了解 Solana 开发的最新动态,并在我们发布新内容时收到更新


