Solana生態AMM調研:高流動性背後的底層代碼

在 Web3 行業的現狀中,與 DeFi 有關的產品佔據了絕對的市場。而在這其中,AMM(Automated Market Maker,自動做市商)作爲關鍵的一環,是 Web3 金融方面變化的有力推動者。本文將分別介紹 Solana 生態中的幾個重要的 AMM 實現,希望能夠對 LP(Liquidity Provider,流動性提供者)如何選擇自己的投資策略提供一些幫助。

CPMM

CPMM (Constant Product Market Maker) 作爲最基本的 AMM 實現,在許多產品中有實現。這裏用 Raydium 推出的基於恆定乘積的 AMM 來舉例。恆定乘積即池子中兩種代幣的供應量具有固定乘積:X * Y = k。

對於流動性提供者來說,當任何人往池子中添加流動性(添加資產)時,CPMM 會自動給錢包地址創建關聯帳戶並發放 LP Token(每個代幣對都有屬於自己的 LP Token Mint),此 LP Token 用於證明該錢包地址持有某個池子的份額,並且將會在流動性提供者提款時銷毀相應的 Token。

CPMM 的鏈上程序使用 Anchor 開發,程序代碼在 能夠找到。下面我們來簡單確認下它是如何實現恆定乘積的。

首先,用戶在使用 Raydium 的 CPMM 交換代幣時,將會觸發 swap 相關指令。

舉例來說(僅爲了說明情況,本文不對任何 Token 負責):當用戶想使用 USDC 交換 TRUMP 時,可以通過 TRUMP-USDC 這個池子進行交換。

| | | | | --- | --- | --- | | 池子 | TRUMP | USDC | | 7XzVsjqTebULfkUofTDH5gDdZDmxacPmPuTfHa1n9kuh | 6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v |

例如我們查看這個交易,簡單起見,讓我們忽略交易中的其他指令,只查看 Raydium 部分。找到 Raydium CPMM: swapBaseInput:

Solana生態AMM調研:高流動性背後的底層代碼

在 Input Accounts 中,我們能看到輸入代幣爲 USDC,輸出代幣爲 TRUMP。在 Solana 生態的 AMM 中,LP Pair 可以簡單的通過 Token Account 來表示,而不需要創建一個新的合約程序並部署(例如以太坊中常用的工廠合約)。在交易發生時,直接與 Raydium 的 CPMM Program 來交互,Solana 程序將通過傳入的池子地址、代幣地址等來修改相應的 Token Account 的狀態,來進行 swap 操作。

例如上述的 swapBaseInput 指令,代碼在這裏能夠找到。經過一系列前置檢查後,具體能夠換到多少目標代幣,通過 ConstantProductCurve.swap_base_input_without_fees中進行了計算:

Solana生態AMM調研:高流動性背後的底層代碼

其中用到的公式爲:

Solana生態AMM調研:高流動性背後的底層代碼

即 TokenX 和 TokenY 在總量各自變化後,其乘積應保持不便。公式左邊爲變化後的乘積,右邊爲變化前的乘積。

Solana生態AMM調研:高流動性背後的底層代碼

上述算式通過數學轉換後,能得到 Δy(即我們能夠換到的 y 代幣的數量)的轉換公式:

Solana生態AMM調研:高流動性背後的底層代碼

也就是代碼中的 delta_y = (delta_x * y) / (x + delta_x)部分。注意這裏的計算並不包含手續費,其已經在 swap_base_input的前置邏輯中扣除過了。

CLMM

CLMM (Concentrated Liquidity Market Maker) 同樣是 Raydium 推出的 AMM,它類似於 Uniswap V3,每個代幣對同樣有多個費用層級,能夠分別創建一個對應層級的池子。

由於 CLMM 的實現參考了 Uniswap V3,所以在學習它時,很多概念和實現方式都可以參考 Uniswap 的實現。它也繼承了 Uniswap 的概念例如 tick、多費率層級、集中流動性等。更多內容可以在 ZAN 推出的 DEX 開發課程中找到:DEX Development Practice - Uniswap Code Analysis - How Uniswap works - ZAN

