本文将从以下几个角度对uniswap2进行进阶讲解EIP712签名permit函数是用来验证签名是否是传入地址发出的。具体的手续费feeto的手续费用户借贷uniswap2的手续费(X-0.003Xin)*(Y-0.003Yin)>=X.Y流动性token在市场中的价值举个例子,现有
本文将从以下几个角度对uniswap2进行进阶讲解
EIP712签名 permit函数是用来验证签名是否是传入地址发出的。
feeto的手续费
用户借贷uniswap2的手续费 (X-0.003Xin)*(Y-0.003Yin)>=X.Y
举个例子,现有tokenA1000个,tokenB3000个,LPtoken1000个,那么1个LP对应了tokenA1个+tokenB3个
x.y=k,k是一个定值
priceA(uniswap)=priceA(cex)/priceB(cex) priceA在uniswap上面的价格最终会回归到这个价格
price0Cumulative=(token1/token2)timestampNow price1Cumulative=(token2/token1)timestampNow 预言机这样使用: averagePrice = (price0CumulativeNow - price0CumulativePast) / (timestampNow - timestampPast)
如果其他预言机都是广泛搜集价格,但uniswap2只靠这种单一的方式搜集价格,就容易出现预言机价格操纵的问题
交易收代币手续费的预防机制
如果要表示100.64这个价格,
mint流动性token,是一直在增发的?而取出多少token是根据取的时候 已有LP/总LP,那增添流动性和取出流动性时总LP不一样怎么办? 其实单纯的增加流动性不会影响取出的值的,但是mintFee一直会增加总LP,所以取的时候LP会相对变多,你能取出的tokenA,tokenB会相对变少
比如现在有100个A和10个B,cex上面的价格是1个B换10个A,那么就会出现以下情况:你在uniswap2上面投入1个B,最后换回了9.1个A(不含手续费),此时自动机器人出现,立马将uniswap2的ABtoken的数量重新变成了100个和10个,现在过段时间想要还回去,结果发现换不回1个Btoken了
如果roter2合约中有某种token的存量(可能是项目方的空投,或者tokne的不定期发放),那么这些存量就会全部转给用户
<!--StartFragment-->
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) public virtual override ensure(deadline) returns (uint amountETH) {
(, amountETH) = removeLiquidity(
token,
WETH,
liquidity,
amountTokenMin,
amountETHMin,
address(this),
deadline
);
//这里将所有在roter2中的token全部转给某用户,包括项目方的空投。
TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
IWETH(WETH).withdraw(amountETH);
TransferHelper.safeTransferETH(to, amountETH);
}
<!--EndFragment-->
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!