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

无自有ERC20 Token时如何测试转账?测试网USDT获取方法

在Hardhat测试网把ETH换成USDT给测试账户的实操方案

前期准备

  • 给Hardhat配置好目标测试网(比如Sepolia),测试账户需持有足够测试ETH,可通过对应测试网水龙头领取
  • 提前确认测试网的关键合约地址:
    • 测试网USDT合约地址(例:Sepolia测试网可使用0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984,建议自行核实官方/DEX上的最新地址)
    • Uniswap V2 Router地址(Sepolia通用地址:0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
    • 测试网WETH地址(Sepolia地址:0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14)

具体实现(基于ethers.js,Hardhat原生支持)

核心逻辑是调用Uniswap这类去中心化交易所的合约,将测试账户的ETH兑换为USDT,兑换后的USDT会直接转入目标测试账户。以下是可直接复用的脚本/测试用例代码:

const { ethers } = require("hardhat");

async function swapEthToUsdt() {
  // 1. 获取测试账户签名实例
  const [signer] = await ethers.getSigners();
  // 如需转入其他测试账户,替换为目标账户地址即可
  const targetAccount = signer.address;

  // 2. 定义合约地址与所需ABI片段
  const routerAddr = "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D";
  const usdtAddr = "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984";
  const wethAddr = "0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14";

  // 仅需Router合约中swapExactETHForTokens函数的ABI
  const routerAbi = [
    "function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts)"
  ];

  // 初始化Router合约实例
  const router = new ethers.Contract(routerAddr, routerAbi, signer);

  // 3. 设置兑换参数
  const swapEthAmount = ethers.utils.parseEther("0.1"); // 兑换0.1个测试ETH
  const minUsdtOut = 0; // 测试环境可设0,生产环境需计算滑点设置合理值
  const swapPath = [wethAddr, usdtAddr]; // 兑换路径:ETH转WETH再换USDT
  const deadline = Math.floor(Date.now() / 1000) + 60 * 10; // 交易10分钟内有效

  // 4. 发起兑换交易
  const tx = await router.swapExactETHForTokens(
    minUsdtOut,
    swapPath,
    targetAccount,
    deadline,
    { value: swapEthAmount }
  );

  await tx.wait();
  console.log("兑换完成,交易哈希:", tx.hash);

  // 5. 验证目标账户USDT余额
  const usdtAbi = ["function balanceOf(address owner) external view returns (uint256)"];
  const usdtContract = new ethers.Contract(usdtAddr, usdtAbi, signer);
  const usdtBalance = await usdtContract.balanceOf(targetAccount);
  // USDT为6位小数,转换为可读格式
  console.log("目标测试账户USDT余额:", ethers.utils.formatUnits(usdtBalance, 6));
}

swapEthToUsdt().catch((err) => {
  console.error(err);
  process.exitCode = 1;
});

注意细节

  • 合约地址需匹配测试网:不同测试网的USDT、WETH、Router地址不同,务必提前核实准确
  • 滑点设置:测试环境设0无影响,但主网需根据实时价格计算最小接收量,避免因滑点导致交易失败
  • 预留gas费:兑换用的ETH需扣除支付gas的部分,不要将全部ETH用于兑换,否则交易无法发起
  • 流动性备选:若Uniswap测试网流动性不足,可替换为其他测试网DEX(如PancakeSwap测试网),逻辑一致,仅需更换Router地址

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:47:54