概述
本文介绍了一种新型的自动化做市商,可以帮助以太坊上的交易者有效地执行大额订单。
我们称其为时间加权平均做市商,缩写为TWAMM。
TWAMM的工作原理是将长期订单分解为无穷多的小订单,并随着时间的推移,针对嵌入式恒定产品自动化做市商而顺利地执行它们。
简介
假设Alice想在链上购买价值1亿美元的ETH,那么如果在像?Uniswap这种现有的AMM上执行这种规模的订单将是非常昂贵的,这是为了防止Alice知道一些他们不知道的内幕,所以它必须向Alice收取高昂的费用。
现在,Alice的最佳选择是手动将她的订单分成好几部分并在几个小时之内执行,让市场有时间意识到她并没有内幕消息,这样就可以给她一个更好的价格。
假如她发送了几个大规模的子订单,那么每个订单仍然会对价格产生重大影响,并且容易受到对抗性交易者的三明治攻击。另一方面,如果她发送许多小规模的子订单,她将不得不承担主动交易的所有工作和风险,并将以交易gas费用的形式向矿工支付高额成本。
如今,TWAMM通过代表Alice进行交易为她解决了这个问题。它将她的订单分解成无数个无限小的虚拟订单,以确保随着时间的推移可以完美地顺利执行,并且使用与嵌入式AMM的特殊函数关系,在这些虚拟订单中分摊gas成本。由于它处理的是区块之间的交易,所以它也不太容易受到三明治攻击。
两个与“做市”有关的基础概念
1.做市商
考虑到这个市场有两种金融资产,例如?USDC和ETH。而做市商是这个市场的参与者,他希望能在任何时候用任意一种资产与另一种资产进行交易。
假如你有1亿美元的USDC并想用它来购买ETH,你可能无法在同一时间找到另一个想要做相反交易的人。取而代之的是,您很可能会进入到一个由一个或多个做市商组成的市场并与他们进行交易。
2.逆向选择
做市商从价差中获得的利润,实际上是他们对每笔交易收取的费用。当价格走向与他们相反时,他们会赔钱——当他们购买了某种资产后价格随后下跌,或是出售了某种资产后价格随即上涨。
不幸的是,对于做市商来说,价格走势往往与他们的操作相反,这种现象被称为逆向选择。发生这种情况是因为获悉有关未来价格走势的交易者更有可能与做市商进行大额交易。
最危险的订单是规模既大又紧急的订单,因为这些订单正是那些有内幕消息的交易者倾向于下的订单类型。因此,最基本的做市策略是“淡入订单”,当有大买单时将价格调高,当有大卖单时将价格调低。
自动化做市商
在过去的一年中,以Uniswap为代表的自动做市商(AMM)在以太坊上非常受欢迎,每天处理数十亿美元的交易。顾名思义,AMM就是自动化了大部分做市过程。
1.常数交易公式
常数交易公式是一个简单的规则,它允许任何人立即为一对新资产创建新市场和新AMM。
为了在X和Y这两种资产之间创建新的常数交易AMM(CPAMM),被称为流动性提供者的用户会存入这两种资产的准备金x和y。
防作恶 MEV 协议 Shutter Network 获得 236 万美元捐赠:6月27日消息,防作恶的 MEV 开源协议 Shutter Network 宣布获得 236 万美元捐赠(contributions),贡献者包括 Alphemy Capital、coinix、Equilibrium、FishDAO、Factor(Gnosis Chain 战略风险基金)、JDAC Capital、JLH Ventures、OKX Ventures、Owl Ventures、Own.fund 和 Timothy Lowe 等。[2023/6/27 22:03:38]
这些资产在任何给定时间内的比率代表着在AMM上的即时价格,或者是它向一个非常小的订单收取的价格。例如,如果CPAMM的储备中包含2,000USDC和1ETH,则其ETH的瞬时价格将为2,000USDC。
当交易者与AMM进行交易时,它会根据公式**x*y=k来决定给他们什么价格,其中x和y是储备规模,k是常数。这意味着其储备规模的乘积在交易期间是保持不变的。
2.示例
比如一个ETH/USDC的CPAMM,其储备中有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=2,000+2,000=4,000。
接着,由于k=2000,我们必须在交易后得到y=x/k=2000/4000=0.5。由于y最初是1,因此1–0.5=0.5ETH一定已经流向了交易者。
由于交易者用2000USDC购买了0.5ETH,因此他们支付的平均价格为每个ETH4,000USDC。这种相对于瞬时价格的高价反映出了有关AMM流动性的大订单规模。
3.价格影响和逆向选择
在上述情况下,当小订单的成本仅为每个ETH2,000USDC时,交易者则必须为其大订单支付每个ETH4,000USDC的费用。这种价格差异称为订单的价格影响。当新进订单规模越大,对价格的影响就越大。
这就是AMM对抗逆向选择的方式:大订单更有可能被告知,因此AMM会使他们付出高昂的代价。?
在当前AMM上执行大订单
1.手动拆分订单
正如我们所见,在AMM上执行单笔大订单的交易成本被设定得很高。这篇优秀的文章深入探讨了这个问题,并推荐了一些解决方案。
简而言之,希望在AMM上执行大订单的交易者不应该在单个交易中执行:他们最好将订单分成几部分。这可能涉及一次向多个AMM发送订单,但这些AMM在任何给定时间点的流动性也是有限的。随着时间的推移,订单越大,将其拆分就越有意义。
例如,假设一位投资者想在链上购买1亿美元的ETH,但由于他们没有关于ETH价格的任何短期信息,因此他们的订单可能会需要一些时间来执行。在这种情况下,他们可能会将订单拆分成10单,每单1000万美元,并每隔一小时执行一单,从而减少每单的价格影响。
FIS与M10 Networks合作推出CBDC:金色财经报道,银行业解决方案提供商FIS宣布计划通过其与数字支付初创公司M10 Networks合作的 CBDC 虚拟实验室帮助中央银行推出中央银行数字货币 (CBDC) 。该实验室将让中央银行、商业银行和支付公司试验和试点 CBDC 发行、支付、可编程货币和离线支付。其范围涵盖零售 CBDC、批发和跨境支付。M10 声称该平台可以扩展到每秒超过一百万笔交易,延迟不到一秒。(ledgerinsights)[2022/8/26 12:51:08]
2.对子订单大小的权衡
显然,如果将一个规模非常大的订单分成几部分,那么每个单独的子订单仍然会很大,并会相应地产生价格影响。这时候,要将订单拆分成得更小才会有用,不过这同时会带来两个新的问题。
第一个问题是操作的复杂性,这意味着风险和工作量的增加。交易者可能会将他的交易拆分成错误的数量或是选择了错误的方向。另一方面,他的计算机为了阻止执行部分订单可能会发生崩溃。而即便一切都很顺利,这个过程也需要付出时间和精力,这会影响人们对于更有价值的东西的尝试。
第二个问题是每笔交易都会产生固定的交易成本,例如支付给以太坊矿工处理交易的gas费用。如果交易者将他的订单拆分成太多部分,那么他最终可能会花费比实际购买ETH多得多的钱。
与传统金融类比
在传统金融领域,如果投资者或者机构想购买1亿美元的苹果股票,他们不会直接向交易所发送1亿美元的市场买单。同样他们也不会发送10个价值1000万美元得订单。对于没有专门的交易人员和基础设施的绝大多数人来说,将订单分成比这小得多的子订单是不切实际的。
相反,他们很可能会将大笔订单发送给经纪人,经纪人会为他们进行算法交易以赚取费用。经纪人将在指定的时间段内执行交易,比如八个小时,价格参考某个标准。经纪人拥有一个专门负责安全且经济地执行此类交易的团队。
1.TWAP订单
也许最基本的算法交易类型是时间加权平均价格或是TWAP订单。顾名思义,就是假如在八小时内执行价值1亿美元的苹果股票的TWAP订单,那么最终将以该时段内接近苹果股票时间加权平均价格的价格成交。
例如,若苹果股票在这段时间内在其中四个小时的价格为100美元,另外四个小时的价格为120美元,那么时间加权平均价格将为($100*4+$120*4)/8=$110,经纪人将执行接近该价格的TWAP订单。
虽然操作起来细节各有不同,但经纪商们最有可能在一天内将其分成许多小份并将它们发送到市场来执行此交易。在8小时内购买1亿美元的苹果股票相当于每100毫秒购买大约350美元的苹果股票,我们应该都会期望经纪人能进行这样类似的操作。
由于经纪商拥有专业的基础设施,这些设施可以减少或是消除如此多小额交易的操作复杂性,并且由于它们与市场有着直接联系,因此可能无需付出太多的交易成本。
时间加权平均做市商
时间加权平均做市商(TWAMM)提供了TWAP订单的链上等价物。TWAMM凭借自己独特的用于订单拆分的逻辑算法以及与嵌入式交易所的直接联系,通过较低的gas费用执行平稳的交易。与此同时,套利者会将TWAMM嵌入式交易所的价格与市场价格保持一致,确保在资产的时间加权平均价格附近执行。
NatWest CEO离职并加入NEAR担任首席执行官:金色财经报道,NatWest数字商业银行的首席执行官Marieke Flament在任职两年半后离职,并加入瑞士区块链基金会NEAR担任首席执行官。Flament将于1月1日加入NEAR,其任务是推动增长。[2021/12/17 7:44:48]
1.概述
每个TWAMM都会促进特定的资产对之间进行交易,例如ETH和USDC。
TWAMM包含一个嵌入式AMM,这是这两种资产的标准常数产品做市商。任何人都可以随时使用这个嵌入式AMM进行交易,就好像它是一个普通的AMM一样。
交易者可以向TWAMM提交长期订单,这些订单是在固定数量的区块上出售固定数量的一种资产的订单——例如,在接下来的2,000个区块中出售100ETH的订单。
TWAMM将这些长期订单分解为无数个无限小的虚拟子订单,这些子订单将随着时间的推移匀速地与嵌入式AMM进行交易。要知道,单独处理这些虚拟子订单的交易将花费无限多的gas费用,但封闭式数学公式允许我们仅在需要时计算它们的累积影响。
随着时间的推移,长期订单的执行将推动嵌入式AMM的价格远离其他市场的价格。发生这种情况时,套利者将根据嵌入的AMM价格进行交易,使其保持一致,从而确保长期订单的良好执行。
假如长期出售使得嵌入式AMM上的ETH比特定中心化交易所要便宜,那么套利者将从嵌入式AMM购买ETH,当其价格回升以后再在中心化交易所进行出售以获取利润。
2.以太坊更新
2.1区块
以太坊将交易打包成连续的组块,这个组块也被称为是区块,大约每13秒进行一次。在本文里,我们将对每个区块进行编号:区块1之后是区块2,然后是区块3,依此类推。
2.2矿工
分散式的矿工组群开始竞相处理每一个区块,而任何能连接到互联网的人都可以成为矿工。这意味着在以太坊上运行类似AMM这样的程序是不保密的:每个人都必须精确地计算出在给定输入的情况下会产出些什么。
2.3Gas费用
算力在以太坊上是一种稀缺资源,因此用户必须以gas费用的形式向矿工支付费用。给定交易中涉及的计算量越大,它消耗的gas就越多。而这笔gas费用完全是由提交交易的人支付的。
3.基础交易设计概念
3.1长期订单
Alice想在接下来的8小时内购买价值1亿USDC的ETH,即大约2,000个区块。她在TWAMM中输入了一个长期订单来购买价值1亿USDC的2,000个区块ETH,相当于每个区块50,000个USDC。
如上所述,我们事先不知道哪些矿工将会在TWAMM上处理这些未来的交易。这也就意味着Alice的订单必须对所有人可见,从而引发了我们即将在下面讨论的信息泄漏问题。
3.2订单池
假设Bob想要在接下来的5,000个区块中以USDC价格出售500ETH,相当于每个区块出售0.1ETH。
1inch宣布更名为“1inch Network”:金色财经报道,去中心化金融平台1inch今天宣布更名为“ 1inch Network”,旨在更好地反映该多链、多协议平台的当前和未来状态。此外,1inch联合创始人Sergej Kunz透露,本月计划在1inch Network上推出一种新协议和另一种新产品。[2021/4/9 20:00:20]
而Charlie想在接下来的2,000个区块中以USDC价格出售100ETH,即每个区块出售0.05ETH。
等到Charlie的订单在2,000个区块内一到期,Bob和Charlie的订单就会被组合在一个池中。
该ETH销售池将在接下来的2,000个区块中以每区块0.15ETH的价格出售ETH。Bob将能获得该矿池赚取的USDC的66%;Charlie将获得该矿池赚取的USDC的33%。
3.3虚拟订单
对于接下来的2,000个区块,TWAMM必须代表Alice购买价值50,000USDC的ETH,并代表ETH销售池以USDC的形式出售0.15ETH。
我们可以想象,TWAMM将这两个子订单再拆分为数万亿个微小的子订单的子订单,我们称之为虚拟订单。
然后TWAMM轮流针对其嵌入的AMM执行这些虚拟订单:第一个是Alice的虚拟订单,然后是ETH销售池中的一个,再然后是Alice的另一个订单,依此类推。
3.4套利
因为Alice购买的ETH比ETH池出售的多得多,因此嵌入式AMM上的ETH价格将在每个区块上上涨。
当这个价格相对于其他地方的ETH价格足够高时,套利者将在其他交易所购买更便宜的ETH并在嵌入式AMM上出售,使其价格与市场平均水平保持一致并确保较好地执行Alice的订单。‘
3.5订单到期
在第2,000个区块之后,Alice的订单将被完全执行,Charlie的订单也是如此。而Bob出售ETH的订单在接下来的3,000个区块内仍然有效,在此期间,TWAMM将继续以每个区块0.1ETH的速度执行着。
除非有任何其它外部活动,否则随着时间的推移,这将迫使嵌入式AMM上的ETH价格走低,也将促使套利者一旦脱离价格后使得价格可以回升。
3.6代币经济
因为Alice、Bob或Charlie都不急于执行他们的订单,所以其他市场参与者可以推断出他们的订单所代表的逆向选择比其他情况要少,并且可以为他们提供低价格影响的执行。
由于TWAMM届时将成为Alice、Bob和Charlie等人进行交易的最佳场所,因此TWAMM嵌入式AMM上的LP可能会与像他们一样的大量不知情者进行交互。这也将有助于LP从费用中赚取利益,同时减少他们逆向选择的风险。
4.无穷小虚拟订单
上面我们提到了TWAMM将长期订单拆分为无穷个无限小的子订单。这样做有两个原因:流畅性和效率。
4.1流畅性
声音 | Bitwise高管:将在合适的时候再次提交比特币ETF申请:Bitwise全球研究主管Matt Hougan就“Bitwise撤回比特币ETF申请”一事表示:“我们确实撤回了申请。这是一个程序性步骤,我们打算在适当的时候重新提交申请。”Hougan补充称,该公司目前正努力回答SEC在其112页的初步文件中所提出的问题。Bitwise仍将致力于比特币ETF的开发,但重新申请的时间尚未确定。(The Block)[2020/1/15]
TWAMM的主要目标是随着时间的推移平稳地执行长期订单,以便它们可以以接近现行时间加权平均价格的价格来执行交易。
随着我们减少虚拟交易的规模,AMM上的价格变动变得越来越平稳了。
在极端情况下,由于有无数个无限小的交易,因此执行虚拟交易时价格变动非常平稳。
4.2效率
由于TWAMM设计初衷是用于以太坊区块链,因此为每个区块的多个虚拟交易明确计算交易的成本非常高。然而,当我们有无限多的无穷小交易时,我们可以在一次计算中计算交易者的结果,无论自上次检查以来已经有多少个区块。
执行
1.惰性评估
TWAMM将虚拟子订单视为发生在区块之间的空间中,这对于躲避三明治攻击很重要。
为了以一种节省gas费用的方式实现这一点,TWAMM会使用惰性评估,仅在需要确定交互结果时才计算虚拟交易的影响。
每次用户与TWAMM交互时,TWAMM都会追溯计算自上次交互以来发生的所有虚拟交易的影响。
由于这些虚拟交易仅与TWAMM的嵌入式AMM交互,因此TWAMM行为在外部交互之间是完全确定的。即使TWAMM外部交互之间移动了100万个区块,下次有人与之交互时,它还是能够准确计算所有介入虚拟交易的结果。
对于插入TWAMM的前端而言,可以通过跟踪当前区块编号并自行进行TWAMM计算来处理尚未在链上表示的虚拟交易。
2.Gas优化
2.1资金池订单
如示例所示,当我们在同一交易方向有多个长期订单时,我们会将它们集中在一起,然后把它们拆分为虚拟订单。然后,TWAMM可以使用算法来追踪余额,而这个算法与跟踪Compound和Uniswap等协议中数十亿美元LP代币激励的算法版本一样。
从技术上讲,每个TWAMM总是有两个长期订单池,每个资产一个:例如,卖出USDC的订单池和卖出ETH的订单池。值得一提的是,在任何给定时间内,这些订单池中的一个或两个可能是空的。
2.2长期订单过期
将订单池与惰性求值结合使用时会出现一种复杂情况。
想象一下,Bob下了一个长期订单,将在接下来的100个区块中出售100ETH,而Charlie也下了一个订单,将在在接下来的200个区块中出售200ETH,两个订单都以每区块1ETH的价格出售。
假设在接下来的150个块中没有人与TWAMM交互,此时就会发生新的外部交互。在Bob和Charlie下订单后的前100个区块中,他们的订单将会汇集到一个共同订单中,每个区块出售2ETH。然而,对于之后的50个区块,Charlie的订单就变成是独立的了,每个区块只会出售1个ETH。
这意味着我们必须进行两次单独的交易计算才能找出发生了什么:
*一次计算前100个区块的结果;
*一次计算最后50个区块的结果。
在最坏的情况下,如果过去150个区块的每个区块都有订单到期,这意味着TWAMM将不得不每个区块处理一笔交易,从而破坏了gas效率。
针对这个问题,最简单的解决方法是限制符合订单到期条件的区块数量:例如,TWAMM可以指定订单只能每250个区块到期一次,或者大约每小时到期一次。
2.3长期订单取消
用户可以随时取消长期订单。在实践中,这将允许用户为他们自己的订单选择取消时间直到区块完成订单交易。在这种情况下,系统的gas负担不会增加,因为所有取消操作都是用户自己做出的决定,因此需要他们自己支付gas。
3.虚拟交易数学
3.1定义
假设自TWAMM上次执行任何虚拟交易以来已经产生了t个区块。
为简单起见,假设没有长期订单过期,因此在整个时间段内,出售X的矿池每块出售x_{rate},而出售Y的矿池在整个时间段内每块出售y_{rate}整个时间段。
那么在此期间售出的X总量为tx_{rate}=x_{in},而在此期间售出的Y总量为ty_{rate}=y_{in}。
让我们将时间段开始时嵌入的AMM储备分别表示为x_{ammStart}和y_{ammStart}。
3.2公式
在处理完所有虚拟交易后,嵌入式AMM将会获得的储备资产X为
其中
从常数乘积公式,我们知道
出售X的矿池获得了所有没有出现在嵌入式AMM中的Y——换句话说,
同样地,
潜在的攻击媒介
1.三明治攻击
1.1描述
在三明治攻击中,攻击者Atticus看到交易者Trey即将在AMM上进行交易。Atticus发送了两个订单,夹住了Trey的订单,从而从中获利。
想象一下,Trey向AMM发送了一个用USDC购买ETH的订单,此时该订单被Atticus发现了,于是Atticus在Trey之前下单并在AMM上购买ETH,推动价格上涨。由于他正在向AMM支付费用并产生价格影响,因此Atticus在此订单上正在亏损。
当Trey的订单被执行时,他不得不以更高的价格购买ETH,因为Atticus推高了价格,此时Trey的实际订单价格又被进一步推高了。
现在,Atticus将他的ETH卖回给AMM。由于自Trey买入以来,Trey推高了AMM的价格,因此他卖出的价格其实是高于买入价格的,所以能够实现盈利。
但是,只有当Atticus能够保证在Trey购买后立即将他的ETH卖回给AMM,那么这种攻击对Atticus才有意义。在给定的区块内,如果Atticus是一名矿工、与某个矿工达成交易或使用Flashbots之类的服务时,这种类型的攻击其实是可能发生的。
1.2夹心订单和虚拟订单
乍一看,虚拟订单似乎特别容易受到三明治攻击,因为每个人都知道他们会来。
但是,由于它们在一定数量的区块之间执行,因此订单能得以保存。想要“夹住”TWAMM的虚拟订单攻击者,必须在一个区块的末尾与嵌入的AMM进行交易,这样会导致虚拟订单在区块之间以糟糕的价格执行,然后在在下一个区块开始时往另一个方向交易。
目前,攻击者没有办法保证他们只会在给定区块末端进行交易,因为攻击实施的前提是他们必须在下一个区块开始时进行交易。当多个区块最大可提取价值变得更加普遍且允许交易者夹在多个区块之间时,问题可能会变得更为严重。
2信息泄露
长期交易者在TWAMM中可能遇到的最大权衡是他们在下“公开可见”订单时会面临信息泄漏风险,由于以太坊性质,这种风险很难避免。
如果交易者下了一个规模足够大的长期订单,其他交易者可能会想在他/她之前抢先交易并在TWAMM嵌入式AMM和其他地方购买资产,以便稍后将其作为长期订单卖回给交易者彬推高价格。
由于用户可以随时取消他们的长期订单,我们预计过于激进的大订单交易者会被其他交易者利用,因此,我们需要控制信息泄漏的整体影响。
2.1示例
想象一下,欺诈者Sally已经注意到TWAMM上出现了攻击性抢先交易机会。此时她可以从流动性聚合商那里购买了100万美元的ETH,继而推高了整个市场的价格。然后,她可以在TWAMM上下了一个大额长期订单,然而在接下来的24小时内,在每个区块上购买10万美元的ETH。
Frank很快看到了这个大额订单并通过聚合器购买了100万美元的ETH,价格被进一步推高了。接下来,Sally通过聚合器卖出她的ETH以获取利润,结果价格会被推低并让Frank蒙受损失。最后,她在订单完成之前取消了自己的长期订单。
Python参考实现
您可以在此处查看TWAMM的Python参考实现。
GitHub上的JupyterNotebook展示了TWAMM的行为,其中包含多个被取消的长期订单和套利者的操作行为。
为简单起见,这个Python版本没有实现像池化订单或真正的惰性评估之类的gas优化。
结论
我们已经勾勒出了TWAMM的设计框架,但我们的工作才刚刚开始。
如果您有兴趣解决此问题或类似问题,可以发送电子邮件或在Twitter上私信联系UniswapLabs。
原文作者:DaveWhite、DanRobinson、HdydenAdams
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。