最近在做一个DeFi赛道的评估方法总结。在对一些案例进行研究后,不论是从影响力,还是从迭代的逻辑来看,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:自定义可定制DEX
Uniswap 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每一步都是在对自我的革新——降低借贷成本,优化用户体验,强化竞争意识,拥抱新兴技术,这种迭代升级才是一个好的协议能够基业长青的根本。