本文介绍了CoW AMM如何通过批量处理和盈余机制来缓解最大可提取价值(MEV)的问题,提供零交易费用,并将盈余转化为流动性提供者的收益。文章还探讨了CoW AMM的设计、实现细节、观察结果以及性能表现,强调了其与现有AMM(如Balancer)的无缝集成。
CoW AMM + Lying Cow, Vincent van Gogh. 图片来源: https://en.wikipedia.org/wiki/Lying_Cow
0. TL;DR
1. 介绍
2. CowSwap 回顾
3. CoW AMM 设计
- 批量处理
- 曲线移动
4. 实现浅析
- 交易流程
5. 观察
- 批量处理
- 零交易费!
- 曲线移动 = 盈余
- 无缝集成
- AMM 作为流动性来源
6. 表现
7. 结论
CowSwap 在 DeFi 领域因其成功交易后迷人的 Mooooo 声音而广为人知。🎶🐮🎶
现在,在这个基于意图交易的时代,CowSwap 凭借其先发优势主导了意图聚合市场。
来源: https://dune.com/queries/3058985/5097190/
然而,CoW AMM 并没有得到我预期的那么多关注,尽管我认为它是利用 AMM 解决 MEV(最大可提取价值)的独特尝试。
本文旨在简要介绍 CoW AMM 的功能、实现及其现状,看看它带来了什么!🥩
在我们正式开始之前,让我们播放一些 moooosic 🐄 🤣
我找到的最长的 Moo
让我们先快速回顾一下 CowSwap,以便更好地理解 CoW AMM。
CowSwap 是一个可以交易代币的 DEX。但不要被它类似 Uniswap 的可爱外观所迷惑——它不像 Uniswap 那样是一个 AMM,交易是直接与 AMM 池的流动性匹配的。
https://swap.cow.fi/ 万圣节主题!
相反,CowSwap 是一个流动性聚合器,将用户的代币与来自各处的流动性来源进行匹配:CoWs、链上 AMM、链下中心化交易所等。
“CowSwap”这个名字实际上来源于 C oincidence o f W ants —— 不同用户的交易请求可以通过简单地相互转移代币来结算。这避免了额外的链上成本,如 AMM 计算。
由于流动性不仅限于链上 AMM(交易必须在链上进行),像 CowSwap 这样的流动性聚合器通常将来自各种流动性来源的多个交易批量处理为单笔交易*。这降低了每笔交易的 gas 成本。
但 CowSwap 的最大优势在于其“求解器”网络。这些是监听 CowSwap 上交易请求的机器人,它们竞争找出最佳的批量请求,以产生最多的牛奶——即盈余!🥛
盈余是与最低执行价格相比实现的额外价值。例如,如果 Alice 想以 1 ETH 换取 2,700 USDC,但最终得到 2,705 USDC,那么盈余就是 5 USDC。CowSwap 总是选择具有最大盈余的批量解决方案。
现在我们已经介绍了基础知识,让我们深入了解 CoW AMM!
*感谢 Andrea ,他指出不同流动性聚合器的批量处理机制可能有所不同。“CowSwap 为批量中的多个交易运行单一拍卖,而 1inch fusion 或 UniswapX 则为收到的每笔交易运行单独的拍卖。”
CoW AMM 的创新来自于一篇名为 Arbitrageurs’ profits, LVR, and sandwich attacks: batch trading as an AMM design response 的研究论文。
正如标题所示,LVR(Loss-versus-Rebalancing)——一种 MEV —— 是这种新设计旨在解决的问题。
简而言之,LVR 的发生是由于 AMM 曲线的固有设计,交易时总是会产生滑点。当 AMM 价格落后于更敏感的价格场所(如中心化交易所(CEXs))时,套利者可以介入并从价格差异中获利。
虽然 LVR 和其他类型的 MEV 是值得单独讨论的大话题,但本文重点在于解决方案。研究论文概述了创建缓解 MEV 的 AMM(或 FM-AMM)的两个关键条件:
如果你对这些假设背后的数学感到好奇,我已经为你深入研究了。请查看本系列的第一集:ELI5: What Is FM-AMM, The Theory Behind CoW AMM, and How Is It MEV-Resistant?
*或 MEV 抗性,尽管“抗性”可能意味着完全解决 MEV,但这对于 CoW AMM 的当前实现并不一定成立。
批量处理一直是 CowSwap 的第二大特色(🎶 🐮 🎶🥇)。那么,谁比 CowSwap 更适合实现需要批量处理的 AMM 呢?真是 C( oincidence) o( f) W( ants)!😎
抛开这个俗气的笑话和道歉,你们中的许多人可能已经熟悉 CowSwap 批量处理技术的一些好处:
但进一步缓解 MEV 的额外好处可能看起来好得令人难以置信!
以下是 TL;DR:在 FM-AMM 中,储备的乘积——即常数——在每次交易后都会发生变化。然而,这种变化与交易规模不成比例——交易越大,曲线移动的非线性越强。这种非线性创造了批量处理的必要性。
论文以两种方式解释了曲线移动:
(Y * ((X - x’) / (X − 2 * x’))) * (X − x’)
,其中 X
和 Y
是交易前的储备,x’
是交易规模。这种方法可以完全消除 MEV,使套利者无利可图。CoW AMM 采用了最大化方法,我们很快就会探讨这一决定背后的原因!
如果你仍然渴望了解这两个条件的详细信息,你有两个选择:论文 或 我的文章 😁。
现在我们已经揭示了使 AMM 缓解 MEV 的两个要求,让我们来探索实现!
尽管 CoW AMM 是在 Balancer 上推出的,但其 实现 实际上是由 Wonderland 这个神秘的加密开发者团队制作的。有传言说他们刚刚参加了 Devcon 😍 🤫。
还有 CoW Dao 的另一个实现。据一位成员称,这是一个没有进入生产的实验版本。CoW 团队已经 将重点转向支持 Balancer 的实现。
本节涉及两个合约:
我们将检查的主要合约是 BCoWPool.sol。如果你不熟悉 CowSwap,这个合约可能会让人困惑:它只有三个主要函数——commit()
、verify()
和 isValidSignature()
。交易怎么可能进行呢?
https://github.com/balancer/cow-amm/blob/main/src/contracts/BCoWPool.sol
https://github.com/balancer/cow-amm/blob/main/src/contracts/BCoWPool.sol
以下是交易的工作原理,重点关注 CoW AMM 特定的逻辑:
GPv2Settlement.settle()
,并附带批量交易的详细信息。BCoWPool.commit()
开始,它锁定提议交易的订单哈希。这确保每个区块在 CoW AMM 上只执行一笔交易。BCoWPool.isValidSignature()
(一个 ERC-1271 函数)和 BCoWPool.verify()
来验证交易是否符合其要求。BCoWPool.verify()
中,BMath.calcOutGivenIn()
根据 AMM 曲线计算交换输出量 tokenAmountOut
,swapFee = 0
。将此结果与订单的指定金额 order.sellAmount
进行比较,以确保 AMM 至少提供预期的输出。GPv2Settlement
合约,然后该合约将交换的代币重新分配给各方。为什么我们不通过 Gnosis Chain 上的 CoW AMM 的真实交易来巩固这一理解呢?0xbbcb88fac67954e381443608e46fc5182abf5ef55ac2bcf12fa2007588aeb607
如图所示,在 GPv2Settlement.executeInteractions()
* 中,commit()
之后是 _setLock()
。
所有计算都在 isValidSignature() verification.
来源: https://www.tdly.co/tx/gnosis-chain/0xbbcb88fac67954e381443608e46fc5182abf5ef55ac2bcf12fa2007588aeb607
我们还可以观察到 verify()
和 isValidSignature()
在 BCoWPool
中执行所有复杂的计算以验证交易。
*注意:有时由于错误,Tenderly 上不会正确显示输入数据。你可以在 区块链浏览器 上查看完整的详细信息。
从上述实现细节中,我们可以得出几个关键观察:
“每个区块一笔交易”的限制有效地引入了使 CoW AMM 缓解 MEV 的批量处理要求。
由于区块链上的时间通常以区块定义,将交易限制为每个区块一笔交易是一个相当直观的选择。
正如我在计算 tokenAmountOut
时特别提到的,交易费为 0。是的,CoW AMM 上没有交易费!
虽然这对交易者来说是个好消息,但它引发了一个问题:CoW AMM 如何激励流动性提供者?显然,这就是盈余机制发挥作用的地方。
CoW AMM 没有固定 swapFee
,而是利用 CowSwap 现有的盈余机制,即接受求解器提出的最大可能盈余。因此,盈余成为 LP 的收益,取代了传统交易费的需求!
有些人可能注意到之前的一个不常见模式:交易的最后一步是直接在用户、流动性来源和 GPv2Settlement
之间转移代币。为什么这些转移不由 AMM 合约内的交换函数处理?
这是由于 CowSwap 的原始设计:代币,包括盈余,总是转移到 GPv2Settlement
,然后由其重新分配。在 CoW AMM 中,交换的代币以及盈余——即 LP 收益——直接从 GPv2Settlement
转移到 CoW AMM。
在许多 DeFi AMM 中,交易费在交易后添加到 AMM 池中,这会导致 AMM 曲线向上/向右移动。通过将盈余直接发送到 CoW AMM,我们实现了类似的曲线移动,只要盈余为正。
由于 CowSwap 总是选择具有最大盈余的批次,很明显,FM-AMM 的第二个要求(曲线移动,以其最大化形式)可以通过简单地将 CoW AMM 附加到 CowSwap 的批次选择标准来实现。最大化盈余等于最小化 MEV!
换句话说:🐮 🧀 🚧 🐭 🟰 🤖
你可能已经注意到,我没有深入探讨 GPv2Settlement
或其他 Balancer 的合约,这就是为什么我将上一节称为“浅析”。
这不仅是因为我们在这里的重点是 CoW AMM,还因为 CoW AMM 的核心逻辑只是将 CowSwap 与现有的 AMM 设计(在本例中为 Balancer)集成。
Balancer 的池合约 BPool
的更改;没有关于 AMM 设计的内容。来源: https://github.com/balancer/cow-amm?tab=readme-ov-file
查看 Balancer 的池合约 BPool
的更改,最大的调整是使用 ERC20.balanceOf(address(this))
来跟踪代币余额,而不是维护内部记录。仅此而已。
当你仔细想想,这种集成非常简单:通过在现有的 AMM 合约中实现 CowSwap 相关功能,批量处理 AMM 交易,并使用 ERC20.balanceOf()
跟踪代币余额,我们就创建了一个缓解 MEV 的 AMM!
这种方法适用于像 Uniswap V1 和 V2 这样的 CFAMM。然而,它不适用于像 Uniswap V3 这样的 AMM,因为 V3 的范围碎片化阻止了将费用添加回池中,这意味着它无法满足 FM-AMM 的曲线移动要求。
使 CoW AMM 缓解 MEV 的两个要求一直是 CowSwap 原始设计的一部分。创建 CoW AMM 本质上只是将交易过程与 CowSwap 的 GPv2Settlement
合约对齐。
那么,CoW AMM 带来了什么好处?CoW AMM 实际上是 CowSwap 的AMM 作为流动性来源!
除了 CoW AMM 缓解 MEV 的明显事实外,CoW AMM 越多,CowSwap 可以集成的流动性来源就越多,最终为 CowSwap 上的交易者提供更好的价格!
最后一个观察是:CoW AMM 是(几乎)毫不费力的额外流动性来源,为伟大的 CowSwap moo🐮oniverse 增添了力量!
如果你还在阅读,你一定在想:到目前为止,关于这个全新的、酷炫的东西的一切听起来都很棒——告诉我们残酷的真相吧!
来源: https://dune.com/cowprotocol/cow-amms-v2
好吧,事实是:目前 CoW AMM 的 LP 收益略低于 Uni V2。🙊
这有很多潜在原因:交易量、流动性深度、CowSwap 的求解器与 CoW AMM 的集成等等。
然而,揭示真正的原因需要一些专业的 SQL 技能,我将谦虚地将这项任务留给 Dune 大师们。如果你碰巧是其中之一,请随时在下面分享你精心制作的 Dune 看板!
目前,我们将继续观察,让时间和开发者为 CoW AMM 伸张正义。🤞
在本次对 CoW AMM 的探索中,我们讨论了它通过批量处理和曲线移动来缓解 MEV 的创新方法。通过利用 CowSwap 的现有基础设施,CoW AMM 提供了降低的 gas 成本、零交易费、最小化的 MEV 风险以及牛...的表现?🤣 😉
集成是无缝的,CoW AMM 作为额外的流动性来源接入 CowSwap,为用户提供更好的缓解 MEV 的价格。
这就是我对 CoW AMM 的第二次深入探讨。我真诚地希望它成为 CowSwap 的真正 💰 🐄,并且 CowSwap 有朝一日能够与 🦄 竞争!
一如既往,欢迎留下评论,分享你的想法,或指出你发现的任何错误。下次见!
感谢 Ping Chen 和 Anton Cheng 的审阅!
- 原文链接: medium.com/taipei-ethere...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!