五分鐘讀懂 DODO 背后的 PMM 算法:一個通用性的流動性框架及多種用例

撰文:雷達熊,DODO 創始人

一個有效的市場包含巨量資訊,這些資訊承載了市場對價格的判斷,但是鏈上計算資源有限,要在鏈上實現一個高度靈活的市場,就好像要把大象塞進冰柜。

把大象塞冰柜這種事情并不罕見,互聯網歷史上已經有過幾次壯舉。例如圖像壓縮,音頻壓縮。

壓縮的本質是提取最重要的特征,拋棄不重要的細節資訊,

那么,一個市場最重要的特征是什么,是流動性。流動性可以表示為一張深度圖。

從下圖我們看到,深度圖可以抽象為兩個三角形,而描述這兩個三角形,只需要中間價和斜率即可,

我們盯住右邊的賣盤梯形深度,它的最大特點是,被買走的 Base Token 越多,價格越高。因此,這種線性深度可以表示為

其中 i 是 第一個參數 「mid price」,k 是第二個參數 「slope」。

B 表示當前的 Base Token 庫存,B0 表示初始 Base Token 庫存,(B0-B)/B0 用來表示有百分之多少的 BaseToken 被消耗掉了。

這一公式可以使得價格隨著 Base Token 被賣出的數量線性增長。

但是,線性真的是描述流動性最好的方法嗎?并不是,線性描述有兩個局限:

  1. 真正的市場,大部分流動性集中市場中間價附近,而線性描述并沒有反應這種不平衡的分布,
  2. 即使價格遠遠偏離市場中間價,也應該有流動性,而線性描述下的價格是有上下限的。

我們為價格曲線引入了非線性。在不擴充參數的前提下,使深度分布更符合市場規律,靈活度更高。

最簡單的非線性解決方案,就是使用乘法而非加法。

這個公式可以滿足隨著 B 的減小,P 不斷增大,直至無窮大,但是要怎么把斜率的影響加進去呢?

這就需要對 B0/B 這一項做改造了,B0/B≥1,我們用一個參數對其進行縮放,在保持此數值大于等于 1 的同時,可以控制它「大于 1 的程度」,

上式中,k 的取值范圍是 [0,1],決定了價格的斜率,

  • 當 k=0 時,價格完全不變
  • 當 k=1 時,價格斜率退化到上一個版本的公式
  • k 越大,價格變化越敏感,k 越小,價格變化越不敏感,

但是還有一個小問題,這里的 P 是邊際價格,對邊際價格的積分才是用戶需要支付的資產數量。上式中,B0/B 這項積分后出現了對數函數,這會使后續計算變得很復雜。為了避免這一麻煩,我們再進一步:

在 B0/B 外面加一個平方項,這樣積分后就變成了一個簡單的除法,

令人驚嘆的是,當 k=1 時,這條曲線正是 AMM 所定義的 bonding curve,這種巧合使我們相信,這是一套更加觸及市場本質的算法。

同理,對于左半邊的深度圖,我們用對稱的做法,將 base token 替換為 quote token,將乘法替換為除法:

我們將左右兩邊的深度圖結合起來,就得到了 PMM 算法的完全版本,整理一下:

PMM 算法是對 Orderbook 市場的高度壓縮,參數簡單,卻極度靈活。

這使得我們在冰柜如此狹小的空間內,擁有了堪比大象的能力。

下面我來列舉,通過調整參數和充提規則,這套算法可以實現哪些 use case。

Use Case 1 跟隨外部市場價格的主動做市

這一 use case 的應用場景是擁有巨大外部市場的主流幣,例如 ETH BTC 等

PMM 可以實現主動調整盤口價格,減少 IL,獲得比 AMM 更高的資金利用率,并且持有單幣種就能提供流動性

設置如下:

  • 將價格 i 設置為外部市場價格
  • 將 k 設置為小于 1 的數字
  • 允許任何人單邊充提

這一 Use Case 我們稱之為 DODO Classic Pool。

Use Case 2 輕資本需求的自動做市算法

這一 use case 應用于沒有主觀定價能力的長尾幣市場,將定價權完全交給 taker

通常來講,長尾幣都是新資產,在 AMM 框架下沒有足夠的賣盤流動性,因而導致其流動性長期匱乏

設置如下:

  • 將價格 i 設置成起始發行價
  • 任意設置 k
  • 第一筆充值可以以任意資產比例,且不改變市場價
  • 后續充值(或提現)必須按照當前資產比例同時操作兩種資產

這一 Use Case 我們稱之為 DODO Vending Machine。

Use Case 3 完全自由的做市算法

這一 use case 為那些雄心勃勃,想要大展拳腳的做市商準備。(做市商也可以是項目方或個人)

在此 use case 下,資金池的全部資金都歸做市商所有。所有參數都可以調整,做市商可以根據他的判斷為資產靈活定價,同時做市商可以任意充提單一幣種,而不影響市場價格,

例如:

  • 在 ETH=700USDT 附近做市,使用很小的 k 獲得非常有競爭力的流動性,并賺取大量手續費,當察覺到 ETH 有上漲預期時,撤出 ETH 庫存以減少單邊風險,但這一操作并不削弱買盤流動性。
  • 新資產發行項目方只提供代幣而不提供資金,在 1$ 開始銷售代幣,為了讓更多人以合理價格買到代幣,設置了較小的 k,使得代幣上漲溫和,隨后項目方發現需要使用資金,則可以直接提出資金池中的資產,而不損害賣盤流動性,即用戶仍然可以買到大量廉價代幣。

設置如下:

  • 只有做市商能充提,允許單幣種操作

這一 Use Case 我們稱之為 DODO Private Pool,

Use Case 4 流動性眾籌

我們可以將新資產發行分為兩階段:

  1. 不開啟現貨交易,所有參與發售的人都以相同的價格獲得代幣
  2. 以上一階段的結束價格開啟現貨交易,使用上一階段剩余的代幣和資產建立 DODO Vending Machine

這一 Use Case 我們稱之為 CrowdPooling,

Use Case 5 退化為 AMM

當滿足以下條件時,PPM 算法表現和 AMM 相同。

  • 設置 k=1
  • 必須按照當前價格比例同時充提兩種資產

這也意味著,AMM 是 PMM 的一種特殊情況。推導過程如下:

AMM 的價格公式是 xy = k,其中 k 是常數,x、y 則分別代表兩種代幣的數量。為了避免字母上的歧義,我們把 AMM 公式中的恒定乘積定義為Const,并將其改寫為 y=Const/x,

其中 y 代表 quote token 庫存,x 代表 base token 庫存,價格可以寫為對 y 求導(注意這里要加絕對值,因為價格是正數),

接下來回到 k=1 的 PMM 公式,我們可以將其寫成:

我們發現,PMM 價格公式的分子上為常數,分母為 base token 的庫存,只要令

AMM 的定價公式,與 PMM 的定價公式就一致了!

Use Case 6 穩定幣交易

設置如下:

  • i=1
  • k=0.001 (這個值越小,越接近穩定幣剛性兌換)

算法表現可以與 curve 相同,并且更靈活,可以比 curve 更接近剛性兌換,或更接近 AMM,

0 条回复 A文章作者 M管理員
    暫無討論,說說你的看法吧