我想部署一个交易合约,需要实现从地址调用卖出函数,就会把代币转移到合约并卖出代币兑换成WETH,WETH保留在合约内即可。如果使用Uniswap要怎么实现以及到底要授权哪些地址(我都授权了都不行),最好是Pair Swap、Universal Router Execute这种方式,谢谢。如果有用,另有谢意。
function sellTokensFromMsgSender(address[] calldata path, uint256 amount) public payable onlyAuthorized {
uint256 tradeAmount = amount;
address msgSender = _msgSender();
/// 卖出的时候没有设置卖出数量,如果有余额将全部卖出
if (tradeAmount == 0){
tradeAmount = IERC20(path[0]).balanceOf(msgSender);
}
// 把 token 从用户转移到合约
IERC20(path[0]).transferFrom(msgSender, address(this), tradeAmount);
/// approve
IERC20(path[0]).approve(SWAP_ROUTER_V2, tradeAmount);
swapRouterV2.swapExactTokensForTokensSupportingFeeOnTransferTokens(
tradeAmount,
0,
path,
address(this),
block.timestamp
);
}