├── README.md └── Token.sol /README.md: -------------------------------------------------------------------------------- 1 | Deploy token.sol on EVM compatible chains. 2 | -------------------------------------------------------------------------------- /Token.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.26; 3 | 4 | // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.0.0/contracts/token/ERC20/IERC20.sol 5 | interface IERC20 { 6 | function totalSupply() external view returns (uint); 7 | 8 | function balanceOf(address account) external view returns (uint); 9 | 10 | function transfer(address recipient, uint amount) external returns (bool); 11 | 12 | function allowance(address owner, address spender) external view returns (uint); 13 | 14 | function approve(address spender, uint amount) external returns (bool); 15 | 16 | function transferFrom( 17 | address sender, 18 | address recipient, 19 | uint amount 20 | ) external returns (bool); 21 | 22 | event Transfer(address indexed from, address indexed to, uint value); 23 | event Approval(address indexed owner, address indexed spender, uint value); 24 | } 25 | 26 | 27 | 28 | contract ERC20 is IERC20 { 29 | uint public totalSupply; 30 | mapping(address => uint) public balanceOf; 31 | mapping(address => mapping(address => uint)) public allowance; 32 | string public name = "Solidity by Example"; 33 | string public symbol = "PAHLAVI"; 34 | uint8 public decimals = 18; 35 | 36 | function transfer(address recipient, uint amount) external returns (bool) { 37 | balanceOf[msg.sender] -= amount; 38 | balanceOf[recipient] += amount; 39 | emit Transfer(msg.sender, recipient, amount); 40 | return true; 41 | } 42 | 43 | function approve(address spender, uint amount) external returns (bool) { 44 | allowance[msg.sender][spender] = amount; 45 | emit Approval(msg.sender, spender, amount); 46 | return true; 47 | } 48 | 49 | function transferFrom( 50 | address sender, 51 | address recipient, 52 | uint amount 53 | ) external returns (bool) { 54 | allowance[sender][msg.sender] -= amount; 55 | balanceOf[sender] -= amount; 56 | balanceOf[recipient] += amount; 57 | emit Transfer(sender, recipient, amount); 58 | return true; 59 | } 60 | 61 | function mint(uint amount) external { 62 | balanceOf[msg.sender] += amount; 63 | totalSupply += amount; 64 | emit Transfer(address(0), msg.sender, amount); 65 | } 66 | 67 | function burn(uint amount) external { 68 | balanceOf[msg.sender] -= amount; 69 | totalSupply -= amount; 70 | emit Transfer(msg.sender, address(0), amount); 71 | } 72 | } 73 | --------------------------------------------------------------------------------