60 lines
1.7 KiB
Solidity
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);
|
|
}
|
|
}
|