MockTether

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": []
  }
}}

Tags:
ERC20, Token, Mintable, Burnable, Pausable, Factory|addr:0x2cbede00d5829a7f4ed9cf973a59d07513caf1d8|verified:true|block:23697359|tx:0xde80b00cd820c626abe9c55d353fba7815b0c6b6f4fa91a02af3a4f953912bce|first_check:1761915855

Submitted on: 2025-10-31 14:04:16

Comments

Log in to comment.

No comments yet.