自動做市商(AMMs)是匯集流動性並根據算法向交易員提供流動性的平台。

傳統的自動做市商採用的是恆定乘積模型,這導致其存在無常損失。流動性提供者在其中註入資金,其收益可能無法覆蓋無常損失。

Uniswap V3的推出,對V2進行了很多方面的改進。雖然依然存在無常損失,甚至在某些情況下,無常損失要比傳統的做市模型更大,但是由於其特性,我們可以更靈活的設計做市策略。上線以來,Uniswap V3在短短的幾個月裡就已經躍居去中心化交易所(DEX)交易量的榜首位置。

在Uniswap v1和v2使用的恆定乘積做市商公式中,只有池中的一小部分資產在給定的價格下可用。這是低效的,尤其是當資產的交易價格一直在某一特定價格附近震蕩的時候。傳統的AMM要求給定資金池中的所有流動性提供者遵守單一的公式,如果流動性提供者希望在不同的價格範圍內提供流動性,則可能導致流動性分散。

Uniswap V3的設計不依賴於任何關於代幣價格行為的共同假設。 Uniswap V3基於和早期版本相同的恆定乘積曲線,但提供了幾個重要的新功能:

- 集中流動性:在V3中,LP可以將流動性集中在一個任意的價格範圍內。這提高了資金池的資金利用率。 V2的流動性在所有價格上是均勻的。但是對於用戶來說,一般會在正態分佈的一個區間進行交易,不是在所有價格的交易量都相等,所以V3對V2版本做了一個改良:可以靈活選擇價格區間提供流動性(增強流動性)。

- Range Order範圍訂單:Uniswap V3 提供了全新的功能——範圍訂單,以補充現在的市價單,這個功能有點像是交易所裡限價單的升級版。可以設置一個高於或低於市場價格的區間,只需要質押單幣種,在市場價格達到設定的價格區間內,會不斷成交為另一幣種,在超出價格區間後全部置換成功,且賺取到價格區間內的手續費收入,適用於抄底或出貨。

- 靈活的費率: Swap的費率不再鎖定在0.3%,每個池的費率級別在初始化的時候設置,最初支持的費率等級為0.05%、0.3%、1%。通過Governance(提議和投票)可以添加其他的費率等級。

- 協議費治理: UNI治理在協議費佔⼿續費⽐例的設置⽅⾯,擁有更多的靈活性。

- 改進的價格預言機: Uniswap V3提供了一種查詢最近的價格累加器值的方法,從而避免了在計算TWAP的起始時間和結束時間檢查累加器值的需要。

- 流動性預言機:合約能夠顯示時間加權平均流動性的預言。

Uniswap V3的無常損失計算相比V2要復雜一些。

上圖是V2中的X token、Y token的變化曲線。這整條藍色的線代表所有用戶的流動性。

而在V3中,恆定乘積的公式為:

其中,L的平方是一個常數,相當於k。

[公式][公式]是虛擬出來的,是常數。

在V3中做市,相當於加了個槓桿,因為x餘額加了一個數[公式] ,y餘額也加了一個數[公式] ,所以會導致右邊的[公式]會比原來的k大。如果選的價格區間的兩個價格點比較近,槓桿就會比較高(因為[公式]更大),無常損失也會更大;如果兩個加個點比較遠,槓桿就會比較低。

下圖是在UniSwap V3的ETH-USDT資金池中註入流動性的截圖,可以看到如果我們設置的價格區間的最小值大於現在的價格,我們就只需要投入ETH。

相反,當我們設置的價格區間的最大值小於現在的價格,我們就只需要投入USDT。

Uniswap v3對Uniswap v2引入的時間加權平均價格(TWAP)預言機也進行了重大更改。

最重要的是,Uniswap v3消除了oracle用戶從外部跟踪累加器先前值的需要。

Uniswap v2要求用戶在想要計算TWAP的時候在其使用的時間段的開始和結束時檢查累加器值。而Uniswap v3將累加器檢查點引入核心,允許外部合約在最近一段時間內計算鏈上TWAP,而不存儲累加器值的檢查點。

