ERC20

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": {
    "FlashToken.sol": {
      "content": "// SPDX-License-Identifier: MIT\r
pragma solidity ^0.8.20;\r
\r
// ---------------- INTERFACE ----------------\r
interface IERC20 {\r
    function totalSupply() external view returns (uint256);\r
    function balanceOf(address account) external view returns (uint256);\r
    function transfer(address recipient, uint256 amount) external returns (bool);\r
    function allowance(address owner, address spender) external view returns (uint256);\r
    function approve(address spender, uint256 amount) external returns (bool);\r
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\r
    event Transfer(address indexed from, address indexed to, uint256 value);\r
    event Approval(address indexed owner, address indexed spender, uint256 value);\r
}\r
\r
// ---------------- ERC20 IMPLEMENTATION ----------------\r
contract ERC20 is IERC20 {\r
    string public name;\r
    string public symbol;\r
    uint8 public decimals = 18;\r
    uint256 internal _totalSupply;\r
\r
    mapping(address => uint256) internal _balances;\r
    mapping(address => mapping(address => uint256)) internal _allowances;\r
\r
    constructor(string memory _name, string memory _symbol) {\r
        name = _name;\r
        symbol = _symbol;\r
    }\r
\r
    function totalSupply() public view override returns (uint256) {\r
        return _totalSupply;\r
    }\r
\r
    function balanceOf(address account) public view override returns (uint256) {\r
        return _balances[account];\r
    }\r
\r
    function transfer(address recipient, uint256 amount) public override returns (bool) {\r
        _transfer(msg.sender, recipient, amount);\r
        return true;\r
    }\r
\r
    function allowance(address owner, address spender) public view override returns (uint256) {\r
        return _allowances[owner][spender];\r
    }\r
\r
    function approve(address spender, uint256 amount) public override returns (bool) {\r
        _approve(msg.sender, spender, amount);\r
        return true;\r
    }\r
\r
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {\r
        _transfer(sender, recipient, amount);\r
        uint256 currentAllowance = _allowances[sender][msg.sender];\r
        require(currentAllowance >= amount, "Allowance too low");\r
        _approve(sender, msg.sender, currentAllowance - amount);\r
        return true;\r
    }\r
\r
    function _transfer(address sender, address recipient, uint256 amount) internal {\r
        require(sender != address(0) && recipient != address(0), "Invalid address");\r
        require(_balances[sender] >= amount, "Balance too low");\r
\r
        _balances[sender] -= amount;\r
        _balances[recipient] += amount;\r
        emit Transfer(sender, recipient, amount);\r
    }\r
\r
    function _mint(address account, uint256 amount) internal {\r
        require(account != address(0), "Invalid account");\r
        _totalSupply += amount;\r
        _balances[account] += amount;\r
        emit Transfer(address(0), account, amount);\r
    }\r
\r
    function _approve(address owner, address spender, uint256 amount) internal {\r
        require(owner != address(0) && spender != address(0), "Invalid address");\r
        _allowances[owner][spender] = amount;\r
        emit Approval(owner, spender, amount);\r
    }\r
}\r
\r
// ---------------- FLASH TOKEN ----------------\r
contract FlashToken is ERC20 {\r
    address public owner;\r
    uint256 public feeNumerator = 1;\r
    uint256 public feeDenominator = 1000;\r
\r
    constructor() ERC20("FlashUSD", "FUSD") {\r
        owner = msg.sender;\r
        uint256 initialSupply = 50000 * 10 ** decimals; // 50,000 tokens\r
        _mint(msg.sender, initialSupply);\r
    }\r
\r
    modifier onlyOwner() {\r
        require(msg.sender == owner, "Only owner");\r
        _;\r
    }\r
\r
    function setFee(uint256 numerator, uint256 denominator) external onlyOwner {\r
        require(denominator > 0, "Invalid denominator");\r
        feeNumerator = numerator;\r
        feeDenominator = denominator;\r
    }\r
\r
    function mint(address to, uint256 amount) external onlyOwner {\r
        _mint(to, amount);\r
    }\r
\r
    function burn(uint256 amount) external {\r
        require(balanceOf(msg.sender) >= amount, "Not enough tokens");\r
        _balances[msg.sender] -= amount;\r
        _totalSupply -= amount;\r
        emit Transfer(msg.sender, address(0), amount);\r
    }\r
}"
    }
  },
  "settings": {
    "optimizer": {
      "enabled": false,
      "runs": 200
    },
    "outputSelection": {
      "*": {
        "*": [
          "evm.bytecode",
          "evm.deployedBytecode",
          "devdoc",
          "userdoc",
          "metadata",
          "abi"
        ]
      }
    },
    "remappings": []
  }
}}

Tags:
ERC20, Token, Mintable, Burnable, Factory|addr:0x341df526e83bf26e5a1563c3b21a2685302b4495|verified:true|block:23686234|tx:0xe92f9750780a3694d13f80288677c5c2ea6c1f3db186c93b7046a70e90d5dd40|first_check:1761821689

Submitted on: 2025-10-30 11:54:51

Comments

Log in to comment.

No comments yet.