Gate動態廣場創作者星火招募計劃限時開啓!
無論你是加密KOL、項目方還是媒體,現在入駐發帖,即可搶先解鎖:Gate百萬流量曝光、超$10,000月度激勵獎金、深度生態合作資源等專屬福利!
參與攻略:
1️⃣ 立即填寫申請表:https://docs.google.com/forms/d/e/1FAIpQLSdStzGVu-fj14EM07-cVLYf0pk0axwMQbS-0tk1YK3Y6x5Vew/viewform?usp=header
2️⃣ 審核通過,開啓創作之旅!
🎁 活動獎金獎勵:
基礎創作激勵:參與動態內容挖礦,輕鬆發帖即可獲得高達10%手續費返佣!
$10,000/月內容激勵池:每週精選TOP 10優質內容,入選即獎勵 $50 USDT/篇!
爆款內容獎勵:閱讀量≥3萬可獲得額外 $50 USDT,閱讀量≥10萬可獲得額外 $100 USDT!
🎁 生態合作&流量曝光權益:
空投/AMA/白名單等項目合作優先權
參與Gate Labs早期項目評測,贏潛在種子輪獎勵
APP首頁推薦位、官方宣發、峯會嘉賓等資源加持
本活動長期開放,首批入駐動態廣場用戶權益優先!
立即申請,搶佔流量紅利,輕鬆發帖賺高額獎勵,項目方更有生態扶持等你來享!
Solana 生態 AMM 調研
撰文:ZAN
在 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 這個池子進行交換。
例如我們查看這個交易,簡單起見,讓我們忽略交易中的其他指令,只查看 Raydium 部分。找到 Raydium CPMM: swapBaseInput:
在 Input Accounts 中,我們能看到輸入代幣爲 USDC,輸出代幣爲 TRUMP。在 Solana 生態的 AMM 中,LP Pair 可以簡單的通過 Token Account 來表示,而不需要創建一個新的合約程序並部署(例如以太坊中常用的工廠合約)。在交易發生時,直接與 Raydium 的 CPMM Program 來交互,Solana 程序將通過傳入的池子地址、代幣地址等來修改相應的 Token Account 的狀態,來進行 swap 操作。
例如上述的 swapBaseInput 指令,代碼在這裏能夠找到。經過一系列前置檢查後,具體能夠換到多少目標代幣,通過 ConstantProductCurve.swap_base_input_without_fees 中進行了計算:
其中用到的公式爲:
即 TokenX 和 TokenY 在總量各自變化後,其乘積應保持不便。公式左邊爲變化後的乘積,右邊爲變化前的乘積。
上述算式通過數學轉換後,能得到 Δy(即我們能夠換到的 y 代幣的數量)的轉換公式:
也就是代碼中的 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 允許流動性提供者在注入資金時選定一個價格範圍,資金將僅在所選範圍內分布:
對於集中流動性池來說,代幣分別分別存在於當前價格的兩側,上圖所選的價格範圍包含了當前價格,所以會將資金分別分配給池子中的兩種代幣。
我們也可以只注入某一種代幣,來提供所謂的單邊流動性(如下圖)。這有些類似於傳統金融模式中的限價單,LP 的資金只有在代幣價格達到某種範圍時才會被利用,不過這種模式要考慮的風險點也更多。
一般來說,對於價格波動小的池子,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 能夠收獲更多的交易費用。
與 CLMM 相似的,池子中的代幣同樣在當前價格的兩側分布,一個代幣僅需要提供單邊流動性。但根據 Bin 的概念,當前激活的 Bin(表明了當前的交換價格)則擁有兩種代幣。即:
在當前激活的 Bin 中的代幣量發生變化時,如果某一方代幣減少爲 0,則 DLMM 會將當前激活的 Bin,根據池子中的實際情況,設定爲其左側或右側的下一個 Bin。依此來推動池子中的價格變化。
在 LP 提供流動性時,DLMM 提供了 3 中策略,分別是 Spot、Curve 和 Bid Ask
其中 Spot 最普世,基本上所有的流動性池都比較合適,算是一種最簡單的流動性策略。
Curve 則更適合那些價格變化非常小的池子,例如穩定幣對。這些池子中的價格波動非常小,就像它的形狀所透露的那樣,把 LP 的資金集中分布在此區間內,能夠最大限度的喫滿交易費。
Bid Ask 則更適合那些價格波動非常大的池子。人們總是傾向於在這種池子中進行更多的套利交易,價格可能很難集中在某一小段範圍內。這種策略通常需要 LP 頻繁調整自己的倉位,來避免價格脫離自己所設定的資金範圍。由於涉及到對市場的判斷力,這通常並不容易。
總結
AMM 作爲 Web3 金融領域的重要組成部分,通過其獨特的機制和創新,推動去中心化金融的普及和發展。隨着技術的不斷進步和生態系統的完善,AMM 有望在未來發揮更大的作用,進一步改變傳統金融的格局。