本文將從起點梳理 Curve V1 和 Uniswap V3 的構造思考過程,兩者在構造過程中數學意義上的擦肩而過,以及是如何地又分道揚鑣通往不同的終點。本文源自 @observerdq 的 X 研究長文,由 BuidlerDAO 整理。
(前情提要:Curve穩定幣機制》一文了解 LLAMMA 具體是如何工作的? )
(背景補充:Uniswap V4 結合 UniswapX 能打造最好的DEX交易體驗? )
2019 年 Curve V1 在構造 AMM 公式時,推演過程中有一個中間形態的公式,而這個公式和一年多後 Uniswap V3 的基礎公式恰恰有著相同的結構(前者是後者的一種特殊形態)。
完全不同的思考路徑,出現了數學上的交點,妙哉。
本文將從起點梳理 Curve V1 和 Uniswap V3 的構造思考過程,兩者在構造過程中數學意義上的擦肩而過,以及是如何地又分道揚鑣通向不同的終點。
1. Curve V1 公式構建的思維路徑
2018 年底 Uniswap 的 xy = k 橫空出世,是為一次正規化革命。但在穩定幣交易對的場景下,缺陷顯著。Michael 抓住了此切入點,於 19 年底推出了全新 AMM Curve V1 。
新 AMM 公式構造過程的基礎之一仍然是 xy = k。後續將統一按照 Curve V1 白皮書的引數代號,寫為如下公式。
穩定幣交易對的價格多數時候只在 1:1 附近很小的區間浮動,只在 1:1 單一價格點提供流動性的公式便是 x+y = D,這是構造過程的另一基礎。
Michael 希望將兩個基礎公式揉合起來,又或者說在 xy = (D/2)² 的基礎之上,引入一些 x+y =D 的特性。
於是把兩個基礎公式「雜交」加到了一起,得到了一個揉合公式。
其中 x+y=D 的部分,配上了一個 A 引數,且額外在等號兩側都乘上了 D。乘以 D 的原因,是為了讓 A 引數去維度化(不論池子內是兩代幣、三代幣亦或更多,同樣的 A 值有同樣的效力),這裡不展開,也並非本次討論的重點。
重點在 A 引數。先說明一下,Curve V1 白皮書在揉合公式內使用的是希臘字母 Chi(長得很像 x ),而並非 A。為了書寫方便和閱讀體驗,我改用了 A ,並不會影響論述。
A 引數的作用,或許可以用黑灰白的色條來類比理解,90% 灰就很像黑了,而 10% 灰就更接近白。A 引數決定了最終的公式產物更像 x+y=D,還是更像 xy=(D/2)²。
從極限 A 的數值,可以更好理解這個揉合的過程。A = 0,揉合公式就變成了 xy=(D/2)²。A = 無窮大,揉合公式就變成了 x+y=D。於是 A 在其中,就是一種中間態,A 越大,就越像 x+y=D。這種揉合,通過圖形可以更加直觀地感受,有興趣可在 desmos² 中玩耍 A。
關於 Curve V1,講到這裡先停住,請大致記住這個揉合公式。然後我們接下去看一下 Uniswap V3 的情況。
2. Uniswap V3 公式構建的思維路徑
Uni V1/V2 的 xy = k 稱霸江湖後,因「流動性均勻地分佈在 0 至無窮大完整的價格域上」所帶來的不足之處日漸顯露,Curve V1 的推出更是直接精準地切走了穩定幣交易對這一重要的市場。
在設計 V3 時,Uniswap 團隊首先想構造出只在有限連續價格區間內提供流動性的公式,他們構造的起點仍然是 xy=k 。
想像一下,如果想實現一個效果,在 [Pa, Pb] 價格區間內(比如 [0.99, 1.01] 或是 [1500, 1700]),這個公式對交易的支援就和 Uni V1/V2 的 xy = k 一模一樣,但當價格超出 [Pa, Pb],就不再提供流動性了。
這種效果對應的公式如下:
若用圖來呈現,會十分清晰,就是把 xy=k 向左下方平移了一些位置。具體要移多少,由 Pa、Pb 決定。
這個公式實現的效果是,所有流動性都集中在 [Pa, Pb] 內,LP 存入一定數量的 X_token 和 Y_token,在 [Pa, Pb] 價格區間內提供了一些流動性。單就這個區域性的流動性效果,若要讓 Uni V2 的 LP 來達成,則需要 LP 去存入更多的 X_token 和 Y_token;多的程度取決於 Pa、Pb,可能需要多很多。
這個平移公式是 Uni V3 進一步構造的基礎公式,Uni V3 暫講到這。
延伸閱讀:iZUMi 創新 DL-AMM 自動做市商模型:基於 UniSwap V3 的改進
3. 奇妙的擦肩而過 – 兩種思維路徑的交點
將第 1 節中 Curve V1 的揉合公式做一些變換:
再和第 2 節中 Uni V3 的平移公式放在一起觀察,會發現兩者很像:
若再對 Uni V3 平移公式內的 Pa 和 Pb 做一些限定,令 Pb=1/Pa,也就是限定價格區間為類似 [0.5, 2] 或 [0.01, 100] 這樣的區間,滿足在 1:1 價格點兩側倍數意義上的對稱。
做了這個限定之後,可以說兩個公式就是完全一樣了:
兩個公式裡有著不同的引數表達,可以很輕鬆地推匯出兩組引數的關係。我們不妨以 Curve V1 揉合公式的引數 A 和 D 為 基礎,計算出 L 和 Pa,如下所示:
這些引數的意義和兩個協議各自構造的思維路徑有關,我們結合兩組引數的關係,再簡要地回顧一下兩種構造過程。
簡化起見,假設一個穩定幣交易對的池子,初始價格是 1:1。Curve V1 揉合公式中的 D 代表了初始 LP 投入了兩種穩定幣各 D/2 的數量。A 則代表了這個揉合公式趨近 x+y=D 的程度。
來到 Uni 這一側,我們再虛擬出一個 Uni V2 的穩定幣交易對池子,滿足以下公式:
也就是初始價 1:1 的 話,初始 LP 需投入兩種穩定幣各 D (2A+1)/2 這麼多的數量。
這時有一個 Uni V3 池子,希望實現的效果是,只在以下價格區間內提供流動性:
且在這個區間內的流動性效果就如同剛剛虛擬出的 Uni V2 池子那般。滿足這個效果的 Uni V3 池子所對應的公式恰恰就和前述的 Curve V1 揉合公式一模一樣了。
簡要概括的話,Curve V1 通過揉合所實現的效果,恰恰就相當於先虛擬出一個代幣儲備量大很多(多了 2A 倍)的 Uni V2 池子,然後在 [(2A/(2A+1))², ((2A+1)/2A)²] 價格區間實現了和這個 Uni V2 池子完全相同的流動性效果。
4. 分道揚鑣 – 兩種思維路徑的不同終點
Curve V1 揉合公式就是 Uni V3 平移公式的一個特殊形態。事實上,若在 Curve V1 揉合公式內再引入一個引數,x+y 的部分調整為 x+py,兩者就完全等價了,這裡不多展開。
Curve V1 在揉合公式的基礎上,Uni V3 在平移公式的基礎上,順著各自原本的思維路徑,繼續前行,分道揚鑣。
4.1 Curve V1:進一步的動態漸變揉合
Curve V1 揉合公式存在一個缺陷,只在有限價格區間內提供流動性,Michael 需要的是一個全價格區間都有流動性的公式。(至於為什麼有這個需求?或許全價格區間都有流動性是很自然的、更加完整健全的狀態,比如在對外提供 Oracle 的意義上。)
我們可以這麼來理解他進一步構造的思路:讓這個揉合的程度動態化。之前的揉合公式裡的 A 是一個常數,代表了統一的揉合程度。現在進一步地,當 x 偏離 D/2 越多(即 x 越小或越大時),或者說價格偏離 1:1 越多,讓揉合的程度更加偏向 xy = (D/2)²,x 或價格偏離到極限狀態時,就變成了單純的 xy=(D/2)²,這樣就實現了全價格區間都有流動性。
Michael 把 A 變成了 Axy/(D/2)²
這就可以實現上面所講的動態漸變效果。構造方式當然不僅限於這一種,我有種感覺 Michael 在這一步構造過程裡,並沒有對不同的動態漸變實現方式的差異做很深入的對比研究,或許只要能方便地實現全價格流動性就點到為止了。
終於,我們得到了 Curve V1 的最終形態公式如下:
4.2 Uni V3:放棄大一統單一公式,自由組合分段函式
Uni V3 平移公式最核心的內涵在於 [Pa, Pb] 這個價格區間。以這個平移公式作為基礎,很自然地,Uni V3 走向了一個方向;不同價格區間的流動性可以不同(如果不同價格區間的流動性相同,那就又回到 Uni V2 了)。
在這個大方向上,仍然有不同的設計分叉。一條分叉路,可以由協議定死一個不同價格區間的流動性分配規則,LP 們仍然是同質的,其實 Curve V1 可以看作是這一種型別(價格區間極限小)。
另一條分叉路,所有的決定權全部讓渡給 LP 們,LP 們各自獨立的決策共同決定了最終流動性在不同價格區間的分配方式。
Uni V3 選擇了後者,這個選擇極為關鍵,這讓整個市場博弈的元素極大地豐富了起來,價格判斷、波動率判斷、運氣成分等等都捲入了進來,使得流動性市場離充分競爭市場更近了一步。
從數學角度看 Uni V3 的進一步構造,乍一看,像是一種非常規的分段函式。不同的價格區間,對應著不同的 L 值,相應地就是不同的公式,比如以下一個極簡的示例:
事實上,以上可以轉化為標準的分段函式,即以 x 來定義子域,子函式為 y 和 x 的一個公式,本文不展開。
5. 結語
Curve V1 於 2019 年底推出,彼時其主要目的就是更好地支援穩定幣交易對、填補該市場空白。或許正是這決定了 Michael 的思維路徑,重點是以 1:1 價格點對稱的結構,並且流動性相對聚攏在 1:1 價格點附近。當 Michael 將 x+y=D 和 xy = (D/2)² 雜交推匯出了揉合公式時,在我看來最核心、最具開創性的工作已經完成,因為這個揉合公式已經滿足了上述的對稱、聚攏的特徵。而將揉合公式進一步改造成支援全價格區間流動性的公式,對 Michael 而言,或許只是略施小計,收尾工作而已。
Uni V3 更晚才推出,2021 年 3 月白皮書釋出。Uni 團隊已經看到了 Curve V1 的足夠長時間的執行情況。一群極聰明的人,回擊 Curve 的方法自然要升維。Uni 團隊直接打破了一個大前提,LP 們不再「大鍋飯」,可以不再統一地按照每個池子的單一固定公式去提供流動性。
Uni V3 在 Uni V1/V2 xy=k 的基礎上,構造出了只在特定價格區間提供流動性的一個基礎公式(即上文所說的平移公式)。Uni V3 要打破 LP「大鍋飯」的大前提,於是賦予了 LP 們以自由,自由地決定在什麼樣的價格區間(或是數個區間)提供流動性。LP 們每個個體獨立自由地決策,彙總到每個池子層面,也會形成一個公式(分段函式),只是這個公式的形狀是動態變化的,絕非之前的 AMM 的那種固定形狀模式(部分 AMM 可通過治理調整形狀,如 Curve V1 調整 A 引數)。
這種設計,不僅僅解決 Uni V2 在穩定幣交易對場景下的資金效率低的問題(回擊 Curve V1 ),更是在所有的交易對場景,引入了更加充分的競爭,提升了市場整體的資金效率水平。
從歷史背景、根本出發點的差異梳理了一遍之後,再來看我最初所感嘆的 Curve V1 揉合公式和 Uni V3 平移公式的相似性,又似乎不過是個不值一提的簡單數學巧合罷了。