swapExactETHForTokensSupportingFeeOnTransferTokens具体是啥意思

问题描述 1,最开始我一直用“swapExactETHForTokens”,直到有一天用这个方法报错,然后看别人用“swapExactETHForTokensSupportingFeeOnTransferTokens”,我也改了,然后就一直没问题,我对这个函数干嘛的其实并不懂,只是粗略的认为这个函数可能兼容性更好。 2,我现在有个需求,要通过合约去uniswap的V2合约买卖代币,代码如下,很简单,2个方法除了调用uniswap的方法不同,其余都一样,swap1报错(execution reverted,就这个,没有具体的错误内容),swap2没问题。 3,我用etherjs直接调用uniswap的swapExactETHForTokensSupportingFeeOnTransferTokens是没问题的,但是就是用合约去调用不行。 求大佬给解答下,谢谢

function swap1 (
        uint256 amountOutMin,
        address tokenAddress,
        uint deadline
    )public payable returns(uint256){
        address[] memory path;
        path=new address[](2);
        path[0]=WETH;
        path[1]=tokenAddress;
        address to=address(this);
        IUniswapV2Router(UNISWAP_V2_ROUTER).swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(amountOutMin,path,to,deadline);
        return 1;
    }

    function swap11 (
        uint256 amountOutMin,
        address tokenAddress,
        uint deadline
    )public payable returns(uint256){
        address[] memory path;
        path=new address[](2);
        path[0]=WETH;
        path[1]=tokenAddress;
        address to=address(this);
        IUniswapV2Router(UNISWAP_V2_ROUTER).swapExactETHForTokens{value: msg.value}(amountOutMin,path,to,deadline);
        return 1;
    }

https://goerli.etherscan.io/tx/0x5ec6dc7bd6b88b4759bb9db672c54efd6f6c3e70f5ac7b2aab042f22eb9c2416 这是swap1方法的结果,是失败的

https://goerli.etherscan.io/tx/0x1a2dce5f86aea944914c4bde30e1f530ff1338cd24b70b45c7d86ddc175421c8 这是swap2方法的结果,是成功的

请先 登录 后评论

最佳答案 2024-03-11 21:14

有一个 token 在转账的时候会扣手续费(例如 转 100 个, 目标地址收到 99 个), 这时就需要使用 SupportingFeeOnTransferTokens

请先 登录 后评论

其它 0 个回答

  • 1 关注
  • 0 收藏,1483 浏览
  • 小蘑菇云 提出于 2024-03-10 23:22