@kub-chain/contracts 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +88 -0
  2. package/contracts/access/AccessController.sol +96 -0
  3. package/contracts/access/AccessControllerKAP.sol +116 -0
  4. package/contracts/access/Authorization.sol +36 -0
  5. package/contracts/access/AuthorizationKAP.sol +60 -0
  6. package/contracts/access/Committee.sol +26 -0
  7. package/contracts/access/Ownable.sol +39 -0
  8. package/contracts/interfaces/IAdminProjectRouter.sol +9 -0
  9. package/contracts/interfaces/IKYCBitkubChain.sol +8 -0
  10. package/contracts/kyc/KYCHandler.sol +24 -0
  11. package/contracts/libs/Address.sol +16 -0
  12. package/contracts/libs/EnumerableSetAddress.sol +70 -0
  13. package/contracts/libs/EnumerableSetUint.sol +74 -0
  14. package/contracts/libs/EnumerateMap.sol +136 -0
  15. package/contracts/libs/String.sol +26 -0
  16. package/contracts/token/KAP-1155/KAP1155.sol +493 -0
  17. package/contracts/token/KAP-1155/interfaces/IKAP1155.sol +69 -0
  18. package/contracts/token/KAP-1155/interfaces/IKAP1155Enumerable.sol +7 -0
  19. package/contracts/token/KAP-1155/interfaces/IKAP1155Metadata.sol +12 -0
  20. package/contracts/token/KAP-1155/interfaces/IKAP1155Receiver.sol +20 -0
  21. package/contracts/token/KAP-20/KAP20.sol +276 -0
  22. package/contracts/token/KAP-20/interfaces/IKAP20.sol +43 -0
  23. package/contracts/token/KAP-20/interfaces/IKToken.sol +17 -0
  24. package/contracts/token/KAP-22/KAP22.sol +358 -0
  25. package/contracts/token/KAP-22/interfaces/IKAP22.sol +23 -0
  26. package/contracts/token/KAP-22/utils/TransferRouter.sol +29 -0
  27. package/contracts/token/KAP-22/utils/WhitelistAddress.sol +35 -0
  28. package/contracts/token/KAP-721/KAP721.sol +416 -0
  29. package/contracts/token/KAP-721/interfaces/IKAP721.sol +60 -0
  30. package/contracts/token/KAP-721/interfaces/IKAP721Enumerable.sol +10 -0
  31. package/contracts/token/KAP-721/interfaces/IKAP721Metadata.sol +10 -0
  32. package/contracts/token/KAP-721/interfaces/IKAP721Receiver.sol +11 -0
  33. package/contracts/token/KAP-721/interfaces/IKAP721V2.sol +20 -0
  34. package/contracts/utils/Context.sol +13 -0
  35. package/contracts/utils/Pausable.sol +34 -0
  36. package/contracts/utils/introspections/IKAP165.sol +6 -0
  37. package/contracts/utils/introspections/KAP165.sol +12 -0
  38. package/package.json +26 -0
