You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在智能合约中存储USDT代币并通过Uniswap与ETH互兑?

问题解答

一、智能合约能否存储USDT?

完全可以,但和ETH的存储逻辑有区别:

  • ETH是原生代币,合约地址的ETH余额可以直接通过address(this).balance查询;而USDT是ERC20标准代币,合约的USDT余额需要调用USDT合约的balanceOf(address(this))方法获取。
  • 用户给合约转USDT时,只需调用USDT合约的transfer或transferFrom方法,将USDT转到你的合约地址即可。如果合约需要转出USDT,要在合约里调用USDT的transfer方法,同时注意部分ERC20合约不返回bool值,需做兼容性处理。

二、能否通过Uniswap实现合约内ETH与USDT的双向兑换?

可以,集成Uniswap V2或V3的路由合约就能实现,以下是核心逻辑和代码示例:

ETH兑USDT

  • 调用Uniswap Router的swapExactETHForTokens方法,调用时要附带ETH(函数需用payable修饰),指定最小接收USDT数量、兑换路径(ETH对应WETH地址→USDT地址)、接收地址为合约自身,以及截止时间。
  • 代码片段:
// 需提前定义Uniswap Router、WETH、USDT的地址
address constant UNISWAP_ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // 以太坊主网V2 Router示例
address constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
address constant USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7;

function swapEthToUsdt(uint256 minUsdtOut) external payable {
    address[] memory path = new address[](2);
    path[0] = WETH;
    path[1] = USDT;

    ISwapRouter(UNISWAP_ROUTER).swapExactETHForTokens{value: msg.value}(
        minUsdtOut,
        path,
        address(this),
        block.timestamp + 3600 // 1小时内有效
    );
}

USDT兑ETH

  • 第一步要给Uniswap Router授权USDT的使用权限,调用USDT合约的approve方法;第二步调用Router的swapExactTokensForETH方法,指定兑换的USDT数量、最小接收ETH数量、兑换路径、接收地址和截止时间。
  • 代码片段:
function swapUsdtToEth(uint256 usdtAmount, uint256 minEthOut) external {
    // 授权Router使用合约中的USDT
    IERC20(USDT).approve(UNISWAP_ROUTER, usdtAmount);

    address[] memory path = new address[](2);
    path[0] = USDT;
    path[1] = WETH;

    ISwapRouter(UNISWAP_ROUTER).swapExactTokensForETH(
        usdtAmount,
        minEthOut,
        path,
        address(this),
        block.timestamp + 3600
    );
}

重要提示

  • 不同链的Uniswap Router、WETH、USDT地址不同,要根据部署链选择正确地址。
  • minUsdtOut和minEthOut要设置合理值,建议通过Uniswap Quoter合约预估兑换量后,设置98%-99%的阈值来防止滑点损失。
  • 要给合约添加ETH和USDT的提取逻辑,避免资金永久锁在合约里。

内容的提问来源于stack exchange,提问作者dj_tech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 00:15:42