Day 3 - 2025年08月04日
今日学习目标
学习内容
学习笔记
首次添加流动性的特殊处理
代码逻辑
if (_totalSupply == 0) {
liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);
_mint(address(0), MINIMUM_LIQUIDITY); // 永久锁定
} else {
liquidity = Math.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1);
}
为什么这样设计是公平的?
- 首次添加者的”损失”是必要的
防止除零错误:如果没有最小流动性,后续计算会出现问题
建立价格基准:为池子建立初始价格比例
永久锁定:MINIMUM_LIQUIDITY 被发送到 address(0)(黑洞地址),永远无法赎回
- 实际影响分析
假设:
用户A首次添加:1000 USDC + 1 ETH
MINIMUM_LIQUIDITY = 1000(实际是 10³)
用户A获得:
0
实际上用户A获得 0 LP 代币!
但是:
1000 个 LP 代币被永久锁定到黑洞地址
这确保了池子永远有最小流动性
- 后续添加者的公平性
当用户B添加相同比例:1000 USDC + 1 ETH
1000
- 关键理解
这不是”惩罚”首次添加者,而是建立池子的必要成本
首次添加者:承担建立池子的成本(永久锁定最小流动性)
后续添加者:享受已建立的池子,按比例获得 LP 代币
整体公平:所有人都按相同比例获得 LP 代币
- 实际应用中的考虑
首次添加者通常有动机:
可能是项目方或早期支持者
为了建立交易对而愿意承担这个成本
最小流动性很小:
MINIMUM_LIQUIDITY = 10³ 相对于实际流动性很小
影响微乎其微
这是 AMM 设计的必要机制:
确保池子永远有流动性
防止数学计算错误
总结
你的观察是对的,首次添加者确实会”损失”一些 LP 代币,但这是:
必要的技术成本:建立池子的基础
影响很小:MINIMUM_LIQUIDITY 通常很小
整体公平:后续所有人都按相同比例获得 LP 代币
这种设计确保了 AMM 的数学正确性和长期稳定性。
问题与思考
总结