rwadurian/backend/services/blockchain-service/contracts/TestUSDT.sol

60 lines
1.7 KiB
Solidity

// 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);
}
}