arkworks定位为zkSNARK编程的Rust生态。其开源代码见:
arkworks目前已广泛用于大量项目中,如:Aleo、anoma、celo、Espresso、Findora、Manta、Mina、Nimiq、penumbra等等。

参与arkworks开源实现的contributors众多:

arkworks通过通用抽象和模块化的设计,其总体工具栈架构为:

其中:
1)Algebra(通用有限域、曲线和多项式接口层):希望达成的效果为:很容易添加实现新的域或曲线;性能与特定手工优化的实现相当甚至更优。不希望有大量重复冗余的代码和工作量。
基于人类工程学考虑,为实现椭圆曲线,相应的流程为:



同时arkworks模块化的设计,其通用曲线接口规范,很容易在不同曲线间切换,如:

arkworks的通用实现,与特定专业且手工优化实现,性能相当或更优:

2)SNARK开发(通用SNARK和约束系统接口层):主要关心的是:性能优化;数学实现;易于比较和benchmark。不关心曲线细节,以及约束生成。
模块化目的是:通过通用SNARK接口,使得易于在不同证明系统和多项式承诺方案间切换。

人类工程学考虑为:代码应与数学公式匹配,以便于审计和发现bug。如以Groth16 Verifier为例:

3)约束系统编程(通用SNARK应用框架):直接编写代数约束是痛苦的。有多种高级方法来编写约束系统并编译为代数约束,但需要在性能和人类工程学中做权衡。
其关注的点是:好的性能;具备人类工程需的约束编写体验。不关注的点是:SNARKs细节,以及曲线细节。
以Karatsuba乘法为例:

而arkworks的约束编写与直观算法匹配,符合人类工程学设计,易于审计:

[1] 2022年4月视频 arkworks: Rust Ecosystem for zkSNARKs