简介
去年夏天,Vitalik 撰写了一篇博文,概述了不同类型的 zkEVM(零知识以太坊虚拟机)。他根据性能和兼容性的权衡轴定义了它们。
低层 zk 开发
Arkworks-rs
Arkworks-rs是一个 Rust 库生态系统,提供了 zkSNARK 应用程序的子组件的高效且安全的实现。Arkworks 提供了必要的接口,使开发人员能够定制 zk 应用程序的软件堆栈,而无需重新实现与其他现有库的共同性。
在 Arkworks 之前,创建新的 zk 应用程序的唯一方法是从头开始构建一切。与自定义构建的垂直集成工具相比,Arkworks-rs 的关键优势在于灵活性、减少重复工程和减少审计工作量。Arkworks 的合理接口使得堆栈能够在 zk 技术的快速创新步伐中保持相关性,而无需强制团队从头开始重建一切。
适用于
Arkworks 适用于需要对整个 zk 软件堆栈进行精细控制,但又不想从头开始构建所有冗余部分的项目。如果你正在考虑定制电路 DSL 的自定义版本,例如,你正在为新的证明系统做原型,但对承诺方案或相应的椭圆曲线不确定,arkworks 将允许你快速在几个具有共享接口的选项之间切换,而不是从头开始。
优点
- 通过模块化实现灵活性
- 减少代码重复
- 降低工程成本
- 减少审计/错误表面积
- 可以在不进行重大重构的情况下升级任何组件
- 在快速发展的 zk 环境中轻松尝试新的原语
缺点
- 需要对整个软件堆栈有深入的理解
- 过多的控制权可能导致不正确使用的问题
- 精细的控制需要在堆栈的所有层级上具备专业知识
- Arkworks 提供了一些合理的默认设置。
零知识领域特定语言(DSL)
为了创建关于某个计算的证明,首先必须以一种 zkSNARK 系统能够理解的形式表达这个计算。一些特定领域的编程语言为此而创建,允许应用开发者以这种方式表达他们的计算。其中包括Aztec Noir,Starknet 的Cairo,Circom,ZoKrates和 Aleo 的Leo等。底层的证明系统和数学细节通常对应用开发者不可见。
开发者体验
zkApp 开发者必须熟练掌握在特定领域语言中编写程序的技巧。其中一些语言看起来很像熟悉的编程语言,而其他一些可能相当难以学习。让我们来了解一下其中几种:
Cairo – Starkware 的 DSL,用于在 Starknet 上构建应用程序。它编译成Cairo特定的汇编语言,可以由Cairo zkVM 解释。
ZoKrates — ZoKrates 是一个工具包,用于满足常见的 SNARK 需求,包括用于编写电路的高级语言。ZoKrates 还可以在曲线、证明方案和后端方面具有一定的灵活性,允许开发者通过简单的命令行参数进行热切换。
Circom — Circom 是一个专门用于构建电路的语言。目前,它是生产中电路的事实标准语言。该语言并不特别易用。语言本身让你非常清楚地意识到你正在编写电路。
Leo — Leo 是为 Aleo 区块链开发的语言。Leo 具有类似 Rust 的语法,专门用于区块链内的状态转换。
Noir – 基于 Rust 的语法。