5 使用合约卖出地址持有的代币兑换成WETH并留在合约内

我想部署一个交易合约,需要实现从地址调用卖出函数,就会把代币转移到合约并卖出代币兑换成WETH,WETH保留在合约内即可。如果使用Uniswap要怎么实现以及到底要授权哪些地址(我都授权了都不行),最好是Pair Swap、Universal Router Execute这种方式,谢谢。如果有用,另有谢意。

  1. 个人试过下面这种UniswapV2交易方法,地址已授权合约使用代币,还是会出现错误 execution reverted: TransferHelper: TRANSFER_FROM_FAILED。
  2. 不知道Pair Swap具体要怎么写才合理,我借鉴这里的代码后提示错误:execution reverted: UniswapV2: K
  3. Universal Router在合约内实现不知道要怎么处理好。
    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
        );
    }
请先 登录 后评论

4 个回答

用户_19991
请先 登录 后评论
Alex
请先 登录 后评论
张文阁
请先 登录 后评论
NPC.李括
请先 登录 后评论
  • 4 关注
  • 0 收藏,1194 浏览
  • Alex 提出于 2024-04-27 23:58