摘要
UniswapX 协议是为以太坊虚拟机实现的基于荷兰拍卖的非托管交易协议。
UniswapX 聚合了链上和链下流动性,以不断优化价格的形式将 MEV 内化到协议中,为用户提供无需 Gas 兑换,并可扩展以支持跨链交易。
1 简介
我们介绍了一种基于荷兰式拍卖的去中心化交易协议的设计,该协议使用链下签名订单在链上执行和结算。
UniswapX 协议有几个优点:
-
UniswapX 将路由和批处理外包给一组无许可的填单者(Fillers)。这些填单者可以将订单路由到链上和链下流动性的组合,确保兑换者的订单始终获得最佳执行。
-
UniswapX 交易使用 Permit2 可执行的链外代币,允许兑换者隐式把交易费用作为兑换的一部分,省去了要持有链上原生代币的余额的要求。
-
与 Uniswap 协议上的兑换相比,兑换者不用为失败的交易支付费用,并且批量结算和/或直接从填单者库存中填充的兑换更省钱。
-
与 AMM 不同的是,UniswapX 将 MEV 内化了 [9],通过将订单产生的任何盈余以提高价格的形式返还给兑换者来减少价值损失。此外,UniswapX 的订单更不容易受到抢跑的影响。
-
UniswapX 可以扩展到支持跨链交易,使兑换者可以无缝地交易 源链上的资产以换取目标链上所需的资产。
以下各节将深入解释这些变化以及帮助实现这些变化的架构。
2 签名订单
当兑换者通过 Uniswap 协议(v1、v2、v3 和 v4 [[3-6])进行交易时,他们会创建交易并签名。这些交易指定一个输入Token、一个输出 Token、一个特定的执行路径和一个最低输出量。然后,兑换者将交易提交到内存池(无论是公共的还是私有的),然后由区块构建者接收并包含在区块中。
UniswapX 利用了 Permit2 [19],这是一种代币授权合约,为任何 ERC20 代币引入了基于签名的授权和转让。此外,UniswapX 还使用 Reactor 合约进行链上结算,Reactor 合约负责检查交易的执行是否符合用户期望的参数,并撤销不符合参数的交易。兑换者必须首先授权 Permit2 合约。然后,通过 UniswapX 协议进行交易的兑换者不需要自己创建和提交交易,而是对交易订单前面,订单指定:
(1) 输入代币(即支付代币)
(2) 一个输出代币(即获取代币)
(3) 输入(输出)量
(4) 一个起始输出(输入)金额
(5) 最低输出(输入)量
(6) 一个衰减函数
(7) 兑换期限
(8) 授权 UniswapX reactor 合约代其使用代币
这些订单由 MEV 搜索者、做市商和/或其他链上代理(统称为填单者 filler)共同接收,并将其发送给 Reactor 合约。通过在链上提交兑换者的订单,填单者代表他们支付 Gas 费用。这些费用通过会反映到执行的价格中,以便收回 Gas 成本。
Reactor 合约会调用填单者的 Executor 合约(执行者), 指定填单逻辑, 一旦资产来源确定,Executor 合约就会将资产发送给兑换者,Executor 合约就会从兑换者的地址提取资金。最后,Reactor 会检查订单条件是否满足。
UniswapX 并未规定填单者如何填充兑换者的订单:流动性可来自 Uniswap 或其他 DEX 等链上流动性池、链下流动性或其他 UniswapX 订单。多个订单可以捆绑到同一笔交易中,也可以在链上原子执行其他操作。
3 荷兰式订单
为了向兑换者提供最佳执行价格,UniswapX 使用了一种我们称之为荷兰式订单的订单类型,它与荷兰式拍卖非常相似。荷兰式订单的衰减特性在填单者之间创造了一个竞争市场,以尽快为兑换者找到最佳价格,同时为自己保留一些微薄的利润空间。
普通限价订单总是以其限价执行,而荷兰式订单则不同,它的执行价格取决于它被纳入区块的时间。订单的起始价格是对兑换者来说比当前估计市场价格更有利的价格--例如,如果当前市场价格是1 ETH = 1000 USDC,卖出ETH订单的起始价格可能是1 ETH = 1050 USDC。该订单的价格会随着时间推移逐渐下降,直到达到兑换者愿意接受的最差价格(例如1 ETH = 995 USDC)。
一旦有利可图,填单者就有动力尽快填单。如果等待时间过长,他们就有可能将订单拱手让给其他愿意接受较低利润的填单者。
4 跨链订单
UniswapX 协议可扩展至支持跨链交易,即兑换者用其在源链上持有的资产换取目标链上所需的资产。
跨链 UniswapX 有以下几个优势:
-
只要两个链之间有信息传递桥梁,UniswapX 就能在任何两个链之间提供快速兑换。
-
兑换和桥接合并为单个操作,兑换者无需直接与桥对接,无需在任一链上维护Gas代币,也无需等待结算延迟。
-
UniswapX 可以提供从 L2 到其父 L1 的近乎即时的退出。
-
兑换者可以指定在目标链上接收原生资产或标准资产,而不是桥接资产。例如,主网上的 ETH 可以直接兑换为 Avalanche 上的 AVAX。
-
被动桥接风险降至最低。兑换者在兑换原生资产时不会承担任何桥接风险,而填单者只有在通过桥接在链之间重新平衡资产时才会承担桥接风险。
4.1 简化的跨链订单
首先,我们将解释 UniswapX 协议跨链的简化版本,然后再将其扩展到更高效的乐观版本。
为了启动跨链订单,兑换者需要签署一份链外订单,其中包括与单链订单相同的参数,以及以下附加参数:
(1) 一个结算预言机 - 一个单向预言机,可以证明某个目标链上发生的事件。这可以是 Rollup 与其父链之间的官方桥、轻客户端桥或第三方桥
(2) 填单截止时间 - 订单必须在目标链上成交的时间
(3) 填单者保证金金额和填单者保证金资产 - 填单者必须在源链上存入的保证金
(4) 证明截止时间 - 填单者必须在这个时间之前,在源链上证明其完成了订单
填单者保证金金额、填单截止时间和证明截止时间的参数不在本文讨论范围之内。
与 UniswapX 协议的单链实现一样,兑换者的订单会传播到填单者网络,填单者向源链的 reactor 合约提交订单、兑换者的资金 和 填单者保证金以此来竞争执行订单。
填单者通过在目标链上转移兑换者所需的资产来执行订单。他们首先将资产发送到 reactor 合约,然后由 reactor 合约将资产转发到兑换者的地址。目标链上的reactor合 约会记录订单已在指定截止时间前完成,并通过结算预言机将消息传递回源链上的 reactor 合约,确认兑换者的订单已完成。
然后,兑换者的资产连同保证金被释放给源链上的填单者。如果填单者没有在证明截止时间前执行订单,兑换者将从源链上的 reactor 合约处收到其支付的资产和填单者的保证金。
4.2 乐观的跨链订单
某些结算预言机的使用可能会过于缓慢或昂贵。例如,对填单者而言,执行从一个 Rollup 链到另一个 Rollup 链的兑换可能过于昂贵,需要超过七天的时间,并且在允许他们保管兑换者的输入代币及其初始保证金之前,至少需要在 L1 上进行一次交易。
乐观的跨链协议可以缓解这些结算延迟问题,有效地在任何缓慢的桥梁之上构建一个快速而廉价的桥梁。
乐观协议包括与简化协议相同的参数,以及以下附加参数:
(1) 挑战保证金金额和挑战保证金资产--挑战者必须在源链上支付的保证金金额。
(2) 挑战截止时间 - 质疑者可以对填单提出质疑的截止时间。该期限必须在证明截止时间之前。
在协议简化版中,填单者执行订单的方式是:向兑换者索要订单,并向源链 Reactor 合约提交填单者保证金,然后通过目标链上的 reactor合约将资产转移到兑换者在目标链上的地址。reactor 合约会记录该订单已在截止时间前成交。
在最乐观的情况下,填单者在填单截止时间前完成在目标链上兑换者的订单,在质疑期结束前无人对订单交易提出质疑,填单者在源链上收到兑换者的资金及其填单保证金。
为了让填单者保持诚实,任何人都可以在填单截止时间之后、挑战截止时间之前,使用源链上的Reactor合约挑战填单者。如果填单者受到质疑,填单者必须在证明截止时间前使用结算预言机提供证明。如果填单者能证明他们在证明截止时间前完成订单,那么他们就会收到挑战者的保证金。如果填单者未能提供有效证明,则填单者的保证金将由挑战者和兑换者平分,兑换者的资金将在源链上返还给他们。
5 订单参数化方案
UniswapX 协议不强制执行特定的衰减函数。同样,该协议也没有规定设置初始荷兰式订单价格的方法,但它包含一些可选功能,以启用不同的机制。
荷兰式订单起始价格参数化方案的一种方法是,通过链外询价系统(RFQ: Request For Quote)投票选择填单者。为了激励这个填单者网络提供尽可能好的价格,UniswapX 允许订单指定一个填单者,该填单者在短暂的时间内享有填单的独家权利,之后荷兰式拍卖开始,任何填单者都可以执行订单。
RFQ 系统可能会受益于配套的补偿或惩罚制度,以限制滥用这种专有权为填单者提供的自由选择,并确保兑换者的用户体验不受损害。与订单参数化设计一样,任何此类系统都超出了核心协议和本文的范围【2】。
6 费用
Uniswap 治理可以对每个 UniswapX 兑换收取最高 0.05% 的费用,与 Uniswap v2 的最高费用相同。治理必须以每交易对为单位指定费用,费用必须是以基础点为单位的整数值。治理还必须按链激活费用。
接口和钱包可以选择对通过其平台提交的互换收取额外的无上限费用。
7 先期工作
UniswapX 协议从过去和现在的许多协议中汲取灵感。这并不是一份详尽的清单。
7.1 签名订单
许多协议已经认识到让兑换者签署订单而使用实际交易,包括 0x [20] 和 Wyvern [21] 。包括 CoW Swap [8] 和 dYdX [13] 在内的一些协议都支持批量签署链外订单。Seaport [17] 特别支持带有衰减函数的链外签名订单。
7.2 荷兰式拍卖
荷兰式拍卖在 DeFi 中有大量应用,包括 Seaport 中的 NFT 销售、MakerDAO [14] 和 Euler Protocol [11] 中的清算,以及 DutchX [15] 等协议中的交易。Stephane Gosselin 还曾在 EIP 2593 中提议使用荷兰式拍卖作为确定交易费用的方法[10]。
最近,1inch 在其 Fusion 协议[1]中探索了签名订单与荷兰式拍卖的结合。
7.3 聚合器
包括 1inch、0x API 和 Paraswap 在内的项目[18]为兑换者提供了跨各种链上流动池的智能订单路由功能。其中一些项目还允许链外做市商通过 RFQ 系统提供订单改进。
7.4 跨链荷兰式拍卖
Summa [12]率先提出了通过单向消息传递预言机进行基于荷兰式拍卖的跨链交易的想法。
7.5 乐观桥
Optics [7] 、Nomad [16] 和 Across [2] 都采用了防欺诈结算设计,提供无信任和快速的代币桥。
8 结论
UniswapX 是一种无托管和无许可的交易协议,它使用荷兰式拍卖在填单者之间创建一个有竞争力的路由市场,并利用链上和链下流动性的组合。通过将订单结构化为 Permit2 可执行的链外签名,该协议为兑换者提供了无Gas交易体验。UniswapX 还可以扩展到支持跨链兑换,使兑换者可以近乎即时地将资产从 L2 桥接到其父链 L1。
参考资料
[1]
登链翻译计划: https://github.com/lbc-team/Pioneer
[2]
Tiny 熊: https://learnblockchain.cn/people/15
[3]
learnblockchain.cn/article…: https://learnblockchain.cn/article/6200