forked from estatium/EstatiumToken
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEstatiumToken.sol
143 lines (113 loc) · 4.21 KB
/
EstatiumToken.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
pragma solidity ^0.4.11;
contract Owned {
address public owner;
function Owned() {
owner = msg.sender;
}
modifier onlyOwner {
require (msg.sender == owner);
_;
}
function transferOwnership(address newOwner) onlyOwner {
owner = newOwner;
}
}
contract tokenRecipient {
function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData);
}
contract IERC20Token {
function totalSupply() constant returns (uint256 totalSupply);
function balanceOf(address _owner) constant returns (uint256 balance) {}
function transfer(address _to, uint256 _value) returns (bool success) {}
function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {}
function approve(address _spender, uint256 _value) returns (bool success) {}
function allowance(address _owner, address _spender) constant returns (uint256 remaining) {}
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}
contract EstatiumToken is IERC20Token, Owned {
string public standard = "Estatium token v1.0";
string public name = "Estatium";
string public symbol = "EST";
uint8 public decimals = 18;
bool public tokenFrozen;
uint256 supply = 0;
mapping (address => uint256) balances;
mapping (address => mapping (address => uint256)) allowances;
address public distributor;
event Mint(address indexed _to, uint256 _value);
event Burn(address indexed _from, uint256 _value);
event TokenFrozen();
function EstatiumToken() {
supply += 84000000 * 10**18;
balances[msg.sender] += 84000000 * 10**18;
Mint(msg.sender, 84000000 * 10**18);
Transfer(0x0, msg.sender, 84000000 * 10**18);
}
function totalSupply() constant returns (uint256 totalsupply) {
return supply;
}
function balanceOf(address _owner) constant returns (uint256 balance) {
return balances[_owner];
}
function transfer(address _to, uint256 _value) returns (bool success) {
require(canSendtokens(msg.sender));
require(balances[msg.sender] >= _value);
require (balances[_to] + _value > balances[_to]);
balances[msg.sender] -= _value;
balances[_to] += _value;
Transfer(msg.sender, _to, _value);
return true;
}
function approve(address _spender, uint256 _value) returns (bool success) {
require(canSendtokens(msg.sender));
allowances[msg.sender][_spender] = _value;
Approval(msg.sender, _spender, _value);
return true;
}
function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) {
tokenRecipient spender = tokenRecipient(_spender);
approve(_spender, _value);
spender.receiveApproval(msg.sender, _value, this, _extraData);
return true;
}
function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
require(canSendtokens(msg.sender));
require (balances[_from] >= _value);
require (balances[_to] + _value > balances[_to]);
require (_value <= allowances[_from][msg.sender]);
balances[_from] -= _value;
balances[_to] += _value;
allowances[_from][msg.sender] -= _value;
Transfer(_from, _to, _value);
return true;
}
function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
return allowances[_owner][_spender];
}
function freezeTransfers() onlyOwner {
tokenFrozen = !tokenFrozen;
TokenFrozen();
}
function setDistributorAddress(address _newDistributorAddress) onlyOwner {
distributor = _newDistributorAddress;
}
function burn(uint _value) {
require (balances[msg.sender] >= _value);
require(canSendtokens(msg.sender));
balances[msg.sender] -= _value;
supply -= _value;
Transfer(msg.sender, 0x0, _value);
Burn(msg.sender, _value);
}
function canSendtokens(address _sender) internal constant returns (bool) {
if (_sender == distributor || _sender == owner) {
return true;
}else {
if (!tokenFrozen) {
return true;
}
}
return false;
}
}