在传统金融中,做市商(Market Maker)是指持续为特定资产对提供双向报价的专业机构。在 DeFi 中,自动做市商(AMM)用确定性算法替代了人工报价,用流动性池替代了订单簿。理解 AMM 的数学本质,是理解 DeFi 价格发现机制的前提。
9.2.1 恒定乘积公式:
Uniswap V2 的核心是一条极简的数学公式:
其中 是池中 Token A 的数量, 是 Token B 的数量, 是常数(每次交易前后 保持不变,手续费除外)。
交易推导:
Alice 用 的 Token A 换取 Token B。新池状态为:
求解 :
含手续费情况(Uniswap V2 收取 0.3%):
9.2.2 价格与滑点
瞬时价格:当前 Token A 对 Token B 的交换比率为:
执行价格(考虑滑点):
当 时,;当 较大时,滑点显著。
9.2.3 恒定和与恒定乘积混合:Curve 的稳定币 AMM
对于价格锚定资产(如 USDC/USDT/DAI),恒定乘积曲线会产生巨大滑点(因为 时池子位于曲线"平坦区"的远端)。Curve 引入混合曲线:
简化为双资产情况:
当 很大时,曲线近似为恒定和 (零滑点);当池子失衡时,曲线近似为恒定乘积(防止枯竭)。
graph TD
A[x+y=const 直线] --- B[混合曲线<br>低滑点+防枯竭]
B --- C[x*y=const 双曲线]
style B fill:#ccffcc
9.2.4 无常损失(Impermanent Loss)
流动性提供者(LP)面临的核心风险:外部价格变化导致 LP 资产价值低于单纯持有的价值。
设初始投入时价格为 ,之后外部价格变为 。
LP 提供的流动性强制池子维持 ,因此份额价值为:
单纯持有价值为:
无常损失比例:
当 (价格不变),;当 (价格涨 4 倍),。
// amm-constant-product.ts
// 纯内置:模拟恒定乘积 AMM 的交易、滑点和无常损失
class ConstantProductAMM {
x: number; // Token A reserve
y: number; // Token B reserve
k: number;
fee = 0.003;
constructor(x: number, y: number) { this.x = x; this.y = y; this.k = x * y; }
swapAforB(deltaX: number): { deltaY: number; priceBefore: number; priceAfter: number; slippage: number } {
const effectiveX = deltaX * (1 - this.fee);
const newX = this.x + effectiveX;
const newY = this.k / newX;
const deltaY = this.y - newY;
const priceBefore = this.y / this.x;
const priceAfter = newY / newX;
const slippage = (priceBefore - deltaY / deltaX) / priceBefore;
this.x = newX; this.y = newY; this.k = newX * newY;
return { deltaY, priceBefore, priceAfter, slippage };
}
addLiquidity(xAdd: number, yAdd: number): number {
// 按当前比例添加
const ratio = xAdd / this.x;
this.x += xAdd; this.y += yAdd; this.k = this.x * this.y;
return ratio; // LP token 比例
}
impermanentLoss(priceRatio: number): number {
const r = priceRatio;
return (2 * Math.sqrt(r) / (1 + r)) - 1; // 负值表示损失
}
}
const amm = new ConstantProductAMM(1000, 3000); // 1 WETH = 3 USDC
console.log(`初始价格: ${amm.y / amm.x} USDC/WETH`);
const swap = amm.swapAforB(10);
console.log(`换出 {(swap.slippage * 100).toFixed(2)}%`);
// 价格翻倍后的无常损失
console.log(`价格翻倍无常损失: ${(amm.impermanentLoss(2) * 100).toFixed(2)}%`);
console.log(`价格 4 倍无常损失: ${(amm.impermanentLoss(4) * 100).toFixed(2)}%`);
// 输出: 价格涨 4 倍时,LP 相对持有损失约 20%9.2.5 集中流动性:Uniswap V3 的
Uniswap V3 的核心改进:允许 LP 将流动性集中在特定价格区间,而非全价格域。这意味着同样的资本可以产生更高的费用收入,但也带来了:
- 价格区间外无流动性:当价格超出选定区间,LP 全部变为单一资产,不再赚取费用;
- NFT 化 LP 头寸:每个价格区间的流动性头寸是独一无二的,ERC-721 代币化;
- 刻度系统(Tick):价格空间按 的 0.01% 间隔离散化,每个刻度可独立提供流动性。
关键认知二:AMM 不是"自动化做市商"的简单翻译,而是用确定性算法替代主观报价的数学承诺。恒定乘积 的美妙之处在于:它无需预言机输入、无需订单簿撮合、无需信任任何报价者,但也因此引入了滑点和无常损失——这是为"无需许可+去中心化"付出的代价。
← 9.1 DeFi 可组合性 | 前往 → 9.3 稳定币机制
评论
0评论加载中…