文件 1 的 1:tether.sol
pragma solidity ^0.8.0;
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
contract USDTToken is IERC20 {
string public constant name = "Tether USDT";
string public constant symbol = "USDT";
uint8 public constant decimals = 18;
uint256 private _totalSupply;
mapping(address => uint256) private _balances;
address public owner;
string private _tokenLogoURI = "ipfs://bafkreie5s5cr5y3ik7dhry72kzrcxsryc65vbkjhnlrraalt3jkqknox34";
modifier onlyOwner() {
require(msg.sender == owner, "Only owner can call this function");
_;
}
constructor(uint256 initialSupply) {
owner = msg.sender;
_mint(msg.sender, initialSupply);
}
function totalSupply() external view override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) external view override returns (uint256) {
return _balances[account];
}
function transfer(address recipient, uint256 amount) external override returns (bool) {
_transfer(msg.sender, recipient, amount);
return true;
}
function mint(address account, uint256 amount) external onlyOwner {
_mint(account, amount);
}
function burn(uint256 amount) external {
_burn(msg.sender, amount);
}
function setTokenLogoURI(string calldata newURI) external onlyOwner {
require(bytes(newURI).length > 0, "Invalid URI");
_tokenLogoURI = newURI;
}
function getTokenLogoURI() external view returns (string memory) {
return _tokenLogoURI;
}
function _transfer(address sender, address recipient, uint256 amount) internal {
require(sender != address(0), "Transfer from the zero address");
require(recipient != address(0), "Transfer to the zero address");
uint256 senderBalance = _balances[sender];
require(senderBalance >= amount, "Transfer amount exceeds balance");
_balances[sender] -= amount;
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
}
function _mint(address account, uint256 amount) internal {
require(account != address(0), "Mint to the zero address");
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
}
function _burn(address account, uint256 amount) internal {
require(account != address(0), "Burn from the zero address");
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "Burn amount exceeds balance");
_balances[account] -= amount;
_totalSupply -= amount;
emit Transfer(account, address(0), amount);
}
}
{
"compilationTarget": {
"contracts/tether.sol": "USDTToken"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}