From d0e5933bddbb709e2e3c862c9370aaa841830995 Mon Sep 17 00:00:00 2001 From: LiangShuang Date: Fri, 3 Nov 2023 09:19:21 +0800 Subject: [PATCH] update syllabus --- docs/23winter/information.md | 3 ++- docs/23winter/notes/exercise2.md | 17 ++++++++++++++++ docs/23winter/notes/exercise4.md | 17 ++++++++++++++++ docs/23winter/notes/exercise6.md | 22 ++++++++++++++++++++ docs/23winter/notes/exercise8.md | 7 +++++++ docs/23winter/syllabus.md | 35 +++++++++++++++++++++----------- 6 files changed, 88 insertions(+), 13 deletions(-) create mode 100644 docs/23winter/notes/exercise2.md create mode 100644 docs/23winter/notes/exercise4.md create mode 100644 docs/23winter/notes/exercise6.md create mode 100644 docs/23winter/notes/exercise8.md diff --git a/docs/23winter/information.md b/docs/23winter/information.md index 886ee1c..2c52092 100644 --- a/docs/23winter/information.md +++ b/docs/23winter/information.md @@ -1,6 +1,7 @@ # 工作坊简介 -本次课程将以原创课程为主,面向具备一定编程经验的工程人员推出的,结合必要数学理论,并重点强调工程实践的课程。 +本次课程将以原创课程为主,面向具备一定编程经验的工程人员推出的,结合必要数学理论,并重点强调工程实践。 +每周六上两堂课,包含理论和实践两个方面内容,两堂课后会有实践环节,学员可以在每次课程中体验一种零知识证明的系统或实现。 本课程内容结合过去上课的经验,以及课程学员的反馈,重新调整内容,更加接近工程实践,并辅以必要的数学理论知识讲解,以高中数学知识为起点进行讲解。 diff --git a/docs/23winter/notes/exercise2.md b/docs/23winter/notes/exercise2.md new file mode 100644 index 0000000..d93c851 --- /dev/null +++ b/docs/23winter/notes/exercise2.md @@ -0,0 +1,17 @@ +# 第 2 课 练习 + +[Mina CTF](https://minactf.xyz/) 是一个学习 Mina 使用方法的很好的网站,里面涵盖了 ZKP 的各种基础功能,以下练习基于该项目给出。 + +## Check in + +这是最基本的 Mina 合约,可以让你快速的熟悉整个 Mina 合约的开发环境,了解我们的任务。 + +## Prime + +这个题目看起来有点奇怪,我们需要找到两个不等于 1 的数字相乘等于一个素数,这个可能吗?试试看吧! + +## Maze + +从这个题目开始,就有一点难度了,题目就是要让你走迷宫,但是迷宫在哪里,我要怎么走? + +看看你能挑战成功吗? \ No newline at end of file diff --git a/docs/23winter/notes/exercise4.md b/docs/23winter/notes/exercise4.md new file mode 100644 index 0000000..a3f7467 --- /dev/null +++ b/docs/23winter/notes/exercise4.md @@ -0,0 +1,17 @@ +# 第 4 课 练习 + +## Halo2 基本应用 - 成员证明 + +利用 Halo2 的基本 API 尝试完成成员证明的工作 ---- 对于承诺的成员小组,我可以证明我属于他们。 + +## Halo2 基本逻辑 - 判零及分支 + +我们需要实现以下简单的逻辑: + +``` +if a > b { a - b } else { c }; +``` + +## Halo2 高级应用 - 压缩 Poseidon 函数 + +你是否可以将现有的 Poseidon 函数减少列去实现? \ No newline at end of file diff --git a/docs/23winter/notes/exercise6.md b/docs/23winter/notes/exercise6.md new file mode 100644 index 0000000..b43d882 --- /dev/null +++ b/docs/23winter/notes/exercise6.md @@ -0,0 +1,22 @@ +# 第 6 课 练习 + +## 补充完整代码实现 STARK + +根据提供的 jupyter notebook,将代码补充完整,使得整个 STARK 流程完整可证明和验证。 + +## 证明 $a_{n+2}=a_{n+1}^3+a_{n}$ + +改变证明的内容,将公式改为:$a_{n+2}=a_{n+1}^3+a_{n}$ + +## 实现 Brainfuck 虚拟机 + +参考以下资料实现 Brainfuck 虚拟机 + +- https://aszepieniec.github.io/stark-brainfuck/ +- https://neptune.cash/learn/brainfuck-tutorial/ + +并尝试执行以下示例程序: + +``` +++>,<[>+.<-] +``` \ No newline at end of file diff --git a/docs/23winter/notes/exercise8.md b/docs/23winter/notes/exercise8.md new file mode 100644 index 0000000..adf046c --- /dev/null +++ b/docs/23winter/notes/exercise8.md @@ -0,0 +1,7 @@ +# 第 8 课 练习 + +## 实现基本的递归零知识证明 + + + +## 实现有先后关系的递归零知识证明 \ No newline at end of file diff --git a/docs/23winter/syllabus.md b/docs/23winter/syllabus.md index e3738c0..97622c2 100644 --- a/docs/23winter/syllabus.md +++ b/docs/23winter/syllabus.md @@ -1,21 +1,22 @@ --- +dates: + - date: 11月25日周六 + - date: 11月25日周六 + - date: 12月2日周六 + - date: 12月2日周六 + - date: 12月9日周六 + - date: 12月9日周六 + - date: 12月16日周六 + - date: 12月16日周六 lessons: - name: 现代 ZKP 漫谈 - date: 11月18日周六 - name: 算术电路技术栈 - date: 11月18日周六 - - name: ZKP 背后的现代代数 - date: 11月25日周六 + - name: ZKP 背后的抽象代数 - name: Halo2 基础电路 - date: 11月25日周六 - name: ZKP 原语 - date: 12月2日周六 - name: STARK 基础电路 - date: 12月2日周六 - name: 递归 ZKP - date: 12月9日周六 - name: Plonky2 递归电路 - date: 12月9日周六 --- @@ -53,6 +55,9 @@ function getTitle(number) { 介绍三种约束系统(R1CS、Plonk(ish)、AIR)的算术化特点,以及对应前端技术栈方案特点。 +并通过编写Mina合约,了解和练习R1CS约束系统。 + +- [练习](./notes/exercise2) @@ -62,7 +67,7 @@ function getTitle(number) { {{ getTitle(3) }} -我们主要讨论现代代数(抽象代数),理解从群环域的理论到ZKP常用的密码学基础构件。 +我们主要讨论抽象代数,理解从群环域的理论到ZKP常用的密码学基础构件。 @@ -72,8 +77,9 @@ function getTitle(number) { {{ getTitle(4) }} -本节课将会讨论实用的 zkSNARK 电路工程方法:使用 halo2 证明系统构建简单的零知识证明。我们将讨论 Plonkish 编程模型(和成本模型)和简单的电路组件,例如位运算符、范围检查等。 +本节课将会讨论实用的 zkSNARK 电路工程方法:使用 halo2 证明系统构建简单的零知识证明。我们将讨论 Plonkish 编程模型和简单的电路组件,例如位运算符、范围检查等。 +- [练习](./notes/exercise4) - 参考课程: https://learn.0xparc.org/halo2/ @@ -86,6 +92,8 @@ function getTitle(number) { 我们将讨论一些初级的ZKP原语,从汉密尔顿回路开始,包含二次剩余问题,Schnorr协议,Pedersen承诺,再到KZG承诺。 +- 参考课程: [https://zkshanghai.xyz/](../syllabus.md) + @@ -96,6 +104,7 @@ function getTitle(number) { 我们将构造一个相对复杂的证明系统,以 STARK 为例,从零构建一个可证明的二次斐波那契数列电路。 +- [练习](./notes/exercise6) - 参考课程: https://starkware.co/stark-101/ @@ -118,5 +127,7 @@ function getTitle(number) { 我们将接着上节课,利用 Plonky2 框架来实践一种实用的递归证明方法。 +- [练习](./notes/exercise8) +