这种名为时间加权自动做市商的新型AMM,旨在帮助以太坊上的交易者有效地执行大额订单。这篇论文介绍了一种新型的自动做市商(AMM),可帮助以太坊上的交易者有效地执行大额订单。我们称其为时间加权自动做市商(TWAMM)(发音为「tee-wham」)。它的工作原理是将长期订单分拆为无限多的无限小块,并利用嵌入式常数乘积AMM,利用时间跨度顺利执行它们。摘要假设Alice想在链上购买价值1亿USDC的ETH,在Uniswap等现有AMM上执行这种规模的订单,成本非常昂贵,它们必须向Alice收取高价,以防Alice知道一些他们不知道的事情。在当前,Alice的最佳选择是手动将她的订单分成几部分,并在几个小时内的时间内一一执行,让市场有时间意识到她没有内幕消息,这样可以给她一个更好的价格。如果她发送了几个非常庞大的子订单,每个订单仍然会对价格产生重大影响,并且很容易受到恶意交易者的三明治攻击。另一方面,如果她发送很多小的子订单,她将不得不承担活跃交易的巨大工作负荷和风险,且逐笔交易支付gas费用,因此向矿工支付了高额成本。TWAMM可以通过代表Alice进行交易,帮她解决这个困境。TWAMM将她的订单分拆成无数个无限小的虚拟订单,以确保利用时间跨度而完美地得到执行,并且使用的是嵌入式AMM的特殊函数公式,能够在这些虚拟订单中分摊gas成本。因为它在区块之间处理交易,所以它也不太容易受到三明治攻击。做市的基本概念做市商在一个牵扯两种金融资产的市场中,例如USDC和ETH,做市商是这个市场的参与者,愿意在任何时候用其中任意一种资产交易另一种资产。如果您有1亿美元的USDC,并想用它来购买ETH,你可能无法找到恰好同一时间想要做相反交易的人。相反,您很可能会进入一个由一个或多个做市商组成的市场,并与他们进行交易。逆向选择做市商利用价差获利,实际上是他们对每笔交易收取的费用。当价格走势与其交易相反时(例如,当他们买进资产后,其价格随后下跌,或出售资产后价格随后上涨),他们会赔钱。不幸的是,对于做市商来说,价格走势往往与他们的操作相反。这种现象被称为「逆向选择」。发生这种情况是因为,掌握价格未来走势信息的交易者更有可能与做市商进行大额交易。最危险的订单是规模既庞大又紧急的订单,因为这些订单正是知情交易者倾向于下的订单类型。因此,最基本的做市策略是淡入订单,当有大买单时调高价格,当有大卖单时调低价格。自动做市商(AMM)在过去一年中,以Uniswap为首的自动AMM在以太坊上大受欢迎,每天处理数十亿美元的交易量。顾名思义,AMM将大部分做市过程实现了自动化。恒定乘积公式恒定乘积公式是一个简单的规则,它允许任何人立即为一对新资产创建新市场和新的AMM。为了在两个资产X和Y之间创建新的恒定乘积AMM(CPAMM),被称为「流动性提供者」(LP)的用户存入这两种资产形式的准备金x和y。这两种资产在任何时间的比率代表了AMM上的瞬时价格,或者它对非常小的订单收取的价格。例如,如果一个CPAMM的储备资产中包含2,000USDC和1ETH,则其ETH的瞬时价格将为2,000USDC。当交易者与AMM进行交易时,AMM会根据公式x*y=k决定给交易者报出什么价格,其中x和y分别代表两种资产的储备规模,k是常数。这意味着两者储备规模的乘积在交易期间始终保持不变(费用忽略不计)。举个例子假设一个包含ETH/USDC两种资产的CPAMM,其储备资产中有2,000USDC和1ETH,因此x=2,000、y=1和x*y=k=2,000。该AMM的瞬时价格为2,000/1=2,000USDC/ETH。一个交易者来了,要买2000USDC的ETH,这意味着他要在x储备中存入2000USDC,因此我们有x=2000+2000=4000。如k=2000,我们必须在上述交易后得到y=k/x=2000/4000=0.5。由于y最初是1,1–0.5=0.5ETH,因此上述交易者在此交易中获得了0.5ETH。
由于交易者用2000USDC购买了0.5ETH,因此他们实际支付的平均价格为4,000USDC/ETH。高价格与瞬时价格这一关系,反映大规模订单与AMM的流动性息息相关。价格冲击和逆向选择在上述情况中,小订单的成本仅为2,000USDC/ETH时,交易者却必须为其大规模订单支付4,000USDC/ETH的高昂价格。这种价格差异称为订单的价格冲击。传入的订单越大,对价格的冲击就越大。这就是AMM对抗逆向选择的手段:大订单更有可能是在知情前提下发起交易,因此AMM使他们付出高昂的代价。它相当于自动化的淡入订单。利用当前AMM执行大规模交易手动分拆订单我们可以看到,AMM的设计机制决定了在AMM上执行单笔大额订单的成本很高。这篇精彩的深入探讨了这个问题,并推荐了一些解决方案。简而言之,希望在AMM上执行大额订单的交易者不应该用单笔交易来执行:他们最好将订单分拆成几部分。这就会涉及一次向多个AMM发送订单,但这些AMM在任何给定时间点的流动性可能也有限。订单越大,利用时间跨度将其拆分就越有吸引力。例如,假设一位投资者想在链上购买1亿USDC的ETH。他们没有任何有关ETH价格的短期信息,因此不会介意自己的订单是否需要一些时间跨度来执行。在这种情况下,他们可能会将其订单拆分成10个部分,每个部分1000万美元,每隔一小时执行一个部分,从而限制每个部分受到的价格冲击。子订单规模权衡显然,如果一个非常大的订单被分成几部分,每部分单独的子订单仍然很大,也会相应地产生价格冲击。将订单拆分成更小的部分会取得降低成本的效果,但这会带来两个新的问题。第一个问题是操作的复杂性,这意味着风险和工作量增加。交易者可能会把给定交易的输入值输错甚至选错方向。或者电脑可能会崩溃,导致她无法执行部分订单。即使一切顺利,这个过程也很耗费时间和精力,使人们无法专注于更有利可图的交易。第二个问题是每笔交易都会产生固定的交易成本,例如支付给以太坊矿工处理交易的gas。如果交易者将她的订单分成太多部分,最终可能会在费用上花费的钱可能多过实际购买ETH的开销。传统金融的他山之石在传统金融领域,如果投资者或机构想购买1亿美元的苹果股票,他们不会直接向交易所发送1亿美元的市场买单。他们也不会发送10笔1000万美元的订单。对于没有专门的交易人员和基础设施的多数人来说,将订单分成比这小得多的部分是不切实际的。他们很可能会将大笔订单发送给经纪机构,经纪机构会为他们进行以赚取费用。经纪机构将在指定的时间跨度内执行交易,比如八小时,价格参照某个基准。经纪机构将有一支专门负责安全且廉价地执行此类交易的团队。TWAP(时间加权价格算法)订单也许最基本的算法交易类型是或TWAP(发音为「tee-whap」)订单。顾名思义,在八小时内购买价值1亿美元的苹果股票的TWAP订单,将以接近该时段内苹果股票时间加权平均的价格成交。例如,如果苹果股票在这段时间内四个小时定价为100美元,四个小时定价为120美元,则时间加权价格将为($100*4+$120*4)/8=$110,经纪机构将执行接近这一价格的TWAP订单。操作细节各不相同,但经纪机构最有可能通过在一天内将这一订单拆分成许多小部分,并将它们发送到市场来执行此交易。在8小时内购买1亿美元的苹果股票意味着每100毫秒购买大约350美元的苹果股票,而经纪机构确实能够不辱使命。
对于如此多的小额交易,经纪机构拥有减少或消除其中操作复杂性的基础设施,并且由于它们与市场有直接关联,因此可能无需支付太多交易成本。时间加权自动做市商(TWAMM)时间加权自动做市商(TWAMM)提供了TWAP订单的链上版本。TWAMM具有用于订单拆分的专门逻辑,并与一家嵌入式交易所具有直接关联,以低gas成本提供顺滑执行。套利者则可以帮助TWAMM嵌入式交易所的价格与市场价格保持一致,确保在资产的时间加权平均价格附近执行。概览每个TWAMM实例促进特定资产交易对之间的交易,例如ETH和USDC。TWAMM包含一个嵌入式AMM,这是这两种资产的常数乘积做市商。任何人都可以随时使用这个嵌入式AMM进行交易,与一个普通的AMM没有两样。交易者可以向TWAMM提交长期订单,这些订单是在固定数量区块上出售固定数量的某种资产的订单——例如,在接下来的2,000个区块中售出100ETH的订单。TWAMM将这些长期订单分解为无限多个无限小的虚拟子订单,这些子订单在一定时间跨度内以均匀速度与嵌入式AMM进行交易。单独一个一个处理这些虚拟子订单的交易将花费无限的gas,但封闭形式的数学公式可以让我们仅在需要时计算它们的累积影响。在一定时间跨度内,长期订单的执行将推动嵌入式AMM的价格偏离其他市场的价格。发生这种情况时,套利者将在嵌入式AMM的价格基础上进行套利交易,使其与主流市场恢复一致,从而确保长期订单的良好执行。例如,如果长期卖单使得嵌入式AMM上的ETH价格比某一特定中心化交易所的价格更便宜,套利者将从嵌入式AMM买进ETH,导致其价格在该AMM上回升,然后在中心化交易所售出以获取利润。以太坊中的基本概念区块以太坊将交易捆绑成区块的连续组,大约每13秒产出一次区块。本文为了解释得更清楚,我们将对每个区块进行编号:区块1之后是区块2,然后是区块3,依此类推。矿工呈分布式状态的矿工团队竞争处理每个区块。任何有互联网连接的人都可以成为以太坊矿工。这意味着在以太坊上运行的AMM之类的应用不能保守任何秘密:每个人都必须能够准确地计算出在给定输入的情况下他们会做什么。Gas在以太坊上,计算是一种稀缺资源,因此用户必须以gas的形式向矿工支付费用。给定交易中涉及的计算越多,它消耗的gas就越多。这笔gas费用完全由提交交易的人支付。基本设计原理长期订单Alice想在接下来的8小时(大约2,000个区块)内购买价值1亿USDC的ETH。她在TWAMM中输入了一个长期订单购买价值1亿USDC的ETH,横跨2,000个区块,或每个区块50,000USDC。如上所述,我们事先不知道哪些矿工将在TWAMM上处理未来的交易。这意味着Alice的订单必须对所有人可见,这就带来了我们在下面讨论的信息泄漏问题。订单池Bob想在接下来的5,000个区块中出售500ETH换取USDC,即每个区块中出售0.1ETH。Charlie想在接下来的2,000个区块中出售100ETH换取USDC,即每个区块中出售0.05ETH。在Charlie的订单在2,000个区块后到期之前,Bob和Charlie的订单将被组合在一个订单池中。这一ETH销售池将在接下来的2,000个区块中以每个区块0.15ETH的速度出售ETH。矿池以这种方式赚取的USDC中,Bob将获得其中0.1/0.15≈66%,Charlie将获得其中的0.05/0.15≈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可能会与像他们一样的大量不知情交易流进行交互。这有助于LP从交易费用中赚钱,同时减少他们遭遇逆向选择的风险。无穷小虚拟订单我们前文提到TWAMM将长期订单拆分为无限多个无限小的子订单。这样做有两个原因:流畅性和效率。流畅性TWAMM的主要目标是在时间跨度内平稳执行其长期订单,以便它们以接近主流时间加权平均价格的价格执行。随着我们将虚拟交易的规模尽可能小地压缩,AMM上的价格变动曲线变得越来越平。在极限情况下,由于有无数个无限小的交易,执行虚拟交易时价格变动非常平稳。请参阅效率由于TWAMM是为在以太坊上使用而设计的,因此为每个区块的多个虚拟交易明确计算交易的成本会高得惊人。然而,当我们有无限多的无穷小交易时,我们可以在一次计算中为交易者计算结果,无论自上次检查以来已经过去了多少个区块。实施方案惰性求值TWAMM将虚拟子订单视为发生在区块之间的空间中,这对于避免三明治攻击很重要。要想以一种节省gas的方式实现这一点,TWAMM使用惰性求值,仅在需要确定交互结果时才计算虚拟交易的影响。每次用户与TWAMM交互时(例如,通过使用嵌入式AMM进行交易或添加新的长期订单),TWAMM都会追溯计算自上次交互以来所发生所有虚拟交易的影响。由于这些虚拟交易仅与TWAMM的嵌入式AMM交互,因此TWAMM的行为在外部交互之间是完全确定的。即使TWAMM在两次外部交互之间间隔了100万个区块,下次有人与之交互时,它也能够准确计算所有介入虚拟交易的结果。插入TWAMM的前端将能够通过跟踪当前区块编号,并自行进行TWAMM计算,来处理尚未在链上显示的虚拟交易。Gas优化订单池如示例所示,当我们在同一交易方向有多个长期订单(例如,出售ETH换取USDC)时,我们将它们汇集在一起,然后将它们拆分为虚拟订单。然后TWAMM可以使用用于跟踪Compound和Uniswap等协议中LP奖励波动的「」,以跟踪账户余额。从技术上讲,每个TWAMM总是有两个长期订单池,每个资产一个:例如,卖出USDC的池和卖出ETH的池。在任何给定时间,这些池中的一个或两个都有可能是空的。长期订单到期将订单池与惰性求值结合使用时,会出现一种复杂情况。想象一下,Bob下订单在接下来的100个区块中出售100ETH,而Charlie下订单在接下来的200个区块中出售200ETH。两个订单都以每个区块1ETH的速度卖出。假设在接下来的150个块中没有人与TWAMM交互,此时会发生新的外部交互。在Bob和Charlie下订单后的前100个区块中,他们的订单汇集到一个共同订单中,每个区块出售2ETH。然而对于之后的50个区块,Charlie的订单是独立的,每个区块只出售1个ETH。这意味着我们必须进行两次单独的交易计算,才能发现发生了什么:一次计算前100个区块的结果,一次计算最后50个区块的结果。在最坏的情况下,如果过去150个区块中每个区块都有订单到期,这意味着TWAMM将不得不每个区块处理一笔交易,原本期待的节省gas的效率将大打折扣。对此最简单的解决方法是限制符合订单到期条件的区块数量:例如,TWAMM可以指定订单只能每250个区块到期一次,或者大约每小时一次。取消长期订单用户可以随时取消长期订单。
在实践中,这允许用户可以具体到区块来选择取消自己订单的时间。这不会增加系统的gas负担,因为想要取消订单的用户自己支付gas。虚拟交易数学定义假设自TWAMM上次执行虚拟交易以来已经有t个区块。为简单起见,假设没有长期订单过期,因此在整个时间段内,出售X的矿池在每个区块中出售xrate,而出售Y的矿池在整个时间段内在每个区块中出售yrate。那么在此期间售出的X的总量是txrate=xin,而在此期间售出的Y的总量是tyrate=yin。让我们将时间段开始时嵌入的AMM资产储备额分别设定为xammStart和yammStart。公式在处理完所有虚拟交易后,嵌入式AMM中的X储备额为同时从常数乘积公式,我们得出出售X的矿池获得了所有没有出现在嵌入式AMM资产储备中的Y——换句话说,同样,潜在的攻击向量三明治攻击描述在中,攻击者Atticus看到交易者Trey即将在AMM上进行交易。Atticus发送了两个订单,将Trey的订单夹成三明治,从而从中获利。想象一下,Trey向AMM发送了一个用USDC购买ETH的订单。看到这一交易后,Atticus在Trey之前下单在AMM上购买ETH,推动价格上涨。由于他向AMM支付费用并产生价格冲击,因此Atticus在这一订单上将亏损。当Trey的订单被执行时,他被迫以他原本更高的价格购买ETH,因为Atticus推高了价格。Trey的订单进一步推高了价格。现在,Atticus将他的ETH卖回给AMM。由于自Trey的买入已经推高了AMM上的价格,因此Atticus卖出的价格高于其买入的价格,并且能够实现盈利。如果Atticus能够保证在Trey购买后立即将自己的ETH卖回给AMM,这种攻击对Atticus才有盈利意义。在某一个特定区块内,如果Atticus是一名矿工、与某个矿工达成交易或使用之类的服务,是可能做到的。三明治攻击和虚拟订单乍一看,虚拟订单似乎特别容易受到三明治攻击,因为每个人都知道它们会来。但是,由于它们在**区块之间执行,因此它们得以圆满。想要夹住TWAMM虚拟订单的攻击者必须在一个区块的末尾与嵌入式AMM进行交易,导致虚拟订单在区块之间以糟糕的价格执行,然后下一个区块的开始在另一个方向交易。目前,攻击者没有办法保证他们只会在给定区块的末尾进行交易,即使是他们能在下一个区块的开始进行交易。当这种多区块矿工可提取价值(MEV)变得更加普遍,使交易者可以在多个区块之间进行三明治攻击,这可能会成为一个更严峻的问题。信息泄漏长期交易者在TWAMM中可能遇到的最大权衡是在发布公开可见订单时面临的信息泄漏,而由于以太坊的性质,这种订单公开是必要的。如果一位交易者下了一个足够大的长期订单,其他交易者可能会想发动抢先交易攻击,在TWAMM的嵌入式AMM和其他地方购买资产,以便稍后在长期订单推高价格后将其卖回给交易者。由于用户可以随时取消自己的长期订单,我们预计过于激进的抢先交易攻击者会被其他交易者暗算,使得信息泄漏的影响整体可控。示例想象一下,骗子Sally已经注意到TWAMM上的激进抢先攻击。她从流动性聚合器那里购买了100万USDC的ETH,推高了整个市场的价格。然后她在TWAMM上下了一个巨大的长期订单,在接下来的24小时内每个区块购买10万USDC的ETH。抢先交易攻击者Frank立即看到了这个订单,并通过聚合器购买了100万USDC的ETH,进一步推高了ETH的价格。Sally通过聚合器卖回她的ETH以获取利润,压低价格并让Frank蒙受了损失。最后,她取消了她根本没付诸执行的长期订单。Python参考实现大家点击可以看到一个Python参考实现。演示了具有多个对冲长期订单和套利者的TWAMM的价格行为走势。为简单起见,这个Python版本没有实现像订单池或真正的惰性求值之类的gas优化方案。结尾我们已经勾勒出TWAMM的设计草案,但我们的工作才刚刚开始。如果您有兴趣解决这一问题或类似问题,可以发送电子邮件至或在Twitter上私信我,或通过联系Uniswap实验室。鸣谢:SamSun、GeorgiosKonstantopoulos、MichaelBently、MichaelKustermann、KevinPang、Hasu、SamBankman-Fried、HenryPrior、TomCadwell、AlexWice、Mewny、BigMagic、LilyFrancus、TarunChitra、MoodySalem、NoahZinsmeister、TeoLeibowitz