当前位置: 首页 > news >正文

arkworks工具栈概览

1. 引言

arkworks定位为zkSNARK编程的Rust生态。其开源代码见:

  • https://github.com/arkworks-rs/

arkworks目前已广泛用于大量项目中,如:Aleo、anoma、celo、Espresso、Findora、Manta、Mina、Nimiq、penumbra等等。
在这里插入图片描述
参与arkworks开源实现的contributors众多:
在这里插入图片描述

arkworks通过通用抽象和模块化的设计,其总体工具栈架构为:
在这里插入图片描述

其中:

  • 1)Algebra(通用有限域、曲线和多项式接口层):希望达成的效果为:很容易添加实现新的域或曲线;性能与特定手工优化的实现相当甚至更优。不希望有大量重复冗余的代码和工作量。

    • 所有SNARKs都需要高效有限域运算(ark-ff),以及基于这些有限域的高效多项式运算(ark-poly)
    • 许多流行的SNARKs(如Groth16、Marlin、PLONK、Halo等)还要求实现扩域(ark-ff) 以及基于这些扩域的 椭圆曲线(ark-ec为抽象的各种traits,ark-curves为具体的椭圆曲线实现)

    基于人类工程学考虑,为实现椭圆曲线,相应的流程为:

    • 1.1)实现相关的域
    • 1.2)实现该曲线
      • 1.2.1)指定曲线方程式系数。
      • 1.2.2)指定cofactor和generator。
        在这里插入图片描述
        在这里插入图片描述
        如上所示,arkworks抽象出的接口非常简单高效,很容易实现新曲线,如:
    • 以太坊、ZCash、Algorand使用的:BLS12-381,以及相应的Jubjub和Bandersnatch曲线。
    • 以太坊使用的:BN254曲线。
    • Mina和ZCash使用的:Palla和Vesta 2-cycle曲线。
    • Celo和Aleo使用的:BLS12-377,以及相应的BW6和CP6曲线。
    • MNT6-298和MNT4-298 2-cycle曲线。
    • MNT4-753和MNT6-753 2-cycle曲线。
      在这里插入图片描述

    同时arkworks模块化的设计,其通用曲线接口规范,很容易在不同曲线间切换,如:
    在这里插入图片描述
    arkworks的通用实现,与特定专业且手工优化实现,性能相当或更优:
    在这里插入图片描述

  • 2)SNARK开发(通用SNARK和约束系统接口层):主要关心的是:性能优化;数学实现;易于比较和benchmark。不关心曲线细节,以及约束生成。
    模块化目的是:通过通用SNARK接口,使得易于在不同证明系统和多项式承诺方案间切换。
    在这里插入图片描述
    人类工程学考虑为:代码应与数学公式匹配,以便于审计和发现bug。如以Groth16 Verifier为例:
    在这里插入图片描述

  • 3)约束系统编程(通用SNARK应用框架):直接编写代数约束是痛苦的。有多种高级方法来编写约束系统并编译为代数约束,但需要在性能和人类工程学中做权衡。
    其关注的点是:好的性能;具备人类工程需的约束编写体验。不关注的点是:SNARKs细节,以及曲线细节。
    以Karatsuba乘法为例:
    在这里插入图片描述
    而arkworks的约束编写与直观算法匹配,符合人类工程学设计,易于审计:
    在这里插入图片描述

参考问下

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

http://www.lryc.cn/news/167351.html

相关文章:

  • 华为云云服务器云耀L实例评测 | 在华为云耀L实例上搭建电商店铺管理系统:一次场景体验
  • sqlserver存储过程报错:当前事务无法提交,而且无法支持写入日志文件的操作。请回滚该事务。
  • 二刷力扣--字符串
  • 如何将 OBJ 模型转换和压缩为 GLTF 以与 AWS IoT TwinMaker 配合使用
  • 零基础学前端(四)重点讲解 CSS
  • 类和对象【初始化列表与友元】
  • ActiveRecord::Migration.maintain_test_schema!
  • 逆向-beginners之helloworld
  • 如何微调甜甜圈模型——使用示例
  • 小程序中如何查看指定会员的付款记录
  • LeetCode_贪心算法_困难_630.课程表 III
  • Drozer安装
  • 752. 打开转盘锁
  • Bearly:基于人工智能的AI写作文章生成工具
  • 详解哈希,理解及应用
  • 解决js加减乘除精度丢失问题
  • 八股——const 关键字
  • QT object元对象
  • 互斥锁,条件变量,信号量的三个小demo
  • 【UE 材质】力场护盾和冲击波效果
  • 类和对象三大特性之多态
  • 为何红黑树在B/B+树之上仍然占据重要地位?
  • 【算法专题突破】滑动窗口 - 水果成篮(13)
  • Peppercontent.io:人工智能驱动的内容生成工具
  • docker镜像管理-实操
  • SpringMVC-----JSR303以及拦截器
  • 基于若依框架实现markdown在线编辑
  • CentOS7上从0开始搭建Zookeeper集群
  • 康耐视读码器DataMan软件详细使用步骤
  • 408强化(番外)文件管理