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": {
    "ls/usdt.sol": {
      "content": "// SPDX-License-Identifier: MIT\r
pragma solidity ^0.8.19;\r
\r
/*\r
 Simple ERC20 token with:\r
 - No transfer fees (standard ERC20 behavior)\r
 - Owner can mint and burn\r
 - Uses safe OpenZeppelin patterns (inlined minimal versions so this file is self-contained)\r
 \r
 IMPORTANT: do NOT name this "USDT" or otherwise impersonate Tether/another token.\r
*/\r
\r
interface IERC20 {\r
    function totalSupply() external view returns (uint256);\r
    function balanceOf(address account) external view returns (uint256);\r
    function transfer(address to, 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 from, address to, 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
abstract contract Context {\r
    function _msgSender() internal view virtual returns (address) {\r
        return msg.sender;\r
    }\r
}\r
\r
/* Minimal Ownable */\r
contract Ownable is Context {\r
    address private _owner;\r
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\r
    constructor() {\r
        _owner = _msgSender();\r
        emit OwnershipTransferred(address(0), _owner);\r
    }\r
    function owner() public view returns (address) {\r
        return _owner;\r
    }\r
    modifier onlyOwner() {\r
        require(_msgSender() == _owner, "Ownable: caller is not the owner");\r
        _;\r
    }\r
    function transferOwnership(address newOwner) public onlyOwner {\r
        require(newOwner != address(0), "Ownable: new owner is zero");\r
        emit OwnershipTransferred(_owner, newOwner);\r
        _owner = newOwner;\r
    }\r
}\r
\r
/* Minimal ERC20 implementation */\r
contract ERC20 is Context, IERC20 {\r
    mapping(address => uint256) private _balances;\r
    mapping(address => mapping(address => uint256)) private _allowances;\r
    uint256 private _totalSupply;\r
    string public name;\r
    string public symbol;\r
    uint8 public immutable decimals = 18;\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) { return _totalSupply; }\r
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }\r
\r
    function transfer(address to, uint256 amount) public virtual override returns (bool) {\r
        _transfer(_msgSender(), to, 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 virtual override returns (bool) {\r
        _approve(_msgSender(), spender, amount);\r
        return true;\r
    }\r
\r
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\r
        uint256 currentAllowance = _allowances[from][_msgSender()];\r
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");\r
        _transfer(from, to, amount);\r
        _approve(from, _msgSender(), currentAllowance - amount);\r
        return true;\r
    }\r
\r
    /* Internal functions */\r
    function _transfer(address from, address to, uint256 amount) internal virtual {\r
        require(from != address(0), "ERC20: transfer from zero");\r
        require(to != address(0), "ERC20: transfer to zero");\r
        uint256 fromBal = _balances[from];\r
        require(fromBal >= amount, "ERC20: transfer exceeds balance");\r
        _balances[from] = fromBal - amount;\r
        _balances[to] += amount;\r
        emit Transfer(from, to, amount);\r
    }\r
\r
    function _mint(address account, uint256 amount) internal virtual {\r
        require(account != address(0), "ERC20: mint to zero");\r
        _totalSupply += amount;\r
        _balances[account] += amount;\r
        emit Transfer(address(0), account, amount);\r
    }\r
\r
    function _burn(address account, uint256 amount) internal virtual {\r
        require(account != address(0), "ERC20: burn from zero");\r
        uint256 acctBal = _balances[account];\r
        require(acctBal >= amount, "ERC20: burn exceeds balance");\r
        _balances[account] = acctBal - amount;\r
        _totalSupply -= amount;\r
        emit Transfer(account, address(0), amount);\r
    }\r
\r
    function _approve(address owner_, address spender, uint256 amount) internal virtual {\r
        require(owner_ != address(0), "ERC20: approve from zero");\r
        require(spender != address(0), "ERC20: approve to zero");\r
        _allowances[owner_][spender] = amount;\r
        emit Approval(owner_, spender, amount);\r
    }\r
}\r
\r
/* The token contract */\r
contract FlashToken is ERC20, Ownable {\r
    constructor(\r
        string memory _name,\r
        string memory _symbol,\r
        uint256 initialSupplyWei  // pass supply in wei (e.g., 1_000_000 * 10**18)\r
    ) ERC20(_name, _symbol) {\r
        // mint initial supply to deployer (owner)\r
        _mint(_msgSender(), initialSupplyWei);\r
    }\r
\r
    // Owner-only mint function (if you want controlled inflation)\r
    function mint(address to, uint256 amount) external onlyOwner {\r
        _mint(to, amount);\r
    }\r
\r
    // Owner-only burn from an account (optional)\r
    function burn(address from, uint256 amount) external onlyOwner {\r
        _burn(from, amount);\r
    }\r
\r
    // No transfer tax — standard ERC20 transfers (no overrides)\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:0xe18684aa9fc37e046daafa7dd03f94a1cdfdcfc4|verified:true|block:23742121|tx:0x004fef29c323d40732cc33c441254b49a073e480cf259360fe0f3df3d4bf4a59|first_check:1762458454

Submitted on: 2025-11-06 20:47:35

Comments

Log in to comment.

No comments yet.