特别鸣谢 Maru Network 的 Alex、Uniswap Labs 的 Brad、Celer Network 的 Dong Mo、Nebra 的Shumo 以及 Hyperoracle 的 Suning 对本文贡献的宝贵讨论、见解和反馈。
作者:Luke
毫无疑问,Uniswap 是使用最为广泛的一种去中心化应用程序。它坚持不懈地开拓创新解决方案,重新定义行业规则。本文将深入探讨 Uniswap 令人惊叹的发展之旅,过去从零起步,未来将有无限可能。通过研究 Uniswap 每个版本的特性,本文揭示了它如何有效应对各种新挑战并适应不断变化的需求。此外,本文还探讨了加密货币的最新进展如何塑造去中心化交易所(DEX)的未来。做好准备,迎接这场从零到无限的发展之旅吧。
v0:概念验证在 Uniswap 之前,EtherDelta 是唯一受关注的去中心化交易所(DEX)。然而,用户体验却非常糟糕。
许多行业领袖(Gnosis的 Alan Lu 和 Vitalik)提出了自动化做市(AMM)的概念,与传统的订单簿模式相比,该技术为链上交易提供了一种替代方法。
特性恒定乘积 AMM
Uniswap 利用恒定乘积公式(x * y = k)来计算资产的价格。在此公式中,x 代表交易资产的储备,y 代表定价资产的储备。当从池中取出(买入)代币时,必须存入(售出)一定比例的金额,以保持 k 恒定。池中代币的比率决定了代币的价格。
值得注意的是,其他 AMM 使用不同的数学公式来表示流动性曲线。例如,Curve的 Stableswap 和Balancer的加权池。
问题Uniswap v0 本质上是一种概念验证,这意味着仍然有许多问题尚未解决。两个主要问题如下:
仅适用于单一 ETH/ERC 20 交易对。仅适用于单一流动性提供者(LP)。v1:功能性去中心化交易所(DEX)特性2018 年 11 月 2 日,Uniswap v1 在以在坊主网上线。该版本支持多个流动性提供者使用内部代币来跟踪费用和抵押品。该版本使用工厂合约,支持任何人添加任何代币来与原生 ETH 进行交易。该版本提供了函数型 DEX。然而,仍有一些问题亟须解决。
问题由于所有代币都与 ETH 配对交易,用户可以在单笔交易中使用 ETH 作为中介,轻松地将任一种 ERC20 代币兑换为另一种 ERC20 代币。然而,这种方法存在一个缺点:如果涉及 DAI/USDT 等频繁操作的稳定币兑换时,每次兑换都依赖 ETH 作为中介,效率会变得低下。在这种情况下,直接代币对更受青睐。
v2:金钱乐高 (Money Lego)2020 年 5 月,Uniswap v2 推出,该版本对 Uniswap 协议进行了多重升级,增强了交易的灵活性,拓展了交易的可行性。
特性ERC20/ERC20 交易对
Uniswap V2 的显著差异在于:可添加 ERC20 代币与其他 ERC20 代币的 LP 流动性池,而不是仅将 ERC20 代币与 ETH 配对。对流动性提供者来说,此功能实用性更强,因为他们现在可以维持更多样化的 ERC20 代币计价头寸,包括稳定币交易对。
价格预言机
Uniswap v2 提供可供众多 DeFi 应用程序使用的链上价格信息。这些价格信息不易被操控,因此非常有价值。该机制会将区块结束时的价格添加到核心合约的累积价格变量中,该变量根据特定价格存续的时间长度进行加权。该变量本质上代表了合约整个历史记录中每秒 Uniswap 价格的总和。
外部合约可以利用该变量来准确跟踪任何指定时间间隔内的时间加权平均价格(TWAP)。在时间间隔开始和结束时读取 ERC20 代币对的累积价格,计算二者的差值并将其除以时间间隔长度,即可得到该特定期间的 TWAP。
闪电兑换
Uniswap v2 还引入了闪电兑换,这是借贷市场 AAVE 首创的一种闪电贷。此功能允许任何用户在池中取出尽可能多的 ERC20 代币,无需任何前期成本,也无需执行任意操作,前提是在交易执行结束时返回等值代币(加上费用)。
闪电贷功能声名狼藉,因为它经常与针对 DeFi 协议的各种攻击联系在一起。但真正的问题不在于闪电贷,而在于协议中现有的漏洞。闪电贷的原子性消除了通常与池间套利和获得保证金杠杆等操作相关的前期资本要求。
问题尽管该 AMM 富有创新性并且有利于促进新市场的交易和流动性,但仍然存在效率低下的问题。例如,在处理低波动性代币时,仅在较小的价格范围内才需要流动性。然而,当前的设计在所有价格范围内均匀分配流动性。
v3:资本效率Uniswap v3 采用突破性的集中流动性设计,致力于成为最灵活、最高效的 AMM。
特性集中流动性 (CL)
在 Uniswap v2 中,流动性沿 x*y=k 价格曲线均匀分布,为整个零到无穷大价格区间提供流动性。然而,对于大多数池子,流动性并未得到充分利用。
在 Uniswap v3 中,流动性提供者能够将其资本集中在特定的价格范围内,在预期价格下获得更高流动性。通过这种自定义,流动性提供者能够构建符合其偏好的个性化价格曲线。然后,这些单独的头寸将会聚集到一个单独的池子中,创建一条统一曲线,用户可以根据该曲线进行交易。其结果对交易者和流动性提供者均有利:由于自定义范围内流动性高度集中,交易者的滑点会更少,流动性提供者可赚取更高的费用。
集中流动性对稳定币交易对(如稳定币和流动性质押衍生代币)来说极具价值。这些资产往往在较小的价格范围内交易。然而,对于波动性较大的代币对,集中流动性则需要更先进的流动性管理技术。对于普通零售流动性提供者来说,持续有效地管理其仓位可能颇具挑战性。
范围订单
凭借集中流动性,该版本引入了一种名为范围订单的新型订单类型,作为对市价单的补充。流动性提供者能够在自定义价格范围内(高于或低于当前价格)存入单一代币。如果市场价格进入指定范围,则可以沿着平滑曲线售出一种资产以换取另一种资产,同时在此过程中仍可赚取交易费。
范围订单的功能与「限价单」类似,但缺点是可逆——当价格反转时,订单也会反转。不过,在此过程中,仍然可以赚取费用。Barry Fried(@BarryFried1)在此帖子中提供了如何使用范围订单的详细示例。
多种收费等级
Uniswap v3 不再采用单一收费等级,而是为每个交易对引入三个单独的收费等级——0.05%、0.30% 和 1.00%,这样流动性提供者就能够因承担不同程度的风险而获得适当的补偿。
高级预言机
Uniswap v3 对价格预言机进行了重大改进。该版本不再仅存储一个价格累积变量,而是存储一组变量,从而可以更轻松、更低成本地创建更高级的预言机,包括简单移动平均线(SMA)、指数移动平均线(EMA)、异常值过滤等。
问题缺乏灵活性
尽管集中流动性和收费等级为流动性提供者提供了更大的灵活性并促进了新策略的实施,但 Uniswap v3 未能适应 AMM 和市场日新月异的功能和创新。为了整合 TWAP 订单、限价单、高级预言机和动态收费等附加功能,有必要重新实现核心协议。
通过某些功能(如 Uniswap v2 中最初引入的价格预言机),集成者能够利用去中心化的链上定价数据。然而,其代价是兑换者的 Gas 成本增加,集成者缺乏自定义选项。
流动性管理复杂难解
如前所述,对于新人流动性提供者来说,集中流动性管理颇具挑战性,尤其是波动性较大的交易对。虽然已经有了几种自动流动性管理协议,但它们大多采用专为挂钩资产设计的简单再平衡策略。遗憾的是,对于波动性较大的交易对来说,这些策略往往无效,因为区块时间长、Gas 成本增加、对冲成本上升都会限制其效果。
此外,由于每个流动性提供者的集中流动性头寸各不相同,因此 LP 代币本质上不可替代。它只能用非同质化代币(NFT)来表示,这对其他希望与之集成的 DeFi 协议提出了挑战。
许多优秀项目正在积极利用各种策略(包括再平衡、货币市场动态对冲、永续合约和期权)来解决这一问题。Atis Elsts(@atiselsts_eth)撰写了一系列有关 LP 策略的优秀文章,强烈推荐。
价值泄漏
在所有问题中,价值泄漏问题是重中之重。虽然该问题并非 Uniswap v3 所独有,但由于自其推出以来 AMM 交易量增加,采用率提高,该问题已经引起人们的关注。价值泄漏主要源自于 DEX 系统,形式如下:
由于抢先交易和三明治攻击,交易者最终要支付比实际所需更高的滑点。
流动性提供者通过 CEX-DEX 套利损失价值(又称相对损失再平衡)
为了解决上述问题,较之 Uniswap v3,我们需要提供更多自定义功能和复杂设计。我们需要一个更具表现力和更为强大的 DEX 平台。
v4:终极平台Uniswap v4 基于前几代推出的 AMM 模式而构建,通过引入「钩子(hook)」,旨在成为高效、可自定义的终极 DEX 平台。
效率单例(Singleton)
在 Uniswap v3 中,每个池子都通过工厂合约创建为单独的合约。而在 Uniswap v4 中,所有池子共存于单个智能合约(也称为单例)中。这种单例模式显著降低了创建池和执行多跳交易的相关费用。
闪电记账 (Flash Accounting)
在 Uniswap v4 中,单例模式利用闪电记账来优化资产划转。与 v3 中资产在每次兑换后移入和移出池不同,v4 系统仅根据净余额进行划转,这大大降低了记账成本。通过瞬态存储(EIP-1153 中提出),设置和清除存储槽的成本更低,而若要闪电记账有效运行,存储槽必不可少。
原生 ETH
Uniswap v4 再次引入了对原生 ETH 交易的支持,这样会有几个好处:交易者可以享受更低的 Gas 成本,实现更低的划转成本,还能免去额外的包装成本。
自定义钩子
钩子合约(或钩子)是外部部署型合约,在池子执行期间的特定点执行预定义逻辑。这便是 v4 如此富有表现力且可自定义的原因所在。通过钩子,可以实现以前内置于协议中的特性(如预言机)以及以前需要独立协议来实现的新特性。
Uniswap v4 目前支持以下八种钩子回调函数:
beforeInitialize/afterInitialize
beforeModifyPosition/afterModifyPosition
beforeSwap/afterSwap
beforeDonate/afterDonate
下图展示了兑换钩子的逻辑流程。在执行兑换前后,有一个专用的布尔标志,可以在这些特定点执行自定义代码。这是开发高级功能的基础,如预言机、动态收费体系、拍卖和高级订单类型等功能。我们将在下文更深入地探讨这些概念。
预言机
在之前的版本中,预言机集成在 Uniswap 核心协议中。虽然这便于集成其他协议,且集成成本更低,但代价是自定义选项减少,兑换者成本增加。然而,随着钩子的引入,预言机的设计可能性得到极大的扩展。这为创建抗操纵预言机(如缩尾价格预言机和波动性预言机)提供了机会。此外,现在还可以自定义由谁来承担更新预言机的成本。例如,可以使用具有 ETH 余额的钩子合约来支付 Gas 费用,而非让第一个兑换者承担成本(这种方式可能不可持续)。尽管已经得到优化,但预言机设计仍然面临挑战。例如,TWAP 预言机有时容易受到操纵,往往会滞后于当前价格。
Uniswap 实验室推出了另一种有趣的价格预言机,即截断式价格预言机。该预言机会计算流动性池中资产的几何平均价格,并对单个区块内的价格变动加以限制。通过截断价格,这种链上预言机减轻了重大交易的价格影响,增强了对操纵企图的抵抗力。
动态费用
虽然 Uniswap v3 引入了额外的费用等级供流动性提供者选择,但这些费用体系仍然是静态的,没有考虑当前的市场状况。因此,流动性提供者的服务没有得到充分补偿。
Alex Nezlobin(@0x94305)提出了一种简单有效的动态费用体系,该体系考虑了前一个区块的价格影响,并对买家和卖家应用不同的费用标准。如下图所示:当 CEX 价格移动至 p*,即高于当前 AMM 价格 p_AMM 时,售出费用减少δ,而购入费用增加δ。δ的值与 AMM 价格的变化成正比。这种动态费用体系的目的是区分套利者和不知情的资金流。套利流与价格变动自相关的可能性更大。
设计一个稳健的动态费用体系提出了几项挑战。一项挑战是如何整合链下信号,如 CEX 价格、流动性深度和波动性。此外,各种链上信号(包括地址、大小和执行时间)对于区分知情流和非知情流来说可能不可靠,因此很难评估其有效性。此外,为了限制流动性提供者的损失,确保费用不低于零也很重要。
拍卖
钩子还可以作为实施拍卖的手段,这有助于将价值重新分配给流动性提供者。根据时间的不同,拍卖可分为事前拍卖和事后拍卖。
事前拍卖在拍卖区块之前进行。这一概念最初是在一篇讨论 MEV 捕获 AMM(McAMM)的研究文章中提出的。在这种方法下,在一个区块被拍卖之前,可在 AMM 中进行第一次兑换的权利,随后会重新分配出价价值。然而,这个投标过程也存在一些挑战,因为它本质上涉及期权定价,这可能非常复杂。此外,由于区块提议者拥有是否接受包含交易的区块的最终决策权,因此可能会出现审查问题。事实证明,确保投标价值公平和有效分配也是一项复杂的任务。而且,无法保证竞标获胜者第一个行使其兑换权利,这可能会导致其他交易者的体验日益恶化。
事后拍卖是在波动性实现后进行的,这意味着 CEX 价格已经发生了变化,但后续区块尚未提交。这类拍卖的优点是提高了效率,但也带来了挑战,因为它们需要依赖于可信方或去信任系统的链下基础架构。如果使用可信方,就会出现审查和投标隐私方面的问题。另一方面,设计去信任系统要复杂得多。事后拍卖还面临着提议者可能与竞标者耍花招的问题,例如及时排除套利交易。此外,还存在一个重大问题,投标、对中标达成共识以及将这些投标分发给区块构建者的过程存在延迟,而所有这些过程都需要在提交后续区块之前完成。最后,可能很难确保这些拍卖中有足够的竞争条件来获取足够的价值。Sorella Labs(@SorellaLabs)利用其先进的基础架构和机制设计,在应对这些挑战方面发挥着带头作用。
Diamond 钩子
Diamond 协议最初被设计为 LVR 最小化的 AMM。在 Diamond 协议下,出块者进行拍卖,以捕获 Diamond 矿池的外部市场价格与矿池自身价格之间的套利机会。这些拍卖的收益以保持激励兼容的方式在 Diamond 矿池和出块者之间共享。
正如本文所讨论的,Diamond 协议的一个变体包括实现一个抵押品池,以根据出块者承诺的价格来维持区块结束价格。仅当有足够的抵押品可将价格恢复至承诺价值时,才会执行兑换。Arrakis(@ArrakisFinance)目前正在与 Diamond 协议的作者之一 Conor McMenamin(@ConorMcMenamin9)合作,开发使用 v4 的钩子合约来实现这一目标。
高级订单类型
钩子还支持更高级的订单类型,大大提高了交易者的体验。一些常见的订单类型包括限价单、止损单、止盈单和 TWAP。
限价单交易者可以选择向钩子合约提交链上限价单。当价格达到指定的最小变动价时,订单即成交。然而,与传统金融(tradfi)限价单相比,这些链上限价单存在明显的劣势。这主要是因为链上订单无法在不产生 Gas 费用的情况下取消。因此,这就产生了订单交易比不高的问题。
时间加权平均做市商(TWAMM)一种可行的解决方案是实施时间加权平均做市商(TWAMM),以促进大额订单的执行。这种方法可将大订单分成小区块,并确保其作为第一批交易来执行,从而防止三明治攻击。此外,还可以考虑降低 TWAP 订单费用,因为它们通常涉及不知情的流程。然而,随之而来的挑战是高昂的 Gas 成本,以及决定谁应该承担这些费用。
其他钩子
使用钩子还可以实现几个其他功能。以下是一些构思:
一种产生收益的钩子,将超出范围的流动性借入货币市场以提高资本效率。
既具有 xy=k 流动性曲线又具有集中流动性的池子。
为流动性提供者提供提现费用的池子,以减少即时流动性攻击。
Suning(@msfew_eth)在 Github 上分享了一些有关钩子的奇思妙想。Aiden(@aiden0x4)还发布了一个很棒的钩子开放目录。
zkAMM 和 zkHooks
ZK 协处理器 (ZK Coprocessors) 赋能智能合约,使其能够访问类似于Dune Analytics所提供的数据见解,所有这些都不会由于零知识(ZK)证明技术的应用而影响信任度。ZK 协处理器在 AMM 设计中的应用是一个新兴的研究领域。通过引入钩子,现在允许将零知识证明无缝集成到 Uniswap v4 中,开创了 zkAMM 的新时代。
HyperOracle(@HyperOracle)演示了基于 Uniswap v2 的 zkAMM 实现,其中 addLiquidity 计算被转移至链下。当用户添加流动性时,需要计算代币数量、价格和 LP 代币份额。在这一特定的实现中,HyperOracle 的 zkGraph 捕获 addLiquidity 事件,执行必要的计算,生成证明并发布。zkAMM 的这种实现包括一个集成的自动化层,用于验证该证明并为用户铸造 LP 代币。
Diego(@0xfuturistic)介绍了基于 Uniswap v3 的 zkAMM(zkUniswap)实现,其中一部分 AMM 兑换计算被转移至 RiscZero(@RiscZero)zkVM。当用户在池中执行兑换时,需要计算几个参数来完成兑换。这些参数包括要兑换的数量、费用以及兑换后的价格。最初,该计算通过 EVM 在 Solidity 合约中执行。然而,在新的实现中,兑换输入由中继者拾取,并且计算在链下进行。随后中继者发布输出和证明。AMM 验证该证明并结算兑换。zkUniswap 实现了锁拍卖机制来保证并发控制。虽然其当前性能与 EVM 相当,但通过批量兑换的并行化可以大大提高效率。
交易量证明是 AMM 的又一用例。Brevis(@brevis_zk)提供了一个有趣的示例,可以根据用户的历史交易量设计费用返佣钩子,类似于中心化交易所(CEX)上基于交易量的费用返佣。VIP 交易者现在能够在链下计算其每月交易量,然后向区块链提交低成本的零知识证明,以异步验证其 VIP 状态。一旦经过验证,后续交易可以利用兑换后钩子访问由零知识协处理器填充的「VIP 费用等级表」。这允许自动应用适当的费用返佣。Maru Network(@marunetwork)目前正在开发去信任交易量预言机,作为其 ZK 协处理器网络的初始用例。通过实施去信任交易量预言机,DEX 将能够以公平、透明的方式分配奖励。这种方法可以按比例激励流动性和用户活动,形成积极的飞轮效应。通过使用 NEBRA(@nebrazkp)UPA(通用证明聚合)等零知识证明聚合服务,可以降低证明验证的成本,NEBRA UPA 将来自各环路和各方的证明聚合为单个证明,以降低摊销验证成本。
总而言之,zkAMM 的概念涉及利用 ZK 协处理器或 ZK 预言机将计算从 EVM 转移出来并验证链上计算的证明。与兑换和流动性调整相关的计算相比,这些计算可能复杂得多。例如,这些计算可能涉及根据最近的市场波动计算动态费用,证明指定池中的历史用户数量或使用复杂的机器学习算法实施再平衡策略。将有无限可能,因为任何计算最终都会导致 O(1) 验证成本,而不再受到 EVM 计算资源的限制。
v4 挑战Uniswap v4 为 AMM 设计空间带来了效率和自定义功能,支持创建具有不同特性和功能的池子。这是一大进步,但代价也可预见:由于池子数量激增,流动性碎片化加剧,因此,路由也变得更具挑战性。
UniswapXUniswapX 旨在通过将路由的复杂性外包给第三方填充者的开放网络来解决流动性碎片化问题。这些填充者相互竞争,使用链上流动性(如 AMM 池或其自己的私人库存)执行兑换。这种设计以目标为中心,用户只需声明他们想要的结果,依靠专业人员来进行填充。
这些填充者是高级代理,配备了先进的路由算法、高计算能力和大量的金融资本。它们在预定的拍卖机制下相互竞争,为用户提供最好的执行方式。用户还可以获得价格优化,确保他们的执行至少与直接从 Uniswap AMM 池进行的交易效果一样好。
UniswapX 协议的体系结构如下所示。兑换者通过 Uniswap API 提交其意图订单,其结构为 Permit2 可执行的链下签名。Permit2 是一款设计精良的模型,可确保用户持有的代币安全转移。填充者设计各种策略,使用任何可用的流动性场所来完成这些订单,无论是在链上还是链下。最后,订单反应器解决 UniswapX 订单。他们负责验证特定类型的订单,将其解析为输入和输出,根据填充者的策略执行订单,并验证订单是否成功实现。
目前,在 Uniswap 实验室对 UniswapX 的接口实现中,协议被分为两个阶段。第一个是 RFQ 阶段,白名单上的「报价人」用报价回应订单。然后,报价的获胜者有一个排他期来完成订单。如果没有完成订单,就进入第二阶段——荷兰式拍卖阶段,即任何填充者都可以参加拍卖。计划在不久的将来使报价系统完全无需许可。
以目标为中心的设计可提供以下好处:
聚合流动性来源以获得更合适的价格。
即使是跨链兑换,也不需要 Gas 代币。
通过价格优化实现最大可提取价值的内部化。
交易失败不会产生任何费用。
挑战使报价系统无需许可,例如使用有效的信誉系统。
吸引更多的填充者,以确保富有竞争性和无需许可的拍卖环境。
未来:无限游戏DEX 的发展并未止步于此。为使加密技术得到大规模普及,还有几个其他问题亟待解决。PropellerHeads(@PropellerSwap)的 Markus Schmitt(@_haikane_)与FrontierResearch(@FrontierDotTech)合作,撰写了一篇出色的文章,深入探讨了优秀 DEX 的构成要素,明确了尚待解决的问题。根据文章的观点,一个出色的交易所应该提供:
信任:确保交易前、交易中和交易后的透明度并最大限度降低托管风险。
最合适的价格:持续提供最合适或具有竞争力的价格。
公平:防止滥用订单,确保所有用户在定价和费用方面享有平等待遇。
速度和可用性:提供快速交易处理并保持高可用性,以避免延迟和不便。
信息:通过提供订单监控、结算价格估计以及针对限价单和滑点的有用建议,帮助用户做出明智的决策。
流动性:在各种资产对之间展示强大的流动性池,为获得优惠价格注入信心。
如果 DEX 的智能合约被认为是安全的,那么就能建立信任。DEX 不持有用户的资产。如今,可供交易者使用的信息相当广泛。AMM 无需许可的特性使用户能够创建和交易任何资产对。但是,由于区块链的特性,并不能始终保障最合适的价格、公平、速度和可用性。Gas 费用、滞后的价格和碎片化的流动性都会影响用户体验。
为解决这些问题,L2 和基于 L2 的 DEX 数量与日俱增。此外,路由、订单批处理和报价请求系统也愈发复杂。为防止抢先交易,确保公平的价值分配,越来越多具有 MEV 意识的渠道投入使用。此外,我们正在努力开发订单流拍卖市场,以最大限度地减少 DEX 用户的价值泄漏。钩子和 ZK 协处理器的引入也大大扩展了 AMM 的设计可能性,支持更复杂的逻辑和繁重的计算,而且不会影响信任度。
此外,还有一系列基于 AMM 的协议,有效地堆叠了「金钱乐高」。有的协议帮助小白用户自动化流动性再平衡或杠杆挖矿,如流动性管理器。也有协议利用集中流动性(CL)头寸来创建保证金交易、永续交易、期权和结构性产品。
AMM 因其无需许可上币、被动流动性和交易简便等特点而实现了指数式增长。然而,这种便利性也带来了我们前面探讨过的几个问题。Uniswap 一直在不断突破边界,力求解决这些问题,增强用户体验。正如 Dan Robinson(@danrobinson)在 SBC 23 大会的演讲中指出的那样,DEX 设计是一场无限游戏。随着未来 DEX 越来越普及,可能会出现新的挑战和问题,届时就需要创新的解决方案。