UniswapV3

DeeLMind小于 1 分钟

UniswapV3

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol";

contract UniswapV3Example {
    ISwapRouter public swapRouter;

    // 设置交换手续费等级
    uint24 public constant poolFee = 3000; // 0.3% fee

    constructor(address _swapRouter) {
        swapRouter = ISwapRouter(_swapRouter);
    }

    // 用户通过此函数交换代币
    function swapExactInputSingle(
        address tokenIn,
        address tokenOut,
        uint256 amountIn,
        uint256 amountOutMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountOut) {
        // 允许合约转移用户的代币
        IERC20(tokenIn).transferFrom(msg.sender, address(this), amountIn);
        IERC20(tokenIn).approve(address(swapRouter), amountIn);

        // 设置交换参数
        ISwapRouter.ExactInputSingleParams memory params = ISwapRouter.ExactInputSingleParams({
            tokenIn: tokenIn,
            tokenOut: tokenOut,
            fee: poolFee,
            recipient: to,
            deadline: deadline,
            amountIn: amountIn,
            amountOutMinimum: amountOutMin,
            sqrtPriceLimitX96: 0 // 不限制价格
        });

        // 执行交换
        amountOut = swapRouter.exactInputSingle(params);
    }
}
上次编辑于:
贡献者: DeeLMind