阿凡達(dá)泰山眾籌(Avata)開(kāi)發(fā)功能版,阿凡達(dá)泰山眾籌(Avata)系統(tǒng)開(kāi)發(fā)技術(shù)分析及源碼
New retail is a new retail model in which enterprises,relying on the Internet,upgrade and transform the production,circulation and sales process of goods by using advanced technology such as big data and artificial intelligence,and then reshape the business structure and ecosystem,and deeply integrate online services,offline experience and modern logistics.
function removeLiquidityETHWithPermit(//WithPermit,移除時(shí),其中一個(gè)返回eth
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax,uint8 v,bytes32 r,bytes32 s
)external virtual override returns(uint amountToken,uint amountETH){
/*
獲取到pair,調(diào)用pair的permit(內(nèi)部實(shí)際就是授權(quán)給路由),
*/
address pair=UniswapV2Library.pairFor(factory,token,WETH);
uint value=approveMax?uint(-1):liquidity;模式及功能I35方案7O98開(kāi)發(fā)O7I8
IUniswapV2Pair(pair).permit(msg.sender,address(this),value,deadline,v,r,s);
//最終還是調(diào)用上面的removeLiquidityETH方法!
(amountToken,amountETH)=removeLiquidityETH(token,liquidity,amountTokenMin,amountETHMin,to,deadline);
}
//****REMOVE LIQUIDITY(supporting fee-on-transfer tokens)****
//移除流動(dòng)性(需要先授權(quán)),支持轉(zhuǎn)賬會(huì)扣手續(xù)費(fèi)的代幣s
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
)public virtual override ensure(deadline)returns(uint amountETH){
//實(shí)際還是調(diào)用removeLiquidity,傳入的是weth,
(,amountETH)=removeLiquidity(
token,
WETH,
liquidity,
amountTokenMin,//實(shí)際就是這兩個(gè)值,填很小,就可以成功
amountETHMin,//實(shí)際就是這兩個(gè)值,填很小,就可以成功
address(this),
deadline
);詳情及分析:MrsFu123
//removeLiquidity返回的第一個(gè)參數(shù)是代幣數(shù)量,由于代幣轉(zhuǎn)賬會(huì)扣手續(xù)費(fèi),所以,實(shí)際到達(dá)路由的代幣數(shù)量并沒(méi)有這么多!直接取余額轉(zhuǎn)出
TransferHelper.safeTransfer(token,to,IERC20(token).balanceOf(address(this)));//如果轉(zhuǎn)賬扣兩次手續(xù)費(fèi)..這里相當(dāng)于扣兩次,pair->router,router->to
//將weth轉(zhuǎn)換eth,再轉(zhuǎn)給to,
IWETH(WETH).withdraw(amountETH);
TransferHelper.safeTransferETH(to,amountETH);
}
//同上,先驗(yàn)簽授權(quán),再調(diào)用上面的removeLiquidityETHSupportingFeeOnTransferTokens
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax,uint8 v,bytes32 r,bytes32 s
)external virtual override returns(uint amountETH){
address pair=UniswapV2Library.pairFor(factory,token,WETH);
uint value=approveMax?uint(-1):liquidity;
IUniswapV2Pair(pair).permit(msg.sender,address(this),value,deadline,v,r,s);
amountETH=removeLiquidityETHSupportingFeeOnTransferTokens(
token,liquidity,amountTokenMin,amountETHMin,to,deadline
);
}