Skip to content

Commit

Permalink
update syllabus
Browse files Browse the repository at this point in the history
  • Loading branch information
wizicer committed Nov 3, 2023
1 parent e0062e5 commit d0e5933
Show file tree
Hide file tree
Showing 6 changed files with 88 additions and 13 deletions.
3 changes: 2 additions & 1 deletion docs/23winter/information.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# 工作坊简介

本次课程将以原创课程为主,面向具备一定编程经验的工程人员推出的,结合必要数学理论,并重点强调工程实践的课程。
本次课程将以原创课程为主,面向具备一定编程经验的工程人员推出的,结合必要数学理论,并重点强调工程实践。
每周六上两堂课,包含理论和实践两个方面内容,两堂课后会有实践环节,学员可以在每次课程中体验一种零知识证明的系统或实现。

本课程内容结合过去上课的经验,以及课程学员的反馈,重新调整内容,更加接近工程实践,并辅以必要的数学理论知识讲解,以高中数学知识为起点进行讲解。

Expand Down
17 changes: 17 additions & 0 deletions docs/23winter/notes/exercise2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# 第 2 课 练习

[Mina CTF](https://minactf.xyz/) 是一个学习 Mina 使用方法的很好的网站,里面涵盖了 ZKP 的各种基础功能,以下练习基于该项目给出。

## Check in

这是最基本的 Mina 合约,可以让你快速的熟悉整个 Mina 合约的开发环境,了解我们的任务。

## Prime

这个题目看起来有点奇怪,我们需要找到两个不等于 1 的数字相乘等于一个素数,这个可能吗?试试看吧!

## Maze

从这个题目开始,就有一点难度了,题目就是要让你走迷宫,但是迷宫在哪里,我要怎么走?

看看你能挑战成功吗?
17 changes: 17 additions & 0 deletions docs/23winter/notes/exercise4.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# 第 4 课 练习

## Halo2 基本应用 - 成员证明

利用 Halo2 的基本 API 尝试完成成员证明的工作 ---- 对于承诺的成员小组,我可以证明我属于他们。

## Halo2 基本逻辑 - 判零及分支

我们需要实现以下简单的逻辑:

```
if a > b { a - b } else { c };
```

## Halo2 高级应用 - 压缩 Poseidon 函数

你是否可以将现有的 Poseidon 函数减少列去实现?
22 changes: 22 additions & 0 deletions docs/23winter/notes/exercise6.md
Original file line number Diff line number Diff line change
@@ -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/

并尝试执行以下示例程序:

```
++>,<[>+.<-]
```
7 changes: 7 additions & 0 deletions docs/23winter/notes/exercise8.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# 第 8 课 练习

## 实现基本的递归零知识证明



## 实现有先后关系的递归零知识证明
35 changes: 23 additions & 12 deletions docs/23winter/syllabus.md
Original file line number Diff line number Diff line change
@@ -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日周六
---

<script setup>
Expand All @@ -24,9 +25,10 @@ import { isProxy, toRaw } from 'vue';

const { frontmatter } = useData()
const lessons = toRaw(frontmatter.value).lessons
const dates = toRaw(frontmatter.value).dates

function getTitle(number) {
return `${number} 课【${ lessons[number - 1].date }${ lessons[number - 1]?.name }`;
return `${number} 课【${ dates[number - 1].date }${ lessons[number - 1]?.name }`;
}
</script>
Expand All @@ -53,6 +55,9 @@ function getTitle(number) {
<!-- ::: details {{ getTitle(2) }} -->
介绍三种约束系统(R1CS、Plonk(ish)、AIR)的算术化特点,以及对应前端技术栈方案特点。
并通过编写Mina合约,了解和练习R1CS约束系统。
- [练习](./notes/exercise2)
</details>
<!-- ::: -->
Expand All @@ -62,7 +67,7 @@ function getTitle(number) {
<summary>{{ getTitle(3) }}</summary>
<!-- ::: details {{ getTitle(3) }} -->
我们主要讨论现代代数(抽象代数),理解从群环域的理论到ZKP常用的密码学基础构件。
我们主要讨论抽象代数,理解从群环域的理论到ZKP常用的密码学基础构件。
</details>
<!-- ::: -->
Expand All @@ -72,8 +77,9 @@ function getTitle(number) {
<summary>{{ getTitle(4) }}</summary>
<!-- ::: details {{ getTitle(4) }} -->
本节课将会讨论实用的 zkSNARK 电路工程方法:使用 halo2 证明系统构建简单的零知识证明。我们将讨论 Plonkish 编程模型(和成本模型)和简单的电路组件,例如位运算符、范围检查等。
本节课将会讨论实用的 zkSNARK 电路工程方法:使用 halo2 证明系统构建简单的零知识证明。我们将讨论 Plonkish 编程模型和简单的电路组件,例如位运算符、范围检查等。
- [练习](./notes/exercise4)
- 参考课程: https://learn.0xparc.org/halo2/
</details>
Expand All @@ -86,6 +92,8 @@ function getTitle(number) {
我们将讨论一些初级的ZKP原语,从汉密尔顿回路开始,包含二次剩余问题,Schnorr协议,Pedersen承诺,再到KZG承诺。
- 参考课程: [https://zkshanghai.xyz/](../syllabus.md)
</details>
<!-- ::: -->
Expand All @@ -96,6 +104,7 @@ function getTitle(number) {
我们将构造一个相对复杂的证明系统,以 STARK 为例,从零构建一个可证明的二次斐波那契数列电路。
- [练习](./notes/exercise6)
- 参考课程: https://starkware.co/stark-101/
</details>
Expand All @@ -118,5 +127,7 @@ function getTitle(number) {
我们将接着上节课,利用 Plonky2 框架来实践一种实用的递归证明方法。
- [练习](./notes/exercise8)
</details>
<!-- ::: -->

0 comments on commit d0e5933

Please sign in to comment.