最近在做一個DeFi賽道的評估方法總結。在對一些案例進行研究後,不論是從影響力,還是從迭代的邏輯來看,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每一步都是在對自我的革新——降低借貸成本,優化用戶體驗,強化競爭意識,擁抱新興技術,這種迭代升級纔是一個好的協議能夠基業長青的根本。