在区块链中,如果想要实现代币去中心化交易 DEX 的话,那么流动性池子(Liquid Pool,LP)是比不可少的,通过流动性池子,用户可以非常方便进行代币的交换。

如今随着 WEB3 技术的不断发展,流动性池子也有了新的模式。本文以 Solana 上的几个比较大的池子项目,介绍现在流行的几种流动性方案。

CLMM

CLMM(Concentrated Liquidity Market Maker,集中流动性做市商)允许流动性提供者选择提供流动性的区间。和恒定乘积的 AMM 不同,后者的流动性是作用于 0 - ∞ 的,这不可避免地会导致流动性的利用率不高,比如 USDC/USDT 的比例可能就一直维持在 1 附近,所以在全范围上提供流动性是有问题的。

CLMM 的设计可以让资金在一定范围内进行做市的工作,这就是经济学的一个大目标——如何分配有限的资源。

相比于传统的 AMM 方案,CLMM 的一个风险在于,代币的价格可能会超出我们设定的价格区间,这就会导致我们的池子不再能够产生交易手续费,并且我们的池子就只剩下了一种代币,这种情况下我们会造成损失,这部分损失叫做无常损失,我们在后续会介绍。

目前 Solana 上比较出名的流动性项目 Raydium 用的就是 CLMM 流动性方案,用户可以在提供流动性的同时进行价格区间的设置。

这种流动性延伸出来一种链上挂单的实现方案,我们知道当价格超出流动性区间的时候,池子里面就只会剩下一种代币,那么我们就可以设置一个单边的池子,并且设置一个很小的价格区间,这样在价格变动的时候,就会自动转换为目标代币。

举一个例子,比如我现在想要用 170U 的成本,在 SOL 价格为 160U 的时候买入,现在的 SOL 价格可能是 180U,这时候我就可以设置一个流动性区间为 159.99 到 160.01 的池子,全部是 USDT。当 SOL 的价格跌到 159.98 的时候,我们的池子这个时候将全部转换为 SOL,达到了挂单购买的效果。

需要注意的是,我们需要在价格跌到 159.98 之后,尽快撤掉池子,不然等价格反弹,我们的 SOL 将又会被换成 USDT。

DLMM

DLMM(Dynamic Liquidity Market Maker,动态流动性做市商) 是 Meteora 提供的一种流动性方案,它同样支持在不同的价格区间设置流动性,并且在同一个价格区间内的交易不会产生滑点。

DLMM 仓位价格

与 AMM 不同,DLMM 流动性分布在具有固定宽度和固定价格的离散箱体(Bin)中。每个箱体代表一个价格点,DLMM 的代币兑换规则是k * x + y = L,L 就是这个箱体里面的代币数量,兑换的曲线如下所示[1]

举个例子,当一个箱体里面的 SOL 数量为 10,USDC 的数量为 1800,那么这条曲线的表达式为180 * x + y = 1980。那么在这个 Bin 的价格区间内,我用 1 SOL 就可以换到1800 / 10 = 180的 USDC。

这种直线的兑换方式在一个很小的价格区间内,是可以近似传统 AMM 的。

DLMM 策略

DLMM 提供了丰富的流动性注入方式,我们可以自定义池子的分布情况。目前官方总结有以下 4 种典型的 DLMM 流动性策略[2]

Curve

Curve 曲线非常适合在偏平静的市场中使用,价格的变化主要集中在了某一个值附近。但是一旦偏离了中心值,无常损失风险就会增加,这时候就需要重新分配流动性。

Bid Ask

Bid Ask 曲线非常适合波动的市场,可以理解为低买高卖。当然,在价格偏离之后,也是需要重新分配流动性。

Spot-Concentrated

Spot 会把流动性平均的集中在几个仓位之间,这种方式是非常适合稳定币对的场景,可以最大化资金的使用效率,但同时它的无常损失最高,需要密切关注价格的变化。

Spot-Spread & Spot Wide

这两种方式是均匀分配流动性的基础方案,每一个 Bin 能分到的资金是一致的,区别在于 Bin 的数量。Bin 数量太多,资金的利用效率不高,Bin 太少,无常损失的风险就会增加,需要关注价格的变动以及资金利用效率的情况。

无常损失

在之前的内容中我们经常会提到一个概念叫无常损失(Impermanent Loss,IL),这个损失是我们创建流动性的一种风险,如果你真实地在池子中注入过流动性,那么你会发现一段时间之后,自己的资产会有一定的损失。那这种损失是怎么来的呢。

举一个例子,假如目前有一个TOKEN/USDC的流动性池子,我们注入了 100U 价值的 1 个 TOKEN 和 100U 价值的 100 个 USDC 组成了这个池子。过了一段时间,TOKEN 的价值翻倍,达到了 200U,假设我们没有注入流动性,那么我们的资产将会是 200U 的 TOKEN 加上 100U 的 USDC,为 300U。但是我们添加了流动性,这将导致我们最后在池子里面有更少的 Token 和更多的 USDC,来维持池子价值的稳定

根据恒等式x * y = k,代币数量的乘积恒定,计算可以得到 TOKEN 的数量为 0.707 个左右,USDC 为 141.2 个左右,那么总价值为 282.6U,损失了近 18U 的价值。

所以,在价值偏离的时候,就会产生无常损失,并且价格偏离的越大,无常损失也会变大。但是,只要价格回归到原始的价格,这个损失就会消失,这也是无常损失的名称由来。

由此可见,流动性最好的注入时机是在在震荡行情中,单边上涨或下跌都会有风险。

【1】:DLMM Program,https://docs.meteora.ag/product-overview/meteora-liquidity-pools/dlmm-overview/dlmm-program

【2】:Strategies & Use Cases,https://docs.meteora.ag/product-overview/meteora-liquidity-pools/dlmm-overview/strategies-and-use-cases