但是需要注意,與 CPMM 類似的,由於 Solana 鏈的特性,Raydium CLMM 不需要對每個池子單獨部署一個合約,所以也沒有工廠合約的概念。這一點不同於 Uniswap。

CLMM 允許流動性提供者在注入資金時選定一個價格範圍,資金將僅在所選範圍內分布:

Solana生態AMM調研:高流動性背後的底層代碼

對於集中流動性池來說,代幣分別分別存在於當前價格的兩側,上圖所選的價格範圍包含了當前價格,所以會將資金分別分配給池子中的兩種代幣。

我們也可以只注入某一種代幣,來提供所謂的單邊流動性(如下圖)。這有些類似於傳統金融模式中的限價單,LP 的資金只有在代幣價格達到某種範圍時才會被利用,不過這種模式要考慮的風險點也更多。

Solana生態AMM調研:高流動性背後的底層代碼

一般來說,對於價格波動小的池子,LP 傾向於選擇小一點的範圍;反之對於那些價格波動非常劇烈的池子,則傾向於選擇大一點的範圍。這樣的目的是爲了盡量不讓當前價格脫離自己所選擇的價格範圍,造成太多無常損失。

需要注意,集中流動性雖然可以讓 LP 的資金利用率更高,但也對 LP 的金融意識提出了更高的要求,LP 需要更積極的管理自己的流動性。如果 LP 應對不力,那麼鏈上頻繁的波動將很容易導致 LP 遭受嚴重的無常損失。

DLMM

DLMM (Dynamic Liquidity Market Maker) 是 Meteora 推出的 AMM 產品,它也屬於 Uniswap V3 的一種,和上文提到的 CLMM 也非常相似,DLMM 也允許 LP 將自己的資金集中在當前價格附近的一定範圍內。不過 DLMM 在具體實現時有些不同,並且提供了一些特色功能。

DLMM 中提供了 Bin 的概念,池子將從基礎價格開始,每隔一小段 Bin step 作爲一個 Bin 存在。如果交易發生在同一個 Bin 內,那麼交易者將享受到零滑點。這可以極大增加交易量和交易成功率,理論上 LP 能夠收獲更多的交易費用。

Solana生態AMM調研:高流動性背後的底層代碼

與 CLMM 相似的,池子中的代幣同樣在當前價格的兩側分布,一個代幣僅需要提供單邊流動性。但根據 Bin 的概念,當前激活的 Bin(表明了當前的交換價格)則擁有兩種代幣。即:

  • 當前激活的 Bin:其中存在兩種代幣,在當前 Bin 中交換代幣將按照固定價格進行,並且 0 滑點;
  • 其他 Bin:在當前激活的 Bin 兩側分布,分別僅存在單個代幣。

在當前激活的 Bin 中的代幣量發生變化時,如果某一方代幣減少爲 0,則 DLMM 會將當前激活的 Bin,根據池子中的實際情況,設定爲其左側或右側的下一個 Bin。依此來推動池子中的價格變化。

在 LP 提供流動性時,DLMM 提供了3 中策略,分別是 Spot、Curve 和 Bid Ask

  • 其中 Spot 最普世,基本上所有的流動性池都比較合適,算是一種最簡單的流動性策略。
  • Curve 則更適合那些價格變化非常小的池子,例如穩定幣對。這些池子中的價格波動非常小,就像它的形狀所透露的那樣,把 LP 的資金集中分布在此區間內,能夠最大限度的喫滿交易費。
  • Bid Ask 則更適合那些價格波動非常大的池子。人們總是傾向於在這種池子中進行更多的套利交易,價格可能很難集中在某一小段範圍內。這種策略通常需要 LP 頻繁調整自己的倉位,來避免價格脫離自己所設定的資金範圍。由於涉及到對市場的判斷力,這通常並不容易。

總結

AMM 作爲 Web3 金融領域的重要組成部分,通過其獨特的機制和創新,推動去中心化金融的普及和發展。隨着技術的不斷進步和生態系統的完善,AMM 有望在未來發揮更大的作用,進一步改變傳統金融的格局。

查看原文
本頁面內容僅供參考,非招攬或要約,也不提供投資、稅務或法律諮詢。詳見聲明了解更多風險披露。
  • 讚賞
  • 留言
  • 分享
留言
0/400
暫無留言
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)