Description:
ERC20 token contract with Mintable, Burnable, Pausable, Factory capabilities. Standard implementation for fungible tokens on Ethereum.
Blockchain: Ethereum
Source Code: View Code On The Blockchain
Solidity Source Code:
{{
"language": "Solidity",
"sources": {
"MockTether.sol": {
"content": "// SPDX-License-Identifier: MIT\r
pragma solidity ^0.8.19;\r
\r
contract MockTether {\r
string public constant name = "Mock Tether USD";\r
string public constant symbol = "mUSDT";\r
uint8 public constant decimals = 6;\r
\r
uint256 public totalSupply;\r
address public owner;\r
bool public paused;\r
\r
mapping(address => uint256) private balances;\r
mapping(address => mapping(address => uint256)) private allowances;\r
mapping(address => bool) public blacklist;\r
\r
event Transfer(address indexed from, address indexed to, uint256 value);\r
event Approval(address indexed holder, address indexed spender, uint256 value);\r
event Paused(address indexed account);\r
event Unpaused(address indexed account);\r
event BlacklistStatus(address indexed account, bool banned);\r
\r
modifier onlyOwner() {\r
require(msg.sender == owner, "MockTether: only owner");\r
_;\r
}\r
\r
modifier whenNotPaused() {\r
require(!paused, "MockTether: paused");\r
_;\r
}\r
\r
constructor() {\r
owner = msg.sender;\r
uint256 initialSupply = 1_000_000 * 10 ** decimals;\r
totalSupply = initialSupply;\r
balances[msg.sender] = initialSupply;\r
emit Transfer(address(0), msg.sender, initialSupply);\r
}\r
\r
function balanceOf(address account) public view returns (uint256) {\r
return balances[account];\r
}\r
\r
function allowance(address holder, address spender) external view returns (uint256) {\r
return allowances[holder][spender];\r
}\r
\r
function approve(address spender, uint256 value) external whenNotPaused returns (bool) {\r
_requireNotBlacklisted(msg.sender);\r
_requireNotBlacklisted(spender);\r
allowances[msg.sender][spender] = value;\r
emit Approval(msg.sender, spender, value);\r
return true;\r
}\r
\r
function transfer(address to, uint256 value) external whenNotPaused returns (bool) {\r
_transfer(msg.sender, to, value);\r
return true;\r
}\r
\r
function transferFrom(address from, address to, uint256 value) external whenNotPaused returns (bool) {\r
uint256 currentAllowance = allowances[from][msg.sender];\r
require(currentAllowance >= value, "MockTether: allowance exceeded");\r
allowances[from][msg.sender] = currentAllowance - value;\r
_transfer(from, to, value);\r
return true;\r
}\r
\r
function mint(address to, uint256 value) external onlyOwner {\r
_requireNotBlacklisted(to);\r
totalSupply += value;\r
balances[to] += value;\r
emit Transfer(address(0), to, value);\r
}\r
\r
function burn(uint256 value) external {\r
_requireNotBlacklisted(msg.sender);\r
require(balances[msg.sender] >= value, "MockTether: insufficient balance");\r
balances[msg.sender] -= value;\r
totalSupply -= value;\r
emit Transfer(msg.sender, address(0), value);\r
}\r
\r
function setBlacklist(address account, bool status) external onlyOwner {\r
blacklist[account] = status;\r
emit BlacklistStatus(account, status);\r
}\r
\r
function pause() external onlyOwner {\r
paused = true;\r
emit Paused(msg.sender);\r
}\r
\r
function unpause() external onlyOwner {\r
paused = false;\r
emit Unpaused(msg.sender);\r
}\r
\r
function _transfer(address from, address to, uint256 value) private {\r
require(to != address(0), "MockTether: zero address");\r
_requireNotBlacklisted(from);\r
_requireNotBlacklisted(to);\r
require(balances[from] >= value, "MockTether: insufficient balance");\r
\r
balances[from] -= value;\r
balances[to] += value;\r
emit Transfer(from, to, value);\r
}\r
\r
function _requireNotBlacklisted(address account) private view {\r
require(!blacklist[account], "MockTether: blacklisted");\r
}\r
}\r
"
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"remappings": []
}
}}
Submitted on: 2025-10-31 14:04:16
Comments
Log in to comment.
No comments yet.