Skip to main content

Command Palette

Search for a command to run...

DeFi 原理: Dex Swap 交易实现

Published
2 min read

Uniswap V2 交换

  • Swap 交换

通过 Swap 让精确数量的输入TokenA, 获得尽可能多的输出TokenB.

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


// 完成一个 Swap 合约, 调用 Uniswap 的 Router 合约接口实现 
contract ACswap {

    // 已经部署在 区块链上的 Router 地址: https://rinkeby.etherscan.io/address/0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
    address private constant UNISWAP_V2_ROUTER =
        0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    // 已经部署在 区块链上的 WETH 地址: 
    address private constant WETH = 0xc778417E063141139Fce010982780140Aa0cD5Ab;


    // 交易 Token A -> Token B
    function swap(
        address _tokenIn,
        address _tokenOut,
        uint _amountIn,
        uint _amountOutMin,
        address _to
    ) external {

        IERC20(_tokenIn).approve(address(this), _amountIn);

        // 1. 将 Token A 转入 此合约
        IERC20(_tokenIn).transferFrom(msg.sender, address(this), _amountIn);
        // 2. 授权 Token A 给 uniswap 的 router , 让其可以交换使用这部分Token A 
        IERC20(_tokenIn).approve(UNISWAP_V2_ROUTER, _amountIn);

        // 3. 交易路径设置:  最简单的路径 是  A -> WETH -> B 
        address[] memory path;
        if (_tokenIn == WETH || _tokenOut == WETH) {
            // 如果其中一个Token 是 WETH 那么, 只需要两段路由 
            path = new address[](2);
            path[0] = _tokenIn;
            path[1] = _tokenOut;

        } else {
            // 否则, 就是三段路由, 通过WETH转换 
            path = new address[](3);
            path[0] = _tokenIn;
            path[1] = WETH;
            path[2] = _tokenOut;
        }

        // 具体交易, 走 Uniswap Router 路由 
        IUniswapV2Router(UNISWAP_V2_ROUTER).swapExactTokensForTokens(
            _amountIn,
            _amountOutMin,  // 最小数量, 一般无要求 我们设置为 0 或 1
            path,
            _to,
            block.timestamp
        );
    }
}


// Router 接口 
interface IUniswapV2Router {

    // 主要交易函数 
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}


// ERC20 接口
interface IERC20 {
    function totalSupply() external view returns (uint);

    function balanceOf(address account) external view returns (uint);

    function transfer(address recipient, uint amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint);

    // 授权 Token 
    function approve(address spender, uint amount) external returns (bool);

    // 转移 Token 
    function transferFrom(
        address sender,
        address recipient,
        uint amount
    ) external returns (bool);
}

测试网部署

合约地址: https://rinkeby.etherscan.io/address/0x390bb6D696c587416B7b58B7D7d947E2694e11b5#code

测试用例:

  • WETH: 0xc778417E063141139Fce010982780140Aa0cD5Ab

  • ZRX: 0xddea378A6dDC8AfeC82C36E9b0078826bf9e68B6

  • DAI: 0x5592EC0cfb4dbc12D3aB100b257153436a1f0FEa

WETH -> DAI  

DAI -> ZRX
543 views

More from this blog

现在谁继续赚取数百万美元?正确答案:鲸鱼和内幕钱包。

现在谁继续赚取数百万美元?正确答案:鲸鱼和内幕钱包。 因为市场完全依赖于他们的操纵, 他们在任何游戏中,拥有绝对优势。 因为Axiom等工具具备监控功能,所以他们也会经常替换钱包: 💰钱包实时监控:https://axiom.trade/@0xcii 📱钱包监控:https://debot.ai?inviteCode=174709 分享一批上周的链上顶级内幕钱包🧵👇 我花了很多时间在链上筛选这些钱包! 请关注我 @AntCaveClub,点赞并转发——确保不再...

Apr 18, 20251 min read32

这个钱包昨天一笔交易用 0.9 Eth 赚了 8.4 Eth

几乎是交易市场的一条定律: 不管新闻是真假, 它带来的影响是真的就行。 昨天,我们知道 特朗普团队发币这一消息后, 第一时间关注市场上的新币。 发现了 ETH 链上的 $DJT 代币, 当时市值仅 $450K , 而现在达到了 $ 3.3 M 。 由于信息较少, 小入了一手, 然后发公告了,估计都跌麻木了没人上车,结果今天获利 8 倍。 另一个值得 关注的信息是特朗普最大主题代币 $TRUMP 今日突然下跌 -40% 我们通过链上数据观察, 这部分游资进入了 $DJT 而这个...

Jun 18, 20241 min read355

Ton 会成为真正的独角兽,因为它拥有

TON 才是独角兽。 正确使用TON 工具能给你带来财富。 SOL / ETH 的 memcoins 交易良好,但 TON 正在超越它。 以下 5 个基本工具可帮助你获得 10-100 倍收益 1⃣️ TON 的土壤 显然,TON 上的 memcoin 越来越受欢迎,TON 市值已超过 160 亿美元。 $NOT 上线币安,其涨幅众所周知。其他大量 TON memcoin 会增值 10-100 倍。让我们学习一下用于搜寻早期 TON 山寨币的主要工具…… 2⃣️ Defilla...

Jun 5, 20241 min read109

昨晚用 1 Eth 赚了 10 Eth ! 没想到睡觉起来就这样了。

昨天睡觉前搞了 $DEW 建仓时市值 500K 附近, 现在 6M 左右了, 一晚上 10 倍。 最近确实以太坊链上出金狗,千万市值天天都有。 也主要因为我睡着了, 睡之前和朋友讲了下,建议他上车,他说他在打球🏀 推荐 $DEW 的主要原因是, 我前几天不是推了 $PEW ,推的时候市值 $2 M 附近,结果 3天一路干到了 $94 M , 大概快有 50 倍... 当时跟朋友讲让他上点车, 他在追剧,忘上车了, 我说下次一定。 他推荐我看《庆余年》,说这个好看。 昨晚看到出...

Jun 1, 20241 min read324

专注 Web3 网络赚钱模式, 区块链实践教程与交流分享

127 posts

专注 Web3 网络赚钱模式, 实践教程与交流分享 !

加入社群 | 订阅Youtube