这是一种非常有用的启发式方法,可以区分支持 zkEVM 的方法。但是,zkEVM 是构建零知识应用程序的所有可能方法的一个子集。对于想要利用 zk 计算的独特属性(即 简洁性、零知识和正确性)的程序员来说,zkEVM 可能不是最佳选择。通过布置整套开发人员工具,我希望提供一个指南,帮助您围绕适合您的应用程序的正确 zk 堆栈做出决策。
. _/ M0 ^5 j; N
在过去的一两年中,zk 工具取得了巨大的进步。他们正在接近普通软件开发人员可以利用 zk 的强大属性而无需深入了解令人生畏的底层数学和工程的地步。另一方面,为高级用户提供的工具激增,使 zk 专家能够极其精细地控制 zk 堆栈。
抽象复杂性的力量
! J) u {# \ g0 y- P& e# q
现代软件建立在无数的抽象层之上,以最大限度地提高专家的生产力。工程中的抽象有很多优点,有些直观——Web 开发人员不需要深入了解操作系统的工作原理。
0 O% a p. F4 e" f$ l
构建良好的、可重用的抽象层的关键是封装层的复杂性,然后为堆栈中的更高层提供简单但富有表现力的接口以供使用。如果处理得当,这使具有不同专业知识和知识领域的开发人员能够跨堆栈构建有用的工具。
毫不奇怪,这些相同的原则适用于 zk 系统,并且这些抽象层变得足够成熟,zk 新手今天就可以开始使用它们并构建应用程序。+ y$ Z: _. ]$ e& o
底层zk开发
Arkworks-rs
9 z! J) q* C" o/ e1 U: F
Arkworks-rs 是一个 Rust 库生态系统,它提供 zkSNARK 应用程序子组件的高效和安全实现。Arkworks 为开发人员提供了必要的接口来为 zk 应用程序定制软件堆栈,而无需重新实现与其他现有库的共性。4 {- {* Y! j/ y9 V. \& \: Z+ @
' G8 Z# g7 ?+ x6 P/ `
在 Arkworks 之前,创建新的 zk 应用程序的唯一方法是从头开始构建所有内容。Arkworks-rs 相对于定制的垂直集成工具的主要优势在于灵活性水平、重复工程的减少以及审计工作的减少。Arkworks 组件之间合理的接口线允许一定的升级速度,可以在 zk 技术创新的迅猛步伐中保持堆栈的相关性,而无需强迫团队从头开始重建一切。1 X! Z$ F& P- w
Arkworks 适用于需要对整个 zk 软件堆栈进行精细控制,但又不想从头开始构建所有冗余部分的项目。如果你正在考虑电路 DSL 的自定义版本,例如,你正在制作一个新的证明系统的原型,但不确定承诺方案或相应的椭圆曲线,arkworks 将允许你在具有共享接口的多个选项之间快速切换,而不是从头开始。" S$ y4 o; \! z0 I% y
) x! G- V8 H; k& C' L
优点. M, @) W" c1 a
通过模块化实现灵活性1 U e0 t+ C8 c. |+ i$ V. S
减少重复代码. [: a+ s+ _9 D. @
4 V' E7 e0 j& |5 B6 E6 ]3 G# w
降低工程成本; g$ h! l5 b X, t
减少审计/错误表面积
无需重大重构即可升级任何组件
易于在快速发展的 zk 环境中试验新原语缺点
8 G: p3 M% l5 g$ u" V* H3 u
需要深入了解完整的软件堆栈 _2 C; O0 J4 E& g- y
如果没有正确理解,太多的控制会导致脚枪2 k" Z, \: P4 U" C _' W# n
) X2 C0 w2 H5 ~6 f# F" D
精细控制需要堆栈所有级别的专业知识
% @- v, I( Y/ A6 c
Arkworks 确实提供了一些合理的默认值。zk 领域特定语言 (DSL)
为了创建关于某些计算的证明,首先该计算必须以 zkSNARK 系统可以理解的形式表达。一些特定于领域的语言已经创建了允许应用程序开发人员以这种方式表达他们的计算的编程语言。其中包括 Aztec Noir、Starknet 的 Cairo、 Circom、 ZoKrates和 Aleo 的 Leo 等。底层证明系统和数学细节通常不会暴露给应用程序开发人员。" _4 H2 D. g# C
/ Y3 ^) h" U/ e: o+ H# \1 X5 Y