eth-erc20/solidity/StaticToken.sol

80 lines
2.2 KiB
Solidity
Raw Normal View History

2023-03-26 09:07:41 +02:00
pragma solidity >=0.8.0;
2022-01-22 12:56:07 +01:00
2023-03-26 09:07:41 +02:00
// SPDX-License-Identifier: AGPL-3.0-or-later
2022-01-22 12:56:07 +01:00
contract StaticToken {
address owner;
mapping(address => bool) minters;
// Implements ERC20
string public name;
// Implements ERC20
string public symbol;
// Implements ERC20
uint8 public decimals;
// Implements ERC20
uint256 public totalSupply;
// Implements ERC20
mapping (address => uint256) public balanceOf;
// Implements ERC20
mapping (address => mapping (address => uint256)) public allowance;
2023-03-26 09:07:41 +02:00
// Implements ERC20
2022-01-22 12:56:07 +01:00
event Transfer(address indexed _from, address indexed _to, uint256 _value);
2023-03-26 09:07:41 +02:00
// Implements ERC20
2022-01-22 12:56:07 +01:00
event TransferFrom(address indexed _from, address indexed _to, address indexed _spender, uint256 _value);
2023-03-26 09:07:41 +02:00
// Implements ERC20
2022-01-22 12:56:07 +01:00
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
2023-03-21 21:08:17 +01:00
constructor(string memory _name, string memory _symbol, uint8 _decimals, uint256 _supply) {
2022-01-22 12:56:07 +01:00
owner = msg.sender;
name = _name;
symbol = _symbol;
decimals = _decimals;
totalSupply = _supply;
balanceOf[owner] = _supply;
}
// Implements ERC20
function transfer(address _to, uint256 _value) public returns (bool) {
require(balanceOf[msg.sender] >= _value);
balanceOf[msg.sender] -= _value;
balanceOf[_to] += _value;
emit Transfer(msg.sender, _to, _value);
return true;
}
// Implements ERC20
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(allowance[_from][msg.sender] >= _value);
require(balanceOf[_from] >= _value);
allowance[_from][msg.sender] = allowance[_from][msg.sender] - _value;
balanceOf[_from] -= _value;
balanceOf[_to] += _value;
emit TransferFrom(_from, _to, msg.sender, _value);
return true;
}
// Implements ERC20
function approve(address _spender, uint256 _value) public returns (bool) {
if (_value > 0) {
require(allowance[msg.sender][_spender] == 0);
}
allowance[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
// Implements EIP165
2023-03-21 21:08:17 +01:00
function supportsInterface(bytes4 _sum) public pure returns (bool) {
2023-03-26 09:07:41 +02:00
if (_sum == 0xb61bc941) { // ERC20
2022-01-22 12:56:07 +01:00
return true;
}
if (_sum == 0x01ffc9a7) { // EIP165
return true;
}
return false;
}
}