Uniswap V2 添加/移除流动性和 liquidity token 的关系
添加流动性
账户添加流动性,就是提供一定数量的 token1 和 token2 ,将他们转移给 Uniswap V2 Pair ,同时 Uniswap V2 Pair 会铸造一定数量的 liquidity token 分配给添加流动性的账户,确保此账户对这些流动性的所有权。
主要是这一个合约函数:v2-core/contracts/UniswapV2Pair.sol at master · Uniswap/v2-core
添加 a 数量的 token1 和 b 数量的 token2 ,注意 token1 和 token2 的数量都包含小数。
例如:token1 为 2 ETH,那么 a = 2000000000000000000 Wei
,token2 也应在后面加 decimals 个 0。
如果是首次创建 pair,那么 Uniswap V2 会强制将 1000 的 liquidity token 分配给 address(0)
持有,以确保 pair 永远不会被销毁。那么添加流动性的账户会获得的 liquidity token 数量为:
如果不是首次创建 pair,也就是说 pair 已经存在,那么1000 的 liquidity token 便不会被强制分配,添加流动性的账户会获得全部的 liquidity token ,数量为:
liquidity token 符合 ERC20 标准,因此可以转移所有权。转移 liquidity token 所有权的目的一般是锁池或烧池。
移除流动性
在账户提供流动性后,liquidity pool 中的代币对数量会因为市场行为而变化,但是添加流动性的账户持有的 liquidity token 数量不会变化。那么账户移除流动性时,需要将 liquidity token 交给 Uniswap V2 Pair 销毁,同时 Uniswap V2 Pair 会按照比例将池中的代币对返还给流动性提供账户。
移除流动性的逻辑主要是这一个合约函数:v2-core/contracts/UniswapV2Pair.sol at master · Uniswap/v2-core
令:
t
: liquidity token 总铸造数量r
:要移除的 liquidity token 数量a1
:池子中 token1 的数量a2
:池子中 token2 的数量
那么,移除流动性后,账户会获得: