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;
|
|
|
|
}
|
|
|
|
}
|