| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 区块链 -> 深入分析 Uniswap V3 流动性供应的数学原理 -> 正文阅读 |
|
[区块链]深入分析 Uniswap V3 流动性供应的数学原理 |
前言Uniswap 是 DeFi 领域的头部去中心化交易所,其在今年 5 月上线了 V3 版本协议。V3 版本与之前 V2 版本相比存在诸多差异,如集中流动性、多个费用等级、新的预言机等等。 在这些多样的特点背后,究竟藏着怎样的数学奥秘,同时是否真的能为用户带来更大的收益,减少无常损失? 知道创宇区块链安全实验室 将带你从数学原理角度在 Uniswap V3 集中流动性方面进行剖析。 何谓集中流动性在 Uniswap V3 中, 流动性提供者可以将其提供的流动性 “限制” 在任意的价格区间内来集中其流动性。 为了解释这一概念,首先我们关联到 Uniswap V2 的自动做市商曲线。在该曲线中,用户的流动性被均匀的分布在整个 (0,正无穷大) 之中。 在 V2 版本中,由于许多池子的价格变动没有那么的频繁,比如 UDST/DAI 池子中。由于其价值均锚定美元,发生的交易将会聚集在上图中的 A 点附近(即x≈y), 这就意味着流动性池中的大部分资产是永远不会被触及到的。 因此在 V3 中,用户可以将其流动性聚集在某一个线段。如下图 B 到 C 点: 这样,由于大量用户的流动性被集中,对于 B 点到 C 点的线段的流动性将会变得非常 “厚”,这样的池子将使得来交易的人交易滑点得以显著减小,并有效提高资本效率。 如何将流动性集中在具体实现的过程中,V3 依靠了资产的杠杆。将一部分用户资产虚拟出来,导致了坐标轴图像的平移,虚拟资产假设对应 x’ 和 y’。 在原始的 Uniswap V2 中,曲线公式为:x*y=k Uniswap V3 通过引入 x’ 和 y’ 资产升级了该公式。此处x’我们将其称为 x 资产的虚拟储备,y’ 称为 y 资产的虚拟储备,于是引入了如下式子: 由于为资产添加了杠杆(虚拟资产),使下图中原本在下面的曲线,能够平移到上面储备量更大的曲线中去,这也意味着在有限的的价格范围 [xb, xc] 内,一组较小的储备 x、y 能够充当更大的储备 x+x’、y+y’。 同时,上方为虚拟资产被添加后的虚拟 AMM 曲线。在实际交易曲线中(限于 BC 点),下方才是流动性提供者资产的真实变化曲线。 于是,在 B 点或 C 点时,处于强势的资产将被损耗为 0,也就是说将会全部兑换成劣势资产并停止做市。 如下图 3: 根据 V2 的自动做市曲线方程。让 L 被定义为 k = L^2,于是有该式:x*y = k = L^2 对其开根号,即有 而对于价格来说,当前的价格 P (用 y 对 x 资产定价)有: 根据式 3,对其取平方根,即有: 联立式 4 与式 2,我们可以消去 y,对于闭区间 [B, C] 任一点,则有: 同理可消去 y,对于任一点,则有: 于是,我们只要知道 P ( x 的价格),在流动性没有改变时( L 不改变),则可以得到对应的 x 资产量和 y 资产量。 计算虚拟资产(x’/y’)考虑极端情况,在上图中,经过平移后上方的 AMM 图形由于在 B 点时,用户提供的 x 资产由于在实际中已全部损耗。 也就是说 x=0,剩余的 x 均为虚拟出来的,即 x’。 根据式 5 去计算。此时计算 x 资产量对于 B 点有: 同理,我们计算 C 点,此时用户提供的 y 资产由于在实际中已全部损耗,即有 y=0,剩余的 y 均为虚拟出来的,即 y’。则有 由上可知,xb 与 yc 则是Uniswap为用户虚拟出来的Token量,即x’与y’,这也是Uniswap中为用户开的杠杆的Token数量。 于是,我们得到完整Uniswap V3的AMM曲线,见式9: 同时,对于选定的区间中的任意一点,由用户提供的真实的资产见下图:
隐患-无常损失由于 V3 在用户的选择下将流动性使用添加杠杆的方式进行了集中,而对于流动性提供者来说本质上是在与用户做对手盘,即越跌越买,越高越卖,这将导致无常损失的加剧。 根据上述分析,只要价格达到设定的区间临界点,流动性提供者的代币将会完全转换为另一种处于劣势的代币,并且在价格重新进入该临界点之前不会赚取交易费用。
Uniswap V3–添加流动性具体而言,假设现有一 Uniswap V3 交易池,交易对 ETH/DAI,池中 X 与 Y 储备比例 10 : 800,L2 为 8000,P 为 80 即交易价格 80DAI /ETH 。 当前价格对应点 A(10,800), 若一流动性提供商,尝试在 P=[20, 320]进行做市。对应的 点B(5,1600),P=320。点 C(20,400),P=20 该流动性提供商想投入 3 个 ETH,这 3 个 ETH 会被全部用于 xreal ,由于当前价格在选定区间内。 根据白皮书,有以下式子: 由式 10,投入 △x=3,投入的 ETH 将改变池子的 L。经过计算 △L 为: 再通过 △L 计算 △y: 于是投入 3 个 ETH(△x),时,计算投入的 DAI 应为 240 个。新的 L’ 约为 143.11 (仅限于在闭区间 P=[20, 320])。 Uniswap V3–Swap对于该 Uniswap V3 池子, 若 ETH 突然上涨,价格到达 1ETH=100DAI,此时就会有套利者在该 DEX 中用 DAI 兑换 ETH 来套利,为了将其达到与外部平衡,将有 P=80 ==> P’=100,根据白皮书,Swap 计算价格变化如下: 将根号后的起始价格 P 和结束价格 P’ 带入,可以计算得到 △y≈151.09,而 △x≈1.689。 若 Swap 的资产假设该流动性提供者按照 L 比例划分了 37.5%,于是该流动性提供者分摊 x≈0.6334,y≈56.66 于是我们得出如下表格: 我们将其百分比化:IL_V3 = (540-533.31)/540 ≈1.239%
Uniswap V2–添加流动性而对于 Uniswap V2,假设原池中的资产量为 10 个 ETH 和 800 个 DAI,即 P 为 80DAI/ETH。 流动性提供者投入了 3ETH 和 240DAI,此时则存在 13 个 ETH 与 1040 个 DAI,价格仍为 80DAI/ETH,比重占 23.077%,新的 K 为 13520。 Uniswap V2–Swap当 ETH 突然上涨,价格到达 1ETH=100DAI,此时就会有套利者用 DAI 兑换ETH来套利。 设共用 △y 个 DAI 兑换 △x 个 ETH 后,AMM 池中 ETH:DAI 价格达到与外部平衡的 1:100 不考虑手续费等因素,则有: 解得 dx≈1.3724, dy≈122.76,即套利者给了 122.76 个 DAI,换走了 1.3724 个 ETH。池子 -1.3724 个 ETH,+122.76 个 DAI 这将在所有比重中分担,于是提供者分担23.077%,即失去0.3167个ETH,换取28.33个DAI,我们得出如下表格: IL_V2 = (540-536.66)/540 ≈ 0.6185% 具体将会取决于在 V3 做市区间,越小则杠杆越多,x’ 和 y’越大,同时无常损失和手续费收益也会越多。 当然,用户也可以如 V2 一样将流动性分摊到整个曲线中去而不是某个线段,即在 0 到正无穷进行做市: 后记由于篇幅原因,本篇仅就集中流动性进行了讨论。Uniswap V3 创新了很多的新功能,其复杂程度相较于 V2 增加了非常多。 无可否认,Uniswap V3 的创新使得 Uniswap V2 被加强,用户可以选择将其流动性集中在任何一个区间以获得更多的手续费。 但与此同时这也将导致更多的无常损失和更大的资金转换为劣势资产速度,而这也产生了许多新特性如限价单 swap 等功能。 因此,在选择做 LP 之前,需要认真思考自己的需求,切忌盲目做市。 参考[1] Uniswap V3白皮书 [2] Uniswap V3新特性解析 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 19:58:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |