Uniswap 創始人與 Paradigm 研究團隊勾勒新做市模型 TWAMM
鏈聞 - ChainNews 2021-08-03 00:00
這種名爲時間加權自動做市商的新型 AMM,旨在幫助以太坊上的交易者有效地執行大額訂單。
撰文: Dave White、Dan Robinson、Hayden Adams ,前兩位爲 Paradigm 研究合夥人,後者是 Uniswap 創始人
作者授權鏈聞發表該文中文版本
這篇論文介紹了一種新型的自動做市商(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,000 USDC 和 1 ETH,則其 ETH 的瞬時價格將爲 2,000 USDC。
當交易者與 AMM 進行交易時, 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 的瞬時價格爲 2,000 / 1 = 2,000 USDC/ETH。
一個交易者來了,要買 2000 USDC 的 ETH,這意味着他要在 x 儲備中存入 2000 USDC,因此我們有 x=2000+2000=4000。
如 k = 2000,我們必須在上述交易後得到 y = k/x = 2000/4000 = 0.5。由於 y 最初是 1, 1 – 0.5 = 0.5 ETH, 因此上述交易者在此交易中獲得了 0.5 ETH。
由於交易者用 2000 USDC 購買了 0.5 ETH,因此他們實際支付的平均價格爲 4,000 USDC/ETH。高價格與瞬時價格這一關係,反映大規模訂單與 AMM 的流動性息息相關。
價格衝擊和逆向選擇
在上述情況中,小訂單的成本僅爲 2,000 USDC/ETH 時,交易者卻必須爲其大規模訂單支付 4,000 USDC/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 個區塊中售出 100 ETH 的訂單。
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,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。礦池以這種方式賺取的 USDC 中,Bob 將獲得其中 0.1/0.15 ≈ 66%, Charlie 將獲得其中的 0.05/0.15 ≈ 33%。
虛擬訂單
對於接下來 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 可能會與像他們一樣的大量不知情交易流進行交互。這有助於 LP 從交易費用中賺錢,同時減少他們遭遇逆向選擇的風險。
無窮小虛擬訂單
我們前文提到 TWAMM 將長期訂單拆分爲無限多個無限小的子訂單。這樣做有兩個原因:流暢性和效率。
流暢性
TWAMM 的主要目標是在時間跨度內平穩執行其長期訂單,以便它們以接近主流時間加權平均價格的價格執行。
隨着我們將虛擬交易的規模儘可能小地壓縮,AMM 上的價格變動曲線變得越來越平。
在極限情況下,由於有無數個無限小的交易,執行虛擬交易時價格變動非常平穩。
請參閱 https://github.com/para-dave/twamm/blob/master/splitting_exploration.ipynb
效率
由於 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 個區塊中出售 100 ETH,而 Charlie 下訂單在接下來的 200 個區塊中出售 200 ETH。兩個訂單都以每個區塊 1 ETH 的速度賣出。
假設在接下來的 150 個塊中沒有人與 TWAMM 交互,此時會發生新的外部交互。在 Bob 和 Charlie 下訂單後的前 100 個區塊中,他們的訂單彙集到一個共同訂單中,每個區塊出售 2 ETH。 然而對於之後的 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 是一名礦工、與某個礦工達成交易或使用 Flashbots 之類的服務,是可能做到的。
三明治攻擊和虛擬訂單
乍一看,虛擬訂單似乎特別容易受到三明治攻擊,因爲每個人都知道它們會來。
但是,由於它們在**區塊之間執行,因此它們得以圓滿。想要夾住 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 參考實現。
Jupyter 筆記 演示了具有多個對沖長期訂單和套利者的 TWAMM 的價格行爲走勢。
爲簡單起見,這個 Python 版本沒有實現像訂單池或真正的惰性求值之類的 gas 優化方案。
結尾
我們已經勾勒出 TWAMM 的設計草案,但我們的工作纔剛剛開始。
如果您有興趣解決這一問題或類似問題,可以發送電子郵件至 dave@paradigm.xyz 或在 Twitter 上私信我,或通過 ideas@uniswap.org 聯繫 Uniswap 實驗室。
鳴謝: 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
暢行幣圈交易全攻略,專家駐群實戰交流
▌立即加入鉅亨買幣實戰交流 LINE 社群(點此入群)
不管是新手發問,還是老手交流,只要你想參與虛擬貨幣現貨交易、合約跟單、合約網格、量化交易、理財產品的投資,都歡迎入群討論學習!
- 加入鉅亨買幣LINE官方帳號索取免費課程
- 掌握全球財經資訊點我下載APP
文章標籤
上一篇
下一篇