UniswapV2Pair 核心原理
UniswapV2Pair 是自动化做市商(AMM)的核心合约,管理两种代币的流动性池,通过恒定乘积公式(x * y = k)实现价格发现。流动性提供者(LP)存入等值的两种代币获得 LP 代币,交易者支付手续费进行代币兑换。
恒定乘积公式与价格计算
交易过程中,代币储备量变化必须满足 $(x + \Delta x)(y - \Delta y) = k$,其中 $\Delta y$ 为实际输出量。输出量计算需扣除 0.3% 手续费:
$$\Delta y = \frac{y \cdot \Delta x \cdot 997}{(x \cdot 1000) + (\Delta x \cdot 997)}$$
流动性铸造与销毁
流动性铸造时,根据存入代币数量与当前储备比例计算 LP 代币数量。首次存款采用 $\sqrt{x \cdot y}$ 作为基准:
function mint(address to) external returns (uint liquidity) {
(uint112 reserve0, uint112 reserve1,) = getReserves();
uint balance0 = IERC20(token0).balanceOf(address(this));
uint balance1 = IERC20(token1).balanceOf(address(this));
uint amount0 = balance0 - reserve0;
uint amount1 = balance1 - reserve1;
uint _totalSupply = totalSupply;
if (_totalSupply == 0) {
liquidity = Math.sqrt(amount

被折叠的 条评论
为什么被折叠?



