我想部署一个交易合约,需要实现从地址调用卖出函数,就会把代币转移到合约并卖出代币兑换成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
    );
}