第一周 (10.15~10.21):

  1. 课程学习资料:

    1. 理解 PLONK 系列
    2. 1-basic concepts
    3. 0xPARC halo2 Introduction
  2. 课程学习目标: Understanding and building user-facing applications with Halo2 and PLONKish proving systems

第二周 (10.22~10.28):

  1. 课程学习资料:
  2. 课程学习目标:
    • 理解 halo2 中 Circuit、region、Layouter、custom gate、constraints 等概念及其 API 代码 represent.
    • 能够理解 Fibonacci 示例和 isZero 示例的电路构建流程

第三周 (10.29~11.04)

  1. 课程学习资料:

  2. 课程学习目标:

    • 掌握 halo2 中 lookup / lookup_any API 的使用,及其常见应用场景(如 Range-check)

第四周 (11.06~11.12)

  1. 课程学习资料:
  2. 课程学习目标:
    • decompose 是一个综合性的代码实践,要求我们在阅读源码的同时掌握 halo2 的核心 API。

第五周 (11.13~11.19)

① zkEmail

本周以 zkEmail 为例的 zk 应用实例的 halo2 真实应用场景代码实践。

zkEmail 学习方法论:

首先要明确学习目标,学习 zkEmail 能学到什么?我觉得有以下几点:

  1. zk email 是一个解决“实际业务”的中型电路系统;
  2. zk email 是强烈依赖 halo2-base 的,而 halo2-base 对 halo2 电路有着一定的优化,主要体现在接口优化和灵活的行列设计;
  3. zk email 中会涉及到 RSA,biguint,sha256,regex,base64 等电路;代码模块比较清晰,每个模块也有例子,一周时间学习全部的内容有点多,大家可以根据需求学习;

如果有对以上有兴趣的同学可以学习 zk email 的学习路线建议:

  1. 我觉得可以先从 halo2-base 入手,学习 axiom 对 halo2 做的优化;
  2. 选择一个感兴趣的模块分析代码切入,逐步深入,比如 从 biguint 计算 => RSA , 逐步把 RSA,Regex,Sha256 这几个电路理解,再理解 zk email 是如何像堆积木一样把整个大电路堆积起来的;

halo2-zk-email 中可以学习到的更多是在电路前端设计上,规模属于中型应用,可能还是花费一些时间的。

  • 由 @DK(零与一)@secbit 帮助整理 ~

top-down 的 approach:

  • 由 @Kurt Pan 帮助整理 ~

② zkEVM

下次 oh 会介绍一下 zkevm。以 PSE/Scroll zkevm-circuit 代码为例子。

可以先通过 https://www.evm.codes 了解一下 EVM 指令集,在 playground 玩一下感兴趣的指令。

然后,通过下面的资料了解下 evm bytecode 的组成格式,执行过程。

最后,推荐 PSE 的 zkevm-specs,文档中详细定义了 zkevm 电路的约束,并且提供了对应的 python 代码。








**前置学习 (PLONK & Rust):**

必备学习材料:

  1. 0xPARC Halo2 是主要参考的视频课程
  2. 参考代码 是对课程 Reference 代码必要的优化和版本升级
  3. 参考文档: z2o-k7e-Halo2 是部分电路图解 & 对代码更细致的阐释(仍更新中…) 1
  4. 其他必读参考:
    1. zcash halo2 book / github 理论内容偏多,可以当做字典反复查看
    2. zcash halo2 book 中文翻译 / github

其他参考资源:


for 纯新手:

  1. 新手学习 ZKP 可以参考新手村入门攻略 https://learn.z2o-k7e.world/zk-everything/zk-roadmap.html (must)
  2. 学习 PLONK 郭老师的系列没跟上非常正常,一般正常人都大概需要反复读 5 遍,各种概念不断交叉记忆,相互关联,然后才能建立一些直观的印象
  3. 有了一定的印象后,可以参考 @Harry L 为文档写的 python 代码,手敲印证,加深印象 (optional)
  4. 学习 Rust 编程 (must)
  5. halo2 学习方法论: https://learn.z2o-k7e.world/halo2/halo2.html (must)

!有任何看不懂的 Part 都可以提 issue 或者 Q&A ~

备注:因为现在还没有关于 halo2 特别好的一站式课程,所以很多参考资源需要反复研究 & 交叉印证

1

目前我们正在对部分教程内容进行重新的整理&修改,会随着课程逐步更新和优化,欢迎 👏🏻 PR 和 issue !