RareSkills

@rareskills

https://www.rareskills.io/

注册于 2024-06-03
Uniswap V3 详解

与传统 AMM(如 Uniswap V2)遵循的 “xy=k” 恒定乘积模型不同,Uniswap V3 的集中流动性机制允许 LP 将资金聚焦于特定的价格区间。这一设计带来了双重优势:

  • 交易者视角:资金在关键价格区间的集中,大幅提升了交易深度,减少了滑点(交易执行价格与预期价格的偏差),尤其是在热门交易对中,能获得更接近市场公允价的执行结果。
  • 流动性提供者视角:资金不再被分散到无限的价格区间,而是在 LP 预判的活跃交易范围内发挥作用,单位资金的利用率显著提升,进而带来比传统模型更高的手续费回报。

Uniswap V3 的代码库因其复杂性闻名,其核心在于将数学逻辑与区块链技术的深度融合。为实现集中流动性,协议引入了一系列创新组件:

  • 刻度(Ticks):将价格区间划分为离散的 “刻度”,每个刻度对应特定的价格水平,LP 可选择在不同刻度间注入流动性,形成精准的资金分布。
  • 平方根价格(sqrtPriceX96):通过特殊的数学编码方式(X96 表示 96 位精度),高效计算和存储价格数据,平衡了计算效率与精度需求。
  • 手续费与 Tick 间距关联:不同交易对根据风险等级设置差异化的手续费率(如 0.05%、0.3%、1%),并对应不同的 Tick 间距(价格区间划分的精细度),高手续费率通常搭配更宽的间距,以平衡风险与收益。

如果你是初学者,建议可以首先阅读 Uniswap V2 书籍 并完成 Uniswap V2 谜题

目录

1.Uniswap V3 中的集中流动性如何工作

2.在 Uniswap V3 中引入 ticks

3.Q 数字格式

4.Uniswap V3 中的平方根价格

5.Uniswap V3 中的 Tick 限制

6.Uniswap V3 工厂以及 Tick 间距和费用之间的关系

7.计算给定 sqrtPriceX96 的当前 Tick

8.平方和乘法算法

9.Tickmath getSqrtRatioAtTick

创建于 2025-07-19 订阅(30)
代理模式与 Delegatecall 规范手册

代理模式可能是学习 Solidity 开发中最令人困惑的方面之一,因为在其他软件开发领域几乎没有类似的类比。进一步复杂化的问题是——尽管从概念上讲,delegatecall 是容易理解的——完全掌握其细微差别需要对 EVM(以太坊虚拟机)和 Solidity 编译器的工作原理有一定的背景知识。这些细微差别并不是简单的“你知道吗”的琐事,而是对智能合约的运行方式有重要影响。此外,代理模式的标准仍在发展中——截至撰写本文时,ERC-7201 到现在还不到一年的时间。

任何合格的 Solidity 开发者或审计员,都应该对 delegatecall 及其所依赖的代理模式有全面的理解。代理模式并不简单,一个错误就可能破坏可升级性,或者更糟,导致灾难性错误。

本书旨在帮助这样的读者高效且全面地掌握这一主题,同时深入探讨在其他文献中省略或忽视的细节。与此同时,我们力求范围明确;本书不是关于 EVM 的完整课程——我们仅讨论与正确理解 delegatecall 及现有模式设计相关的部分。

创建于 2025-03-03 订阅(36)
Solana 60 天课程

本 Solana 课程旨在帮助具有以太坊或 EVM 开发的初学者或中级背景的工程师快速掌握 Solana 程序开发。

初学者在学习区块链编程时面临的困难是他们必须学习一种新的计算模型、学习一种新的语言和学习一个新的开发框架。

如果你已经在以太坊或兼容以太坊的区块链上开发过,那么你已经对计算模型有了相当好的了解,可以专注于语言和框架。

我们的目标是利用你在以太坊方面的过去经验,更快地学习 Solana。 你无需从零开始。

一共包含 8 个模块:

模块 1:入门主题

模块 2:你需要掌握的最少 Rust 知识

模块 3:Solana 中的重要系统级信息

模块 4:Solana 中的账户与存储

模块 5:Solana 上的代币

模块 6:Solana 开发进阶主题

模块 7:原生 Solana 程序

模块 8:Solana 汇编(sBPF)

创建于 2025-02-27 订阅(93)
Uniswap V2 之书

《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 的章节之前,应该先熟悉这一概念。

请控制好节奏——往脑子里塞满新概念并不是一种有效的学习方式。我们建议每天只阅读一章,然后在不看指南的情况下自己阅读源代码,以确保一切都理解透彻。

