【技术详解】 UniswapV2Pair:Solidity 双代币 AMM 流动性池实现原理(附完整源码)?。

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值