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": []
}
}}
Submitted on: 2025-10-30 11:57:57
Comments
Log in to comment.
No comments yet.