币圈新手入门教程
用户
  • 文章
  • 用户

开启精彩搜索

首页> 资讯> 正文

Solana 生态 DEX 对比分析

在 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 开发,程序代码在 https://github.com/raydium-io/raydium-cp-swap 能够找到。下面我们来简单确认下它是如何实现恒定乘积的。

首先,用户在使用 Raydium 的 CPMM 交换代币时,将会触发 swap 相关指令。

举例来说(仅为了说明情况,本文不对任何 Token 负责):当用户想使用 USDC 交换 TRUMP 时,可以通过 TRUMP-USDC 这个池子进行交换。

池子

TRUMP

USDC

7XzVsjqTebULfkUofTDH5gDdZDmxacPmPuTfHa1n9kuh

6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN

EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v

例如我们查看这个交易,简单起见,让我们忽略交易中的其他指令,只查看 Raydium 部分。找到 Raydium CPMM: swapBaseInput:

1748257225664-dcffc389-8df7-45be-bdc1-0607f2de5b44.png

在 Input Accounts 中,我们能看到输入代币为 USDC,输出代币为 TRUMP。在 Solana 生态的 AMM 中,LP Pair 可以简单的通过 Token Account 来表示,而不需要创建一个新的合约程序并部署(例如以太坊中常用的工厂合约)。在交易发生时,直接与 Raydium 的 CPMM Program 来交互,Solana 程序将通过传入的池子地址、代币地址等来修改相应的 Token Account 的状态,来进行 swap 操作。

例如上述的 swapBaseInput 指令,代码在这里能够找到。经过一系列前置检查后,具体能够换到多少目标代币,通过 ConstantProductCurve.swap_base_input_without_fees中进行了计算:

qxKB5LerXwLtfCjllG6WgVByEZMTBqrQ50FWhYuO.png

其中用到的公式为:

JmA6hvDpNZQkLoFCxueuD3dqCe5ZNahDN3QPoqRc.png

即 TokenX 和 TokenY 在总量各自变化后,其乘积应保持不便。公式左边为变化后的乘积,右边为变化前的乘积。

1748311424502-d23e3643-eb90-41d4-84bc-e3808ccd5408.png

上述算式通过数学转换后,能得到 Δy(即我们能够换到的 y 代币的数量)的转换公式:

1748259276394-2d175e1f-c0b3-4741-bf88-f57e7e3dbb1f.png

也就是代码中的 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 允许流动性提供者在注入资金时选定一个价格范围,资金将仅在所选范围内分布:

1748313506390-1fb2050d-85e8-41a1-8772-66bb58b179a8.png

对于集中流动性池来说,代币分别分别存在于当前价格的两侧,上图所选的价格范围包含了当前价格,所以会将资金分别分配给池子中的两种代币。

我们也可以只注入某一种代币,来提供所谓的单边流动性(如下图)。这有些类似于传统金融模式中的限价单,LP 的资金只有在代币价格达到某种范围时才会被利用,不过这种模式要考虑的风险点也更多。

1748313583553-af0cc391-9a22-4dac-a631-ef922ca045fb.png

一般来说,对于价格波动小的池子,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 能够收获更多的交易费用。

1748326691677-9e48ae8b-5388-4be2-877d-9a935e471157.png

与 CLMM 相似的,池子中的代币同样在当前价格的两侧分布,一个代币仅需要提供单边流动性。但根据 Bin 的概念,当前激活的 Bin(表明了当前的交换价格)则拥有两种代币。即:

当前激活的 Bin:其中存在两种代币,在当前 Bin 中交换代币将按照固定价格进行,并且 0 滑点;

其他 Bin:在当前激活的 Bin 两侧分布,分别仅存在单个代币。

在当前激活的 Bin 中的代币量发生变化时,如果某一方代币减少为 0,则 DLMM 会将当前激活的 Bin,根据池子中的实际情况,设定为其左侧或右侧的下一个 Bin。依此来推动池子中的价格变化。

在 LP 提供流动性时,DLMM 提供了3 中策略,分别是 Spot、Curve 和 Bid Ask

1748327553584-0aafc3f2-54f7-499d-aedb-26de1a4e9436.png

其中 Spot 最普世,基本上所有的流动性池都比较合适,算是一种最简单的流动性策略。

Curve 则更适合那些价格变化非常小的池子,例如稳定币对。这些池子中的价格波动非常小,就像它的形状所透露的那样,把 LP 的资金集中分布在此区间内,能够最大限度的吃满交易费。

Bid Ask 则更适合那些价格波动非常大的池子。人们总是倾向于在这种池子中进行更多的套利交易,价格可能很难集中在某一小段范围内。这种策略通常需要 LP 频繁调整自己的仓位,来避免价格脱离自己所设定的资金范围。由于涉及到对市场的判断力,这通常并不容易。

总结

AMM 作为 Web3 金融领域的重要组成部分,通过其独特的机制和创新,推动去中心化金融的普及和发展。随着技术的不断进步和生态系统的完善,AMM 有望在未来发挥更大的作用,进一步改变传统金融的格局。

©版权声明

文章版权归作者所有,未经允许请勿转载,同时本站内容仅代表我们个人的观点,均不构成投资建议。

THE END

相关推荐

风险提示

防范以"虚拟货币""区块链"名义进行非法集资的风险

----银保监会等五部门

热门百科