# 推出 SP1：一款高性能、完全开源、对贡献者友好的 zkVM

By [Web3DAO](https://paragraph.com/@web3dao) · 2024-03-29

---

      我们很高兴地宣布推出 Succinct Processor 1 (SP1)：我们的第一代零知识虚拟机 (zkVM)，可验证任意 Rust（或任何 LLVM 编译语言）程序的执行情况。 SP1 的目标是比现有的 zkVM 实现一个数量级的性能提升——对于某些程序来说，其 alpha 版本已经**快了 28 倍**，并且与基于电路的方法相比更具有竞争力。

      SP1 是一个 100% 开源、对贡献者友好的公共产品，它采用协作方法为 rollups、协处理器和其他 ZKP 应用程序构建最好的 zkVM。 SP1 不断发展，打破了黑盒 zkVM 难以定制并跟上最新证明系统进步的现状。立即开始使用 SP1[进行构建并](https://succinctlabs.github.io/sp1/?ref=blog.succinct.xyz)[做出贡献](https://github.com/succinctlabs/sp1?ref=blog.succinct.xyz)。

### **真理的未来是可编程的**

      零知识证明（ZKP）是一种强大的基础工具，它将助力新一代更加安全、可扩展且创新的区块链架构，这些架构依赖于[事实而非信任](https://blog.succinct.xyz/succinct-network/)。然而，ZKP的普及受到了阻碍，因为它被视为“天书般的数学”，需要在晦涩的ZKP框架中掌握专业技能，且难以维护一次性部署。像SP1这样的高性能、通用型zkVM将淘汰当前专门团队手工定制自有ZK堆栈的模式，开创一个未来：所有的区块链基础设施，包括Rollups、桥接器、协处理器等，都将通过使用Rust（或其他基于LLVM编译的语言）编写的易于维护的**软件**来利用ZKP。

![](https://storage.googleapis.com/papyrus_images/31c95a5c54d3dfd864681fb2b1b5c5f04dd71c0541b05288fed217feae89027f.png)

### **最先进的性能**

      SP1在受常见区块链用例启发的多个实际工作负载上实现了顶尖性能，例如桥接和验证Merkle证明。我们的性能是多个设计选择的结果，这些选择利用了最新的证明系统进展，包括跨表查找架构、可定制的“预编译”系统，这些系统可以在不增加太多递归开销的情况下加速几乎任何性能瓶颈等等。

      SP1 首次证明，通用型 zkVM 可以拥有与基于电路方法相竞争的性能，同时将开发人员生产力提高几个数量级。

**SP1 在实际工作负载上的性能比现有 zkVM 高出 28 倍**

      我们在多种程序上对 SP1 进行基准测试，结果显示在三个实际工作负载场景下，其性能比同类竞品提升了4至28倍。基准测试在配备64个基于ARM架构CPU及512GB内存的单台机器上测量了端到端证明时间。在实际生产环境中，两种方法均可以通过集群内的并行证明大幅降低延迟。

![](https://storage.googleapis.com/papyrus_images/0f3030c50f9207381db069e47b127b299cfe0aa12fa6872a9dac5676c545d4db.png)

      SP1的极速速度对于真实世界应用来说是一个游戏规则的改变者，例如ZK Tendermint轻客户端，它将证明时间从2.2小时缩短到**4.6分钟**。有关我们方法的更多信息，请参阅附录。

**SP1 与基于电路的方法相比具有竞争力，同时将开发人员的生产力提高了 100 倍以上**

      或许比SP1与现有zkVM的最先进性能更有趣的是，其以预编译为中心的架构允许与（有时超过）定制手工电路的性能竞争。在下面的案例中，我们将SP1证明的基准测试与Succinct团队之前为生产中各种重要用例编写的最先进定制电路进行比较。在SSZ Merkle证明验证程序的情况下，VM实际上比电路更快，因为VM的灵活性允许进行电路不允许的条件计算。

![](https://storage.googleapis.com/papyrus_images/ce03ee456a4ce87c462e537c73347847d579aa6f23ace6088d0367415ecce68b.png)

**与定制电路相比，SP1 的开发时间快 100 倍以上且更易于维护，同时证明生成速度/成本仍然具有竞争力**

### **成立之初就可以由多元化的贡献者组成得生态系统进行定制和维护**

      如今，zkVM往往由孤立的公司采用单一整体架构构建，导致其难以定制化，且难以及时跟进最新的技术进步。我们挑战这种做法。[SP1](https://github.com/succinctlabs/sp1?ref=blog.succinct.xyz) 是一款**100%开源**（采用 MIT/Apache 2.0 许可）的产品，没有代码混淆，并且对**贡献者友好**，所有开发都是公开完成的。与现有 zkVM 的约束逻辑封闭源代码且无法修改不同，SP1 采用了模块化架构，从第一天起就旨在实现高度可定制化。这种 SP1 独具的定制化能力允许用户向核心 zkVM 逻辑添加“预编译”，从而获得显著的性能提升。这样一来，SP1 不仅在与现有 zkVM 的对比中展现出最先进的性能，而且在多种应用场景中还能与电路方案竞争。

**拥抱开源**[**集市**](https://en.wikipedia.org/wiki/The_Cathedral_and_the_Bazaar?ref=blog.succinct.xyz)

      SP1 尽可能利用高质量、生产级别的开源依赖项，如 [Plonky3](https://github.com/Plonky3/?ref=blog.succinct.xyz)，以此结合零知识创新的指数级进步，构建出**面向未来**的 zkVM。我们坚信，最终形态的 zkVM 将类似于 Linux 项目：一款免费、开源的软件，采用宽松许可，由来自多元公司和地域背景的活跃贡献者社区共同维护。目前，已有多个团队和个人向 SP1 合并了 PR（拉取请求），包括 Succinct Labs、Sina（Witness CEO）、Aayush（ZK email）、Preston（Sovereign Labs CTO）等。

      SP1 仍处于开发进程中，尚有许多工作有待完成。我们秉持透明原则，今日将其开源，并诚邀社区与我们一起共同打造最优秀的 zkVM。

### **使用 SP1 构建**

      SP1 的代码可以在此存储库中找到： [https: //github.com/succinctlabs/sp1](https://github.com/succinctlabs/sp1?ref=blog.succinct.xyz)。请注意，SP1 处于 alpha 阶段，尚未用于生产用途。

      如今，开发人员可以用 Rust（支持 std）编写程序（包括复杂的大型程序，如 Tendermint 轻客户端）、生成证明并验证它们。 SP1 已经支持通过将长计算分片为更小的分片来证明任意长度的程序，然后生成所有分片的全局证明。立即开始使用 SP1 进行构建： [https: //succinctlabs.github.io/sp1/](https://succinctlabs.github.io/sp1/?ref=blog.succinct.xyz)。

查看一些可以在 SP1 基础上构建的令人兴奋的案例：

*   [优化的 Tendermint 轻客户端](https://github.com/succinctlabs/sp1/issues/233?ref=blog.succinct.xyz)
    
*   [优化的以太坊轻客户端](https://github.com/succinctlabs/sp1/issues/229?ref=blog.succinct.xyz)
    
*   [无状态 EVM 协处理器](https://github.com/succinctlabs/sp1/issues/228?ref=blog.succinct.xyz)
    

**为 SP1 做出贡献**：如果您有兴趣为 SP1 本身做出贡献，请查看Github 存储库中的[未决问题](https://github.com/succinctlabs/sp1/issues?ref=blog.succinct.xyz)列表。

**路线图：** 在接下来的几个月中，我们计划对核心 VM 约束和逻辑进行审核，优化 SP1 的性能，并添加对递归链上验证的支持，这将允许将 SP1 的 STARK 证明转换为 groth16，以便在以太坊智能合约中能够低价使用链上。

### **致谢**

      SP1 是建立在这个领域巨人的肩膀上的。我们要感谢 StarkWare 作为 STARK 和 zkVM 的最初先驱，感谢 Polygon Zero Labs 团队创建了[Plonky2](https://github.com/0xPolygonZero/plonky2?ref=blog.succinct.xyz)和[Plonky3](https://github.com/Plonky3/?ref=blog.succinct.xyz)（构建 SP1 的基础开源依赖项），感谢 Risc0 实现了 RISC-V zkVM 的愿景， Daniel Lubarov 和 Max Gillet 在 Valida 上的工作开创了跨表查找架构，Ulrich Habock 在 Logup 上的工作，以及 ZK 领域无数其他人对我们工作的启发。

### **附录**

**与其他 zkVM 的性能比较：**

![](https://storage.googleapis.com/papyrus_images/463e9556e3b2771999a87d985fd6f78ca1d1111591cb70bb8790382d61cd48a8.png)

**与电路的性能比较：**

![](https://storage.googleapis.com/papyrus_images/860fd7d07e06ee013312609df37f7a5eb01eca69a7992c0071a3a2feb7cef6cc.png)

**基准测试方法**

      基准测试程序可以在 SP1 示例目录中找到（[Fibonacci](https://github.com/succinctlabs/sp1/tree/main/examples/fibonacci?ref=blog.succinct.xyz)、[SSZ Merkle Proofs](https://github.com/succinctlabs/sp1/tree/main/examples/ssz-withdrawals?ref=blog.succinct.xyz)、[Tendermint ZK Light Client](https://github.com/succinctlabs/sp1/tree/main/examples/tendermint?ref=blog.succinct.xyz)）。对于每个程序，我们为两个 zkVM 生成了一个证明，并修补了所有相关的包（包括 sha2、crypto-bigint 和 curve25519-dalek 包）。 “周期数”列是程序执行的 RISC-V 指令的数量。证明生成时间以秒为单位，验证时间以毫秒为单位。请注意，Tendermint 程序的周期计数以 2 个数字的形式提供，因为 SP1 zkVM 中的周期计数明显较小，因为 SP1 对预编译的一流支持，而在 Risc0 中很难添加预编译，因为约束逻辑是闭源的。 SP1 的架构允许添加预编译，而不会显着影响递归开销，从而显着减少复杂程序的周期计数，从而提高证明生成性能。对于所有其他程序，两个 zkVM 之间的周期计数相对相似。

我们选择对 SP1 和 Risc0 zkVM 使用poseidon 哈希函数，因为poseidon 是许多团队使用的标准、递归友好的哈希函数。所有其他设置都是其存储库中的默认 Risc0 验证器设置。该基准测试在 AWS Linux ARM CPU 计算机 (r6a.16xlarge)、64 个 vCPU 和 512GB RAM 上运行，保留价格为每小时 1.64 美元。

**注意**：请注意由于 zkVM 性能非常复杂、多维度（包括硬件、单节点与多节点性能、内存使用、递归成本、哈希函数选择等因素），这些基准测试仅提供简化的视图的性能。我们尽力提供尽可能公平的比较，尽管单个基准很难捕捉所有细微差别。此外，由于 SP1 仍在开发中，因此性能数据还不是最终的，预计会随着时间的推移而改进。

---

*Originally published on [Web3DAO](https://paragraph.com/@web3dao/sp1-zkvm)*
