1
- pragma solidity 0.4.23 ;
1
+ pragma solidity ^ 0.4.23 ;
2
+
3
+ import "./ITRC20.sol " ;
4
+ import "./IApproveAndCallFallback.sol " ;
5
+ import "./Ownable.sol " ;
2
6
3
7
library SafeMath {
4
8
function add (uint a , uint b ) internal pure returns (uint c ) {
@@ -10,145 +14,100 @@ library SafeMath {
10
14
require (b <= a);
11
15
c = a - b;
12
16
}
13
-
14
- function mul (uint a , uint b ) internal pure returns (uint c ) {
15
- c = a * b;
16
- require (a == 0 || c / a == b);
17
- }
18
-
19
- function div (uint a , uint b ) internal pure returns (uint c ) {
20
- require (b > 0 );
21
- c = a / b;
22
- }
23
17
}
24
18
25
- contract TRC20Interface {
26
- function totalSupply () public view returns (uint );
27
-
28
- function balanceOf (address tokenOwner ) public view returns (uint balance );
29
-
30
- function allowance (address tokenOwner , address spender ) public view returns (uint remaining );
31
-
32
- function transfer (address to , uint value ) public returns (bool success );
33
-
34
- function approve (address spender , uint value ) public returns (bool success );
35
-
36
- function transferFrom (address from , address to , uint value ) public returns (bool success );
19
+ contract Token888 is ITRC20 , Ownable {
20
+ using SafeMath for uint ;
37
21
38
- event Transfer (address indexed from , address indexed to , uint value );
22
+ string public symbol = "888 " ;
23
+ string public name = "888Tron " ;
24
+ uint8 public decimals = 6 ;
39
25
40
- event Approval (address indexed tokenOwner , address indexed spender , uint value );
41
- }
26
+ uint private _totalSupply = 100 * 1000000 * 10 ** uint (decimals);
42
27
43
- contract ApproveAndCallFallBack {
44
- function receiveApproval (address from , uint256 value , address token , bytes memory data ) public ;
45
- }
28
+ mapping (address => uint ) private _balances;
46
29
47
- contract Ownable {
48
- address public owner;
49
- address public newOwner;
30
+ mapping (address => mapping (address => uint )) private _allowed;
50
31
51
- event OwnershipTransferred (address indexed _from , address indexed _to );
52
-
53
- constructor () public {
54
- owner = msg .sender ;
32
+ constructor () public {
33
+ _balances[msg .sender ] = _totalSupply;
34
+ emit Transfer (address (0 ), msg .sender , _totalSupply);
55
35
}
56
36
57
- modifier onlyOwner {
58
- require (msg .sender == owner);
59
- _;
37
+ function totalSupply () public view returns (uint ) {
38
+ return _totalSupply;
60
39
}
61
40
62
- function transferOwnership (address _newOwner ) public onlyOwner {
63
- newOwner = _newOwner ;
41
+ function balanceOf (address owner ) public view returns ( uint ) {
42
+ return _balances[owner] ;
64
43
}
65
44
66
- function acceptOwnership () public {
67
- require (msg .sender == newOwner);
68
- emit OwnershipTransferred (owner, newOwner);
69
- owner = newOwner;
70
- newOwner = address (0 );
45
+ function allowance (address owner , address spender ) public view returns (uint ) {
46
+ return _allowed[owner][spender];
71
47
}
72
- }
73
-
74
- contract Token888 is TRC20Interface , Ownable {
75
- using SafeMath for uint ;
76
-
77
- string public symbol;
78
- string public name;
79
- uint8 public decimals;
80
- uint _totalSupply;
81
48
82
- mapping (address => uint ) balances;
83
- mapping (address => mapping (address => uint )) allowed;
84
-
85
- event Burn (uint256 value );
86
-
87
- constructor () public {
88
- symbol = "888 " ;
89
- name = "888Tron " ;
90
- decimals = 6 ;
91
- _totalSupply = 100 * 1000000 * 10 ** uint (decimals);
92
- balances[owner] = _totalSupply;
93
- emit Transfer (address (0 ), owner, _totalSupply);
49
+ function transfer (address to , uint value ) public returns (bool ) {
50
+ _transfer (msg .sender , to, value);
51
+ return true ;
94
52
}
95
53
96
- function totalSupply () public view returns (uint ) {
97
- return _totalSupply;
54
+ function approve (address spender , uint value ) public returns (bool ) {
55
+ require (spender != address (0 ));
56
+
57
+ _allowed[msg .sender ][spender] = value;
58
+ emit Approval (msg .sender , spender, value);
59
+ return true ;
98
60
}
99
61
100
- function balanceOf (address tokenOwner ) public view returns (uint balance ) {
101
- return balances[tokenOwner];
62
+ function transferFrom (address from , address to , uint value ) public returns (bool ) {
63
+ _allowed[from][msg .sender ] = _allowed[from][msg .sender ].sub (value);
64
+ _transfer (from, to, value);
65
+ emit Approval (from, msg .sender , _allowed[from][msg .sender ]);
66
+ return true ;
102
67
}
103
68
104
- function transfer (address to , uint value ) public returns (bool success ) {
105
- require (to != address (0 ));
69
+ function increaseAllowance (address spender , uint addedValue ) public returns (bool ) {
70
+ require (spender != address (0 ));
106
71
107
- balances[msg .sender ] = balances[msg .sender ].sub (value);
108
- balances[to] = balances[to].add (value);
109
- emit Transfer (msg .sender , to, value);
72
+ _allowed[msg .sender ][spender] = _allowed[msg .sender ][spender].add (addedValue);
73
+ emit Approval (msg .sender , spender, _allowed[msg .sender ][spender]);
110
74
return true ;
111
75
}
112
76
113
- function approve (address spender , uint value ) public returns (bool success ) {
114
- allowed[msg .sender ][spender] = value;
115
- emit Approval (msg .sender , spender, value);
77
+ function decreaseAllowance (address spender , uint subtractedValue ) public returns (bool ) {
78
+ require (spender != address (0 ));
79
+
80
+ _allowed[msg .sender ][spender] = _allowed[msg .sender ][spender].sub (subtractedValue);
81
+ emit Approval (msg .sender , spender, _allowed[msg .sender ][spender]);
116
82
return true ;
117
83
}
118
84
119
- function transferFrom (address from , address to , uint value ) public returns ( bool success ) {
85
+ function _transfer (address from , address to , uint value ) internal {
120
86
require (to != address (0 ));
121
87
122
- balances[from] = balances[from].sub (value);
123
- allowed[from][msg .sender ] = allowed[from][msg .sender ].sub (value);
124
- balances[to] = balances[to].add (value);
88
+ _balances[from] = _balances[from].sub (value);
89
+ _balances[to] = _balances[to].add (value);
125
90
emit Transfer (from, to, value);
126
- return true ;
127
91
}
128
92
129
- function allowance (address tokenOwner , address spender ) public view returns (uint remaining ) {
130
- return allowed[tokenOwner][spender];
93
+ function burn (uint value ) public {
94
+ _totalSupply = _totalSupply.sub (value);
95
+ _balances[msg .sender ] = _balances[msg .sender ].sub (value);
96
+ emit Transfer (msg .sender , address (0 ), value);
131
97
}
132
98
133
- function approveAndCall (address spender , uint value , bytes memory data ) public returns (bool success ) {
134
- allowed [msg .sender ][spender] = value;
99
+ function approveAndCall (address spender , uint value , bytes memory data ) public returns (bool ) {
100
+ _allowed [msg .sender ][spender] = value;
135
101
emit Approval (msg .sender , spender, value);
136
- ApproveAndCallFallBack (spender).receiveApproval (msg .sender , value, address (this ), data);
102
+ IApproveAndCallFallback (spender).receiveApproval (msg .sender , value, address (this ), data);
137
103
return true ;
138
104
}
139
105
140
106
function () external payable {
141
107
revert ();
142
108
}
143
109
144
- function transferAnyTRC20Token (address tokenAddress , uint value ) public onlyOwner returns (bool success ) {
145
- return TRC20Interface (tokenAddress).transfer (owner, value);
110
+ function transferAnyTRC20Token (address tokenAddress , uint value ) public onlyOwner returns (bool ) {
111
+ return ITRC20 (tokenAddress).transfer (owner, value);
146
112
}
147
-
148
- function burn (uint256 value ) public onlyOwner returns (bool success ) {
149
- balances[msg .sender ] = balances[msg .sender ].sub (value);
150
- _totalSupply = _totalSupply.sub (value);
151
- emit Burn (value);
152
- return true ;
153
- }
154
- }
113
+ }
0 commit comments