作者:Arrow
最近在做一個DeFi 賽道的評估方法總結。在對一些案例進行研究後,不論是從影響力,還是從迭代的邏輯來看,Uniswap 都是一個典型的代表,本文對Uniswap 進行全面複盤。
Uniswap 自V1 版本到V4 的迭代,以及UniswapX 協議的推出,其內在邏輯都是對DEX 交易的功能創新和機制優化。
V1 將AMM 初始實踐於加密領域,V2 減少ETH 風險敞口,推出更難被操縱的價格預言機,V3 透過集中流動性解決資本效率低下問題,V4 實施可客製化DEX,UniswapX 協議透過拍賣機制強化第三方聚合器的競爭性,從而實現對價格滑點的最佳化。
Uniswap 發展史
Uniswap 的地位和影響力無需贅述,根據Dune 的即時數據,Uniswap 至今仍舊是市佔率排名第一的DEX。
作為一個頭部的DEX,時間並不算長久,但是屢次迭代,我們來看看發展歷程:
2017 年6 月,Vitalik 發表文章On Path Independence;
2018 年11 月,Uniswap V1 發布:支援ETH 與ERC-20Token 之間進行交易;
2020 年3 月, Uniswap V2 發布:支援任兩種ERC-20Token 對進行交易;
2021 年5 月, Uniswap V3 發布:提高LP 資金利用率,提出聚合流動性概念;
2023 年6 月,Uniswap V4 推出:引進Hooks 合約客製化,防止價值外洩;
2023 年7 月,Uniswap X 推出:聚合鏈上鏈下流動性,MEV 保護。
Uniswap V1:對自動做市的嘗試
2017 年,Vitalik 在個人網頁中發布文章《On Path Independence》,其中首次在加密領域引入了自動做市商(AMM),這是一種不同於CEX 的交易方法。當然,這種方式在非加密界(如傳統金融界)早有過討論。
我們知道,在股票市場、期貨市場或現有的CEX 中,大多都以Order Book (掛單簿模式)進行交易。做市商(Market makers,如券商、中心化交易所)透過對買方買單和賣方賣單在價格相符的情況下進行撮合,從而達成買賣雙方的交易。
但是在去中心化的情況下卻遇到了問題,原因出自在DEX 去中心化環境下(任何人都可以參與創建市場),以訂單簿模式進行撮合交易很難提供相應的流動性,成交率和體驗感都相對較差,沒有足夠的流動性則很難媲美CEX 的操作效用。
而在Vitalik 的這篇文章中,加密市場引入了一個新穎的概念:Automatic Market Maker(自動化做市商)。在這個概念中,資產定價是透過定價演算法而完成,而不再透過傳統的訂單簿模式。
在AMM 模式中,不需要做市商報價或系統撮合,交易者可以直接利用池中流動性實現資產兌換。
TokenA 和TokenB 形成了恆定乘積的關係:tokenA_balance(p) *tokenB_balance(p)=K(K 不變)
這是一種流動性驅動的交易制度,這種模式稱為恆定積做市商(CPMM) 。在該種方法下可以透過定義tokenA 和tokenB 之間的任何(單調)關係並在任何時候計算其衍生品來給出價格,從而形成一個與路徑無關的做市商。
三個參與者:LP、交易者、套利者
在AMM 的做市機制中,並不存在類似訂單簿模式具體的交易對手方,資產的實際價值由恆定乘積的數學公式決定,一定程度上可以類比於交易對手為智能合約,即可實現資產的自動交易。
智能合約中需要有人提供流動性,流動性提供者就是LP(Liquidity Provider),LP 透過向該池子中的智能合約注入資產,為交易提供流動性,從而獲取交易費用收益。
在LP 搭建好初始的流動性池後,交易者就可以透過該池進行Token 的兌換,同時套利者會主動到來,透過在不同市場間的價格套利,維持資產價格與市場價格的一致。
在18 年11 月發布的Uniswap V1 中,所有資產都可以透過ETH 進行兌換。 ETH 與ERC-20Token 之間進行交易,任何人可以添加代幣與原生ETH 進行交易,ETH 就是實質上的資產交易中介。
如果我們想要交易,單一池中會發生什麼樣的變化呢?
假設一個ETH 現在價值100TokenA,一個ETH/TokenA 池由10 個ETH 和1000 個TokenA 組成。
此時10 個ETH 和1000 個TokenA 價值相同都是1000 美元,資產價值比例是1:1。
k=10 *1000=10000,在未添加更多流動性的情況下,這個乘積保持不變。
現在假設我要往池中賣掉5 個ETH,那應該是:
y=10000/(10+5)=666.67,池中的ETH 數量增加到15 個,而此時的USDC 數量變為666.67 個,所以我用5 個ETH 換取到了333.33 個TokenA,此時該池中的單一ETH 價格為666.67/15=44.44,即一個ETH 等於44.44 個TokenA。
當然,單一池中價格如果和其他交易市場有較大變化,套利者就會立刻蜂擁而至,直至吃掉價差。畢竟AMM 機制只能產生交易價格,但並不能發現市場價格,所以套利者的作用十分重要。
無常損失、LP Token、交易滑點
當所存代幣的價格比率與存入資金池時相比發生變化時,就會產生無常損失。變化越大,無常損失就越大。
我們現在作為LP,繼續舉例:
UniswapV1 核心公式:x∗y=k
現在我們作為流動性提供者,繼續往池中加入10 個ETH 和1000 個TokenA 作為初始的流動性,此時1 個ETH 等於100 個TokenA,兩者的資產數量恆定乘積為10*1000=10000( x*y=10000,x=100y)。
此時,如果1 個ETH 漲價為200 個TokenA,我們可以進行換算:x*y=10000,x=200y,從而算出x=7.071,y=1414.21。
此時的流動性池從一開始的10 個ETH 和1000 個TokenA 變成:7.071 個ETH 和1414.21 個TokenA。
發現問題了嗎?
此時如果我贖回所有的資產,到手變成了7.071 個ETH 和1414.21 個TokenA,用TokenA 計價實際價值是7.071*200+1414.21=2828.41,而如果以最開始的10 個ETH 和1000 個TokenA 計算,現在的價格應該是10*200+1000=3000TokenA。
這部分收益的差距(3000-2828.41=171.59TokenA)就是無常損失。
無常損失的發生是因為在去中心化交易所的自動做市商機制下,流動性提供者根據價格波動進行資金調整,導致其本金損失和錯失收益。
由於他們同時充當買賣雙方,當價格下跌時被迫增加持有的資產數量,而當價格上漲時被迫減少持有的資產數量,從而導致損失。
當然,你也可以透過選擇避險,透過開立對ETH 的空單/ 多單合約進行風險管理。
為了激勵用戶充當LP 提供流動性,並鼓勵其對價格波動性的承擔,LP Token 應運而生。這是對流動性提供者的獎勵,可以獲得每次交易的一定比例手續費(UniswapV1,交易者在交易中支付0.3% 的費用,由流動性提供者擁有)。同時也作為LP 的憑證,用以取回自己所添加的流動性。
還有一個概念是交易滑點,經常做DEX 交易的朋友絕對不會陌生。 AMM 作為一種流動性驅動的交易制度,其優美的恆定乘積等式是一條光滑的曲線,價格是時刻根據供需關係而變化的。
如果此時交易大量Token,滑點就會出現,你的預期價格和實際從池中獲得的價格之間具有一定的差額。也就是說,你想要的價格和成交價格會有差距。
Uniswap V2:適配,預言機、閃電貸
Uniswap V1 僅支援ERC-20/ETH 交易對之間進行交易,實質是在使用ETH 作為過渡貨幣中介進行ERC-20Token 間的兌換,雖然交易路徑簡單,對於LP 提供者來說形成了ETH 的風險敞口、無常損失和滑點風險。
在Uniswap V2 中,仍然是基於「恆定乘積做市商」機制,但V2 的升級帶來了效率的提升,其中包括:支援任意兩種ERC-20Token 對進行交易,這意味著可以創建任意的ERC20 -ERC20 對,而不需要再經過ETH 的過渡路徑配對。
這點就不再贅述,V2 的升級包含許多方面,還有兩個比較重要的點分別在於:改進價格預言機、實現閃電貸。
價格預言機Price Oracle 的改進
在Uniswap V1 的過程中,透過池中兩資產儲備金相除計算出來的價格,如果以此作為鏈上價格預言,並不安全,因為很容易就會被操縱。
這次V2 升級的目的之一是提升價格操縱的成本和難度。
在V1 中,假設有其他合約使用當前的ETH-DAI 價格來結算衍生品,操縱計算價格的攻擊者可以從ETH-DAI 對中買入ETH,以虛高的價格觸發衍生合約的結算,然後將ETH 賣回該對,將其交易回歸真實價格。在這種情況下,交易甚至可以以原子交易的方式進行,或由礦工控制區塊內的交易順序。
而在V2 中,為了測定市場價格平衡,價格每個區塊更新一次,代幣兌換價格在後一個區塊之前測定,也就是代幣市場價格以前一個區塊最後一筆交易為準。
在這次升級裡,也提供了一個新的價格預言資料:時間加權平均價格TWAP。在每個區塊開始時累積兩種資產的相對價格,允許Ethereum 上的其他合約在任意時間間隔內估計兩種資產的時間加權平均價格。
更具體的來說,在Uniswap V2 中,透過追蹤每個區塊開始時有人與合約互動時的價格累積總和來累積該價格。根據區塊時間戳,每個價格都會根據上一個區塊更新後的時間量進行加權。這意味著在任何給定時間( 被更新後) 的累積器價值,應該是合約歷史上每秒鐘的現貨價格之和。
預言機的使用者可以選擇何時開始和結束這個時期,攻擊者操縱TWAP 的成本會更高,價格相對來說不容易被操縱。
實現閃電貸
閃電貸是相對傳統金融的絕對創新,畢竟現實交易不像區塊鏈上可以回溯。
V2 中引入了Flash Swaps 閃電貸。使用者可以自由地向池中藉出資產,並在鏈上的其他地方使用它們,只在交易結束時(在同一個原子交易中進行支付)歸還資產並付出相應的利息,如果未能正常回款則回滾還原該交易。
實際上等於讓任何人可以閃電借出Uniswap 池中儲存的任何資產。在V1 中,並不允許使用者在支付資產之前接收和使用該資產,用A 資產購買B 資產時,需要先將A 資產發送到合約中才能獲得B 資產。
還有一些其他的更新點:包括Uniswap V2 調整了新的合約框架,使用簡單的二進制定點格式來編碼和處理價格(精度)、協議費用的更新、對所鑄成的池子份額支持元交易等。
Uniswap V3:資本效率的提升
背景:Uniswap V2 存在流動性問題。根據上文中對AMM 機制介紹,我們可以看出在V1、V2 時,池子的流動性實際上是分佈在【0,+∞】區域上的,也就是說,在V2 的池子中實質允許任何價格的交易發生(參考AMM 恆定乘積中的反函數光滑曲線)。
這乍看之下是件好事,交易的範圍很大,但實際上對於波動性不同的交易對,其價格區間並沒有這麼充足的需求,也就造成了在除部分交易區間外嚴重的流動性不足,資產利用率低。
可以想像的到,在遠離價格區間價格點上提供流動性是毫無意義而且浪費的,價格可能永遠不會達到那個點。
集中流動性(concentrated liquidity)
在這種情況下,為了提高資金流動性,Uniswap V3 引入了集中流動性(concentrated liquidity) 的概念。也就是:
流動性提供者(LP)可以自由的選擇在某個價格區間部分提供流動性,這樣做可以將流動性更好的提供在高資本效率的區間內運營,同時在應用上也可以對不同價格波動性的資產池進行不同的配置。
V3 中的每一個小的價格區間都可以理解為一個V2 在工作。在交易的過程中,價格會順著曲線進行平穩的移動,當價格達到V2 的某一段時,即達到了V3 的價格區間的區間點,那麼此時,價格點會滑動到下一個價格區間中。
理解了上面的這個概念,我們就可以來認識下新出現的名詞──V3 的核心就是Ticks。
Ticks,最小變動價位,是可以交易證券的最小增量金額。在V3 中,透過將【0,+∞】的價格範圍分成了無數個細粒度的Ticks,實現了每個區間上下界端點的限制。
透過對粒徑控制來聚合流動性,V3 裡整個價格區間由離散的、均勻分佈的Ticks 進行標定,每個Tick 有一個index 和對應的價格,每個Tick 都會擁有自己的流動性深度。
Uniswap V3 的數學原理上有改變,雖然和V2 的底層類似:
L=根號下xy
L 被稱為流動性數量,池子中的流動性是兩種Token 資產數量的組合。同樣的,兩種代幣數量乘積為K,但因為每個Tick 擁有的流動性深度並不相同,不同深度的等價定式不再相同。
關於數學原理就不再贅述,下方有Atis Elsts 針對V3 數學原理的一篇論文,有興趣的朋友可以自行閱讀。
Uniswap V2 中還是標準的0.3% 交易費,而在V3 中因為顆粒度的不同,提供了3 個不同的費用等級,分別是0.05%、0.3% 和1%。此時的LP 可以將資金效率集中在交易最頻繁的區間內以獲得最大的收益。
此外,V3 還基於V2 再次進行了預言機的整體優化,不再只存儲一個價格累積變量,而是存儲一組變量,可以將數據的使用期延長,降低了Gas 費用,節約成本。
Uniswap V4:自訂可自訂DEX
Uniswap V4 基於Uniswap V3 的集中流動性模型,讓任何人在Uniswap 上使用自訂功能部署新的集中流動性池,從而實現成為一個高效、可自訂的DEX 平台。
在V4 當中,核心點是鉤子(Hooks)合約,願景是允許任何人透過引入「鉤子」來做出這些權衡決策。
對於每個池,創建者可以定義一個「Hooks 合約」,該合約在調用的生命週期的關鍵點執行邏輯。這些Hooks 也可以管理池的交換費用以及向流動性提供者收取的提款費用。
鉤子Hooks & 自訂池Custom Pools
Hooks 是一組由第三方或Uniswap 官方開發的合約,在創建pool 的時候,pool 可以選擇綁定一個hook,之後在交易的特定階段,pool 都會自動調用與之綁定的hook 合約,該合約在呼叫生命週期的關鍵點實作邏輯。
換句話說,鉤子是在外部部署的合約,它在池執行的指定點執行一些開發者定義的邏輯。這些掛鉤允許整合者創建具有靈活和可自訂執行的集中流動性池。掛鉤可以修改池參數,或新增新的功能和功能性。
每個Uniswap 流動性池都有一個生命週期:在流動性池的生命週期中,會發生幾件事,包括:使用預設費用層建立池,流動性被增加、刪除或重新調整,使用者也可以交換代幣等。在Uniswap v3 中,這些生命週期事件是緊密耦合的,並以非常嚴格的順序執行。
但為了在Uniswap V4 中,為可自訂的流動性創造空間。 Hooks 合約為礦池部署者創造了一種代碼引入方法,從而實現在礦池生命週期的關鍵點上可以執行指定操作,這些關鍵點例如交換前後,或者在LP 頭寸更改前後。
總之,hooks 是用於自訂池、掉期、費用和LP 頭寸交互方式的插件,透過鉤子Hooks 合約,開發人員可以在Uniswap 協議的流動性和安全性之上進行創新,透過與v4 智能合約集成的鉤子創建定制的AMM 池。
可以透過鉤子合約實現的範例功能包括:
- 在一段時間透過TWAMM 執行大型訂單;
- 依指定價格成交的鏈上限價訂單;
- 隨波動率變化的動態費用;
- 流動性提供者的內部化MEV 分配機制;
- 實作中位數、截斷或其他自訂預言機。
Uniswap V4 的核心邏輯與V3 一樣,是不可升級的。由於每個礦池現在不僅由代幣和費用層定義,所以可以由此建構出各種各樣的礦池。並且雖然每個池都可以使用自己的鉤子智能合約,但鉤子會在創建池時被限制為確定的特定權限。
V4 中還有一些架構上的改變,例如Flash Accounting(瞬時帳戶)可以大幅降低Gas 費用。此功能被包含在EIP-1153 中引入「瞬態」存儲,會在坎昆升級(Ethereum Cancun)後實現。
此外V4 版本中還有用單例模式(將所有的池狀態保存在一個合約中)、閃電記帳(確保池的償付能力)、恢復對原生ETH 的支援、支援ERC-1155 代幣和增加治理機制等提升。
UniswapX:強化競爭
UniswapX 是一種新的無需許可、開源(GPL)、基於拍賣的協議,用於跨AMM 和其他流動性來源進行交易。
該協定將在多個方面改進交換功能,包括:
- 透過匯集流動性來源提高價格
- 無Gas 交換
- 防止MEV(最大萃取值)
- 交易失敗無費用
- 在未來幾個月內,UniswapX 將擴展到無Gas 跨鏈交換。
Next-level aggregation 下一代聚合
背景:鏈上交易不斷創新,導致流動性池激增,新的收費層級、L2 和更多的鏈上協議也會分散流動性。
方案:UniswapX 旨在透過將路由複雜性外包給第三方的開放網路來解決這個問題,這些第三方需要透過競爭使用AMM 池或他們自己的私人庫存等鏈上流動性競爭填充交易。
借助UniswapX,交易者將能夠使用Uniswap 介面,不需要擔心自己是否獲得最佳價格。交易者的交易將始終在鏈上透明地記錄和結算。所有訂單均由Uniswap 智慧訂單路由器支持,這迫使第三方與Uniswap V1、V2、V3 以及啟動後的V4 競爭。
實質上,UniswapX 是強化了競爭機制,透過對第三方的路由選擇,實現各個資產池價格滑點的最佳化。
此外,UniswapX 也推出了新嘗試:
無Gas 交易,失敗無需支付費用。交易者簽署一個獨特的鏈下訂單,然後由代表交易者支付Gas 的第三方在鏈上提交該訂單,第三方將Gas 費用計入交易價格,但可以透過批量執行多個訂單來競爭最佳價格以及降低交易成本。
MEV 保護,將原本透過套利交易取得的MEV 透過更優的價格回饋給交易者。 UniswapX 幫助用戶避免更明確的MEV 提取形式:使用第三方私有資產執行的訂單無法被「三明治攻擊」,第三方在將訂單路由到鏈上流動性池時會被激勵使用私有交易中繼。
即將推出的UniswapX 跨鏈版本,會將交換和橋接結合到一個無縫操作中。使用跨鏈UniswapX,交換者將能夠在幾秒鐘內在鏈之間交換,可以期待他們的進展。
Uniswap 主旋律:迭代
Uniswap 自V1 版本到V4 的迭代,以及UniswapX 協議的推出,其內在邏輯都是對DEX(AMM)的功能創新。
V1 將AMM 初始實踐於加密領域,V2 減少ETH 風險敞口,推出更難被操縱的價格預言機,V3 透過集中流動性解決資本效率低下問題,V4 實施可客製化DEX,UniswapX 協議透過拍賣機制強化第三方聚合器的競爭性,從而實現對價格滑點的最佳化。
我們可以看到,Uniswap 每一步都是在對自我的革新——降低借貸成本,優化用戶體驗,強化競爭意識,擁抱新興技術,這種迭代升級才是一個好的協議能夠基業長青的根本。
參考文獻:
①Uniswap v2 Core:https://uniswap.org/whitepaper.pdf
②Dan Robinson:https://www.desmos.com/calculator/7wbvkts2jf?lang=zh-CN
③Uniswap v3 Core:https://uniswap.org/whitepaper-v3.pdf
④Atis Elsts, LIQUIDITY MATH IN UNISWAP V3:https://atiselsts.github.io/pdfs/uniswap-v3-liquidity-math.pdf
⑤James Chen, What Is a Tick in Securities Trading and How Does It Work?:https://www.investopedia.com/terms/t/tick.asp
⑥Uniswap 解析:恆定乘積做市商模型:https://medium.com/taipei-ethereum-meetup/uniswap-explanation-constant-product-market-maker-model-in-vyper-dff80b8467a1
⑦Uniswap V3 Book:https://y1cunhui.github.io/uniswapV3-book-zh-cn/docs/introduction/uniswap-v3/
⑧三火,如何理解UniswapV3 白皮書:https://mp.weixin.qq.com/s/HjtGTmoiv5s5wKlDU0KUMw
⑨Hayden Adams, Our Vision for Uniswap v4:https://blog.uniswap.org/uniswap-v4
⑩What is Uniswap v4?:https://support.uniswap.org/hc/en-us/articles/16747656529933-What-is-Uniswap-v4-
①Hayden Adams,Introducing the UniswapX Protocol:https://blog.uniswap.org/uniswapx-protocol
②UniswapX whitepaper:https://uniswap.org/whitepaper-uniswapx.pdf