一、流动性池基础概念:什么是AMM、恒定乘积公式、流动性池的运作原理

大家好,我是你们的老朋友。今天咱们来聊聊DeFi世界里最核心的基础设施——流动性池。

说实话,我刚入行那会儿,第一次看到AMM这个概念,脑子里全是问号。传统的交易所不都是买卖双方挂单撮合吗?怎么突然冒出来一个「池子」?后来亲手部署了几个池子,踩了不少坑,才算真正搞明白。

好,咱们直接进入正题。

1.1 传统订单簿 vs AMM:到底差在哪?

先说说传统交易所。你想想看,在股票市场里,你想买100股茅台,得有人愿意卖才行。这叫「订单簿模式」——买方和卖方各自报价,系统帮你撮合。

但AMM(自动化做市商)完全换了个思路。它不依赖买卖双方直接交易,而是靠一个「资金池」来提供流动性。说白了,就是大家把钱凑到一个池子里,你直接跟这个池子交易。

我个人觉得,AMM最大的贡献是让长尾资产也能有流动性。一些小众代币,在传统交易所可能挂单好几天都没人理你,但在AMM里,只要池子里有资金,你随时能交易。

核心区别一句话总结:
传统订单簿 = 人与人交易
AMM = 人与池子交易

1.2 恒定乘积公式:AMM的数学灵魂

AMM的核心公式长这样:

x * y = k

其中:

  • x = 池子里代币A的数量
  • y = 池子里代币B的数量
  • k = 一个常数(乘积不变)

这个公式是什么意思呢?我举个例子你就明白了。

假设有一个ETH/USDC池子,里面有10个ETH和20,000个USDC。那么:

x = 10 ETH
y = 20,000 USDC
k = 10 * 20,000 = 200,000

现在你想用USDC买ETH。你往池子里注入1,000 USDC,池子里的USDC变成21,000。因为k必须保持不变:

新的ETH数量 = k / 新的USDC数量
新的ETH数量 = 200,000 / 21,000 ≈ 9.5238 ETH

所以你拿到了:10 - 9.5238 = 0.4762 ETH

嗯,这里要注意:你买的越多,价格就越贵。这就是「滑点」的来源。

我的经验之谈:
我在做Uniswap V2的集成时,发现很多新手会忽略滑点设置。有一次一个朋友直接拿大额订单去砸一个小池子,结果滑点高达15%,亏惨了。所以记住:池子越深,滑点越小;交易量越大,滑点越大。

1.3 流动性池的运作原理:钱从哪来,到哪去?

流动性池的运作,其实就三个角色:

  1. 流动性提供者(LP)——往池子里存钱的人
  2. 交易者(Trader)——在池子里买卖的人
  3. 协议(Protocol)——管理池子的智能合约

咱们一步步拆解:

第一步:创建池子

任何人(或协议)都可以创建一个新的交易对。比如我想创建一个ETH/DAI池子,我往里面存入等值的ETH和DAI。这个比例决定了初始价格。

第二步:提供流动性

其他LP也可以往池子里加钱。但注意,你加钱的时候必须按当前比例加。比如池子里现在是1 ETH : 2,000 DAI,你存1 ETH就必须同时存2,000 DAI。

第三步:交易发生

交易者来买卖,池子里的资产比例发生变化,价格也随之变动。每次交易都会产生手续费(通常是0.3%),这些手续费会累积到池子里。

第四步:LP提取收益

LP可以随时撤回自己的资金,同时拿走累积的手续费。这就是LP的收益来源。

⚠️ 避坑指南:
我曾经犯过一个低级错误——在Uniswap V2里只存了单边资产。结果交易对不平衡,我的资金被套利者搬走了大半。记住:AMM要求双边等值存入,单边存入会触发无常损失。

1.4 一张图看懂流动性池

下面我用SVG画了一张流程图,帮你把整个逻辑串起来:

流动性池运作流程图 流动性提供者 (LP) 流动性池 交易者 (Trader) 存入资产 LP Token + 手续费 支付代币A 获得代币B 核心公式:x * y = k x = 代币A数量,y = 代币B数量,k = 常数 关键特性:价格随交易量自动调整 | 深度越大滑点越小 | 手续费归LP所有

1.5 几个你必须知道的关键点

概念 说明 我的建议
无常损失 当池内资产价格相对存入时发生变化,LP取出时的价值可能低于单纯持有 波动大的币对慎做LP,或者选择稳定币对
滑点 交易执行价格与预期价格之间的差异 大额交易一定要设置滑点容忍度,我一般设0.5%-1%
手续费 每笔交易收取0.3%(Uniswap标准),全部分给LP 这是LP的主要收入,但别只看手续费,要算无常损失
初始价格 由第一个LP存入的资产比例决定 创建池子时一定要算准比例,否则会被套利者盯上

1.6 一个简单的代码示例

下面是一个简化版的AMM合约核心逻辑,用Solidity写的。我当年第一次写这个的时候,忘了加滑点检查,结果被机器人薅了羊毛……

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SimpleAMM {
    // 池子状态
    uint256 public reserve0;  // 代币A数量
    uint256 public reserve1;  // 代币B数量
    
    // 核心交易函数
    function swap(uint256 amountIn, uint256 amountOutMin) external returns (uint256) {
        // 1. 计算新的k值
        uint256 newReserve0 = reserve0 + amountIn;
        uint256 newReserve1 = (reserve0 * reserve1) / newReserve0;
        
        // 2. 计算输出量
        uint256 amountOut = reserve1 - newReserve1;
        
        // 3. 滑点检查(我当年就是忘了这步)
        require(amountOut >= amountOutMin, "滑点过大");
        
        // 4. 更新状态
        reserve0 = newReserve0;
        reserve1 = newReserve1;
        
        return amountOut;
    }
}
💡 小提示:
实际生产环境中的AMM比这个复杂得多,还要考虑手续费、闪电贷、重入攻击等。但核心逻辑就是上面这几行——x * y = k,万变不离其宗。

1.7 总结一下

流动性池的本质,就是一个自动化的做市机器。它用数学公式代替了人工报价,用资金池代替了订单簿。

我个人觉得,理解AMM的关键就三点:

  • 公式:x * y = k,这是所有逻辑的根基
  • 角色:LP提供资金赚手续费,交易者支付手续费换资产
  • 风险:无常损失和滑点,这两个坑我踩过,希望你别踩

好了,第一章就到这里。记住,纸上得来终觉浅,绝知此事要躬行。找个测试网,亲手部署一个池子试试,比看十遍文章都管用。


专注资料整理