
RareSkills
代理模式可能是学习 Solidity 开发中最令人困惑的方面之一,因为在其他软件开发领域几乎没有类似的类比。进一步复杂化的问题是——尽管从概念上讲,delegatecall 是容易理解的——完全掌握其细微差别需要对 EVM(以太坊虚拟机)和 Solidity 编译器的工作原理有一定的背景知识。这些细微差别并不是简单的“你知道吗”的琐事,而是对智能合约的运行方式有重要影响。此外,代理模式的标准仍在发展中——截至撰写本文时,ERC-7201 到现在还不到一年的时间。
任何合格的 Solidity 开发者或审计员,都应该对 delegatecall 及其所依赖的代理模式有全面的理解。代理模式并不简单,一个错误就可能破坏可升级性,或者更糟,导致灾难性错误。
本书旨在帮助这样的读者高效且全面地掌握这一主题,同时深入探讨在其他文献中省略或忽视的细节。与此同时,我们力求范围明确;本书不是关于 EVM 的完整课程——我们仅讨论与正确理解 delegatecall 及现有模式设计相关的部分。
本 Solana 课程旨在帮助具有以太坊或 EVM 开发的初学者或中级背景的工程师快速掌握 Solana 程序开发。
初学者在学习区块链编程时面临的困难是他们必须学习一种新的计算模型、学习一种新的语言和学习一个新的开发框架。
如果你已经在以太坊或兼容以太坊的区块链上开发过,那么你已经对计算模型有了相当好的了解,可以专注于语言和框架。
我们的目标是利用你在以太坊方面的过去经验,更快地学习 Solana。 你无需从零开始。
《Uniswap V2 Book》是一本深入解析Uniswap V2代码的书籍,不仅逐行解释代码,还探讨了设计背后的原因、替代方案及决策动机。书中还引入了实践问题,并指导读者如何实现Uniswap V2的克隆版本。
Uniswap V2 之书是对代码库的全面且深入的解释。我们不仅仅是截取代码并逐行解析。希望你已经有能力阅读代码!我们会解释为什么一开始要这样编写,可能的替代方案是什么,以及决策背后的动机。
在编写这本书的过程中,我们发现很多工程师低估了这个协议的深度——它不就是一个 xy = k 吗?实际上,Uniswap V2 充满了巧妙的工程决策,它用少量的代码处理了相当多的复杂性。这是每个 Solidity 开发者都可以从中学习的内容。
此外,根据 DeFi Llama Fork Tracker,Uniswap V2 无论是按 TLV(总锁定价值)还是分叉数量,都是被分叉最多的 DeFi 协议。理解这个协议所付出的努力将让你对其他数百个 DeFi 应用有深入的了解。
对于那些想要实践的人,我们在读者已经掌握了足够知识的地方引入了来自 DamnVulnerableDeFi 、 Ethernaut 和 Mr Steal Yo Crypto 的问题,以便读者能够以最小的难度解决问题。最后,我们以一个指南作为结束,教你如何自己实现一个 Uniswap V2 的克隆,但由于原始代码库已经有四年多的历史,因此我们做了一个现代化的改进。
Uniswap 并不直接使用 ERC 4626 或 ERC 3156。然而,熟悉这些标准是有帮助的,因为 Uniswap 使用了类似的概念。任何一个优秀的 Solidity 开发者或审计员都应该熟悉这些标准。所以如果你还不了解它们,请先阅读那些文章。Uniswap 的文章将假设你已经了解这些标准。
Uniswap 使用定点算法来记录价格,因此读者在阅读关于 TWAP Oracle 的章节之前,应该先熟悉这一概念。
请控制好节奏——往脑子里塞满新概念并不是一种有效的学习方式。我们建议每天只阅读一章,然后在不看指南的情况下自己阅读源代码,以确保一切都理解透彻。
Rareskills 出品的零知识证明之书, 对程序员最友好的零知识证明教程
这里有关于从头开始实际编写实用的零知识证明器和验证器(ZK-SNARK)所需知道的内容。
对事物的概念性理解和具体理解是不同的。大多数相当聪明的人在阅读教程后会对某些东西有一个概念性的理解,但他们离用这些知识做一些有用的事情还有很长的路要走。
对于数学家来说,具体的理解发生在他们写证明的时候。对于程序员来说,具体的理解发生在他们编写功能代码的时候。
《零知识证明之书》主要面向寻求具体理解的程序员。我们的书中充满了代码片段,并演示了实际加密库的使用。我们使用数学符号,但是我们以这样一种方式来编写,将其转换为源代码只是一个小小的飞跃。
Groth16是tornado cash(和许多其他公司)用于实现链上零知识证明的算法。我们相信这是学习之旅的最佳起点,我们的书是完全理解算法的最直接途径。
我们的 ZK Book 的Circom 和 Constraint 设计模式将带您踏上从乘法到数字相加的旅程:
学习约束设计中反复出现的设计模式
模块一 零知识证明的基础数学 1 : P vs NP 及其在零知识证明中的应用
2 : ZK的算术电路
3 : 用于零知识证明的有限域与模运算
4 : 为程序员准备的基础集合论
5 : 抽象代数
6 : 程序员的基本群论
7 : 同态映射
8 : 椭圆曲线点加法
9 : 有限域上的椭圆曲线
模块二 ZK-SNARKS Part 1 (Groth16)
10 : Python、Solidity 和 EVM 中的双线性配对(Bilinear Pairings)
11 : 将代数电路转换为R1CS(一阶约束系统)
12 : 从R1CS构建零知识证明
13 : 使用Python实现拉格朗日插值
14 : Schwartz-Zippel 引理及其在零知识证明中的应用
15 : 二次算术程序
16 : 在Python中将R1CS转换为有限域上的二次算术程序(QAP)
17 : 可信设置
18 : 在可信设置中评估和二次算术程序
19 : Groth16 详解 模块三 Circom 和 Constraint 设计模式
20 : Circom 零知识电路简介
21 : Circom 之 Hello World
22 : Circom模板参数、变量、循环、If语句、断言
23 : 二次约束 - Circom
24 : Circom中的符号变量
25 : Circom 中间信号与子组件
26 : 先指示再约束 - 在 Circom 中复杂约束条件的方法
27 : 先计算,后约束 - ZK 电路设计模式
28 : Circom循环中的组件
29 : 使用虚假证明攻击欠约束的Circom电路
30 : Circomlib中的AliasCheck和Num2Bits strict
31 : Circom 中的条件语句
32 : Quin Selector(选择器)
33 : ZK 中有状态计算简介
34 : 在Circom中交换数组中的两个条目
35 : 选择排序的零知识证明
36 : 在 ZK 中建模栈数据结构 - 如何在 Circom 中创建一个堆栈
37 : ZKVM 的工作原理
38 : ZK中的32位仿真
39 : Circom 中的 MD5 哈希
40 : 零知识证明友好的哈希函数
41 : 排列论证 - The Permutation Argument
42 : Tornado Cash 的工作原理(开发者逐行解析)
模块四 BulletProofs:内积论证的 ZKP 43 : BulletProofs 详解
44 : 什么是Pedersen承诺及其工作原理
45 : 多项式承诺通过 Pedersen 承诺实现
46 : 零知识乘法
47 : 内积的零知识证明
48 : 向量承诺的简洁证明
49 : 对数大小的承诺证明
50 : Bulletproofs零知识证明:内积的零知识与简洁证明
51 : 内积代数
52 : 通过随机线性组合减少等式检查(约束)的数量
53 : 范围证明
详解 Compound V3 - 待修改
一个协议工程师坐下来与你一起,逐步讲解代码库和设计决策。这就是本书的样子。
关于 Compound V3
Compound 只借出一种资产,称为“基础”资产。
与 Compound V2(和 AAVE)不同,后者允许借款人从资产菜单中借款,在 Compound V3 中,借款人只能借用单一资产(而贷方也只能贷出单一资产)——每个“市场”。在撰写本文时,有一个借用(和贷出) USDC 的市场和一个借用和贷出 ETH 的市场。