timezone |
---|
Asia/Shanghai |
请在上边的 timezone 添加你的当地时区,这会有助于你的打卡状态的自动化更新,如果没有添加,默认为北京时间 UTC+8 时区 时区请参考以下列表,请移除 # 以后的内容
timezone: Pacific/Honolulu # 夏威夷-阿留申标准时间 (UTC-10)
timezone: America/Anchorage # 阿拉斯加标准时间 (UTC-9)
timezone: America/Los_Angeles # 太平洋标准时间 (UTC-8)
timezone: America/Denver # 山地标准时间 (UTC-7)
timezone: America/Chicago # 中部标准时间 (UTC-6)
timezone: America/New_York # 东部标准时间 (UTC-5)
timezone: America/Halifax # 大西洋标准时间 (UTC-4)
timezone: America/St_Johns # 纽芬兰标准时间 (UTC-3:30)
timezone: America/Sao_Paulo # 巴西利亚时间 (UTC-3)
timezone: Atlantic/Azores # 亚速尔群岛时间 (UTC-1)
timezone: Europe/London # 格林威治标准时间 (UTC+0)
timezone: Europe/Berlin # 中欧标准时间 (UTC+1)
timezone: Europe/Helsinki # 东欧标准时间 (UTC+2)
timezone: Europe/Moscow # 莫斯科标准时间 (UTC+3)
timezone: Asia/Dubai # 海湾标准时间 (UTC+4)
timezone: Asia/Kolkata # 印度标准时间 (UTC+5:30)
timezone: Asia/Dhaka # 孟加拉国标准时间 (UTC+6)
timezone: Asia/Bangkok # 中南半岛时间 (UTC+7)
timezone: Asia/Shanghai # 中国标准时间 (UTC+8)
timezone: Asia/Tokyo # 日本标准时间 (UTC+9)
timezone: Australia/Sydney # 澳大利亚东部标准时间 (UTC+10)
timezone: Pacific/Auckland # 新西兰标准时间 (UTC+12)
⚠️ 正式开始前请确保你在身体上和精神上都处于合适的状态,请刻意练习,残酷面对 🆒。为方便检索 The First ZK Intensive CoLearning 简写为 ZICL1st,第 2 期即为ZICL2nd,第 3 期即为 ZICL3rd,以此类推。
⚠️ 报名需要按要求认真填写下面 [ XXX ] 部分,方可通过报名审核,通过审核即可开始自主学习。
第一期的重点是向大家介绍什么是 ZK、 ZKP 的基础知识,以及 Circom 代码入门,有一定难度,共学资料如下:
- 第一周:7 月 29 日 - 8 月 4 日:Introduction and History of ZKP
- 20min 的视频:初步理解 ZK 是什么
- 70min 的播客:零知识证明:一场”无知“的游戏
- (一)初识「零知识」与「证明」
- (二)理解「模拟」
- (三)寻找「知识」
- 100min 的视频:ZKP Lecture 1: Introduction and History of ZKP
- 第二周:8 月 5 日 - 8 月 11 日:Overview of Modern SNARK Constructions
- 第三周:8 月 12 日 - 8 月 18 日:Write some Circom
- 基础电路:
- ZK Shanghai 基础电路教学
- 编辑器:zkREPL
- 基础电路练习 这部分材料结合了Circom源码,可以多花时间来研究
- 实用电路:
- 基础电路:
本次共学资料前两周的 lecture 来自 zk-learning,博客来自 《探索零知识证明系列》和《从零开始学习 zk-SNARK》,第三周的 Circom 部分来自 0xparc,视频讲解为 ZK Shanghai 的中文版本。郭宇老师还推荐了这篇文章《Survey-SNARKs》,学有余力者可以依此找到更多的扩展内容。
- 自我介绍 infra engineer mainly on solana eco.
- 你认为你会完成本次残酷学习吗? sure!
- 目前阶段对于 ZK 的了解? I've done some projects about zk poker game, zklogin with groth16. Want to known more about zkp.
举例示范:
- 学习主题:(二)理解模拟 (三)寻找知识
- 学习内容小结:
- 所谓「模拟条件」是指,通过「模拟」方法来实现一个「理想世界」,使之与「现实世界」不可区分;而由于在理想世界中不存在知识,所以可以推导出结论:现实世界满足「零知识」。
- 「零知识」保证了 验证者 Bob 没有(计算)能力来把和「知识」有关的信息「抽取」出来。不能抽取的「知识」不代表不存在。「可靠性」保证了知识的「存在性」。
- Schnorr协议 verifier: zG = (r+csk)G = R + c(skG)= R + c PK, prover 用随机数 r 保护私钥sk,因为任何一个秘密当和一个符合「一致性分布」的随机数相加之后的和仍然符合「一致性分布」
- Schwatz-Zippel 定理:如果 r + a*x = r' + a'*x 要成立,极大概率上 r=r',a=a' 都成立。也就是说, Alice 在 c 未知的前提下,想找到另一对不同的 r',a' 来计算 z 骗过 Bob 是几乎不可能
- 知识提取器:同一个随机数 r ,发送两个c, c'得到两个z, z' 能反推出私钥
- 学习主题:(四)随机挑战
- 学习内容小结:
- 交互式证明系统需要验证者 Bob 在交互中提供一个或若干个「随机数」来挑战。所谓的非交互可以看成是只有「一轮」的证明过程,即Alice 直接发一个证明给 Bob 进行验证。
- 采用 Hash 函数的方法来把一个交互式的证明系统变成非交互式的方法被称为 Fiat-Shamir 变换
- 学习主题:(五)埋藏「秘密」
- 学习内容小结:
- witness 其实是知识,零知识证明系统正是为了保护 witness 不泄露的前提下,实现 NP 问题的验证
- zk 几乎正交地提供了另外一种创造信任的方式,就是通过交互进行概率性证明,同时提供信任。正如 Vitalik 所说,他们是正交于共识协议的另外一种非常重要的区块链核心技术。
- 密码学基础 https://zkiap.com/
- 密码学基础 https://toc.cryptobook.us/
- 计算理论 Computational Complexity: A Modern Approach》,另一本是《Computational Complexity: A Conceptual Perspective by Oded Goldreich》
- 学习主题:ZKP Lecture 1: Introduction and History of ZKP
- 学习内容小结:以前第一次听是一句也听不懂,现在居然能听懂了
- 学习主题:ZKP Lecture 1: Introduction and History of ZKP
- 学习内容小结:零知识二次剩余,Bob 能够验证 是二次剩余,但无法了解到 具体是多少。即使交互多次,由于每次 Alice 都会随机选择一个新的 ,Bob 无法构造出 ,得到的仅是一串随机数。
- 学习主题:zkcompression
- 学习内容小结:
- 核心思想:交易可以将帐户数据作为交易负载的一部分传递,而不是将所有帐户存储在磁盘上并在需要时读取它们。我们可以通过使用 Merkle 树来确保提交交易的用户提供正确的状态。 Merkle 证明是提交某些数据的一种方法。这样,可以根据承诺来验证证据,以验证已传入正确的状态并且用户对所提供的状态没有不诚实。
- 学习主题:state compression
- 学习内容小结:
- 先学习没有zk的情况,solana account state 存在validator的rocksdb中,是可信的,长期账本存储在归档节点中如Google Bigtable或者IPFS或者中心化存储,不可信需要验证,但是账本数据更便宜,所以将state数据存在账本中,计算Merkle root并存储在account state中做验证。
- 压缩nft 存储metadata在ledger,没有token account, mint account。account state 由metaplex提供程序管理,除了concurrent merkle tree 账户还有一个账户存储必要的信息,我猜是和ledger信息有关,ts客户端根据这些信息可以找到nft的ledger。我们写ts就能创建压缩nft了。ledger 会被 rpc provider 转移到 archival node,但是对rpc请求是透明的
- zk compress 非常类似了,压缩nft由于是新发行的,所以不需要基于历史account state变更。如果希望压缩一些已经存在的账户余额呢?首先就需要证明初始余额的正确性。merkle proof 随着叶子结点增加而变大,zk compression 的证明大小是恒定的,zk可以证明您进行了一定的计算并得到了一定的结果。一旦有人得到结果和证明,他们就可以验证你是否正确地完成了计算,而无需实际运行计算。zk 可以做隐藏,另外zk即使不用来隐藏也是可以的,Because you’re turning a problem that requires running 1000 computation steps (or even a million) into a problem that requires just verifying one proof to know that the computation has been done correctly.
- ZK Compression uses the same technology to run the actual Merkle tree membership logic. So, it has a circuit that can take the account data, a proof (128 bytes), and verify that the data is indeed part of the "commitment" on the chain. 虽然普通的 Merkle 证明是 Log 2 (N),但 ZK 压缩始终是恒定的,因此您可以在一次承诺下拥有大量账户。生成此证明可以在链外完成,但验证此证明必须在链上完成,因为程序需要知道您为帐户提供了正确的数据,然后才能继续执行。