创建于 2025-02-27 订阅(30)
零知识证明之书

Rareskills 出品的零知识证明之书, 对程序员最友好的零知识证明教程

这里有关于从头开始实际编写实用的零知识证明器和验证器(ZK-SNARK)所需知道的内容。

对事物的概念性理解和具体理解是不同的。大多数相当聪明的人在阅读教程后会对某些东西有一个概念性的理解,但他们离用这些知识做一些有用的事情还有很长的路要走。

对于数学家来说,具体的理解发生在他们写证明的时候。对于程序员来说,具体的理解发生在他们编写功能代码的时候。

《零知识证明之书》主要面向寻求具体理解的程序员。我们的书中充满了代码片段,并演示了实际加密库的使用。我们使用数学符号,但是我们以这样一种方式来编写,将其转换为源代码只是一个小小的飞跃。

Groth16是tornado cash(和许多其他公司)用于实现链上零知识证明的算法。我们相信这是学习之旅的最佳起点,我们的书是完全理解算法的最直接途径。

我们的 ZK Book 的Circom 和 Constraint 设计模式将带您踏上从乘法到数字相加的旅程:

  • 从头开始构建 ZKVM
  • MD5 哈希函数的编码约束
  • 学习约束设计中反复出现的设计模式

模块一 零知识证明的基础数学 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 : 范围证明

模块 5 :数论变换(NTT)- 快速傅里叶变换

模块 5 目录

点值形式的多项式乘法。本章阐述为什么需要以亚二次时间计算多项式求值。

乘法子群。子群是理解单位根的前提。

循环群基本定理。单位根构成一个循环子群,该定理展示了它们的行为。

有限域中的单位根。NTT 算法仅在多项式在“单位根”上求值时有效,本章介绍单位根。对于那些阅读本系列以理解快速傅里叶变换的读者,有限域中的单位根与复数中的单位根行为相同,即 $e^{i\frac{2\pi k}{n}}$。

模 -1 的单位根。由于单位根构成子群,每个单位根都有一个逆元(可以高效计算)。

在单位圆上可视化单位根。本章展示如何在单位圆上绘制有限域中的单位根,以及如何轻松可视化单位根子群中的加法逆元。

范德蒙德矩阵。范德蒙德矩阵将多项式求值表示为多项式系数与求值点的乘法。

单位根的平方。本章是像保留定理章节的前提。

单位根的 k/2 次幂。本章(同样)是像保留定理章节的前提。

单位根的平方根。本章(又是)像保留定理章节的前提。

像保留定理。NTT 依赖的关键思想,奇怪的是,它没有正式名称,因此我们发明了“像保留定理”这个名称。本章介绍在较小域上求多项式值可以实现较大域上的计算重用的思想。

平方根多值函数。多值函数返回一组值而不是单个值。这给了我们“一次计算获得两次求值”的能力。

手算 NTT。NTT 算法有多种实现变体。我们创建了自己的实现,便于在纸笔上计算,以便学习者能切身感受该算法。

FFT 友好的有限域。本文列出实际中用于 NTT 和零知识证明的有限域。

单位根的正交性。本章是逆数论变换和范德蒙德矩阵逆的前提。

逆数论变换。逆数论变换“撤销”数论变换。它接受一组点值并返回系数形式的多项式。

范德蒙德矩阵的逆。本章证明范德蒙德矩阵的逆矩阵仍然是范德蒙德矩阵。这一事实使得证明逆数论变换算法的正确性变得简单。

手算逆数论变换。前三章确立了范德蒙德矩阵的逆也是范德蒙德矩阵。因此,我们可以复用数论变换算法作为逆数论变换,只需做微小改动。

Rollup定理(可选)。Rollup定理允许我们优雅地证明基本多项式乘法等价于先执行 NTT,再进行点乘,最后执行 INTT。

信号流图。NTT 经常用信号流图建模。本章是对该主题的快速回顾。

创建于 2025-02-27 订阅(39)
详解 Compound V3

详解 Compound V3 - 待修改

一个协议工程师坐下来与你一起,逐步讲解代码库和设计决策。这就是本书的样子。

关于 Compound V3

Compound 只借出一种资产,称为“基础”资产。

与 Compound V2(和 AAVE)不同,后者允许借款人从资产菜单中借款,在 Compound V3 中,借款人只能借用单一资产(而贷方也只能贷出单一资产)——每个“市场”。在撰写本文时,有一个借用(和贷出) USDC 的市场和一个借用和贷出 ETH 的市场。

创建于 2025-02-27 订阅(22)