作者:Arrow
最近在做一个 DeFi 赛道的评估方法总结。在对一些案例进行研究后,不论是从影响力,还是从迭代的逻辑来看,Uniswap 都是一个典型的代表,本文对 Uniswap 进行全面复盘。
Uniswap 自 V1 版本到 V4 的迭代,以及 UniswapX 协议的推出,其内在逻辑都是对 DEX 交易的功能创新和机制优化。
V1 将 AMM 初始实践于加密领域,V2 减少 ETH 风险敞口,推出更难被操纵的价格预言机,V3 通过集中流动性解决资本效率低下问题,V4 实施可定制化 DEX,UniswapX 协议通过拍卖机制强化第三方聚合器的竞争性,从而实现对价格滑点的优化。
Uniswap 发展史Uniswap 的地位和影响力无需赘述,根据 Dune 的实时数据,Uniswap 至今仍旧是市场份额排名第一的 DEX。
作为一个头部的 DEX,时间并不算长久,但是屡次迭代,我们来看一看发展历程:
2017 年 6 月,Vitalik 发表文章 On Path Independence;
2018 年 11 月,Uniswap V1 发布:支持 ETH 和 ERC-20Token 之间进行交易;
2020 年 3 月, Uniswap V2 发布:支持任意两种 ERC-20Token 对进行交易;
2021 年 5 月, Uniswap V3 发布:提高 LP 资金利用率,提出聚合流动性概念;
2023 年 6 月,Uniswap V4 推出:引入 Hooks 合约定制化,防止价值泄露;
2023 年 7 月,Uniswap X 推出:聚合链上链下流动性,MEV 保护。
Uniswap V1:对自动做市的尝试2017 年,Vitalik 在个人网页中发布文章《On Path Independence》,其中首次在加密领域引入了自动做市商(AMM),这是一种不同于 CEX 的交易方法。当然,这种方式在非加密界(如传统金融界)早有过讨论。
我们知道,在股票市场、期货市场或者现有的 CEX 中,大多都以 Order Book (挂单簿模式)进行交易。做市商(Market makers,如券商、中心化交易所)通过对买方买单和卖方卖单在价格相符的情况下进行撮合,从而达成买卖双方的交易。
但是在去中心化的情况下却遇到了问题,原因出自在 DEX 去中心化环境下(任何人都可以参与创建市场),以订单簿模式进行撮合交易很难提供相应的流动性,成交率和体验感都相对较差,没有足够的流动性则很难媲美 CEX 的操作效用。
而在 Vitalik 的这篇文章中,向加密市场引入了一个新颖的概念:Automatic Market Maker(自动化做市商)。在这个概念中,资产定价通过定价算法而完成,而不再通过传统的订单簿模式。
在 AMM 模式中,不需要做市商报价或者系统撮合,交易者可以直接利用池中流动性实现资产兑换。
TokenA 和 TokenB 形成了恒定乘积的关系:tokenA_balance(p) *tokenB_balance(p)=K(K 不变)
这是一种流动性驱动的交易制度,这种模式被称为恒定积做市商 (CPMM) 。该种方法下可以通过定义 tokenA 和 tokenB 之间的任何(单调)关系并在任何时候计算其衍生品来给出价格,从而形成一个与路径无关的做市商。
三个参与方:LP、交易者、套利者
在 AMM 的做市机制中,并不存在类似订单簿模式具体的交易对手方,资产的实际价值由恒定乘积的数学公式决定,一定程度上可以类比于交易对手为智能合约,即可实现资产的自动交易。
智能合约中需要有人提供流动性,流动性提供者就是 LP(Liquidity Provider),LP 通过向该池子中的智能合约中注入资产,为交易提供流动性,从而获取交易费用收益。
在 LP 搭建好初始的流动性池后,交易者就可以通过该池进行 Token 的兑换,同时套利者会主动到来,通过在不同市场间的价格套利,维持资产价格与市场价格的一致。
在 18 年 11 月发布的 Uniswap V1 中,所有资产都可以通过 ETH 进行兑换。ETH 和 ERC-20Token 之间进行交易,任何人可以添加代币与原生 ETH 进行交易,ETH 就是实质上的资产交易中介。
如果我们想要交易,单个池中会发生什么样的变化呢?
假设一个 ETH 现在价值 100TokenA,一个 ETH/TokenA 池由 10 个 ETH 和 1000 个 TokenA 组成。
此时 10 个 ETH 和 1000 个 TokenA 价值相同都为 1000 美元,资产价值比例是 1:1。
k=10 *1000=10000,在未添加更多流动性的情况下,这个乘积保持不变。
现在假设我要往池中卖掉 5 个 ETH,那么应该是:
y=10000/(10+5)=666.67,池中的 ETH 数量增加到 15 个,而此时的 USDC 数量变为 666.67 个,所以我用 5 个 ETH 换取到了 333.33 个 TokenA,此时该池中的单个 ETH 价格为 666.67/15=44.44,即一个 ETH 等于 44.44 个 TokenA。
当然,单个池中价格如果和其他交易市场有较大变化,套利者就会立刻蜂拥而至,直至吃掉价差。毕竟 AMM 机制只能产生交易价格,但是并不能发现市场价格,所以套利者的作用十分重要。
无常损失、LP Token、交易滑点
当所存代币的价格比率与存入资金池时相比发生变化时,就会产生无常损失。变化越大,无常损失就越大。
我们现在作为 LP,继续举个例子:
UniswapV1 核心公式:x∗y=k
现在我们作为流动性提供商,继续往池中添加 10 个 ETH 和 1000 个 TokenA 作为初始的流动性,此时 1 个 ETH 等于 100 个 TokenA,两者的资产数量恒定乘积为 10*1000=10000(x*y=10000,x=100y)。
此时,如果 1 个 ETH 涨价为 200 个 TokenA,我们可以进行换算:x*y=10000,x=200y,从而算出 x=7.071,y=1414.21。
此时的流动性池从一开始的 10 个 ETH 和 1000 个 TokenA 变为:7.071 个 ETH 和 1414.21 个 TokenA。
发现问题了吗?
此时如果我赎回所有的资产,到手变成了 7.071 个 ETH 和 1414.21 个 TokenA,用 TokenA 计价实际价值是 7.071*200+1414.21=2828.41,而如果以最开始的 10 个 ETH 和 1000 个 TokenA 计算,现在的价格应该是 10*200+1000=3000TokenA。
这部分收益的差距(3000-2828.41=171.59TokenA)就是无常损失。
无常损失的发生是因为在去中心化交易所的自动做市商机制下,流动性提供者根据价格波动进行资金调整,导致其本金损失和错失收益。
由于他们同时充当买卖双方,当价格下跌时被迫增加持有的资产数量,而当价格上涨时被迫减少持有的资产数量,从而导致损失。
当然,你也可以通过选择套期保值,通过开设对 ETH 的空单 / 多单合约进行风险管理。
为了激励用户充当 LP 提供流动性,并且鼓励其对价格波动性的承担,LP Token 应运而生。这是对流动性提供者的奖励,可以获取每次交易的一定比例手续费(UniswapV1,交易者在交易中支付 0.3% 的费用,归流动性提供者所有)。同时也作为 LP 的凭证,用以取回自己所添加的流动性。
还有一个概念是交易滑点,经常做 DEX 交易的朋友绝对不会陌生。AMM 作为一种流动性驱动的交易制度,其优美的恒定乘积等式是一条光滑的曲线,价格是时刻根据供求关系而变化的。
如果此时交易大量 Token,滑点就会出现,你的预期价格和实际从池中获得的价格之间具有一定的差额。也就是说,你想要的价格和成交价格会有差距。
Uniswap V2:适配,预言机、闪电贷Uniswap V1 仅支持 ERC-20/ETH 交易对之间进行交易,实质是在使用 ETH 作为过渡货币中介进行 ERC-20Token 间的兑换,虽然交易路径简单,对于 LP 提供者来说形成了 ETH 的风险敞口、无常损失和滑点风险。
在 Uniswap V2 中,依然是基于「恒定乘积做市商」机制,但是 V2 的升级带来了效率的提升,其中包括:支持任意两种 ERC-20Token 对进行交易,这意味着可以创建任意的 ERC20-ERC20 对,而不需要再通过 ETH 的过渡路径配对。
这点就不再赘述,V2 的升级包括很多方面,还有两个比较重要的点分别在于:改进价格预言机、实现闪电贷。
价格预言机 Price Oracle 的改进
在 Uniswap V1 的过程中,通过池中两资产储备金相除计算出来的价格,如果以此作为链上价格预言,并不安全,因为很容易就会被操纵。
这次 V2 升级的目的之一是提升价格操纵的成本和难度。
在 V1 中,假设有其他合约使用当前的 ETH-DAI 价格来结算衍生品,操纵测算价格的攻击者可以从 ETH-DAI 对中买入 ETH,以虚高的价格触发衍生合约的结算,然后将 ETH 卖回该对,将其交易回归真实价格。在这种情况下,交易甚至可以以原子交易的方式进行,或者由矿工控制区块内的交易顺序。
而在 V2 中,为了测定市场价格平衡,价格每个区块更新一次,代币兑换价格在后一个区块之前测定,也就是代币市场价格以前一个区块最后一笔交易为准。
在这次升级里,也提供了一个新的价格预言数据:时间加权平均价格 TWAP。在每个区块开始时积累两种资产的相对价格,允许 Ethereum 上的其他合约在任意时间间隔内估计两种资产的时间加权平均价格。
更具体的来说,在 Uniswap V2 中,通过跟踪每个区块开始时有人与合约互动时的价格累积总和来累积该价格。根据区块时间戳,每个价格都会根据上一个区块更新后的时间量进行加权。这意味着在任何给定时间 ( 被更新后 ) 的累积器价值,应该是合约历史上每秒钟的现货价格之和。
预言机的用户可以选择何时开始和结束这个时期,攻击者操纵 TWAP 的成本会更高,价格相对来说不容易被操纵。
实现闪电贷
闪电贷是一个相对传统金融的绝对创新,毕竟现实交易不像区块链上一样可以回滚。
V2 中引入了 Flash Swaps 闪电贷。用户可以自由地向池中借出资产,并在链上的其他地方使用它们,只在交易结束时(在同一个原子交易中进行支付)归还资产并付出相应的利息,如果未能正常回款则回滚还原该交易。
实际上等于让任何人可以闪电借出 Uniswap 池中存储的任何资产。在 V1 中,并不允许用户在支付资产之前接收和使用该资产,用 A 资产购买 B 资产时,需要先将 A 资产发送到合约中才能获得 B 资产。
还有一些其他的更新点:包括 Uniswap V2 调整了新的合约框架,使用简单的二进制定点格式来编码和处理价格(精度)、协议费用的更新、对所铸成的池子份额支持元交易等。
Uniswap V3:资本效率的提升背景:Uniswap V2 存在流动性问题。根据上文中对 AMM 机制介绍,我们可以看出在 V1、V2 时,池子的流动性实际上是分布在【0,+∞】区域上的,也就是说,在 V2 的池子中实质允许任何价格的交易发生(参考 AMM 恒定乘积中的反函数光滑曲线)。
这乍一看是件好事,交易的范围很大,但实际上对于波动性不同的交易对,其价格区间并没有这么充足的需求,也就造成了在除部分交易区间外严重的流动性不足,资产利用率低下。
可以想象的到,在远离价格区间价格点上提供流动性是毫无意义而且浪费的,价格可能永远不会达到那个点。
集中流动性 (concentrated liquidity)
在这种情况下,为了提高资金流动性,Uniswap V3 引入了集中流动性 (concentrated liquidity) 的概念。也就是:
流动性提供商(LP)可以自由的选择在某个价格区间部分提供流动性,这样做可以将流动性更好的提供在高资本效率的区间内运营,同时在应用上也可以对不同价格波动性的资产池进行不同的配置。
V3 中的每一个小的价格区间都可以理解为一个 V2 在工作。在交易的过程中,价格会顺着曲线进行平稳的移动,当价格达到 V2 的某一段时,即达到了 V3 的价格区间的区间点,那么此时,价格点会滑动到下一个价格区间中。
理解了上面的这个概念,我们就可以来认识下新出现的名词——V3 的核心就是 Ticks。
Ticks,最小变动价位,是可以交易证券的最小增量金额。在 V3 中,通过将【0,+∞】的价格范围分成了无数个细粒度的 Ticks,实现了对每个区间上下界端点的限制。
通过对粒度控制来聚合流动性 ,V3 里整个价格区间由离散的、均匀分布的 Ticks 进行标定,每个 Tick 有一个 index 和对应的价格,每个 Tick 都会拥有其自己的流动性深度。
Uniswap V3 的数学原理上有所改变,虽然和 V2 的底层类似:
L=根号下 xy
L 被称作流动性数量,池子中的流动性是两种 Token 资产数量的组合。同样的,两种代币数量乘积为 K,但是因为每个 Tick 拥有的流动性深度并不相同,不同深度的等价定式不再相同。
关于数学原理就不再赘述,下方有 Atis Elsts 针对 V3 数学原理的一篇论文,有兴趣的朋友可以自行阅读。
Uniswap V2 中还是标准的 0.3% 交易费,而在 V3 中因为颗粒度的不同,提供了 3 个不同的费用等级,分别是 0.05%、0.3% 和 1%。此时的 LP 可以将资金效率集中在交易最频繁的区间内以获取最大的收益。
此外,V3 还基于 V2 再次进行了预言机的整体优化,不再只存储一个价格累积变量,而是存储一组变量,可以将数据的使用期延长,降低了 Gas 费用,节约成本。
Uniswap V4:自定义可定制 DEXUniswap V4 基于 Uniswap V3 的集中流动性模型,允许任何人在 Uniswap 上使用自定义功能部署新的集中流动性池,从而实现成为一个高效、可定制的 DEX 平台。
在 V4 当中,核心点是钩子(Hooks)合约,愿景是允许任何人通过引入「钩子」来做出这些权衡决策。
对于每个池,创建者可以定义一个「Hooks 合约」,该合约在调用的生命周期的关键点执行逻辑。这些 Hooks 也可以管理池的交换费用以及向流动性提供者收取的提款费用。
钩子 Hooks & 自定义池 Custom Pools
Hooks 是一组由第三方或者 Uniswap 官方开发的合约,在创建 pool 的时候,pool 可以选择绑定一个 hook,之后在交易的特定阶段,pool 都会自动调用与之绑定的 hook 合约,该合约在调用生命周期的关键点实现逻辑。
换句话说,钩子是在外部部署的合约,它在池执行的指定点执行一些开发者定义的逻辑。这些挂钩允许集成者创建具有灵活和可定制执行的集中流动性池。挂钩可以修改池参数,或者添加新的功能和功能性。
每个 Uniswap 流动性池都有一个生命周期:在流动性池的生命周期中,会发生几件事,包括:使用默认费用层创建池,流动性被增加、删除或重新调整,用户还可以交换代币等。在 Uniswap v3 中,这些生命周期事件是紧密耦合的,并以非常严格的顺序执行。
但为了在 Uniswap V4 中,为可定制的流动性创造空间。Hooks 合约为矿池部署者创造了一种代码引入方法,从而实现在矿池生命周期的关键点上可以执行指定操作,这些关键点例如交换前后,或者在 LP 头寸更改前后。
总之,hooks 是用于自定义池、掉期、费用和 LP 头寸交互方式的插件,通过钩子 Hooks 合约,开发人员可以在 Uniswap 协议的流动性和安全性之上进行创新,通过与 v4 智能合约集成的钩子创建定制的 AMM 池。
可以通过钩子合约实现的示例功能包括:
在一段时间通过 TWAMM 执行大型订单;按指定价格成交的链上限价订单;随波动率变化的动态费用;流动性提供者的内部化 MEV 分配机制;实现中位数、截断或其他自定义预言机。Uniswap V4 的核心逻辑与 V3 一样,是不可升级的。由于每个矿池现在不仅由代币和费用层定义,所以可以由此构建各种各样的矿池。并且虽然每个池都可以使用自己的钩子智能合约,但钩子会在创建池时被限制为确定的特定权限。
V4 中还有一些架构上的改变,比如 Flash Accounting(瞬时账户)可以大幅降低 Gas 费。该功能被包含在 EIP-1153 中引入「瞬态」存储,会在坎昆升级(Ethereum Cancun)后实现。
此外 V4 版本中还有用单例模式(将所有的池状态保存在一个合约中)、闪电记账(确保池的偿付能力)、恢复对原生 ETH 的支持、支持 ERC-1155 代币和增加治理机制等提升。
UniswapX:强化竞争UniswapX 是一种新的无需许可、开源 (GPL)、基于拍卖的协议,用于跨 AMM 和其他流动性来源进行交易。
该协议将在多个方面改进交换功能,包括:
通过汇集流动性来源提高价格无 Gas 交换防止 MEV(最大萃取值)交易失败无费用在未来几个月内,UniswapX 将扩展到无 Gas 跨链交换。Next-level aggregation 下一代聚合
背景:链上交易不断创新,导致流动性池激增,新的收费层级、L2 和更多的链上协议也会分散流动性。
方案:UniswapX 旨在通过将路由复杂性外包给第三方的开放网络来解决这个问题,这些第三方需要通过竞争使用 AMM 池或他们自己的私人库存等链上流动性竞争填充交易。
借助 UniswapX,交易者将能够使用 Uniswap 界面,不需要担心自己是否获得最佳价格。交易者的交易将始终在链上透明地记录和结算。所有订单均由 Uniswap 智能订单路由器支持,这迫使第三方与 Uniswap V1、V2、V3 以及启动后的 V4 竞争。
实质上,UniswapX 是强化了竞争机制,通过对第三方的路由选择,实现对各个资产池价格滑点的优化。
此外,UniswapX 还推出了新尝试:
无 Gas 交易,失败无需支付费用。交易者签署一个独特的链下订单,然后由代表交易者支付 Gas 的第三方在链上提交该订单,第三方将 Gas 费用计入交易价格,但可以通过批量执行多个订单来竞争最佳价格以及降低交易成本。
MEV 保护,将原本通过套利交易获取的 MEV 通过更优的价格返还给交易者。UniswapX 帮助用户避免更明确的 MEV 提取形式:使用第三方私有资产执行的订单无法被「三明治攻击」,第三方在将订单路由到链上流动性池时会被激励使用私有交易中继。
即将推出的 UniswapX 跨链版本,会将交换和桥接结合到一个无缝操作中。使用跨链 UniswapX,交换者将能够在几秒钟内在链之间交换,可以期待下他们的进展。
Uniswap 主旋律:迭代Uniswap 自 V1 版本到 V4 的迭代,以及 UniswapX 协议的推出,其内在逻辑都是对 DEX(AMM)的功能创新。
V1 将 AMM 初始实践于加密领域,V2 减少 ETH 风险敞口,推出更难被操纵的价格预言机,V3 通过集中流动性解决资本效率低下问题,V4 实施可定制化 DEX,UniswapX 协议通过拍卖机制强化第三方聚合器的竞争性,从而实现对价格滑点的优化。
我们可以看到,Uniswap 每一步都是在对自我的革新——降低借贷成本,优化用户体验,强化竞争意识,拥抱新兴技术,这种迭代升级才是一个好的协议能够基业长青的根本。
参考文献:
①Uniswap v2 Core:https://uniswap.org/whitepaper.pdf
②Dan Robinson:https://www.desmos.com/calculator/7wbvkts2jf?lang=zh-CN
③Uniswap v3 Core:https://uniswap.org/whitepaper-v3.pdf
④Atis Elsts, LIQUIDITY MATH IN UNISWAP V3:https://atiselsts.github.io/pdfs/uniswap-v3-liquidity-math.pdf
⑤James Chen, What Is a Tick in Securities Trading and How Does It Work?:https://www.investopedia.com/terms/t/tick.asp
⑥Uniswap 解析:恆定乘積做市商模型:https://medium.com/taipei-ethereum-meetup/uniswap-explanation-constant-product-market-maker-model-in-vyper-dff80b8467a1
⑦Uniswap V3 Book:https://y1cunhui.github.io/uniswapV3-book-zh-cn/docs/introduction/uniswap-v3/
⑧三火,如何理解 UniswapV3 白皮书:https://mp.weixin.qq.com/s/HjtGTmoiv5s5wKlDU0KUMw
⑨Hayden Adams, Our Vision for Uniswap v4:https://blog.uniswap.org/uniswap-v4
⑩What is Uniswap v4?:https://support.uniswap.org/hc/en-us/articles/16747656529933-What-is-Uniswap-v4-
①Hayden Adams,Introducing the UniswapX Protocol:https://blog.uniswap.org/uniswapx-protocol
②UniswapX whitepaper:https://uniswap.org/whitepaper-uniswapx.pdf