一文了解Uniswap 新型做市系統TWAMM
注:原文作者是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、結論
一、介紹
本文介紹了一種新型的自動化做市商(AMM),它可幫助以太坊上的交易者有效地執行大訂單。
我們稱其為時間加權平均做市商,或TWAMM(發音為“tee-wham”)。
它的工作原理是將長期訂單分解為無限多個無限小的訂單,並根據嵌入的恆定乘積AMM隨時間平滑地執行它們。
二、概要
假設 Alice 想在鏈上購买價值 1 億USDC的ETH,那么她在Uniswap 等現有 AMM上執行這種規模的訂單將是昂貴的,如果Alice知道別人所不知道的事情(內幕消息),則其執行這樣的大額交易會遭遇很大的滑點。
在今天,Alice 的最佳選擇是手動將她的訂單分成幾部分,並在幾個小時內執行,讓市場有時間意識到她沒有內幕信息,因此可以給她一個更好的價格。
如果她發送了幾筆大的子訂單,而每個子訂單仍將對市場價產生重大影響,並且很容易受到對手交易者的三明治攻擊。另一方面,如果她發送了許多小的子訂單,她將不得不承擔所有的工作和活躍交易的風險,並向礦工支付大量的gas交易費用。
TWAMM通過代表Alice進行交易來解決這一難題。它將Alice的訂單分解為無限多個無限小的虛擬訂單,以確保隨時間的推移完美平滑地執行,並且,使用帶有嵌入式 AMM 的特殊數學關系,能夠在這些虛擬訂單中分攤 gas 成本。此外,因為TWAMM是在區塊之間執行的交易,所以它也不太容易受到三明治攻擊的影響。
三、做市基礎
3.1 做市商
考慮一個由兩種金融資產組成的市場(比如USDC和ETH),而做市商就是這個市場的參與者,他們在任何時候都愿意用其中一個資產交易另一個資產。
如果你有1億USDC並想用它來購买ETH,你可能找不到另一個人在同一時間做相反的交易。相反,你很可能會去一個由單個或多個做市商組成的市場,並與他們進行交易。
3.2 逆向選擇
做市商從價差中獲利,即他們對每筆交易收取的費用。當價格與他們相反時,他們會賠錢(比如當他們購买價格下跌的資產,或者出售價格上漲的資產。)
不幸的是,對於做市商來說,市場價格往往與他們相反,這種現象被稱為逆向選擇。發生這種情況,是因為擁有有關未來價格走勢信息的交易者,更有可能與做市商進行大額交易。
一般而言,最危險的訂單就是那些規模又大又緊急的訂單,因為這些訂單正是知情交易者傾向於下的訂單類型。因此,最基本的做市策略就是淡化入市訂單,即當大量买入訂單進來時,調高價格;當大量賣出訂單進來時,調低價格。
四、自動化做市商
在過去的一年中,以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讓他們付出了高昂的代價,它是淡化訂單的自動化等價物。
五、在當前 AMM 上執行大訂單
5.1 手動拆分訂單
正如我們所看的,在單筆交易中對AMM執行一個大訂單是昂貴的,這篇優秀的文章深入探討了這個問題,並推薦了一些解決方案。
簡而言之,希望在 AMM 上執行大訂單的交易者不應該在單筆交易中執行:他們最好將訂單分成幾個部分。這可能涉及一次向多個 AMM 發送訂單,但這些 AMM 在任何給定時間點的流動性也有限。訂單越大,隨着時間的推移將其拆分就越有吸引力。
例如,假設一個投資者想在鏈上購买價值1 億USDC的 ETH。他們沒有關於ETH價格的任何短期信息,因此不介意其訂單是否需要一些時間來執行。在這種情況下,他們可能會將訂單拆分成10個小訂單,每個訂單1000萬美元,並且每隔1個小時執行一次,從而減小訂單的價格影響。
5.2 子訂單大小權衡
很明顯,如果一個非常大的訂單被拆分成幾個部分,每個單獨的子訂單仍然會很大,並且會相應地產生價格影響。將訂單分成更小的部分會有所幫助,但這會引入兩個新的問題。
第一個問題是操作復雜性,這意味着風險和工作量的增加。交易者可能會為給定的交易輸入錯誤的交易數量或錯誤的方向。或者她的計算機可能會崩潰,從而阻止她執行部分訂單。即使一切順利,這個過程也需要時間與精力,它會分散人們對更有利可圖的努力的注意力。
第二個問題是每筆交易都會產生固定的交易成本,例如支付給以太坊礦工處理交易的 gas。如果交易者將她的訂單分成太多部分,其最終可能在交易費用上消耗的資金超過了其實際購买到的ETH。
六、傳統金融類比
在傳統金融領域,如果投資者或機構想購买 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 美元的蘋果股票,我們可能預計經紀商或多或少會這樣做。
經紀商擁有減少或消除如此多小額交易的操作復雜性的基礎設施,並且由於他們與市場有直接聯系,因此可能無需支付太多的交易成本。
七、時間加權平均做市商(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.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.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的設計,但我們的工作才剛剛开始。如果你有興趣解決此問題或類似問題,可以發郵件至[email protected]或者在Twitter上給我發私信,或者你也可以通過[email protected]聯系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。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
Arthur Hayes 新文聚焦 | 全球貨幣政策的真相,比特幣接下來何去何從?
作為一名宏觀經濟預測者,我試圖基於公开數據和當前事件,作出能夠指導投資組合資產配置的預測。我喜歡“...
Ouroboros DeFi:為什么 Usual Money 被低估了?
前言:Ouroboros DeFi 方法論在Ouroboros DeFi收益基金,我們的投資策略始...
WEEX 唯客交易所贊助臺北區塊鏈周 支持更多全球用戶Onboard Web3
第三屆臺北區塊鏈周(Taipei Blockchain Week, TBW)於 12 月 12-1...
巴比特資訊
文章數量
141粉絲數
0