另一個變化是,Uniswap v3沒有累加價格之和來讓用戶計算算術平均TWAP,而是log price之和,允許用戶計算幾何平均TWAP。

最後,Uniswap v3添加了一個流動性累加器,它與價格累加器一起跟踪,價格累加器的值為[公式]每秒鐘。這個流動性累加器對於希望在Uniswap v3之上實現流動性挖礦的外部合約非常有用。其他合約也可以使用它來判斷哪個池對應的交易對有最可靠的TWAP。

除了時間加權平均價格,Uniswap V3 還在每個區塊的開頭,跟踪累計了當前的值(在當前價格區間的虛擬流動性)。鏈上其它合約使⽤它,可以使價格預⾔機更加健壯(例如,在判斷使⽤哪種⼿續費率的流動池作為價格預⾔機時)。流動性累加器的值和價格累加器同時存儲。

在Uniswap V2中,每個流動池合約保存當前池中資產x和y。在V3中,合約可以被想像成在保存虛擬資產——x和y的值允許你用於描述合約的行為(在兩個相鄰tick之間),同樣遵循固定乘積公式。

然而,不用於保存虛擬資產,流動性合約保存兩個不同的值:liquidity(L)和sqrtPrice( [公式] )。這兩個值與虛擬資產x,y之間的關係,可以用下列公式表達:

反過來,這兩個值也可以被用於計算虛擬資產x,y,如下:

用L和[公式]非常便利,是因為每次交易只有其中一個會發生變化。在一個tick內交易時,價格(即[公式] )變化;當越過一個tick,或者鑄造或銷毀流動性時,流動性L發生變化。這避免瞭如果保存虛擬資產,可能產生的一些舍入誤差。

基於虛擬資產的流動性計算公式,類似於V2中,在獲得手續費之前,基於實際資產初始化流動性ERC20 token數量的公式。某種角度看,流動性可以被認為是虛擬流動性token。

或者,流動性可以被認為是每單位[公式]變化,所對應的token1資產(無論是實際還是虛擬資產)數量變化:

我們保存[公式] ,而不是P,使得交易計算時無需計算平方根。

全局狀態tick( [公式] )保存當前價格tick的下標,一個帶符號整型數,代表當前tick(更具體的說,是低於當前價格最近的一個tick)。這是一種優化(也是避免對數計算精度問題的一種方法),因為在任何時候,都可以基於當前的sqrtPrice計算當前tick。具體而言,在任何時間點,下列等式都是成立的:


當前,已經有部分平台推出了基於Uniswap V3的工具或自動做市策略。

Visor:

Visor是NFT的一個另類應用,與DeFi深度結合。

Visor NFT 金庫可以託管用戶的個人UniswapV3 的LP NFT。 Visor NFT 可以幫助用戶管理全部的LP 收益,可以聚合用戶的多礦池挖礦收益。

項目方可以利用Visor NFT,對用戶存入的LP 資產進行時間鎖定,也可以作為一種挖礦策略。 V3 的價格區間設置,讓各DeFi項目在分發代幣時可以指定價格區間來分發獎勵,比如高價值區間高獎勵。 Visor 將允許用戶對其LP NFT 進行質押,允許項目對這些特定價格區間的流動性提供者進行獎勵。相比之下,基於Chef 和SNX 的兩種最常見的獎勵項目模式將不兼容Uniswap LP NFT。

除了Visor,今年的7月3日,Yearn Finance創始人Andre Cronje也在推特上分享了一個在Uniswap上針對無常損失的現收現付制保護市場的原型,名為ProtectionMarket.sol。該合約指定了一個pERC20代幣,其功能是一個獨立的保險市場,用於保護無常損失,保費由供求關係決定。

相信未來會有更多基於Uniswap V3的合約或者平台出現,也會有更多的DEX轉向V3的模式。