注:原文作者是paradigm研究合伙人DaveWhite、DanRobinson以及Uniswap创始人HaydenAdams。在这篇文章中,他们描述了一种称为时间加权平均做市商的新型AMM,它可以帮助以太坊上的交易者有效地执行大订单,而其工作原理是将长期的大订单分解为无限多个无限小的虚拟订单,并根据嵌入的恒定乘积AMM随时间平滑地执行它们。
目录
1、介绍
2、概要
3、做市基础
3.1做市商
3.2逆向选择
4、自动化做市商
4.1恒定乘积公式
5、在当前AMM上执行大订单
5、1手动拆分订单
5、2子订单大小权衡
6、传统金融类比
6.1TWAP订单
7、时间加权平均做市商
7.1概述
7.2以太坊术语复习
7.3基础设计
7.4无穷小虚拟订单
8、实施
8.1延迟计算
8.2Gas优化
8.3虚拟交易涉及的数学
9、潜在的攻击向量
9.1三明治攻击
9.2信息泄露
10、Python参考实现
11、结论
一、介绍
本文介绍了一种新型的自动化做市商,它可帮助以太坊上的交易者有效地执行大订单。
我们称其为时间加权平均做市商,或TWAMM。
它的工作原理是将长期订单分解为无限多个无限小的订单,并根据嵌入的恒定乘积AMM随时间平滑地执行它们。
二、概要
假设Alice想在链上购买价值1亿USDC的ETH,那么她在Uniswap等现有AMM上执行这种规模的订单将是昂贵的,如果Alice知道别人所不知道的事情,则其执行这样的大额交易会遭遇很大的滑点。
在今天,Alice的最佳选择是手动将她的订单分成几部分,并在几个小时内执行,让市场有时间意识到她没有内幕信息,因此可以给她一个更好的价格。
如果她发送了几笔大的子订单,而每个子订单仍将对市场价产生重大影响,并且很容易受到对手交易者的三明治攻击。另一方面,如果她发送了许多小的子订单,她将不得不承担所有的工作和活跃交易的风险,并向矿工支付大量的gas交易费用。
TWAMM通过代表Alice进行交易来解决这一难题。它将Alice的订单分解为无限多个无限小的虚拟订单,以确保随时间的推移完美平滑地执行,并且,使用带有嵌入式AMM的特殊数学关系,能够在这些虚拟订单中分摊gas成本。此外,因为TWAMM是在区块之间执行的交易,所以它也不太容易受到三明治攻击的影响。
三、做市基础
3.1做市商
考虑一个由两种金融资产组成的市场,而做市商就是这个市场的参与者,他们在任何时候都愿意用其中一个资产交易另一个资产。
如果你有1亿USDC并想用它来购买ETH,你可能找不到另一个人在同一时间做相反的交易。相反,你很可能会去一个由单个或多个做市商组成的市场,并与他们进行交易。
2022年黄金和白银的价格表现优于加密资产:金色财经报道,黄金价格在年底时比12个月前记录的价值略低。2021年12月26日的统计数据显示,每盎司黄金的美元价值为每单位1810美元,而今天黄金为每盎司1797美元。另一方面,白银自去年以来设法增加了一丝价值,因为价格从每单位23.04美元攀升到2022年12月26日的美元价值约为23.72美元。
这两种贵金属的价格表现都比加密货币市场前两种加密货币比特币(BTC)和以太坊(ETH)好很多。指标显示,自去年这个时候以来,BTC下跌了66%,而ETH自去年以来损失了70%多一点。与加密货币爱好者一样,贵金属倡导者认为2023年将看到白银和黄金价值上升。[2022/12/27 22:09:15]
3.2逆向选择
做市商从价差中获利,即他们对每笔交易收取的费用。当价格与他们相反时,他们会赔钱
不幸的是,对于做市商来说,市场价格往往与他们相反,这种现象被称为逆向选择。发生这种情况,是因为拥有有关未来价格走势信息的交易者,更有可能与做市商进行大额交易。
一般而言,最危险的订单就是那些规模又大又紧急的订单,因为这些订单正是知情交易者倾向于下的订单类型。因此,最基本的做市策略就是淡化入市订单,即当大量买入订单进来时,调高价格;当大量卖出订单进来时,调低价格。
四、自动化做市商
在过去的一年中,以Uniswap为首的自动化做市商(AMM)在以太坊上变得非常受欢迎,这些AMM每天处理数十亿美元的交易量。顾名思义,AMM自动化了大部分的做市过程。
4、1恒定乘积公式
恒定乘积公式是一个简单的规则,它允许任何人立即为一对新资产创建新市场和新AMM。
为了在两个资产X和Y之间创建新的乘积AMM,称为流动性提供者的用户存入这两种资产的x和y储备金。
这些资产在任何给定时间的比率代表AMM上的即时价格。例如,如果CPAMM的储备中包含2,000USDC和1ETH,则ETH的瞬时价格将为2,000USDC。
当交易者与AMM进行交易时,它会根据公式x*y=k决定给他们什么价格,其中x和y是储备规模,k是常数。这意味着其储备规模的乘积在交易期间保持不变。
例子:
考虑一个ETH/USDCCPAMM,其储备中有2,000USDC和1ETH,因此此时x=2,000、y=1以及x*y=k=2,000。该AMM的瞬时价格为每ETH2,000/1=2,000USDC。
如果交易者来购买价值2,000USDC的ETH,这意味着他们将2,000USDC存入X储备,因此我们的x变成了4,000。
然后,由于k=2000,在这笔交易后,我们的y就变成了0.5。由于y最初是1,因此有0.5ETH流向了交易者。
由于交易者用2000USDC购买了0.5ETH,因此他们支付的ETH平均价格为4,000USDC。
价格影响与逆向选择
在上述情况下,交易员必须为其大额订单支付4000美元/ETH,而小额订单的成本仅为2000美元/ETH。这种价格差异被称为订单的价格影响。订单越大,价格影响就越大。
这就是AMM对抗逆向选择的方式:大订单更有可能和内幕消息有关,因此AMM让他们付出了高昂的代价,它是淡化订单的自动化等价物。
8月芝加哥商品交易所比特币与以太坊期货合约交易量创近两年来新低:9月21日消息,据Crypto Compare数据显示,8月芝加哥商品交易所比特币与以太坊期货合约交易量环比下降20.7%至289亿美元,创下2020年12月以来新低。[2022/9/22 7:12:13]
五、在当前AMM上执行大订单
5.1手动拆分订单
正如我们所看的,在单笔交易中对AMM执行一个大订单是昂贵的,这篇优秀的文章深入探讨了这个问题,并推荐了一些解决方案。
简而言之,希望在AMM上执行大订单的交易者不应该在单笔交易中执行:他们最好将订单分成几个部分。这可能涉及一次向多个AMM发送订单,但这些AMM在任何给定时间点的流动性也有限。订单越大,随着时间的推移将其拆分就越有吸引力。
例如,假设一个投资者想在链上购买价值1亿USDC的ETH。他们没有关于ETH价格的任何短期信息,因此不介意其订单是否需要一些时间来执行。在这种情况下,他们可能会将订单拆分成10个小订单,每个订单1000万美元,并且每隔1个小时执行一次,从而减小订单的价格影响。
5.2子订单大小权衡
很明显,如果一个非常大的订单被拆分成几个部分,每个单独的子订单仍然会很大,并且会相应地产生价格影响。将订单分成更小的部分会有所帮助,但这会引入两个新的问题。
第一个问题是操作复杂性,这意味着风险和工作量的增加。交易者可能会为给定的交易输入错误的交易数量或错误的方向。或者她的计算机可能会崩溃,从而阻止她执行部分订单。即使一切顺利,这个过程也需要时间与精力,它会分散人们对更有利可图的努力的注意力。
第二个问题是每笔交易都会产生固定的交易成本,例如支付给以太坊矿工处理交易的gas。如果交易者将她的订单分成太多部分,其最终可能在交易费用上消耗的资金超过了其实际购买到的ETH。
六、传统金融类比
在传统金融领域,如果投资者或机构想购买1亿美元的苹果股票,他们不会直接向交易所发送1亿美元的市场买单。他们也不会发送10个价值1000万美元的订单,而对于没有专门的交易人员和基础设施的大多数人来说,将订单分成比这小得多的部分是不切实际的。
相反,他们很可能会将大笔订单发送给经纪商,经济商会为他们进行算法交易以换取费用。经纪商将在指定的时间段内执行交易,比如八小时,并且价格类似于某个基准。经纪商将有一个专门负责安全且廉价地执行此类交易的团队。
6.1TWAP订单
也许最基本的算法交易类型是时间加权平均价格或TWAP订单。顾名思义,在八小时内购买价值1亿美元的苹果股票的TWAP订单,将以接近该时期苹果股票时间加权平均价格的价格成交。
例如,如果苹果股票在四个小时的定价为100美元,另外四个小时的定价为120美元,那么时间加权平均价格将为/8=$110,经纪商将执行接近该价格的TWAP订单。
细节各不相同,但经纪商最有可能通过在一天内将其分成许多个小块并将它们发送到市场来执行此交易。在8小时内购买1亿美元的苹果股票,相当于每100毫秒购买大约350美元的苹果股票,我们可能预计经纪商或多或少会这样做。
经纪商拥有减少或消除如此多小额交易的操作复杂性的基础设施,并且由于他们与市场有直接联系,因此可能无需支付太多的交易成本。
ETC全网算力跌至182.75TH/s 24小时跌幅7.25%:金色财经报道,据2Miners数据显示,当前ETC全网算力跌至182.75TH/s,过去24小时跌幅达7.25%。[2022/9/20 7:07:10]
七、时间加权平均做市商(TWAMM)
时间加权平均做市商(TWAMM)提供TWAP订单的链上等价物。TWAMM具有用于订单拆分的专门逻辑以及与嵌入式交易所的直接连接,以低gas成本提供平稳执行。套利者将TWAMM嵌入式交易所的价格与市场价格保持一致,确保在资产的时间加权平均价格附近执行。
7.1概述
每个TWAMM实例促进特定资产对之间的交易,例如ETH和USDC。
TWAMM包含一个嵌入式AMM,这是这两种资产的标准恒定乘积做市商。任何人都可随时使用这个嵌入式AMM进行交易,就好像它是一个普通的AMM。
交易者可以向TWAMM提交长期订单,这些订单是在固定数量的区块上出售固定数量资产的订单-例如,在接下来的2,000个区块中出售100ETH的订单。
TWAMM将这些长期订单分解为无限多个无限小的虚拟子订单,这些子订单随着时间的推移以均匀的速率与嵌入式AMM进行交易。单独处理这些虚拟子订单的交易将花费无限的gas,但封闭形式的数学公式允许我们仅在需要时计算它们的累积影响。
随着时间的推移,长期订单的执行将推动嵌入式AMM的价格远离其他市场的价格。发生这种情况时,套利者将根据嵌入AMM的价格进行交易,使其恢复一致,从而确保长期订单的良好执行。
例如,如果长期卖出使得嵌入式AMM上的ETH比特定中心化交易所便宜,套利者将从嵌入式AMM购买ETH,使其价格回升,然后在中心化交易所出售以获取利润。
7.2以太坊术语复习
区块:以太坊将交易捆绑成称为区块的连续组,大约每13秒一次。出于本文的目的,我们将对每个区块进行编号:区块1之后是区块2,然后是区块3,依此类推。
矿工:分布式矿工组竞争处理每个区块。任何能连接互联网的人都可以成为矿工,这意味着在以太坊上运行的AMM之类的程序不能保守任何秘密:每个人都必须能够准确地计算出在给定输入的情况下他们会做什么。
Gas:以太坊上的计算是一种稀缺资源,因此用户必须以gas的形式向矿工支付费用。给定交易中涉及的计算越多,它消耗的Gas就越多。这种gas费用完全由提交交易的人支付。
7.3基础设计
长期订单:Alice想在接下来的8小时内购买价值1亿USDC的ETH,即大约2,000个区块。她在TWAMM中输入了一个长期订单,以在接下来的2,000个区块购买价值1亿USDC的ETH,或每个区块50,000USDC。
如上所述,我们事先不知道哪些矿工将在TWAMM上处理未来的交易。这意味着Alice的订单必须对所有人可见,从而引入了我们在下面讨论的信息泄漏问题。
订单池:Bob想在接下来的5,000个区块中将500ETH兑换成USDC,或者每个区块出售0.1ETH。
Charlie想在接下来的2,000个区块中将100ETH兑换成USDC,即每个区块出售0.05ETH。
直到Charlie的订单在2,000个区块内到期,Bob和Charlie的订单将被分组到一个池中。
流动性质押平台GoGoPool完成500万美元融资,Framework Ventures和Coinfund领投:金色财经报道,Avalanche 生态流动性质押平台 GoGoPool 宣布完成 500 万美元融资,本轮融资由 Framework Ventures 和 Coinfund 领投,Avalaunch、Republic Capital 和 Flow Traders 参投。本轮融资资金将用于扩大 GoGoPool 团队,在主网上推出之前加速产品开发,并为子网开发新的开源工具。(The Block)[2022/8/31 13:00:39]
该ETH销售池将在接下来的2,000个区块中以每个区块0.15ETH的速率出售ETH。Bob将获得USDC池子的≈66%,Charlie将获得USDC池子的≈33%。
虚拟订单:
对于接下来2,000个区块的每一个区块,TWAMM必须代表Alice购买价值50,000USDC的ETH,并代表ETH销售池出售0.15ETH以换取USDC。
我们可以想象,TWAMM将这两个子订单中的每一个拆分为数万亿个微小的子子订单,我们称之为虚拟订单。
然后TWAMM轮流针对其嵌入的AMM执行这些虚拟订单:第一个是Alice的虚拟订单,然后是ETH销售池的一个虚拟订单,然后是Alice的另一个虚拟订单,依此类推。
套利:
因为Alice购买的ETH要比ETH销售池出售的多得多,嵌入式AMM上的ETH价格将在每个区块经历上涨。
当这个价格相对于其他地方的ETH价格足够高时,套利者将在其他交易所购买更便宜的ETH并在嵌入式AMM上出售,使其价格回到市场平均水平,并确保Alice的良好执行。
订单到期:
在第2,000个区块之后,Alice的订单将被完全执行,Charlie的订单也是如此。而Bob出售ETH的订单在接下来的3,000个区块内仍然有效,在此期间TWAMM将继续以每个区块0.1ETH的速度执行它。
除非有任何外部活动,否则随着时间的推移,这将推低嵌入式AMM上的ETH价格,这一次促使套利者在价格完全脱节后重新拉回至市场价。
经济学:
由于Alice、Bob或Charlie都不急于执行订单,因此其他市场参与者可以推断出,他们的订单所代表的逆向选择比其他情况下要少,并且可以为他们提供低价格影响的执行。
由于TWAMM将是像Alice、Bob和Charlie这样的人进行交易的最佳场所,所以TWAMM嵌入式AMM上的LP可能会与他们这样的大量未知flow进行交互。这有助于从费用中赚钱,同时减少逆向选择的风险。
7.4无穷小虚拟订单
上面我们提到TWAMM将长期订单拆分为无限多个无限小的子订单。这样做有两个原因:平滑度和效率
平滑度
TWAMM的主要目标是随着时间的推移平滑执行其长期订单,以便它们的执行价格接近现行的时间加权平均价。
随着我们减少虚拟交易的规模,AMM上的价格波动变得越来越不规则。
在极限状态下,由于有无限多个无限小的交易,当执行虚拟交易时,价格运动是完全平滑的。
Pixel Vault将开启DAO新门户网站封闭Beta测试:金色财经消息,NFT开发平台Pixel Vault的DAO新门户网站的封闭测试今晚开始,该门户网站拟由社区用于UPDAO治理。[2022/7/15 2:14:58]
见https://github.com/para-dave/twamm/blob/master/splitting_exploration.ipynb
效率
由于TWAMM旨在用于以太坊,因此为每个区块明确计算多笔虚拟交易的交易成本会高得惊人。然而,当我们有无限多个无限小的交易时,我们可以在一次计算中计算交易者的结果。
八、实施优化方案
8.1延迟计算
TWAMM将虚拟子订单视为发生在区块之间的空间中,这对于避免三明治攻击而言是很重要的。
为了以一种节省gas的方式实现这一点,TWAMM使用了延迟计算,仅在需要确定交互结果时才计算虚拟交易的影响。
每次用户与TWAMM交互时,TWAMM都会追溯计算自上次交互以来发生的所有虚拟交易的影响。
由于这些虚拟交易仅与TWAMM的嵌入式AMM交互,因此TWAMM的行为在外部交互之间是完全确定的。即使TWAMM在外部交互之间移动了100万个区块,下次有人与之交互时,它也能够准确计算所有介入虚拟交易的结果。
插入TWAMM的前端将能通过跟踪当前区块编号并自行进行TWAMM计算来考虑尚未在链上表示的虚拟交易。
8.2Gas优化
汇集订单
如示例所示,当我们在同一方向有多个长期订单时,我们将它们汇集在一起,然后将它们拆分为虚拟订单。然后,TWAMM可使用用于跟踪Compound和Uniswap等协议中LP奖励的十亿美元算法?来跟踪余额。
从技术上讲,每个TWAMM总是有两个长期订单池:例如,卖USDC的订单池和卖ETH的订单池。在任何给定时间,这些订单池中的一个或两个可能是空的。
长期订单到期
将订单池与延迟计算结合使用时会出现一种复杂情况。
想象一下,Bob下订单在接下来的100个区块中出售100ETH,而Charlie下订单在接下来的200个区块中出售200ETH。这两个订单都以每个区块1ETH的速率出售。
假设在接下来的150个区块中没有人与TWAMM交互,此时会发生新的外部交互。他们的第一批订单是Bob和Charlie的共同订单,每个区块卖出2ETH。然而,在那之后的50个区块,Charlie的订单是独立的,每个区块只卖出1ETH。
这意味着我们必须进行两次单独的交易计算才能找出发生了什么:一次计算前100个区块的结果,一次计算后50个区块的结果。在最坏的情况下,如果过去150个区块的每个区块都有订单到期,这意味着TWAMM将不得不为每个区块处理一笔交易,从而破坏gas效率。
对此最简单的解决方法,是限制符合订单到期条件的区块数量:例如,TWAMM可以指定订单只能每250个区块到期一次,或者大约每小时一次。
取消长期订单
用户可以随时取消长期订单。在实践中,这允许用户为他们的订单选择取消时间。这不会增加系统的gas负担,因为想要取消的用户需要自己支付gas费用。
8.3虚拟交易涉及的数学
定义:
假设自TWAMM上次执行任何虚拟交易以来已经有t个区块。
为简单起见,假设没有长期订单过期,因此在整个时间段内,出售X的池子以每区块x_rate的速率出售,而出售Y的池子在整个时间段内以每个区块y_rate的速率出售。
那么在此期间售出的X总量为
,而在此期间售出的Y总量为
。
让我们将时间段开始时嵌入的AMM储备分别表示为
以及
。
公式:
在处理完所有虚拟交易后,嵌入式AMM将有X储备
其中
从这个恒定乘积公式,我们知道
出售X的池子获得了所有没有出现在嵌入式AMM中的Y,换句话说,
以及类似的,
九、潜在的攻击向量
9.1三明治攻击
描述:在三明治攻击中,攻击者Atticus看到交易者Trey即将在AMM上进行一笔交易,随后Atticus发送了两个订单并夹住了Trey的订单,以此实现获利。
想象一下,Trey向AMM发送了一笔用USDC购买ETH的订单。而攻击者Atticus在看到这个订单后,抢先在rey之前在AMM上购买ETH,以此推动ETH价格上涨。由于他正在向AMM支付费用并产生价格影响,因此Atticus在操作完这个订单后是亏钱的。
当Trey的订单被执行时,他会以更高的价格购买ETH,因为Atticus推高了价格,而Trey的订单进一步推高了ETH的价格。
现在,Atticus立即将他的ETH卖回给AMM,此时他卖出的价格要高于其买入的价格,因此能够实现盈利。
如果Atticus能够保证在Trey购买后立即将他的ETH卖回给AMM,那么这种攻击对Atticus才有意义。在给定的区块内,如果Atticus是一名矿工、与某个矿工达成交易或使用Flashbots之类的服务,则这是可能的。
三明治攻击和虚拟订单
乍一看,虚拟订单似乎特别容易受到三明治攻击,因为每个人都知道它们会来。
但由于它们在**区块之间执行,因此要进行攻击是不容易的,要夹住TWAMM的虚拟订单的攻击者必须在一个区块的末尾与嵌入的AMM进行交易,导致虚拟订单在区块之间以糟糕的价格执行,然后在另一个方向交易,在下一个区块开始时结束交易。
目前,攻击者没有办法保证实施这类攻击。当这种多区块MEV变得更加普遍,允许交易者在多个区块之间进行夹心交易时,这可能会成为一个更大的问题。
9.2信息泄露
长期交易者在TWAMM中可能遇到的最大权衡是,他们在下公开可见订单时会面临信息泄露的问题,这是以太坊的性质所导致的。
如果一个交易者下了足够大的长期订单,其他交易者可能会试图抢先在TWAMM的嵌入式AMM和其他地方购买资产,以便在长期订单推高价格后将其出售给交易者。
由于用户可以随时取消他们的长期订单,我们预计过于激进的抢先交易者会被其他交易者利用,从而控制信息泄漏的整体影响。
例子:
想象一下,者Sally已经注意到TWAMM上的攻击性抢先交易,她从流动性聚合商那里购买了价值100万USDC的ETH,从而推高了整个市场的价格。然后她在TWAMM上下了一个巨大的长期订单,在接下来的24小时内每个区块购买10万USDC的ETH。
抢先交易者Frank立即看到了这个订单,并通过聚合器购买了价值100万USDC的ETH,进一步推高了价格。Sally通过聚合商卖回她的ETH以获取利润,这导致ETH价格下降,并让Frank蒙受损失。最后,她在任何订单完成之前取消了她的长期订单。
十、Python参考实现
你可以在此处?查看TWAMM的Python参考实现。
这个Jupyter笔记?演示了TWAMM在多个长期订单和套利者存在下的情况。
为了简单起见,这个Python版本并没有实施gas优化,比如订单池顺序或真正的延迟计算。
十一、结论
我们已经勾勒出了TWAMM的设计,但我们的工作才刚刚开始。如果你有兴趣解决此问题或类似问题,可以发邮件至dave@paradigm.xyz或者在Twitter上给我发私信,或者你也可以通过ideas@uniswap.org联系UniswapLabs。
致谢:SamSun,GeorgiosKonstantopoulos,MichaelBently,MichaelKustermann,KevinPang,Hasu,SamBankman-Fried,HenryPrior,TomCadwell,AlexWice,Mewny,BigMagic,LilyFrancus,TarunChitra,MoodySalem,NoahZinsmeister,TeoLeibowitz。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。