|
| 1 | +// SPDX-License-Identifier: NONE |
| 2 | +pragma solidity ^0.8.0; |
| 3 | + |
| 4 | +contract MyERC20Token { |
| 5 | + mapping(address => uint256) _balances; |
| 6 | + mapping(address => mapping(address => uint256)) _allowed; |
| 7 | + |
| 8 | + string public name = "My ERC20 Token"; |
| 9 | + string public symbol = "MET"; |
| 10 | + uint8 public decimals = 0; |
| 11 | + uint256 private _totalSupply = 100; |
| 12 | + event Transfer(address indexed _from, address indexed _to, uint256 _value); |
| 13 | + event Approval( |
| 14 | + address indexed _owner, |
| 15 | + address indexed _spender, |
| 16 | + uint256 _value |
| 17 | + ); |
| 18 | + |
| 19 | + constructor() { |
| 20 | + _balances[msg.sender] = _totalSupply; |
| 21 | + emit Transfer(address(0), msg.sender, _totalSupply); |
| 22 | + } |
| 23 | + |
| 24 | + function totalSupply() public view returns (uint256) { |
| 25 | + return _totalSupply - _balances[address(0)]; |
| 26 | + } |
| 27 | + |
| 28 | + function balanceOf(address _owner) public view returns (uint256 balance) { |
| 29 | + return _balances[_owner]; |
| 30 | + } |
| 31 | + |
| 32 | + function allowance(address _owner, address _spender) |
| 33 | + public |
| 34 | + view |
| 35 | + returns (uint256 remaining) |
| 36 | + { |
| 37 | + return _allowed[_owner][_spender]; |
| 38 | + } |
| 39 | + |
| 40 | + function transfer(address _to, uint256 _value) |
| 41 | + public |
| 42 | + returns (bool success) |
| 43 | + { |
| 44 | + require( |
| 45 | + _balances[msg.sender] >= _value, |
| 46 | + "value exceeds senders balance" |
| 47 | + ); |
| 48 | + _balances[msg.sender] -= _value; |
| 49 | + _balances[_to] += _value; |
| 50 | + emit Transfer(msg.sender, _to, _value); |
| 51 | + return true; |
| 52 | + } |
| 53 | + |
| 54 | + function approve(address _spender, uint256 _value) |
| 55 | + public |
| 56 | + returns (bool success) |
| 57 | + { |
| 58 | + _allowed[msg.sender][_spender] = _value; |
| 59 | + emit Approval(msg.sender, _spender, _value); |
| 60 | + return true; |
| 61 | + } |
| 62 | + |
| 63 | + function transferfrom( |
| 64 | + address _from, |
| 65 | + address _to, |
| 66 | + uint256 _value |
| 67 | + ) public returns (bool success) { |
| 68 | + require(_value <= _balances[_from], "Not enough balance"); |
| 69 | + require(_value <= _allowed[_from][msg.sender], "Not enough allowance"); |
| 70 | + _balances[_from] -= _value; |
| 71 | + _balances[_to] += _value; |
| 72 | + _allowed[_from][msg.sender] -= _value; |
| 73 | + emit Transfer(_from, _to, _value); |
| 74 | + return true; |
| 75 | + } |
| 76 | +} |
0 commit comments