@@ -0,0 +1,69 @@
1
+ //SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity >=0.6.0 <0.9.0;
4
+
5
+ import {IKAP165} from "../../../utils/introspections/IKAP165.sol";
6
+
7
+ interface IKAP1155 is IKAP165 {
8
+ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
9
+
10
+ event TransferBatch(
11
+ address indexed operator,
12
+ address indexed from,
13
+ address indexed to,
14
+ uint256[] ids,
15
+ uint256[] values
16
+ );
17
+
18
+ event ApprovalForAll(address indexed account, address indexed operator, bool approved);
19
+
20
+ event URI(string value, uint256 indexed id);
21
+
22
+ function balanceOf(address account, uint256 id) external view returns (uint256);
23
+
24
+ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
25
+ external
26
+ view
27
+ returns (uint256[] memory);
28
+
29
+ function setApprovalForAll(address operator, bool approved) external;
30
+
31
+ function isApprovedForAll(address account, address operator) external view returns (bool);
32
+
33
+ function adminTransfer(
34
+ address sender,
35
+ address recipient,
36
+ uint256 id,
37
+ uint256 amount
38
+ ) external;
39
+
40
+ function internalTransfer(
41
+ address sender,
42
+ address recipient,
43
+ uint256 id,
44
+ uint256 amount
45
+ ) external returns (bool);
46
+
47
+ function externalTransfer(
48
+ address sender,
49
+ address recipient,
50
+ uint256 id,
51
+ uint256 amount
52
+ ) external returns (bool);
53
+
54
+ function safeTransferFrom(
55
+ address from,
56
+ address to,
57
+ uint256 id,
58
+ uint256 amount,
59
+ bytes calldata data
60
+ ) external;
61
+
62
+ function safeBatchTransferFrom(
63
+ address from,
64
+ address to,
65
+ uint256[] calldata ids,
66
+ uint256[] calldata amounts,
67
+ bytes calldata data
68
+ ) external;
69
+ }
@@ -0,0 +1,7 @@
1
+
2
+ // SPDX-License-Identifier: MIT
3
+ pragma solidity ^0.8.0;
4
+
5
+ interface IKAP1155Enumerable {
6
+ function totalSupply() external view returns (uint256);
7
+ }
@@ -0,0 +1,12 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ interface IKAP1155Metadata {
5
+ function name() external view returns (string memory);
6
+
7
+ function symbol() external view returns (string memory);
8
+
9
+ function uri(uint256 tokenId) external view returns (string memory);
10
+
11
+ function kapURI(uint256 tokenId) external view returns (string memory);
12
+ }
@@ -0,0 +1,20 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ interface IKAP1155Receiver {
5
+ function onKAP1155Received(
6
+ address operator,
7
+ address from,
8
+ uint256 id,
9
+ uint256 value,
10
+ bytes calldata data
11
+ ) external returns (bytes4);
12
+
13
+ function onKAP1155BatchReceived(
14
+ address operator,
15
+ address from,
16
+ uint256[] calldata ids,
17
+ uint256[] calldata values,
18
+ bytes calldata data
19
+ ) external returns (bytes4);
20
+ }
@@ -0,0 +1,276 @@
1
+ //SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity ^0.8.0;
4
+
5
+ import {IKAP20} from "./interfaces/IKAP20.sol";
6
+ import {IKToken} from "./interfaces/IKToken.sol";
7
+ import {Pausable} from "../../utils/Pausable.sol";
8
+ import {AccessController} from "../../access/AccessController.sol";
9
+ import {IKYCBitkubChain} from "../../interfaces/IKYCBitkubChain.sol";
10
+ import {IAdminProjectRouter} from "../../interfaces/IAdminProjectRouter.sol";
11
+
12
+ abstract contract KAP20 is IKAP20, IKToken, Pausable, AccessController {
13
+ mapping(address => uint256) _balances;
14
+
15
+ mapping(address => mapping(address => uint256)) internal _allowances;
16
+
17
+ uint256 public override totalSupply;
18
+ string public override name;
19
+ string public override symbol;
20
+ uint8 public override decimals;
21
+
22
+ constructor(
23
+ string memory _name,
24
+ string memory _symbol,
25
+ string memory _projectName,
26
+ uint8 _decimals,
27
+ address _kyc,
28
+ address _adminProjectRouter,
29
+ address _committee,
30
+ address _transferRouter,
31
+ uint256 _acceptedKYCLevel
32
+ ) {
33
+ name = _name;
34
+ symbol = _symbol;
35
+ PROJECT = _projectName;
36
+ decimals = _decimals;
37
+ kyc = IKYCBitkubChain(_kyc);
38
+ adminProjectRouter = IAdminProjectRouter(_adminProjectRouter);
39
+ committee = _committee;
40
+ transferRouter = _transferRouter;
41
+ acceptedKYCLevel = _acceptedKYCLevel;
42
+ }
43
+
44
+ function balanceOf(address account)
45
+ public
46
+ view
47
+ virtual
48
+ override
49
+ returns (uint256)
50
+ {
51
+ return _balances[account];
52
+ }
53
+
54
+ function transfer(address recipient, uint256 amount)
55
+ public
56
+ virtual
57
+ override
58
+ whenNotPaused
59
+ returns (bool)
60
+ {
61
+ _transfer(msg.sender, recipient, amount);
62
+ return true;
63
+ }
64
+
65
+ function allowance(address owner, address spender)
66
+ public
67
+ view
68
+ virtual
69
+ override
70
+ returns (uint256)
71
+ {
72
+ return _allowances[owner][spender];
73
+ }
74
+
75
+ function approve(address spender, uint256 amount)
76
+ public
77
+ virtual
78
+ override
79
+ returns (bool)
80
+ {
81
+ _approve(msg.sender, spender, amount);
82
+ return true;
83
+ }
84
+
85
+ function adminApprove(
86
+ address owner,
87
+ address spender,
88
+ uint256 amount
89
+ )
90
+ public
91
+ virtual
92
+ override
93
+ whenNotPaused
94
+ onlySuperAdminOrAdmin
95
+ returns (bool)
96
+ {
97
+ require(
98
+ kyc.kycsLevel(owner) >= acceptedKYCLevel &&
99
+ kyc.kycsLevel(spender) >= acceptedKYCLevel,
100
+ "KAP20: owner or spender address is not a KYC user"
101
+ );
102
+
103
+ _approve(owner, spender, amount);
104
+ return true;
105
+ }
106
+
107
+ function transferFrom(
108
+ address sender,
109
+ address recipient,
110
+ uint256 amount
111
+ ) public virtual override whenNotPaused returns (bool) {
112
+ _transfer(sender, recipient, amount);
113
+
114
+ uint256 currentAllowance = _allowances[sender][msg.sender];
115
+ require(
116
+ currentAllowance >= amount,
117
+ "KAP20: transfer amount exceeds allowance"
118
+ );
119
+ unchecked {
120
+ _approve(sender, msg.sender, currentAllowance - amount);
121
+ }
122
+
123
+ return true;
124
+ }
125
+
126
+ function increaseAllowance(address spender, uint256 addedValue)
127
+ public
128
+ virtual
129
+ returns (bool)
130
+ {
131
+ _approve(
132
+ msg.sender,
133
+ spender,
134
+ _allowances[msg.sender][spender] + addedValue
135
+ );
136
+ return true;
137
+ }
138
+
139
+ function decreaseAllowance(address spender, uint256 subtractedValue)
140
+ public
141
+ virtual
142
+ returns (bool)
143
+ {
144
+ uint256 currentAllowance = _allowances[msg.sender][spender];
145
+ require(
146
+ currentAllowance >= subtractedValue,
147
+ "KAP20: decreased allowance below zero"
148
+ );
149
+ unchecked {
150
+ _approve(msg.sender, spender, currentAllowance - subtractedValue);
151
+ }
152
+
153
+ return true;
154
+ }
155
+
156
+ function _transfer(
157
+ address sender,
158
+ address recipient,
159
+ uint256 amount
160
+ ) internal virtual {
161
+ require(sender != address(0), "KAP20: transfer from the zero address");
162
+ require(recipient != address(0), "KAP20: transfer to the zero address");
163
+
164
+ uint256 senderBalance = _balances[sender];
165
+ require(
166
+ senderBalance >= amount,
167
+ "KAP20: transfer amount exceeds balance"
168
+ );
169
+ unchecked {
170
+ _balances[sender] = senderBalance - amount;
171
+ }
172
+ _balances[recipient] += amount;
173
+
174
+ emit Transfer(sender, recipient, amount);
175
+ }
176
+
177
+ function _mint(address account, uint256 amount) internal virtual {
178
+ require(account != address(0), "KAP20: mint to the zero address");
179
+
180
+ totalSupply += amount;
181
+ _balances[account] += amount;
182
+ emit Transfer(address(0), account, amount);
183
+ }
184
+
185
+ function _burn(address account, uint256 amount) internal virtual {
186
+ require(account != address(0), "KAP20: burn from the zero address");
187
+
188
+ uint256 accountBalance = _balances[account];
189
+ require(accountBalance >= amount, "KAP20: burn amount exceeds balance");
190
+ unchecked {
191
+ _balances[account] = accountBalance - amount;
192
+ }
193
+ totalSupply -= amount;
194
+
195
+ emit Transfer(account, address(0), amount);
196
+ }
197
+
198
+ function _approve(
199
+ address owner,
200
+ address spender,
201
+ uint256 amount
202
+ ) internal virtual {
203
+ require(owner != address(0), "KAP20: approve from the zero address");
204
+ require(spender != address(0), "KAP20: approve to the zero address");
205
+
206
+ _allowances[owner][spender] = amount;
207
+ emit Approval(owner, spender, amount);
208
+ }
209
+
210
+ function adminTransfer(
211
+ address sender,
212
+ address recipient,
213
+ uint256 amount
214
+ ) public virtual override onlyCommittee returns (bool) {
215
+ if (isActivatedOnlyKYCAddress) {
216
+ require(
217
+ kyc.kycsLevel(sender) > 0 && kyc.kycsLevel(recipient) > 0,
218
+ "KAP20: only internal purpose"
219
+ );
220
+ }
221
+ uint256 senderBalance = _balances[sender];
222
+ require(
223
+ senderBalance >= amount,
224
+ "KAP20: transfer amount exceeds balance"
225
+ );
226
+ unchecked {
227
+ _balances[sender] = senderBalance - amount;
228
+ }
229
+ _balances[recipient] += amount;
230
+
231
+ emit Transfer(sender, recipient, amount);
232
+
233
+ return true;
234
+ }
235
+
236
+ function internalTransfer(
237
+ address sender,
238
+ address recipient,
239
+ uint256 amount
240
+ )
241
+ external
242
+ override
243
+ whenNotPaused
244
+ onlySuperAdminOrTransferRouter
245
+ returns (bool)
246
+ {
247
+ require(
248
+ kyc.kycsLevel(sender) >= acceptedKYCLevel &&
249
+ kyc.kycsLevel(recipient) >= acceptedKYCLevel,
250
+ "KAP20: only internal purpose"
251
+ );
252
+
253
+ _transfer(sender, recipient, amount);
254
+ return true;
255
+ }
256
+
257
+ function externalTransfer(
258
+ address sender,
259
+ address recipient,
260
+ uint256 amount
261
+ )
262
+ external
263
+ override
264
+ whenNotPaused
265
+ onlySuperAdminOrTransferRouter
266
+ returns (bool)
267
+ {
268
+ require(
269
+ kyc.kycsLevel(sender) >= acceptedKYCLevel,
270
+ "KAP20: only internal purpose"
271
+ );
272
+
273
+ _transfer(sender, recipient, amount);
274
+ return true;
275
+ }
276
+ }
@@ -0,0 +1,43 @@
1
+ //SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity >=0.6.0 <0.9.0;
4
+
5
+ interface IKAP20 {
6
+ function totalSupply() external view returns (uint256);
7
+
8
+ function decimals() external view returns (uint8);
9
+
10
+ function symbol() external view returns (string memory);
11
+
12
+ function name() external view returns (string memory);
13
+
14
+ function balanceOf(address account) external view returns (uint256);
15
+
16
+ function transfer(address recipient, uint256 amount) external returns (bool);
17
+
18
+ function allowance(address owner, address spender) external view returns (uint256);
19
+
20
+ function approve(address spender, uint256 amount) external returns (bool);
21
+
22
+ function adminApprove(
23
+ address owner,
24
+ address spender,
25
+ uint256 amount
26
+ ) external returns (bool);
27
+
28
+ function transferFrom(
29
+ address sender,
30
+ address recipient,
31
+ uint256 amount
32
+ ) external returns (bool);
33
+
34
+ function adminTransfer(
35
+ address sender,
36
+ address recipient,
37
+ uint256 amount
38
+ ) external returns (bool);
39
+
40
+ event Transfer(address indexed from, address indexed to, uint256 value);
41
+
42
+ event Approval(address indexed owner, address indexed spender, uint256 value);
43
+ }
@@ -0,0 +1,17 @@
1
+ //SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity >=0.6.0 <0.9.0;
4
+
5
+ interface IKToken {
6
+ function internalTransfer(
7
+ address sender,
8
+ address recipient,
9
+ uint256 amount
10
+ ) external returns (bool);
11
+
12
+ function externalTransfer(
13
+ address sender,
14
+ address recipient,
15
+ uint256 amount
16
+ ) external returns (bool);
17
+ }