鲜有一个协议的问世,能彻底改变一个链上生态的格局,Uniswap V1 是一个,而 UniswapX 又是一个。截止 2023 年 7 月 25 日,作为最大的去中心化交易协议,Uniswap 已推出五个版本,累计处理的交易量超过 1.5 万亿美元。在 V1 之后 AMM 巨大的 MEV 潜力被挖掘,无数的套利机会在链上节点之间公开的内存池里传播,看似是 MEV 阻碍了用户,总让他们以更差的价格成交,然而却结结实实的促成了链上下价格的一致性。
这也就是 UniswapX 的核心奥义——“群体博弈”,让去中心化系统在聪明人的动机博弈中达成极致的平衡。本份研报就将深入 Uniswap 系列的变迁以及 AMM 的交易机制,并且最终回溯到 UniswapX 的运作原理来,来帮助你感受这份博弈的微妙之处,以及尝试从博弈中寻找其价值表现。
作者:十四君,Web3Caff Research 研究员(背景:Web2 五年网络安全及产业研究,Github 7K Star,现 Web3 专注研究 NFT Market、GameFi、DeFi 前沿协议,2DAO3 Core Builder)
封面:Logo by UniswapX,Photo by Visax on Unsplash,Typography by Web3Caff Research
字数:本份研报超 9700 字,预计阅读时长 20 分钟
目录
- 背景
- Uniswap 重大版本回顾
- AMM 经典机制回顾
- AMM 机制长期的痛点与优化方向
- V1 的核心问题:运作成本
- V2 的核心问题:经济效率
- V3 的核心问题:市场竞争
- 发展链路小结
- UniswapX 的原理
- UniswapX 中有大量其他协议的影子
- UniswapX 的生命周期:用户端
- 如何实现无 Gas 交换?交易失败也无需支付任何费用?
- 为什么可以防止 MEV?
- 签名成交要等待多久?
- UniswapX 的生命周期:Fillers 端
- 订单价格是如何衰减的?
- 签名订单为何能确保成交?
- 跨链交换是怎样实现的?
- 总结
隐藏内容,Web3Caff Research 订阅会员可见
补充点常见问题
1、这个 filler 能撮合两个订单发一笔交易?
答: 不能撮合两个订单,因为会严格校验价格和数量,要么是作为对手,要么是实时链上 amm
2、为什么 filler 愿意接单(利润来源)是什么
答: 假定链上价格假如当前是 1280,分 3 种
a: 如果 filler 看到价格,分析此单无利润,则不接单。
b: 如果是 quoter,由于有来自 uniswap 的 90% 完成率要求,所以会给与用户一个 1290 这样有利可图的报价,用户如果按这个价格发出订单,则 quoter 可以优先接单。
c: 是在 quoter 不接单的情况,则步入公开池,filler 看到用户报价和链上价格,有 3 个选择
1、无视,不接单
2、接单,使用自己地址上的资金完成 swap(无 mev 分润)
3、接单,通过链上其他 ammswap 来完成订单,可走私密网络通路,减少被 mev 发现去夹的情况
总之利润点来源于 mev 夹会让用户原本的价格低于预期价格,找 x 成交,降低了成交率和成交时间,通过定制化的价格减少 mev 的收益。
太酷了
@duoduoyu: 同感,从最长远来看,对于这样一群聪明人的群体中博弈,只需要画好棋盘,让胜负手站在用户的需求一侧,很有可能这样的聚合需求最终成为终极的订单发布网络
刚好在做 uniswap 的调研,分享的很透彻,解答了我的许多疑惑,但也有些问题未解决,希望能得到十四君的解答或者探讨
1 “实际收益是 0.25% 分配 LP,协议本身仅占 0.05%”,我在网上查询的是 uniswap 没有协议收入,在 5 月有个打开费用开关的提议https://foresightnews.pro/article/detail/32755,但是后面没有搜索到关于提案通过的信息,在 https://tokenterminal.com/terminal 协议收入一栏也是 0,所以想知道协议本身有 0.05% 的收入出处是哪里?
2 filler 端,有一个问题希望能得到解答,就是白皮书中提到的 offchain liquidity 是指什么?我不确定自己的理解是否正确。在白皮书中的描述是 UniswapX does not specify how fillers fill swappers’ orders: liquidity can be sourced from a combination of onchain liquidity venues like Uniswap or other DEXs, offchain liquidity, or from other UniswapX orders”
我这样理解对吗?做市商 filler 在 1234 阶段后,即分析最佳成交链路时,是包括链下资金的这一路线的,即除开链上的聚合外,还有一个链下把订单处理的方式,比如自己的资金兑换,再在线下交易所对冲,时不时平衡资金即可。
即在 initiate order and specify executor contract 这一步,我的理解(没能力看代码),filler 提交的是兑换结果(个人理解),撮合合约发现成交后就给交易者要成交的代币 B,执行拿交易者的资产 A,返回给 filler 保证金(bond)
我的具体疑惑在于两点,在白皮书中和一些网上的他人的分析中是比较多涉及到到这个链下流动性,但在本研报的 “filler 生命周期中”,描述是更多倾向于链上的,没怎么提及链下,即 X 是个聚合器。
2.1 我想知道 filler 是否有链下流动性,以及我的理解是否有偏差
2.2 在 filler 提交给 reactor 合约的 initiate order and specify executor contract 这一步里,提交的是啥,是一个订单 bundle 嘛,还是就是对订单处理后的结果
@俊俊: https://uniswap.org/whitepaper-uniswapx.pdf 官方白皮书链接
@俊俊: 更正:给交易者要成交的代币 B,执行合约拿交易者的资产 A,返回给 filler。保证金是跨链交易中才要的,我当时集中想要阐述我的问题,没注意到这点,更正一下
@俊俊: 我看 doc 里感觉就是发起一笔报价交易,原话是 “This contract should implement the IReactorCallback interface, which takes in an order with input tokens and returns the allotted number of output tokens to the caller.”
@俊俊: 1、https://blog.uniswap.org/uniswap-v2#path-to-sustainability,目前看他是预设,当前并未启动(之前发起过治理投票但是没有通过)
2、我主要是通过看链上合约的形式在研究,合约只是验证用户的价格是不是按照荷拍衰减公式符合要求。至于 filler 是通过拆分订单,从其他 pool 或者多重 pool 组合的方式来构成满足用户所需的 token 数,这点无要求。
2.1、所以,我理解其中 offchain liquidity 是链下的流动性,目前看这个合约没有写到如何验证证明,以及白皮书也没有说链上如何生成证明(与跨链不同,跨链会有目标链上信息提供证明),所以大概率是指用户私有资金(依旧在链上的,只是不在 LP 里)来撮合此订单。
2.2、提交的是订单结构体,其中有多个信息,源码中有个样例,
/// @dev generic order information
/// should be included as the first field in any concrete order types
struct OrderInfo {
// The address of the reactor that this order is targeting
// Note that this must be included in every order so the swapper
// signature commits to the specific reactor that they trust to fill their order properly
IReactor reactor;
// The address of the user which created the order
// Note that this must be included so that order hashes are unique by swapper
address swapper;
// The nonce of the order, allowing for signature replay protection and cancellation
uint256 nonce;
// The timestamp after which this order is no longer valid
uint256 deadline;
// Custom validation contract
IValidationCallback additionalValidationContract;
// Encoded validation params for additionalValidationContract
bytes additionalValidationData;
}
@十四君: https://docs.uniswap.org/contracts/uniswapx/guides/createfiller
The simplest fill strategy is called Direct Filler, where the trade is executed directly against tokens held in the fillers address
@十四君: 谢谢十四君,我的问题得到解答了,官方文档里确实对这个没有展开讲解,大概率是指用户私有资金(依旧在链上的,只是不在 LP 里)来撮合此订单,让我多少确认就行,就怕自己理解错了,因为有做市商的朋友之前一直想要搞链上和链下的 mev,但区块那里搞不定,X 的出现说不定可以做一个 filler 吃红利。
executed directly against tokens held in the fillers address 相当于提供了一个链下的渠道,如何平衡地址和交易所里的资金是 filler 要做的事情,具体更多的细节或者确认,后面我再跟踪一下
请问 x 跟 cowswap 的区别是什么呢,看到个帖子说 x 跟 cowswap 是不同的,https://twitter.com/0xShitTrader/status/1683152702316920833
@Kevinzzz: 尚未系统对比,如有对应技术文章可以发来,我二次校验。
但我理解,X 的聚合理念是相对高于普通聚合器的,他更多是出于订单市场的竞争,而链下订单市场,从来不是以谁技术牛逼就获胜,而是以谁品牌大流动性大为获胜。所以对比之下即使 cowswap 技术更优,也不一定抵得过 uni