{"content":{"title":"去中心化金融笔记（三）—— Uniswap V3 详解","body":"> **加粗**为自己添加的内容\r\n> 配套课程视频：[【01 区块链金融课程简介】- B站](https://www.bilibili.com/video/BV19x4y1w7aj/?share_source=copy_web&vd_source=9b63dd2fb778239c5b2e21a3c0d42517) \r\n> 课程实验以及讲义：[liangpeili/defi-practices - Github](https://github.com/liangpeili/defi-practices/tree/main)\r\n> 完成的实验代码：\r\n> https://github.com/DestinyWei/defi-practices \r\n> https://github.com/DestinyWei/defi-theory\r\n> **若有任何问题或错误，可在Notion评论或直接评论**\r\n> 完整笔记请查看 Notion 链接：https://dune-marten-78b.notion.site/85b1d29c86344112a886fcfb2ea1c44c?pvs=4\r\n\r\n# Uniswap V3\r\n\r\n## Uniswap V3 的改进\r\n\r\n1. 提高资金利用率**（集中流动性，即只针对某一个范围做流动性，而不是从无穷小到无穷大都做流动性）**，增加 LP 深度\r\n2. 增强价格预言机的方便性和准确性\r\n3. 灵活的手续费收取机制（0.05% / 0.3% / 1%）\r\n\r\n## Uniswap V2 的资金利用率\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled10.png)\r\n\r\n\r\n**在 V2 中，当我们想要做流动性时需要添加 x 和 y 数量的代币才能实现，但实际参与点到池子流动性的代币数量只有 $x_{real}$ 和 $y_{real}$，除去这两个部分的资金部分一直都没有被使用到，因此在 V2 当中资金利用率不算很高**\r\n\r\n示例\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled11.png)\r\n\r\n**假设当前处于 c 点的位置，x 表示 ETH，y 表示 DAI，两者的价格在 a 到 b 的范围内波动，在 V2 当中我们需要在 c 点投入 10 ETH 和 200 DAI，而在 V3 当中我们只需要在 c 点投入 $x_{real}$ 和 $y_{real}$ 数量即 5 ETH 和 100 DAI，此时资金的利用率翻了一倍**\r\n\r\n## 流动性提供的方式\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled12.png)\r\n\r\n\r\n**在 V2 中提供流动性是可以从 0 到无穷进行提供，但代币的价格从 0 到无穷大的范围内波动的概率很低，一般只会在一个小的范围内波动。所以 V3 允许用户只在某一个小范围区间提供流动性，如图Ⅱ。当多个用户都在自己设定的小范围区间提供流动性时，系统的流动性会变成图Ⅲ**\r\n\r\n## 提供 LP 作为限价订单\r\n\r\n我们可以像在中心化交易所那样通过做 LP 来做限价订单，区别在于中心化交易所的限价订单的价格是固定的，而 Uniswap 则需要你提供一个小范围\r\n\r\n还是以前面的图为例，比如当前 ETH 价格在 c 点，我们预测 ETH 会跌即向 a 点移动，此时我们只需要提供 $y_{real}$  数量的 DAI，而不用提供 $x_{real}$ 数量的 ETH。当 ETH 跌到超过 a 点的位置，我们投入的 DAI 便会全部换成 ETH，但如果 ETH 的价格又回到了超过了 a 点的位置，那么我们手里的 ETH 会全部换回 DAI\r\n\r\n## 应用场景\r\n\r\n- 稳定币的兑换（0.99 — 1.01）\r\n- Interest-bearing ASSET：xSushi/Sushi 等\r\n- 固定收益债券\r\n- IDO\r\n- 保险\r\n\r\n## 影响\r\n\r\n- 波动比例大 **（$\\frac{\\Delta x}{x}$ 和 $\\frac{\\Delta y}{y}$，我们在 Uniswap V3 中提供的 x 和 y 都比较小，所以波动比例大）**\r\n- 无常损失高\r\n- LP 挖矿实现机制的更改\r\n- 手续费计算复杂\r\n- LP Token：ERC20 → ERC721\r\n\r\n## Virtual Reserves\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled13.png)\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled14.png)\r\n\r\n\r\nVirtual Reserves 其实就是前面我们所提到的在 V2 当中没有被利用到的资金量即 $x_v$ 和 $y_v$\r\n\r\n由上图我们可以推导出\r\n\r\n$$\r\n\\begin{align}\r\n&x*y=k=L^2 \\Rightarrow L=\\sqrt{k}  \\\\\r\n&x=x_{real}+x_v \\\\\r\n&y=y_{real}+y_v\r\n\\end{align}\r\n$$\r\n\r\n给定 a，b，L 的情况下，求 $x_v$ 和 $y_v$，此时我们已经得知\r\n\r\n$$\r\n\\left\\{\r\n\\begin{aligned}\r\n& x*y=L^2 \\\\\r\n& P=\\frac{y}{x} \r\n\\end{aligned}\r\n\\right.\r\n\\Rightarrow\r\n\\left\\{\r\n\\begin{aligned}\r\n& x=\\frac{L}{\\sqrt{P}} \\\\\r\n& y=L*\\sqrt{P} \r\n\\end{aligned}\r\n\\right.\r\n$$\r\n\r\n在 b 点，其为范围的上限，此时 $x_{real}=0$，所以\r\n\r\n$$\r\nx=x_{real}+x_v=\\frac{L}{\\sqrt{P_b}} \\Rightarrow x_v=\\frac{L}{\\sqrt{P_b}}\r\n$$\r\n\r\n在 a 点，其为范围的下限，此时 $y_{real}=0$，所以\r\n\r\n$$\r\ny=y_{real}+y_v=L*\\sqrt{P_a} \\Rightarrow y_v=L*\\sqrt{P_a}\r\n$$\r\n\r\n将 $x_v$ 和 $y_v$ 代入 (6) 可得\r\n\r\n$$\r\n\\begin{aligned}\r\n(x_{real}+x_v)*(y_{real}+y_v)=L^2 \\\\\r\n(x_{real}+\\frac{L}{\\sqrt{P_b}})*(y_{real}+L*\\sqrt{P_a})=L^2 \r\n\\end{aligned}\r\n$$\r\n\r\n根据最后得出的公式，我们可以得到下面的图：\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled15.png)\r\n\r\n## 虚拟流动性案例分析\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled16.png)\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled17.png)\r\n\r\n\r\n**注意：因为 $P$ 是使用 $\\frac{y}{x}$ 来计算的，所以 $P$ 的单位应该是 DAI / ETH 即一个 ETH 等于多少 DAI**\r\n\r\n当前价格在 c 点，求 $x_v$ 和 $y_v$\r\n\r\n$$\r\n\\begin{aligned}\r\n&x_v=\\frac{L}{P_b}=\\frac{20\\sqrt{10}}{\\sqrt{16000}}=0.5 ETH \\\\\r\n&y_v=L*\\sqrt{P_a}=20\\sqrt{10}*\\sqrt{1000}=2000 DAI\r\n\\end{aligned}\r\n$$\r\n\r\n在 c 点，$\\frac{y_{real}}{x_{real}}=4000$ 的时候，求 $x_{real}$ 和 $y_{real}$\r\n\r\n$$\r\n\\left\\{\r\n\\begin{aligned}\r\n&(x_{real}+0.5)*(y_{real}+2000)=4000 \\\\\r\n&\\frac{y_{real}}{x_{real}}=4000\r\n\\end{aligned}\r\n\\right .\r\n\\Rightarrow\r\n\\left\\{\r\n\\begin{aligned}\r\n&x_{real}=0.5 \\\\\r\n&y_{real}=2000\r\n\\end{aligned}\r\n\\right .\r\n$$\r\n\r\n在 b 点，$\\frac{y_{real}}{x_{real}}=8000$ 的时候，求 $x_{real}$ 和 $y_{real}$\r\n\r\n$$\r\n\\begin{aligned}\r\n&x=x_{real}+x_v \\Rightarrow 0.5=x_{real}+0.5 \\Rightarrow x_{real}=0 ETH \\\\\r\n&y=y_{real}+y_v \\Rightarrow 8000=y_{real}+2000 \\Rightarrow y_{real}=6000 DAI\r\n\\end{aligned}\r\n$$\r\n\r\n在 a 点，$\\frac{y_{real}}{x_{real}}=2000$ 的时候，求 $x_{real}$ 和 $y_{real}$\r\n\r\n$$\r\n\\begin{aligned}\r\n&x=x_{real}+x_v \\Rightarrow 2=x_{real}+0.5 \\Rightarrow x_{real}=1.5 ETH \\\\\r\n&y=y_{real}+y_v \\Rightarrow 2000=y_{real}+2000 \\Rightarrow y_{real}=0 DAI\r\n\\end{aligned}\r\n$$\r\n\r\n如果降到 a 点，移除流动性，会得到多少 x 和 y？\r\n\r\n在 a 点 $(x_r,y_r)$ 为 $(1.5,0)$，相当于以均价 $\\frac{6000}{1.5}=4000$ 的价格把 6000 个 DAI 换成了 1.5 个 ETH，如果缩小 a，b 点的距离，一定程度上起到了限价订单的作用\r\n\r\n**假设当前市价为 c 点，用户在超过 a 点或 b 点的位置添加流动性时，只需要添加其中一种代币而不需要同时添加两种代币（具体原因会在后面进行分析）**\r\n\r\n- **在超过 a 点的位置表示当前 ETH 价格降低，此时用户只需要投入 DAI。这里我们可以理解为用户预估 ETH 价格会跌，所以想要在超过 a 点的位置做流动性，当 ETH 价格到达该位置时，用户之前所投入的 DAI 将会自动换成 ETH，也就是所谓的“低吸”**\r\n- **在超过 b 点的位置表示当前 ETH 价格增加，此时用户只需要投入 ETH。这里我们可以理解为用户预估 ETH 价格会涨，所以想要在超过 b 点的位置做流动性，当 ETH 价格到达该位置时，用户之前所投入的 ETH 将会自动换成 DAI，也就是所谓的“高抛”**\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled18.png)\r\n\r\n## 不同价格区间，流动性 L 和 $x_r$ 和 $y_r$ 的关系\r\n\r\n在 Uniswap V2 中，如果想在 c 点添加流动性，需要提供 $(1,4000)$。在 Uniswap V3 中，同样的流动性曲线，只需要真实提供 $(0.5,2000)$，便可以在 a，b 点之间达到同样的 k 值 $(k=x*y)$。如果在 V3 中，真实提供 $(1,4000)$。那么 k 值 $(k=L^2)$ 会如何变化呢？\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled19.png)\r\n\r\n\r\n注：图中的 $x_r$ 和 $y_r$ 是 a 点和 b 点减去 Virtual Reserves 的结果\r\n\r\n1. 如果在价格 $P \\le P_a$ 时，提供流动性，k 值（L 值会如何变化？）\r\n\r\n当 $P \\le P_a$ 时， $y_r=0$\r\n\r\n$$\r\n\\begin{aligned}\r\n(x_r+\\frac{L}{\\sqrt{P_b}})*L\\sqrt{P_a} &= L^2 \\\\\r\nx_r+\\frac{L}{\\sqrt{P_b}} &= \\frac{L}{\\sqrt{P_a}} \\\\\r\nx_r=L*(\\frac{1}{\\sqrt{P_a}}-\\frac{1}{\\sqrt{P_a}}) &= L*\\frac{\\sqrt{P_b}-\\sqrt{P_a}}{\\sqrt{P_a}*\\sqrt{P_b}} \\\\\r\nL &= x_r*\\frac{\\sqrt{P_a}*\\sqrt{P_b}}{\\sqrt{P_b}-\\sqrt{P_a}}\r\n\\end{aligned}\r\n$$\r\n\r\n故两者关系为：当  $x_r$ 变大，L 也变大\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled20.png)\r\n\r\n\r\n2. 如果在价格 $P \\ge P_b$ 时，提供流动性，k 值（L 值会如何变化？）\r\n\r\n当 $P \\ge P_b$ 时， $x_r=0$\r\n\r\n$$\r\n\\begin{aligned}\r\n\\frac{L}{\\sqrt{P_b}}*(y_r+L\\sqrt{P_a}) &= L^2 \\\\\r\ny_r+L\\sqrt{P_a} &= L*\\sqrt{P_b} \\\\\r\ny_r &= L*(\\sqrt{P_b}-\\sqrt{P_a}) \\\\\r\nL &= \\frac{y_r}{\\sqrt{P_b}-\\sqrt{P_a}}\r\n\\end{aligned}\r\n$$\r\n\r\n故两者关系为：当  $y_r$ 变大，L 也变大\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled21.png)\r\n\r\n\r\n3. 当 $P_a \\lt P \\lt P_b$ 时，提供流动性，k 值（L 值会如何变化？）\r\n\r\n当 P 处于 $P_a$ 和 $P_b$ 之间的任意一点，$x_r$ 和 $y_r$ 对于维护 $[P_a,P_b]$ 之间的流动性贡献是一样的**（因为他们处于同一条曲线，故两者流动性相同）**\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled22.png)\r\n\r\n\r\n先计算  $（P,P_b）$价格之间，单纯由  $x_r$ 贡献的流动性\r\n\r\n$$\r\nL=x_r*\\frac{\\sqrt{P_a}*\\sqrt{P_b}}{\\sqrt{P_b}-\\sqrt{P_a}}\r\n=x_r*\\frac{\\sqrt{P}*\\sqrt{P_b}}{\\sqrt{P_b}-\\sqrt{P}}\r\n$$\r\n\r\n再计算  $（P_a,P）$价格之间，单纯由  $y_r$ 贡献的流动性\r\n\r\n$$\r\nL=\\frac{y_r}{\\sqrt{P_b}-\\sqrt{P_a}}\r\n=\\frac{y_r}{\\sqrt{P}-\\sqrt{P_a}}\r\n$$\r\n\r\n所以\r\n\r\n$$\r\nL\r\n=x_r*\\frac{\\sqrt{P}*\\sqrt{P_b}}{\\sqrt{P_b}-\\sqrt{P}}\r\n=\\frac{y_r}{\\sqrt{P}-\\sqrt{P_a}}\r\n$$\r\n\r\n案例解析（以虚拟流动性案例分析中的例子为例）\r\n\r\n$P_a=1000,P_b=16000,P=4000$\r\n\r\n1. 当 $P=P_a$ 时，$(x_r,y_r)=(1.5,0)$\r\n\r\n$$\r\n\\begin{aligned}\r\nL &= x_r*\\frac{\\sqrt{P_a}*\\sqrt{P_b}}{\\sqrt{P_b}-\\sqrt{P_a}} \\\\\r\n&= 1.5*\\frac{\\sqrt{1000}*\\sqrt{16000}}{\\sqrt{16000}-\\sqrt{1000}} \\\\\r\n&= 1.5*\\frac{\\sqrt{16000}}{\\sqrt{16}-1} \\\\\r\n&= 0.5*40\\sqrt{10} \\\\\r\n&= 20\\sqrt{10}\r\n\\end{aligned}\r\n$$\r\n\r\n2. 当 $P=P_b$ 时，$(x_r,y_r)=(0,6000)$\r\n\r\n$$\r\n\\begin{aligned}\r\nL &= \\frac{y_r}{\\sqrt{P_b}-\\sqrt{P_a}} \\\\\r\n&= \\frac{6000}{\\sqrt{16000}-\\sqrt{1000}} \\\\\r\n&= \\frac{6000}{30\\sqrt{10}} \\\\\r\n&= 20\\sqrt{10}\r\n\\end{aligned}\r\n$$\r\n\r\n3. 当 $P=P_c$ 时，$(x_r,y_r)=(0.5,2000)$\r\n\r\n$$\r\n\\begin{aligned}\r\nL &= \\frac{x_r*\\sqrt{P}*\\sqrt{P_b}}{\\sqrt{P_b}-\\sqrt{P}} \\\\\r\n&= \\frac{0.5*\\sqrt{4000}*\\sqrt{16000}}{\\sqrt{16000}-\\sqrt{4000}} \\\\\r\n&= \\frac{0.5*\\sqrt{16000}}{\\sqrt{4}-1} \\\\\r\n&= 0.5*40\\sqrt{10} \\\\\r\n&= 20\\sqrt{10}\r\n\\end{aligned}\r\n$$\r\n\r\n$$\r\n\\begin{aligned}\r\nL &= \\frac{y_r}{\\sqrt{P}-\\sqrt{P_a}} \\\\\r\n&= \\frac{2000}{\\sqrt{4000}-\\sqrt{1000}} \\\\\r\n&= \\frac{6000}{20\\sqrt{10}-10\\sqrt{10}} \\\\\r\n&= \\frac{200}{\\sqrt{10}} \\\\\r\n&= 20\\sqrt{10}\r\n\\end{aligned}\r\n$$\r\n\r\n因此，我们回到最开始的那个问题\r\n\r\n> 如果在 V3 中，真实提供 $(1,4000)$。那么 k 值 $(k=L^2)$ 会如何变化呢？\r\n\r\n即在 $P=4000$，$(P_a,P_b)=(1000,16000)$，$(x_r,y_r)=(1,4000)$ 的情况下，求 L\r\n\r\n$$\r\nL\r\n= \\frac{x_r*\\sqrt{P}*\\sqrt{P_b}}{\\sqrt{P_b}-\\sqrt{P}}\r\n= \\frac{1*\\sqrt{4000}*\\sqrt{16000}}{\\sqrt{16000}-\\sqrt{4000}}\r\n= \\frac{1*\\sqrt{16000}}{\\sqrt{4}-1}\r\n= 40\\sqrt{10}\r\n$$\r\n\r\n## Uniswap V3 无常损失的计算\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled23.png)\r\n\r\n\r\n仍然以图中的这个数据来进行举例计算，分别计算当用户在 c 点添加 $(1,4000)$ 的流动性且价格从 c 点变到 a 点时 V2，V3 中的无常损失\r\n\r\n在 Uniswap V2 中\r\n\r\n$$\r\n\\begin{aligned}\r\nV_c &= 1*4000+4000=8000 \\\\\r\nV_{hodl} &= 1*1000+4000=5000 \\\\\r\nV_2 &= 2*1000+2000=4000 \\\\\r\n\\therefore V2中 & 无常损失为(V_{hodl}-V_2)=1000\r\n\\end{aligned}\r\n$$\r\n\r\n在 Uniswap V3 中，**因为 V3 多了一个 Virtual Reserves 及其曲线与 V2 也有差异，在 V2 添加的流动性数量同样添加到 V3 中会有更大的影响，因此我们必需先计算出该 V3 曲线的 $x_v,y_v$，再去反推某个点上的 $x_r,y_r$，最后才进行价格的计算**\r\n\r\n在 c 点 $(x_r,y_r)=(1,4000)$，先求 $x_v,y_v$\r\n\r\n$$\r\n\\begin{aligned}\r\nx_v &= \\frac{L}{\\sqrt{P_b}}=\\frac{40\\sqrt{10}}{\\sqrt{16000}}=1 \\\\\r\ny_v &= L*\\sqrt{P_a}=40\\sqrt{10}*\\sqrt{1000}=4000\r\n\\end{aligned}\r\n$$\r\n\r\n由此可得实际曲线为：\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled24.png)\r\n\r\n\r\n在 a 点\r\n\r\n$$\r\n\\left\\{\r\n\\begin{aligned}\r\nx &= x_r+x_v \\\\\r\ny &= y_r+y_v\r\n\\end{aligned}\r\n\\right .\r\n\\Rightarrow\r\n\\left\\{\r\n\\begin{aligned}\r\n4 &= x_r+1 \\\\\r\n4000 &= y_r+4000\r\n\\end{aligned}\r\n\\right .\r\n\\Rightarrow\r\n\\left\\{\r\n\\begin{aligned}\r\nx_r &= 3 \\\\\r\ny_r &= 0\r\n\\end{aligned}\r\n\\right . \\\\\r\n\\begin{aligned}\r\nV_3 &= 3*1000=3000 \\\\\r\nV_{hodl} &= 1*1000+4000=5000 \\\\\r\n\\therefore V3中 & 无常损失为(V_{hodl}-V_3)=2000\r\n\\end{aligned}\r\n$$\r\n\r\n由此我们可以看出，Uniswap V3 的无常损失更大\r\n\r\n我们再将其抽象为更通用的模型：\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled25.png)\r\n\r\n\r\n前提条件\r\n\r\n\r\n$$\r\n\\left\\{\r\n\\begin{aligned}\r\n& x*y=k \\\\\r\n& P=\\frac{y}{x}\r\n\\end{aligned}\r\n\\right .\r\n\\Rightarrow\r\n\\left\\{\r\n\\begin{aligned}\r\n& x=\\frac{\\sqrt{k}}{\\sqrt{P}} \\\\\r\n& y=\\sqrt{k}*\\sqrt{P}\r\n\\end{aligned}\r\n\\right .\r\n$$\r\n\r\n$$\r\n\\begin{aligned}\r\n在V3中 \\\\\r\nx_v &= \\frac{L}{\\sqrt{P_b}}=\\frac{\\sqrt{k}}{\\sqrt{P_b}} \\\\\r\ny_v &= L*\\sqrt{P_a} = \\sqrt{k}*\\sqrt{P_a}\r\n\\end{aligned}\r\n$$\r\n\r\n1. 假设起始价格 $P_0$，变化后的价格 $P_1$ 都满足 $P_0,P_1 \\in [P_a,P_b]$，求此时的无常损失（无手续费）\r\n\r\n$t_0$ 的时候 $(x_0,y_0),P_0=\\frac{y_0}{x_0},x_0*y_0=k$\r\n\r\n$$\r\nt_0\r\n\\left\\{\r\n\\begin{aligned}\r\n& t_1:(x_1,y_1),P_1=\\frac{y_1}{x_1} \\\\\r\n& t_{hodl}:(x_0,y_0),P_1=\\frac{y_1}{x_1} \r\n\\end{aligned}\r\n\\right .\r\n\\\\\r\nf(d)=\\frac{V_1-V_{hodl}}{V_{hodl}}=\\frac{V_1}{V_{hodl}}-1\r\n$$\r\n\r\n同时在前面我们还计算得到\r\n\r\n$$\r\n\\begin{aligned}\r\nx &= x_{real}+x_v \\\\\r\ny &= y_{real}+y_v \\\\\r\nx_1 &= \\frac{\\sqrt{k}}{\\sqrt{P_1}} \\quad y_1 = \\sqrt{k}*\\sqrt{P_1} \\\\\r\nx_0 &= \\frac{\\sqrt{k}}{\\sqrt{P_0}} \\quad y_0 = \\sqrt{k}*\\sqrt{P_0}\r\n\\end{aligned}\r\n$$\r\n\r\n通过上面的这些公式，我们可以计算出\r\n\r\n$$\r\n\\begin{aligned}\r\nV_1 &= x_{real}*P_1+y_{real} \\\\\r\n&= (x_1-x_v)*P_1+(y_1-y_v) \\\\\r\n&= (\\frac{\\sqrt{k}}{\\sqrt{P_1}}-\\frac{\\sqrt{k}}{\\sqrt{P_b}})*P_1+(\\sqrt{k}*\\sqrt{P_1}-\\sqrt{k}*\\sqrt{P_a}) \\\\\r\n&= 2\\sqrt{k}*\\sqrt{P_1}-\\sqrt{k}*\\sqrt{P_a}-\\frac{\\sqrt{k}}{\\sqrt{P_b}}*P_1\r\n\\end{aligned}\r\n$$\r\n\r\n$$\r\n\\begin{aligned}\r\nV_{hodl} &= x_{real}*P_1+y_{real} \\\\\r\n&= (x_0-x_v)*P_1+(y_0-y_v) \\\\\r\n&= (\\frac{\\sqrt{k}}{\\sqrt{P_0}}-\\frac{\\sqrt{k}}{\\sqrt{P_b}})*P_1+(\\sqrt{k}*\\sqrt{P_0}-\\sqrt{k}*\\sqrt{P_a}) \\\\\r\n&= \\sqrt{k}(\\frac{1}{\\sqrt{P_0}}-\\frac{1}{\\sqrt{P_b}})*P_1+(\\sqrt{P_0}-\\sqrt{P_a})*\\sqrt{k}\r\n\\end{aligned}\r\n$$\r\n\r\n$$\r\n\\begin{aligned}\r\nf(d)\r\n&= \\frac{V_1-V_{hodl}}{V_{hodl}}=\\frac{V_1}{V_{hodl}}-1 \\\\\r\n&= \\frac\r\n{2\\sqrt{k}*\\sqrt{P_1}-\\sqrt{k}*\\sqrt{P_a}-\\frac{\\sqrt{k}}{\\sqrt{P_b}}*P_1}\r\n{\\sqrt{k}(\\frac{1}{\\sqrt{P_0}}-\\frac{1}{\\sqrt{P_b}})*P_1+(\\sqrt{P_0}-\\sqrt{P_a})*\\sqrt{k}} -1 \\\\\r\n&= \\frac\r\n{2\\sqrt{P_1}-\\sqrt{P_a}-\\frac{P_1}{P_b}}\r\n{(\\frac{1}{\\sqrt{P_0}}-\\frac{1}{\\sqrt{P_b}})*P_1+(\\sqrt{P_0}-\\sqrt{P_a})} -1\r\n\\end{aligned} \\tag 1\r\n$$\r\n\r\n2. 其他条件不变，假设变化后的价格 $P_1 \\lt P_a$，计算无常损失\r\n\r\n在 $P_1 \\lt P_a$ 时，$y_{real}$ 为 0\r\n\r\n$$\r\n\\begin{aligned}\r\nV_1 &= x_{real}*P_1+y_{yeal} \\\\\r\n&= x_{real}*P_1 \\\\\r\n&= (\\frac{\\sqrt{k}}{\\sqrt{P_1}}-\\frac{\\sqrt{k}}{\\sqrt{P_b}})*P_1\r\n\\end{aligned}\r\n$$\r\n\r\n$$\r\n\\begin{aligned}\r\nf(d) &= \\frac\r\n{(\\frac{\\sqrt{k}}{\\sqrt{P_1}}-\\frac{\\sqrt{k}}{\\sqrt{P_b}})*P_1}\r\n{\\sqrt{k}(\\frac{1}{\\sqrt{P_0}}-\\frac{1}{\\sqrt{P_b}})*P_1+(\\sqrt{P_0}-\\sqrt{P_a})*\\sqrt{k}}\r\n-1 \\\\\r\n&= \\frac\r\n{(\\frac{1}{\\sqrt{P_1}}-\\frac{1}{\\sqrt{P_b}})*P_1}\r\n{(\\frac{1}{\\sqrt{P_0}}-\\frac{1}{\\sqrt{P_b}})*P_1+(\\sqrt{P_0}-\\sqrt{P_a})}\r\n-1\r\n\\end{aligned} \\tag 2\r\n$$\r\n\r\n3. 其他条件不变，假设变化后的价格 $P_1 \\gt P_b$，计算无常损失\r\n\r\n在 $P_1 \\gt P_b$ 时，$x_{real}$ 为 0\r\n\r\n$$\r\n\\begin{aligned}\r\nV_1 &= x_{real}*P_1+y_{yeal} \\\\\r\n&= y_{yeal} =y-y_v\\\\\r\n&= \\sqrt{k}*\\sqrt{P_1}-\\sqrt{k}*\\sqrt{P_a}\r\n\\end{aligned}\r\n$$\r\n\r\n$$\r\n\\begin{aligned}\r\nf(d) &= \\frac\r\n{\\sqrt{k}*\\sqrt{P_1}-\\sqrt{k}*\\sqrt{P_a}}\r\n{\\sqrt{k}(\\frac{1}{\\sqrt{P_0}}-\\frac{1}{\\sqrt{P_b}})*P_1+(\\sqrt{P_0}-\\sqrt{P_a})*\\sqrt{k}}\r\n-1 \\\\\r\n&= \\frac\r\n{\\sqrt{P_1}-\\sqrt{P_a}}\r\n{(\\frac{1}{\\sqrt{P_0}}-\\frac{1}{\\sqrt{P_b}})*P_1+(\\sqrt{P_0}-\\sqrt{P_a})}\r\n-1\r\n\\end{aligned} \\tag 3\r\n$$\r\n\r\n由 (1) 我们可以得知，当 $P_a$ 趋向于 0，$P_b$ 趋向于 $\\infty$ 的时候\r\n\r\n$$\r\n\\begin{aligned}\r\nf(d) &= \\frac\r\n{2\\sqrt{P_1}-\\sqrt{P_a}-\\frac{P_1}{P_b}}\r\n{(\\frac{1}{\\sqrt{P_0}}-\\frac{1}{\\sqrt{P_b}})*P_1+(\\sqrt{P_0}-\\sqrt{P_a})} -1 \\\\\r\n&= \\frac{2\\sqrt{P_1}}{\\frac{P_1}{\\sqrt{P_0}}+\\sqrt{P_0}}-1 \\\\\r\n\\because P_1 &= P_0*d,则 \\\\\r\nf(d) &= \\frac{2\\sqrt{P_0*d}}{\\frac{P_0*d}{\\sqrt{P_0}}+\\sqrt{P_0}}-1 \\\\\r\n&= \\frac{2\\sqrt{d}}{1+d}-1\r\n\\end{aligned}\r\n$$\r\n\r\n从这看出其与 V2 的公式相同，即说明 V3 的公式推导正确\r\n\r\n**在这我们说回前面所提到的问题** \r\n\r\n> **假设当前市价为 c 点，用户在超过 a 点或 b 点的位置添加流动性时，只需要添加其中一种代币而不需要同时添加两种代币**\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled26.png)\r\n\r\n\r\n**V3 与 V2 最大的不同是引进了集中流动性并带来了 Virtual Reserves，当我们在上面的曲线添加流动性时必须要用减去 $x_r,y_r$ 的值之后的曲线再进行计算。否则在原来的曲线进行计算，即使在超过 a 点或 b 点的位置添加流动性，其结果仍会是两种代币都需要添加；而使用减去 $x_r,y_r$值之后的曲线进行计算则可以得到正确的结果，因为当处于超过 a 点或 b 点的位置，$x_{real}$ 或 $y_{real}$ 总会有一个超出范围而变为 0（如下两图），即只需要添加一种代币即可**\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled27.png)\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled28.png)\r\n\r\n\r\n**同时我们需要的注意的是，当我们是在下图的情况下（市价在 c 点，想要在 d 点到 e 点添加流动性）时，其仍需同时添加两种代币。因为本质上其仍处于 $x_{real}$ 和 $y_{real}$ 的范围之内**\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled29.png)\r\n\r\n## Staking Rewards\r\n\r\n**这是一个关于用户抵押资金，在一段时间之后取回本金并计算可以拿到多少奖励的算法**\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled30.png)\r\n\r\n\r\n由此引出了相应的数学公式：\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled31.png)\r\n\r\n\r\n使用上面的公式进行计算时，有时候不利于开发者编写代码（一是在最后统一进行计算需要对每个用户进行轮询计算，代码难以实现；二是这么做 gas 费会很高），因此对上面公式的表达进行了修改即计算 k 到 n-1 秒的奖励从原先的直接计算改为通过计算从 0 到 n-1 秒的奖励减去 从 0 到 k 秒的奖励：\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled32.png)\r\n\r\n\r\n示例：\r\n\r\n只有一个用户质押\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled33.png)\r\n\r\n\r\n有两个用户质押，并且中途有用户进行提款操作\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled34.png)\r\n\r\n\r\n多个用户参与质押与提款\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled35.png)\r\n\r\n\r\n算法设计\r\n\r\n![在这里插入图片描述](https://weihaoming-tuchuang.oss-cn-chengdu.aliyuncs.com/img/Untitled36.png)\r\n\r\n\r\n最后，这部分的材料来源：[Staking Rewards - Intro | DeFi - YouTube](https://www.youtube.com/watch?v=rXuDelwHLoo)\r\n\r\n再补充一个个人认为比较好的相关材料：[流动性挖矿-合约原理详解 — xyyme.eth](https://mirror.xyz/xyyme.eth/_yGLvqTXQCX-UYRp_sWMR7MuDDKWuEhOw0S5QqJXr84)\r\n\r\n---\r\n后续笔记会在之后发布，让我们尽情期待，您也可以关注我的推特账号（@weihaoming）以获取更多笔记资源……"},"author":{"user":"https://learnblockchain.cn/people/12482","address":"0xE3aa98316cc1c1611381c29725b69c6Ece3B6658"},"history":null,"timestamp":1692592838,"version":1}