-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathPubgPowerToken.sol
130 lines (93 loc) · 3.8 KB
/
PubgPowerToken.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
// File: contracts/interfaces/IAdmin.sol
pragma solidity 0.6.6;
interface IAdmin {
function isSuperAdmin(address _addr) external view returns (bool);
function isAdmin(address _addr) external view returns (bool);
}
// File: contracts/interfaces/IKAP20.sol
pragma solidity 0.6.6;
interface IKAP20 {
event Transfer(address indexed from, address indexed to, uint256 tokens);
event Approval(address indexed tokenOwner, address indexed spender, uint256 tokens);
function balanceOf(address tokenOwner) external view returns (uint256 balance);
function allowance(address tokenOwner, address spender) external view returns (uint256 remaining);
function transfer(address to, uint256 tokens) external returns (bool success);
function approve(address spender, uint256 tokens) external returns (bool success);
function transferFrom(
address from,
address to,
uint256 tokens
) external returns (bool success);
function getOwner() external view returns (address);
function mint(address _toAddr, uint256 _amount) external returns (bool success);
function burn(address _fromAddr, uint256 _amount) external returns (bool success);
}
// File: contracts/PubgPowerToken.sol
pragma solidity 0.6.6;
contract PubgPowerToken is IKAP20 {
string public name = "Pubg Power Token";
string public symbol = "PPT";
uint256 public decimals = 18;
uint256 public totalSupply;
IAdmin public admin;
mapping(address => uint256) public balance;
mapping(address => mapping(address => uint256)) public allowed;
bool public isActivatedOnlyKycAddress;
modifier onlySuperAdmin() {
require(admin.isSuperAdmin(msg.sender), "Restricted only super admin");
_;
}
function getOwner() external view override returns (address) {
return address(admin);
}
constructor(address _admin) public {
admin = IAdmin(_admin);
}
function setNewAdmin(address _admin) external onlySuperAdmin {
admin = IAdmin(_admin);
}
function mint(address _toAddr, uint256 _amount) external override onlySuperAdmin returns (bool) {
balance[_toAddr] += _amount;
totalSupply += _amount;
emit Transfer(address(0), _toAddr, _amount);
return true;
}
function burn(address _fromAddr, uint256 _amount) external override onlySuperAdmin returns (bool) {
require(balance[_fromAddr] >= _amount);
balance[_fromAddr] -= _amount;
emit Transfer(_fromAddr, address(0), _amount);
return true;
}
function balanceOf(address _walletAddress) public view override returns (uint256) {
return balance[_walletAddress];
}
function allowance(address _owner, address _spender) public view override returns (uint256) {
return allowed[_owner][_spender];
}
function transfer(address _to, uint256 _value) public override onlySuperAdmin returns (bool) {
require(_value <= balance[msg.sender], "Insufficient Balance");
balance[msg.sender] -= _value;
balance[_to] += _value;
emit Transfer(msg.sender, _to, _value);
return true;
}
function approve(address _spender, uint256 _value) public override onlySuperAdmin returns (bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
function transferFrom(
address _from,
address _to,
uint256 _value
) public override onlySuperAdmin returns (bool) {
require(_value <= balance[_from]);
require(_value <= allowed[_from][msg.sender]);
require(_to != address(0));
balance[_from] -= (_value);
balance[_to] += _value;
allowed[_from][msg.sender] -= _value;
emit Transfer(_from, _to, _value);
return true;
}
}