// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; /** * @title TestUSDT * @dev 测试网专用 USDT 代币,任何人都可以免费 mint * * 部署步骤: * 1. 使用 Remix IDE (https://remix.ethereum.org) * 2. 连接 MetaMask 到 BSC Testnet (Chain ID: 97) 或 KAVA Testnet (Chain ID: 2221) * 3. 部署此合约 * 4. 调用 mint() 函数给自己铸造代币 */ contract TestUSDT is ERC20, Ownable { uint8 private _decimals; constructor() ERC20("Test USDT", "USDT") Ownable(msg.sender) { _decimals = 6; // USDT 标准是 6 位小数 // 初始铸造 1,000,000 USDT 给部署者 _mint(msg.sender, 1_000_000 * 10 ** _decimals); } function decimals() public view virtual override returns (uint8) { return _decimals; } /** * @dev 任何人都可以给自己 mint 代币 (仅限测试网使用!) * @param amount 铸造数量 (注意: 需要乘以 10^6, 例如 1000 USDT = 1000000000) */ function mint(uint256 amount) external { _mint(msg.sender, amount); } /** * @dev 便捷函数: 直接输入 USDT 数量,自动处理精度 * @param usdtAmount USDT 数量 (例如输入 1000 就是 1000 USDT) */ function mintUsdt(uint256 usdtAmount) external { _mint(msg.sender, usdtAmount * 10 ** _decimals); } /** * @dev Owner 可以给任意地址 mint */ function mintTo(address to, uint256 amount) external onlyOwner { _mint(to, amount); } /** * @dev 水龙头功能: 一次性领取 10000 USDT */ function faucet() external { _mint(msg.sender, 10_000 * 10 ** _decimals); } }