UniswapV2Pair,薄荷功能,流动性是如何创建的,对流动性的比例增加


function mint(address to) external lock returns (uint liquidity) {

}

上述功能的实现使得流动性被添加到地址中,但是流动性只是根据储备和代币余额的差异而产生的,它将如何根据发送方添加的流动性按比例创建流动性,

我错过了什么,如果用户总是调用薄荷函数,他会不会得到免费的LP令牌添加到地址,因为我们可以看到薄荷函数是外部的而不是内部的

我错过了什么,如果用户总是调用薄荷函数,他会不会得到免费的LP令牌添加到地址,因为我们可以看到薄荷函数是外部的而不是内部的

你错过了函数体和它里面所有的逻辑和检查。

如果用户总是调用薄荷函数,他会不会获得免费的LP令牌添加到地址

mint()函数本身只生成LP令牌,以弥补实际LP余额和预期LP余额之间的差异。如果实际余额和预期余额之间没有差异,则不会生成LP令牌。

一种常见的做法是使用路由器函数addLiquidity(),它向Pair合约发送令牌,然后调用mint()函数——两者都作为一个交易的一部分,因此没有办法提前执行此操作。

如果在不调用mint()函数的情况下有底层令牌发送到Pair合约,那么任何人都可以调用该函数自由地声明代表该差异的LP令牌。但是只有一次,因为LP铸币厂将差异归零。

如果用户总是调用mint函数,他会不会得到免费的LP令牌添加到地址中,我们可以看到薄荷功能是外部而非内部

当用户增加流动性时,调用mint()

然而,流动性只是根据的差异而产生的代币的储备和余额将如何创造流动性发件人增加的流动资金的比例,

因为主要方程是基于流动性的增加与LP代币份额的增加成正比。这是有道理的,因为增加流动性对价格没有影响,所以如果你增加更多的流动性,你应该收到与你之前收到的成比例的LP代币

假设你有T股,你想把流动性从L0增加到L1。你还能获得多少股份?

L1 / L0 = (T + mintAmount)/T

我们需要找到mintAmount

(L1/L0) * T = T + mintAmount // leave mintAmount alone
((L1/L0)*T) - T = mintAmount // multiply T with L0/L0
((L1/L0)*T) - (T*L0)/L0 = mintAmount

最后

mintAmount = ((L1-L0)/L0) * T