SimpleERC20
A standard ERC-20 fungible token with configurable name, symbol, total supply, owner-only minting, and public burning.
SimpleERC20.sol
// SPDX-License-Identifier: MITpragma solidity ^0.8.20; contract SimpleERC20 { string public name; string public symbol; uint8 public constant decimals = 18; uint256 public totalSupply; address public owner; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); modifier onlyOwner() { require(msg.sender == owner, "NOT_OWNER"); _; } constructor(string memory name_, string memory symbol_, uint256 initialSupply_) { name = name_; symbol = symbol_; owner = msg.sender; uint256 supply = initialSupply_ * 10 ** decimals; totalSupply = supply; balanceOf[msg.sender] = supply; emit Transfer(address(0), msg.sender, supply); } function transfer(address to, uint256 value) external returns (bool) { _transfer(msg.sender, to, value); return true; } function approve(address spender, uint256 value) external returns (bool) { allowance[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } function transferFrom(address from, address to, uint256 value) external returns (bool) { uint256 allowed = allowance[from][msg.sender]; require(allowed >= value, "ALLOWANCE"); if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - value; _transfer(from, to, value); return true; } function mint(address to, uint256 amount) external onlyOwner { totalSupply += amount; balanceOf[to] += amount; emit Transfer(address(0), to, amount); } function burn(uint256 amount) external { require(balanceOf[msg.sender] >= amount, "BALANCE"); balanceOf[msg.sender] -= amount; totalSupply -= amount; emit Transfer(msg.sender, address(0), amount); } function _transfer(address from, address to, uint256 value) internal { require(to != address(0), "ZERO_ADDR"); require(balanceOf[from] >= value, "BALANCE"); balanceOf[from] -= value; balanceOf[to] += value; emit Transfer(from, to, value); }}