首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Uniswap交换

用Uniswap交换
EN

Stack Overflow用户
提问于 2022-03-04 13:14:21
回答 1查看 792关注 0票数 0

这是我的代码:

代码语言:javascript
复制
// SPDX-License-Identifier: UNLICENCED

pragma solidity <0.9.0;

interface UniswapInterface{
   function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface IERC20{
    function balanceOf(address account) external view returns (uint256);
    function decimals() external view returns (uint8);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}


contract swapContract{
    address public UniSwapRouterAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address public USDCAddress = 0x2fB298BDbeF468638AD6653FF8376575ea41e768;
    address public BTCAddress = 0x577D296678535e4903D59A4C929B718e1D575e0A;

    IERC20 USDC = IERC20(0x2fB298BDbeF468638AD6653FF8376575ea41e768);
    IERC20 BTC = IERC20(0x577D296678535e4903D59A4C929B718e1D575e0A);

    UniswapInterface UniSwapRouter = UniswapInterface(UniSwapRouterAddress);

    function approveUSDC() public{
        USDC.approve(UniSwapRouterAddress, 999**9);
    }
    function approveBTC() public{
        BTC.approve(UniSwapRouterAddress, 999**9);
    }

    function deposit(uint256 amount) public{
        require(amount > 0, "0 is not accepted!");
        uint256 allowance = USDC.allowance(msg.sender, address(this));
        require(allowance >= amount, "Check USDC allowance");
        USDC.transferFrom(msg.sender, address(this), amount);
    }
    
    function withdraw() public {
        USDC.transfer(msg.sender, USDC.balanceOf(address(this)));
    }

    function swapUSDC() public {
        address[] memory Path = new address[](2);
        Path[0] = USDCAddress;
        Path[1] = BTCAddress;
        UniSwapRouter.swapExactTokensForTokens(
            100000000,
            0,
            Path,
            address(this),
            block.timestamp + 240
        );
    }
}

我只想在上将1 USDC (其小数为8)交换为BTC。

我尝试了这么多的改变,比如增加deadline,改变amountInamountOutMin,但是没有收获。此外,Uniswap的资金池也有流动性。

错误只是说:

气体估计错误与以下信息(见下文)。事务执行可能会失败。你想强行发送吗?执行恢复

我已经检查了堆叠溢出的答案,但没有找到解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-08 11:52:14

我试着找出问题出在哪里,并意识到最有可能没有这样的池。

如果您转到Uniswap,您将看到池是为 V3创建的,并且您正在尝试使用路由器的V2地址。

解决这个问题的方法有两种,第一种是在V2中创建一个流动性池或通过V3进行交换。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71351988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档