MyToken

Description:

ERC20 token contract with Mintable, Burnable, Factory capabilities. Standard implementation for fungible tokens on Ethereum.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

{{
  "language": "Solidity",
  "sources": {
    "contracts/erc20.sol": {
      "content": "// SPDX-License-Identifier: MIT\r
pragma solidity ^0.8.20;\r
\r
contract MyToken {\r
    string public name;\r
    string public symbol;\r
    uint8 public constant decimals = 18;\r
    uint256 public totalSupply;\r
    address public owner;  // 简单的所有者模式(非 OpenZeppelin Ownable)\r
\r
    mapping(address => uint256) private _balances;\r
    mapping(address => mapping(address => uint256)) private _allowances;\r
\r
    // 事件\r
    event Transfer(address indexed from, address indexed to, uint256 value);\r
    event Approval(address indexed owner, address indexed spender, uint256 value);\r
    event Mint(address indexed to, uint256 amount);\r
    event Burn(address indexed from, uint256 amount);\r
\r
    // 修饰器:仅所有者可调用\r
    modifier onlyOwner() {\r
        require(msg.sender == owner, "MyToken: caller is not the owner");\r
        _;\r
    }\r
\r
    constructor(\r
        string memory _name,\r
        string memory _symbol,\r
        uint256 _initialSupply\r
    ) {\r
        owner = msg.sender;\r
        name = _name;\r
        symbol = _symbol;\r
        _mint(msg.sender, _initialSupply * 10 ** decimals);\r
    }\r
\r
    // --- 铸造/销毁逻辑(仅所有者)---\r
    /**\r
     * @dev 铸造新代币(仅所有者可调用)\r
     * @param to 接收地址\r
     * @param amount 铸造数量(带小数位,如 1.0 = 1e18)\r
     */\r
    function mint(address to, uint256 amount) public onlyOwner {\r
        _mint(to, amount);\r
    }\r
\r
    /**\r
     * @dev 销毁代币(任何用户可销毁自身代币)\r
     * @param amount 销毁数量\r
     */\r
    function burn(uint256 amount) public {\r
        _burn(msg.sender, amount);\r
    }\r
\r
    // --- 内部函数 ---\r
    function _mint(address account, uint256 amount) internal {\r
        require(account != address(0), "ERC20: mint to zero address");\r
\r
        totalSupply += amount;\r
        _balances[account] += amount;\r
        emit Transfer(address(0), account, amount);\r
        emit Mint(account, amount);\r
    }\r
\r
    function _burn(address account, uint256 amount) internal {\r
        require(account != address(0), "ERC20: burn from zero address");\r
        require(_balances[account] >= amount, "ERC20: burn amount exceeds balance");\r
\r
        _balances[account] -= amount;\r
        totalSupply -= amount;\r
        emit Transfer(account, address(0), amount);\r
        emit Burn(account, amount);\r
    }\r
\r
    // --- 核心 ERC20 功能(保持不变)---\r
    function transfer(address to, uint256 amount) public returns (bool) {\r
        require(to != address(0), "ERC20: transfer to zero address");\r
        require(_balances[msg.sender] >= amount, "ERC20: transfer amount exceeds balance");\r
\r
        _balances[msg.sender] -= amount;\r
        _balances[to] += amount;\r
        emit Transfer(msg.sender, to, amount);\r
        return true;\r
    }\r
\r
    function approve(address spender, uint256 amount) public returns (bool) {\r
        _allowances[msg.sender][spender] = amount;\r
        emit Approval(msg.sender, spender, amount);\r
        return true;\r
    }\r
\r
    function transferFrom(address from, address to, uint256 amount) public returns (bool) {\r
        require(to != address(0), "ERC20: transfer to zero address");\r
        require(_balances[from] >= amount, "ERC20: transfer amount exceeds balance");\r
        require(_allowances[from][msg.sender] >= amount, "ERC20: insufficient allowance");\r
\r
        _balances[from] -= amount;\r
        _balances[to] += amount;\r
        _allowances[from][msg.sender] -= amount;\r
        emit Transfer(from, to, amount);\r
        return true;\r
    }\r
\r
    function balanceOf(address account) public view returns (uint256) {\r
        return _balances[account];\r
    }\r
\r
    function allowance(address _owner, address _spender) public view returns (uint256) {\r
        return _allowances[_owner][_spender];\r
    }\r
}"
    }
  },
  "settings": {
    "optimizer": {
      "enabled": false,
      "runs": 200
    },
    "outputSelection": {
      "*": {
        "*": [
          "evm.bytecode",
          "evm.deployedBytecode",
          "devdoc",
          "userdoc",
          "metadata",
          "abi"
        ]
      }
    },
    "remappings": [],
    "evmVersion": "shanghai"
  }
}}

Tags:
ERC20, Token, Mintable, Burnable, Factory|addr:0xedf686d90a5dac34b1552eb663162c2004f963ae|verified:true|block:23732554|tx:0x92d6c63338da42824a7c1d99cb1ea3dd077fc7245b5d37abfe423953eaea4884|first_check:1762349474

Submitted on: 2025-11-05 14:31:16

Comments

Log in to comment.

No comments yet.