注:原文作者是paradigm研究合夥人Dave White、Dan Robinson以及Uniswap創始人Hayden Adams。在這篇文章中,他們描述了一種稱為時間加權平均做市商(TWAMM)的新型AMM,它可以幫助以太坊上的交易者有效地執行大訂單,而其工作原理是將長期的大訂單分解為無限多個無限小的虛擬訂單,並根據嵌入的恆定乘積AMM隨時間平滑地執行它們。
目錄
1、介紹
2、概要
3、做市基礎
3.1 做市商
3.2 逆向選擇
4、自動化做市商
4.1 恆定乘積公式
5、在當前AMM 上執行大訂單
5、1 手動拆分訂單
5、2 子訂單大小權衡
6、傳統金融類比
6.1 TWAP 訂單
7、時間加權平均做市商(TWAMM)
7.1 概述
7.2 以太坊術語複習
7.3 基礎設計
7.4 無窮小虛擬訂單
8、實施
8.1 延遲計算(Lazy Evaluation)
8.2 Gas優化
8.3 虛擬交易涉及的數學
9、潛在的攻擊向量
9.1 三明治攻擊(又名夾心攻擊)
9.2 信息洩露
10、Python 參考實現
11、結論
1
介紹
本文介紹了一種新型的自動化做市商(AMM),它可幫助以太坊上的交易者有效地執行大訂單。
我們稱其為時間加權平均做市商,或TWAMM(發音為“tee-wham”)。
它的工作原理是將長期訂單分解為無限多個無限小的訂單,並根據嵌入的恆定乘積AMM隨時間平滑地執行它們。
2
概要
假設Alice 想在鏈上購買價值1 億USDC的ETH,那麼她在Uniswap 等現有AMM上執行這種規模的訂單將是昂貴的,如果Alice知道別人所不知道的事情(內幕消息),則其執行這樣的大額交易會遭遇很大的滑點。
在今天,Alice 的最佳選擇是手動將她的訂單分成幾部分,並在幾個小時內執行,讓市場有時間意識到她沒有內幕信息,因此可以給她一個更好的價格。
如果她發送了幾筆大的子訂單,而每個子訂單仍將對市場價產生重大影響,並且很容易受到對手交易者的三明治攻擊。另一方面,如果她發送了許多小的子訂單,她將不得不承擔所有的工作和活躍交易的風險,並向礦工支付大量的gas交易費用。
TWAMM通過代表Alice進行交易來解決這一難題。它將Alice的訂單分解為無限多個無限小的虛擬訂單,以確保隨時間的推移完美平滑地執行,並且,使用帶有嵌入式AMM 的特殊數學關係,能夠在這些虛擬訂單中分攤gas 成本。此外,因為TWAMM是在區塊之間執行的交易,所以它也不太容易受到三明治攻擊的影響。
3
做市基礎
3.1 做市商
考慮一個由兩種金融資產組成的市場(比如USDC和ETH),而做市商就是這個市場的參與者,他們在任何時候都願意用其中一個資產交易另一個資產。
如果你有1億USDC並想用它來購買ETH,你可能找不到另一個人在同一時間做相反的交易。相反,你很可能會去一個由單個或多個做市商組成的市場,並與他們進行交易。
3.2 逆向選擇
做市商從價差中獲利,即他們對每筆交易收取的費用。當價格與他們相反時,他們會賠錢(比如當他們購買價格下跌的資產,或者出售價格上漲的資產。)
不幸的是,對於做市商來說,市場價格往往與他們相反,這種現像被稱為逆向選擇。發生這種情況,是因為擁有有關未來價格走勢信息的交易者,更有可能與做市商進行大額交易。
一般而言,最危險的訂單就是那些規模又大又緊急的訂單,因為這些訂單正是知情交易者傾向於下的訂單類型。因此,最基本的做市策略就是淡化入市訂單,即當大量買入訂單進來時,調高價格;當大量賣出訂單進來時,調低價格。
4
自動化做市商
在過去的一年中,以Uniswap為首的自動化做市商(AMM) 在以太坊上變得非常受歡迎,這些AMM每天處理數十億美元的交易量。顧名思義,AMM 自動化了大部分的做市過程。
4、1 恆定乘積公式
恆定乘積公式是一個簡單的規則,它允許任何人立即為一對新資產創建新市場和新AMM。
為了在兩個資產X 和Y 之間創建新的乘積AMM (CPAMM) ,稱為流動性提供者(LP)的用戶存入這兩種資產的x和y儲備金。
這些資產在任何給定時間的比率代表AMM 上的即時價格。例如,如果CPAMM 的儲備中包含2,000 USDC 和1 ETH,則ETH 的瞬時價格將為2,000 USDC。
當交易者與AMM 進行交易時,它會根據公式x * y = k決定給他們什麼價格,其中x 和y 是儲備規模,k 是常數。這意味著其儲備規模的乘積在交易期間保持不變(忽略費用)。
例子:
考慮一個ETH/USDC CPAMM,其儲備中有2,000 USDC 和1 ETH,因此此時x = 2,000、y = 1 以及x * y = k = 2,000。該AMM 的瞬時價格為每ETH 2,000 / 1 = 2,000 USDC。
如果交易者來購買價值2,000 USDC 的ETH,這意味著他們將2,000 USDC 存入X 儲備,因此我們的x變成4,000(2000+2000)。
然後,由於k = 2000,在這筆交易後,我們的y就變成了0.5 (y = x/k=2000/4000)。由於y最初是1,因此有0.5 ETH流向了交易者。
由於交易者用2000 USDC 購買了0.5 ETH,因此他們支付的ETH平均價格為4,000 USDC。
價格影響與逆向選擇
在上述情況下,交易員必須為其大額訂單支付4000美元/ETH,而小額訂單的成本僅為2000美元/ETH。這種價格差異被稱為訂單的價格影響。訂單越大,價格影響(滑點)就越大。
這就是AMM對抗逆向選擇的方式:大訂單更有可能和內幕消息有關,因此AMM讓他們付出了高昂的代價,它是淡化訂單的自動化等價物。
5
在當前AMM 上執行大訂單
5.1 手動拆分訂單
正如我們所看的,在單筆交易中對AMM執行一個大訂單是昂貴的,這篇優秀的文章深入探討了這個問題,並推薦了一些解決方案。
簡而言之,希望在AMM 上執行大訂單的交易者不應該在單筆交易中執行:他們最好將訂單分成幾個部分。這可能涉及一次向多個AMM 發送訂單,但這些AMM 在任何給定時間點的流動性也有限。訂單越大,隨著時間的推移將其拆分就越有吸引力。
例如,假設一個投資者想在鏈上購買價值1 億USDC的ETH。他們沒有關於ETH價格的任何短期信息,因此不介意其訂單是否需要一些時間來執行。在這種情況下,他們可能會將訂單拆分成10個小訂單,每個訂單1000萬美元,並且每隔1個小時執行一次,從而減小訂單的價格影響。
5.2 子訂單大小權衡
很明顯,如果一個非常大的訂單被拆分成幾個部分,每個單獨的子訂單仍然會很大,並且會相應地產生價格影響。將訂單分成更小的部分會有所幫助,但這會引入兩個新的問題。
第一個問題是操作複雜性,這意味著風險和工作量的增加。交易者可能會為給定的交易輸入錯誤的交易數量或錯誤的方向。或者她的計算機可能會崩潰,從而阻止她執行部分訂單。即使一切順利,這個過程也需要時間與精力,它會分散人們對更有利可圖的努力的注意力。
第二個問題是每筆交易都會產生固定的交易成本,例如支付給以太坊礦工處理交易的gas。如果交易者將她的訂單分成太多部分,其最終可能在交易費用上消耗的資金超過了其實際購買到的ETH。
6
傳統金融類比
在傳統金融領域,如果投資者或機構想購買1 億美元的蘋果股票,他們不會直接向交易所發送1 億美元的市場買單。他們也不會發送10 個價值1000萬美元的訂單,而對於沒有專門的交易人員和基礎設施的大多數人來說,將訂單分成比這小得多的部分是不切實際的。
相反,他們很可能會將大筆訂單發送給經紀商,經濟商會為他們進行算法交易以換取費用。經紀商將在指定的時間段內執行交易,比如八小時,並且價格類似於某個基準。經紀商將有一個專門負責安全且廉價地執行此類交易的團隊。
6.1 TWAP 訂單
也許最基本的算法交易類型是時間加權平均價格或TWAP(發音為“tee-whap”)訂單。顧名思義,在八小時內購買價值1 億美元的蘋果股票的TWAP 訂單,將以接近該時期蘋果股票時間加權平均價格的價格成交。
例如,如果蘋果股票在四個小時的定價為100 美元,另外四個小時的定價為120 美元,那麼時間加權平均價格將為($100*4+$120*4)/8=$110,經紀商將執行接近該價格的TWAP訂單。
細節各不相同,但經紀商最有可能通過在一天內將其分成許多個小塊並將它們發送到市場來執行此交易。在8 小時內購買1 億美元的蘋果股票,相當於每100 毫秒購買大約350 美元的蘋果股票,我們可能預計經紀商或多或少會這樣做。
經紀商擁有減少或消除如此多小額交易的操作複雜性的基礎設施,並且由於他們與市場有直接聯繫,因此可能無需支付太多的交易成本。
7
時間加權平均做市商(TWAMM)
時間加權平均做市商(TWAMM) 提供TWAP 訂單的鏈上等價物。
TWAMM 具有用於訂單拆分的專門邏輯以及與嵌入式交易所的直接連接,以低gas 成本提供平穩執行。套利者將TWAMM 嵌入式交易所的價格與市場價格保持一致,確保在資產的時間加權平均價格附近執行。
7.1 概述
每個TWAMM 實例促進特定資產對之間的交易,例如ETH 和USDC。
TWAMM 包含一個嵌入式AMM,這是這兩種資產的標準恆定乘積做市商。任何人都可隨時使用這個嵌入式AMM 進行交易,就好像它是一個普通的AMM。
交易者可以向TWAMM 提交長期訂單,這些訂單是在固定數量的區塊上出售固定數量資產的訂單-例如,在接下來的2,000 個區塊中出售100 ETH 的訂單。
TWAMM 將這些長期訂單分解為無限多個無限小的虛擬子訂單,這些子訂單隨著時間的推移以均勻的速率與嵌入式AMM 進行交易。單獨處理這些虛擬子訂單的交易將花費無限的gas,但封閉形式的數學公式允許我們僅在需要時計算它們的累積影響。
隨著時間的推移,長期訂單的執行將推動嵌入式AMM 的價格遠離其他市場的價格。發生這種情況時,套利者將根據嵌入AMM 的價格進行交易,使其恢復一致,從而確保長期訂單的良好執行。
例如,如果長期賣出使得嵌入式AMM 上的ETH 比特定中心化交易所便宜,套利者將從嵌入式AMM 購買ETH,使其價格回升,然後在中心化交易所出售以獲取利潤。
7.2 以太坊術語複習
區塊(Block):以太坊將交易捆綁成稱為區塊(Block)的連續組,大約每13秒一次。出於本文的目的,我們將對每個區塊進行編號:區塊1之後是區塊2,然後是區塊3,依此類推。
礦工(Miner):分佈式礦工組競爭處理每個區塊。任何能連接互聯網的人都可以成為礦工,這意味著在以太坊上運行的AMM 之類的程序不能保守任何秘密:每個人都必須能夠準確地計算出在給定輸入的情況下他們會做什麼。
Gas: 以太坊上的計算是一種稀缺資源,因此用戶必須以gas 的形式向礦工支付費用。給定交易中涉及的計算越多,它消耗的Gas就越多。這種gas費用完全由提交交易的人支付。
7.3 基礎設計
長期訂單:Alice 想在接下來的8 小時內購買價值1 億USDC的ETH,即大約2,000 個區塊。她在TWAMM 中輸入了一個長期訂單,以在接下來的2,000 個區塊購買價值1 億USDC的ETH,或每個區塊50,000 USDC。
如上所述,我們事先不知道哪些礦工將在TWAMM 上處理未來的交易。這意味著Alice 的訂單必須對所有人可見,從而引入了我們在下面討論的信息洩漏問題。
訂單池:Bob 想在接下來的5,000 個區塊中將500 ETH兌換成USDC,或者每個區塊出售0.1 ETH。
Charlie 想在接下來的2,000 個區塊中將100 ETH兌換成USDC,即每個區塊出售0.05 ETH。
直到Charlie的訂單在2,000 個區塊內到期,Bob和Charlie的訂單將被分組到一個池中。
該ETH 銷售池將在接下來的2,000 個區塊中以每個區塊0.15 ETH 的速率出售ETH。 Bob 將獲得USDC池子的≈ 66%( 0.1/0.15),Charlie 將獲得USDC池子的≈ 33%(0.05/0.15)。
虛擬訂單:
對於接下來2,000 個區塊的每一個區塊,TWAMM 必須代表Alice 購買價值50,000 USDC 的ETH,並代表ETH 銷售池出售0.15 ETH以換取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.1 ETH 的速度執行它。
除非有任何外部活動,否則隨著時間的推移,這將推低嵌入式AMM 上的ETH 價格,這一次促使套利者在價格完全脫節後重新拉回至市場價。
經濟學:
由於Alice、Bob或Charlie都不急於執行訂單,因此其他市場參與者可以推斷出,他們的訂單所代表的逆向選擇比其他情況下要少,並且可以為他們提供低價格影響的執行。
由於TWAMM 將是像Alice、Bob和Charlie這樣的人進行交易的最佳場所,所以TWAMM嵌入式AMM上的LP可能會與他們這樣的大量未知flow進行交互。這有助於從費用中賺錢,同時減少逆向選擇的風險。
7.4 無窮小虛擬訂單
上面我們提到TWAMM 將長期訂單拆分為無限多個無限小的子訂單。這樣做有兩個原因:平滑度和效率
平滑度
TWAMM 的主要目標是隨著時間的推移平滑執行其長期訂單,以便它們的執行價格接近現行的時間加權平均價。
隨著我們減少虛擬交易的規模,AMM上的價格波動變得越來越不規則。
在極限狀態下,由於有無限多個無限小的交易,當執行虛擬交易時,價格運動是完全平滑的。
見https://github.com/para-dave/twamm/blob/master/splitting_exploration.ipynb
效率
由於TWAMM 旨在用於以太坊,因此為每個區塊明確計算多筆虛擬交易的交易成本會高得驚人。然而,當我們有無限多個無限小的交易時,我們可以在一次計算中計算交易者的結果(無論自上次檢查以來已經有多少個區塊)。
8
實施優化方案
8.1 延遲計算(Lazy Evaluation)
TWAMM 將虛擬子訂單視為發生在區塊之間的空間中,這對於避免三明治攻擊而言是很重要的。
為了以一種節省gas的方式實現這一點,TWAMM 使用了延遲計算(Lazy Evaluation),僅在需要確定交互結果時才計算虛擬交易的影響。
每次用戶與TWAMM 交互時(例如,通過使用嵌入式AMM 進行交易或添加新的長期訂單),TWAMM 都會追溯計算自上次交互以來發生的所有虛擬交易的影響。
由於這些虛擬交易僅與TWAMM 的嵌入式AMM 交互,因此TWAMM 的行為在外部交互之間是完全確定的。即使TWAMM 在外部交互之間移動了100 萬個區塊,下次有人與之交互時,它也能夠準確計算所有介入虛擬交易的結果。
插入TWAMM 的前端將能通過跟踪當前區塊編號並自行進行TWAMM 計算來考慮尚未在鏈上表示的虛擬交易。
8.2 Gas優化
匯集訂單
如示例所示,當我們在同一方向有多個長期訂單(即出售ETH並兌換成USDC)時,我們將它們匯集在一起,然後將它們拆分為虛擬訂單。然後,TWAMM 可使用用於跟踪Compound 和Uniswap 等協議中LP 獎勵的十億美元算法來跟踪餘額。
從技術上講,每個TWAMM總是有兩個長期訂單池(每個資產一個):例如,賣USDC 的訂單池和賣ETH 的訂單池。在任何給定時間,這些訂單池中的一個或兩個可能是空的。
長期訂單到期
將訂單池與延遲計算結合使用時會出現一種複雜情況。
想像一下,Bob 下訂單在接下來的100 個區塊中出售100 ETH,而Charlie 下訂單在接下來的200 個區塊中出售200 ETH。這兩個訂單都以每個區塊1 ETH 的速率出售。
假設在接下來的150 個區塊中沒有人與TWAMM 交互,此時會發生新的外部交互。他們的第一批訂單是Bob和Charlie的共同訂單,每個區塊賣出2 ETH。然而,在那之後的50個區塊,Charlie的訂單是獨立的,每個區塊只賣出1 ETH。
這意味著我們必須進行兩次單獨的交易計算才能找出發生了什麼:一次計算前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
潛在的攻擊向量
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 蒙受損失。最後,她在任何訂單完成之前取消了她的長期訂單。
10
Python 參考實現
你可以在此處查看TWAMM 的Python 參考實現。
這個Jupyter 筆記演示了TWAMM在多個長期訂單和套利者存在下的情況。
為了簡單起見,這個Python版本並沒有實施gas優化,比如訂單池順序或真正的延遲計算。
11
結論
我們已經勾勒出了TWAMM的設計,但我們的工作才剛剛開始。如果你有興趣解決此問題或類似問題,可以發郵件至dave@paradigm.xyz或者在Twitter上給我發私信,或者你也可以通過ideas@uniswap.org聯繫Uniswap Labs。
致謝:Sam Sun, Georgios Konstantopoulos, Michael Bently, Michael Kustermann, Kevin Pang, Hasu, Sam Bankman-Fried, Henry Prior, Tom Cadwell, Alex Wice, Mewny, Big Magic, Lily Francus, Tarun Chitra, Moody Salem, Noah Zinsmeister, Teo Leibowitz。