币圈小当家
2025-06-23 19:20:02
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:
在 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 (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 (Dynamic Liquidity Market Maker) 是 Meteora 推出的 AMM 产品,它也属于 Uniswap V3 的一种,和上文提到的 CLMM 也非常相似,DLMM 也允许 LP 将自己的资金集中在当前价格附近的一定范围内。不过 DLMM 在具体实现时有些不同,并且提供了一些特色功能。
DLMM 中提供了 Bin 的概念,池子将从基础价格开始,每隔一小段 Bin step 作为一个 Bin 存在。如果交易发生在同一个 Bin 内,那么交易者将享受到零滑点。这可以极大增加交易量和交易成功率,理论上 LP 能够收获更多的交易费用。
与 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 有望在未来发挥更大的作用,进一步改变传统金融的格局。
©版权声明
文章版权归作者所有,未经允许请勿转载,同时本站内容仅代表我们个人的观点,均不构成投资建议。
以太坊Layer2网络zkSync传闻将于6月中旬发币空投,代币总量210亿枚。项目方暗示不会严格审查女巫账号,引发社群讨论。女巫账号是指用多个虚假身份参与项目互动的行为,可能影响代币分配公平性。
Endless 资产标准构建了一套高效互操作的Web3资产管理框架,涵盖FT与NFT的统一规范,简化开发者工作并提升用户体验。通过标准化接口和开发工具支持,实现数字资产的便捷创建与管理,推动DeFi、游戏等多元场景发展。
英伟达财报表现亮眼,AI概念代币应声上涨。Nvidia最新季度营收260亿美元,远超预期,股价突破千元大关。受此利好影响,TAO代币涨幅近10%,ICP和RNDR也出现小幅波动。财报还透露Blackwell平台投产、主权AI业务扩张等新动向。
师爷陈分析地缘冲突对市场影响,指出当前行情处于震荡阶段,给出关键阻力位101600和支撑位99300,建议短线操作需谨慎。文章强调持续观察市场变化,避免被短期波动误导。
Animoca Brands旗下Mocaverse NFT项目宣布空投计划,为8,888个Moca NFT持有者分配10%代币总量。消息公布后NFT地板价突破4ETH,24小时涨幅近40%,市值达3.5万ETH。持有者预计可获得价值数千美元的空投奖励。
狗狗币市场波动加剧,交易量持续下滑,分析师预测可能跌至0.13美元支撑位。若价格企稳,或迎来反弹机会。当前行情显示多头防线告急,投资者需谨慎观察市场动向。