btc20271457 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 (24) hide show
  1. package/.idea/Web3-Financial-Engineering-Courses-main.iml +9 -0
  2. package/.idea/git_toolbox_prj.xml +15 -0
  3. package/.idea/modules.xml +8 -0
  4. package/.idea/vcs.xml +6 -0
  5. package/0.web3_financial_infrastructure/dex_protocol/dex.sol +29 -0
  6. package/0.web3_financial_infrastructure/dex_protocol/dexInfra/AMMData.sol +150 -0
  7. package/0.web3_financial_infrastructure/dex_protocol/dexInfra/Algorithm.sol +97 -0
  8. package/0.web3_financial_infrastructure/dex_protocol/dexInfra/Idatastore.sol +120 -0
  9. package/0.web3_financial_infrastructure/dex_protocol/dexInfra/datastorage.sol +383 -0
  10. package/0.web3_financial_infrastructure/dex_protocol/dexInfra/lptoken.sol +33 -0
  11. package/0.web3_financial_infrastructure/dex_protocol/dexInfra/swap.sol +550 -0
  12. package/0.web3_financial_infrastructure/dex_protocol/dex_protocol.md +51 -0
  13. package/0.web3_financial_infrastructure/liquidity_protocol/bank.sol +258 -0
  14. package/0.web3_financial_infrastructure/liquidity_protocol/bank0.sol +29 -0
  15. package/0.web3_financial_infrastructure/liquidity_protocol/bank1.sol +58 -0
  16. package/0.web3_financial_infrastructure/liquidity_protocol/bank2.sol +124 -0
  17. package/0.web3_financial_infrastructure/liquidity_protocol/bank3.sol +210 -0
  18. package/0.web3_financial_infrastructure/liquidity_protocol/liquidity_protocol.md +58 -0
  19. package/0.web3_financial_infrastructure/liquidity_protocol/product.md +33 -0
  20. package/LICENSE +21 -0
  21. package/README.md +113 -0
  22. package/package.json +26 -0
  23. package/tea.yaml +96 -0
  24. package/tranpack.sh +23 -0
@@ -0,0 +1,383 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ import "./lptoken.sol";
4
+ import "./IWETH.sol";
5
+ import "@openzeppelin/contracts/access/AccessControl.sol";
6
+ import "./Algorithm.sol";
7
+
8
+ pragma solidity ^0.8.20;
9
+
10
+ //to do list pay liquidity
11
+
12
+ contract Datastore is AccessControl{
13
+
14
+
15
+ //lend
16
+ mapping (address => address) _ctoken;
17
+ mapping (address => bool) _whiteListToken;
18
+
19
+ mapping (address => uint) _whiteListReserve;
20
+ mapping (address => uint) _whiteListBorrowed;
21
+
22
+ mapping (address => bool) _whiteListLpAddr;
23
+
24
+ mapping (address => mapping (address => uint)) _userWhiteListReserve;
25
+ mapping (address => mapping (address => uint)) _userWhiteListBorrowed;
26
+
27
+
28
+ address[] _whiteListTokenList;
29
+
30
+
31
+ bytes32 public constant FEE_CONTROL_ROLE = keccak256("FEE_CONTROL_ROLE");
32
+ bytes32 public constant PAIR_CONTROL_ROLE = keccak256("PAIR_CONTROL_ROLE");
33
+ bytes32 public constant DATA_CONTROL_ROLE = keccak256("DATA_CONTROL_ROLE");
34
+ bytes32 public constant COMP_CONTROL_ROLE = keccak256("COMP_CONTROL_ROLE");
35
+
36
+
37
+ mapping (address => mapping (address => mapping (uint => uint))) public _borrowedAmount;//user => lp => assetType => amount
38
+ mapping (address => mapping (address => mapping (uint => uint))) public _payDebtAmount;
39
+ mapping (address => mapping (uint => uint)) public _allBorrowedAmount;//lp => assetType => amount
40
+ mapping (address => mapping (uint => uint)) public _allPayDebtAmount;
41
+
42
+
43
+
44
+ uint constant public ONE_ETH = 10 ** 18;
45
+
46
+
47
+ mapping(address => address) _pairCreator;//lpAddr pairCreator
48
+ address [] _lpTokenAddressList;//lptoken的数组
49
+ address [] _whiteListLpTokenList;
50
+
51
+ mapping(address => mapping(address => uint)) _virtualReserve;
52
+ mapping(address => mapping(address => uint)) _reserve;//第一个address是lptoken的address ,第2个是相应token的资产,uint是资产的amount
53
+ mapping(address => mapping(address => uint)) _borrowed;
54
+
55
+ mapping (address => mapping (address => mapping (address => uint))) _userReserve;
56
+ //mapping (address => mapping (address => mapping (address => uint))) _userBorrowed;
57
+ mapping(address => uint) _userBorrowed;
58
+
59
+
60
+ uint _lpFee;//fee to pool
61
+ uint _fundFee;
62
+ mapping(address => mapping(address => address)) _lpToken;
63
+ IWETH WETH;
64
+ address _WETHAddr;
65
+
66
+ //pair op
67
+
68
+ //可以遍历出user的所有lp address
69
+ mapping (address => address []) private _userPairList;
70
+
71
+ //mapping (address => bool) public isStablePair;
72
+ mapping (address => address[2]) _lpInfo;
73
+ mapping (address => bool) _lpSwapStatic;
74
+ mapping (address => uint) _lpProfit;
75
+ mapping (address => uint) _lpCreatedTime;
76
+ mapping (address => mapping (address => bool)) _userLpExist;
77
+ mapping (address => address[]) _userLpTokenList;
78
+
79
+
80
+
81
+ address public fundAddr;
82
+ //lend
83
+ constructor() {
84
+ address defaultAdmin = msg.sender;
85
+ _grantRole(DEFAULT_ADMIN_ROLE, defaultAdmin);
86
+ _grantRole(PAIR_CONTROL_ROLE, defaultAdmin);
87
+ _grantRole(DATA_CONTROL_ROLE, defaultAdmin);
88
+ _grantRole(FEE_CONTROL_ROLE, defaultAdmin);
89
+ }
90
+ /*
91
+ function iswhiteListLpAddr(address lpAddr)public view returns(uint)
92
+ {
93
+ return _whiteListBorrowed[token];
94
+ }
95
+
96
+ function whiteListBorrowed(address token, uint amount)public onlyRole(DATA_CONTROL_ROLE)
97
+ {
98
+ _whiteListBorrowed[token] = amount;
99
+ }*/
100
+
101
+ function calAllTokenBorrowed() public view returns(uint)
102
+ {
103
+ uint amount;
104
+
105
+ for(uint i=0;i < _whiteListTokenList.length;i ++)
106
+ {
107
+ amount += _whiteListBorrowed[_whiteListTokenList[i]];
108
+
109
+ }
110
+
111
+ return amount;
112
+
113
+ }
114
+
115
+ function getBorrowedAmount(address asset) public view returns(uint)
116
+ {
117
+ return _userBorrowed[asset];
118
+ }
119
+
120
+ function userBorrowed(address asset, uint amount) public
121
+ {
122
+ _userBorrowed[asset] = amount;
123
+ }
124
+
125
+ function calTokenReserve(address token) public view returns(uint)
126
+ {
127
+ uint amount;
128
+ for(uint i=0;i < _whiteListLpTokenList.length;i ++)
129
+ {
130
+ amount += _reserve[_whiteListLpTokenList[i]][token];
131
+ }
132
+ return amount;
133
+ }
134
+
135
+ function calUserTokenReserve(address user,address token) public view returns(uint)
136
+ {
137
+ uint amount;
138
+ for(uint i=0;i < _whiteListLpTokenList.length;i ++)
139
+ {
140
+ amount += _userReserve[user][_whiteListLpTokenList[i]][token];
141
+ }
142
+ return amount;
143
+ }
144
+
145
+
146
+
147
+ function calAllTokenValue() public view returns(uint)
148
+ {
149
+ uint amount;
150
+ for(uint i=0;i < _whiteListTokenList.length;i ++)
151
+ {
152
+ amount += calTokenReserve(_whiteListTokenList[i]);
153
+
154
+ }
155
+
156
+ return amount;
157
+ }
158
+
159
+ function calUserAllTokenValue(address user) public view returns(uint)
160
+ {
161
+ uint amount;
162
+ for(uint i=0;i < _whiteListTokenList.length;i ++)
163
+ {
164
+ amount += calUserTokenReserve(user,_whiteListTokenList[i] );
165
+ }
166
+
167
+ return amount;
168
+ }
169
+
170
+
171
+ function setWhiteListLpTokenList(address lpAddr) public
172
+ {
173
+ _whiteListLpTokenList.push(lpAddr);
174
+ }
175
+ function getWhiteListLpTokenList() public view returns(address[] memory)
176
+ {
177
+ return _whiteListLpTokenList;
178
+ }
179
+
180
+ function getWhiteListTokenList() public view returns(address[] memory)
181
+ {
182
+ return _whiteListTokenList;
183
+ }
184
+
185
+ function getWhiteListHealthFactor(address token) public view returns(uint)
186
+ {
187
+ uint tokenReserve = _whiteListReserve[token];
188
+ uint tokenBorrowed = _whiteListBorrowed[token];
189
+ uint initialReserve = tokenReserve + tokenBorrowed;
190
+ return 10e18 * tokenBorrowed / initialReserve;
191
+ }
192
+
193
+ function getWhiteListBorrowed(address token)public view returns(uint)
194
+ {
195
+ return _whiteListBorrowed[token];
196
+ }
197
+
198
+ function whiteListBorrowed(address token, uint amount)public onlyRole(DATA_CONTROL_ROLE)
199
+ {
200
+ _whiteListBorrowed[token] = amount;
201
+ }
202
+
203
+ function getWhiteListReserve(address token)public view returns(uint)
204
+ {
205
+ return _whiteListReserve[token];
206
+ }
207
+
208
+ function whiteListReserve(address token, uint amount)public onlyRole(DATA_CONTROL_ROLE)
209
+ {
210
+ _whiteListReserve[token] = amount;
211
+ }
212
+
213
+ function getUserWhiteListReserve(address user, address asset) public view returns(uint)
214
+ {
215
+ return _userWhiteListReserve[user][asset];
216
+ }
217
+
218
+ function userWhiteListReserve(address user, address asset, uint amount) public onlyRole(DATA_CONTROL_ROLE)
219
+ {
220
+ _userWhiteListReserve[user][asset] = amount;
221
+ }
222
+
223
+ function getUserWhiteListBorrowed(address user, address asset) public view returns(uint)
224
+ {
225
+ return _userWhiteListBorrowed[user][asset];
226
+ }
227
+
228
+ function userWhiteListBorrowed(address user, address asset, uint amount) public onlyRole(DATA_CONTROL_ROLE)
229
+ {
230
+ _userWhiteListBorrowed[user][asset] = amount;
231
+ }
232
+
233
+ function whiteListToken(address token) public view returns(bool)
234
+ {
235
+ return _whiteListToken[token];
236
+ }
237
+
238
+ function setWhiteListToken(address token, bool isWhiteListToken) public onlyRole(DATA_CONTROL_ROLE)
239
+ {
240
+ _whiteListToken[token] = isWhiteListToken;
241
+ }
242
+
243
+ function pushTokenInWhiteList(address token) public onlyRole(DATA_CONTROL_ROLE){
244
+ _whiteListTokenList.push(token);
245
+ }
246
+ function getCtoken(address token) public view returns(address)
247
+ {
248
+ return _ctoken[token];
249
+ }
250
+
251
+ function ctoken (address token ,address c_token) public onlyRole(COMP_CONTROL_ROLE)
252
+ {
253
+ _ctoken[token] = c_token;
254
+ }
255
+
256
+ function getUserReserve(address user,address lpAddr,address token) public view returns(uint)
257
+ {
258
+ return _userReserve[user][lpAddr][token];
259
+ }
260
+
261
+ function userReserve(address user,address lpAddr,address token,uint amount)public onlyRole(DATA_CONTROL_ROLE)
262
+ {
263
+ _userReserve[user][lpAddr][token] = amount;
264
+ }
265
+
266
+ function getVirtualReserve(address lpAddr,address token) public view returns(uint)
267
+ {
268
+ return _virtualReserve[lpAddr][token];
269
+ }
270
+ function virtualReserve(address lpAddr,address token,uint amount) public onlyRole(DATA_CONTROL_ROLE)
271
+ {
272
+ _virtualReserve[lpAddr][token] = amount;
273
+ }
274
+
275
+ function getReserve(address lpAddr,address token) public view returns(uint)
276
+ {
277
+ return _reserve[lpAddr][token];
278
+ }
279
+ function reserve(address lpAddr,address token,uint amount)public onlyRole(DATA_CONTROL_ROLE){
280
+ _reserve[lpAddr][token] = amount;
281
+ }
282
+
283
+
284
+ function getPairCreator (address lpAddr) public view returns(address)
285
+ {
286
+ return _pairCreator[lpAddr];
287
+ }
288
+
289
+ function pairCreator(address lpAddr, address user)public onlyRole(DATA_CONTROL_ROLE)
290
+ {
291
+ _pairCreator[lpAddr] = user;
292
+ }
293
+
294
+ function getBorrowedAmount(address userAddr, address lpAddr, uint assetType) public view returns(uint)
295
+ {
296
+ return _borrowedAmount[userAddr][lpAddr][assetType];
297
+ }
298
+
299
+ function borrowedAmount(address userAddr, address lpAddr, uint assetType, uint amount) public onlyRole(DATA_CONTROL_ROLE)
300
+ {
301
+ _borrowedAmount[userAddr][lpAddr][assetType] = amount;
302
+ }
303
+
304
+ function getPayDebtAmount(address userAddr, address lpAddr, uint assetType) public view returns(uint)
305
+ {
306
+ return _payDebtAmount[userAddr][lpAddr][assetType];
307
+ }
308
+
309
+ function payDebtAmount(address userAddr, address lpAddr, uint assetType, uint amount) public onlyRole(DATA_CONTROL_ROLE)
310
+ {
311
+ _payDebtAmount[userAddr][lpAddr][assetType] = amount;
312
+ }
313
+
314
+ function getLpToken(address tokena, address tokenb) public view returns(address)
315
+ {
316
+ return _lpToken[tokena][tokenb];
317
+ }
318
+ function lpToken(address tokena, address tokenb,address lptokenAddr) public onlyRole(DATA_CONTROL_ROLE)
319
+ {
320
+ _lpToken[tokena][tokenb] = lptokenAddr;
321
+ }
322
+
323
+ function getLpFee() public view returns(uint)
324
+ {
325
+ return _lpFee;
326
+ }
327
+
328
+ function getFundFee() public view returns(uint)
329
+ {
330
+ return _fundFee;
331
+ }
332
+
333
+ function getLpProfit(address lpAddr) public view returns(uint)
334
+ {
335
+ return _lpProfit[lpAddr];
336
+ }
337
+
338
+ function WETHAddr() public view returns(address)
339
+ {
340
+ return _WETHAddr;
341
+ }
342
+
343
+
344
+ //管理人员权限
345
+
346
+ function lpProfit(address lpAddr, uint profit)public onlyRole(FEE_CONTROL_ROLE)
347
+ {
348
+ _lpProfit[lpAddr] = profit;
349
+ }
350
+
351
+ function setLpFee(uint fee) external onlyRole(FEE_CONTROL_ROLE){
352
+ _lpFee = fee;// dx / 100000
353
+ }
354
+
355
+
356
+
357
+ function setFundFee(uint fee)external onlyRole(FEE_CONTROL_ROLE){
358
+ _fundFee = fee;
359
+ }
360
+
361
+ function setFundAddr(address _fundAddr) external onlyRole(FEE_CONTROL_ROLE){
362
+ fundAddr = _fundAddr;
363
+ }
364
+
365
+
366
+
367
+ function setWeth(address _wethAddr) public onlyRole(PAIR_CONTROL_ROLE){
368
+ WETH = IWETH(_wethAddr);
369
+ _WETHAddr = _wethAddr;
370
+ }
371
+ function setLpSwapStatic(address _lpAddr, bool _static) external onlyRole(PAIR_CONTROL_ROLE){
372
+ _lpSwapStatic[_lpAddr] = _static;
373
+ }
374
+
375
+ function updateReserve(address lptokenAddr,address tokena, address tokenb, uint reserve0, uint reserve1) public onlyRole(DATA_CONTROL_ROLE) {
376
+ _reserve[lptokenAddr][tokena] = reserve0;
377
+ _reserve[lptokenAddr][tokenb] = reserve1;
378
+ }
379
+
380
+
381
+
382
+
383
+ }
@@ -0,0 +1,33 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.9;
3
+
4
+ import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
5
+ import "@openzeppelin/contracts/access/Ownable.sol";
6
+
7
+ contract lptoken is ERC20, Ownable {
8
+
9
+ address token0;
10
+ address token1;
11
+
12
+
13
+
14
+ constructor(address _token0,address _token1 ) ERC20("lptoken", "LPT") {
15
+ token0 = _token0;
16
+ token1 = _token1;
17
+ }
18
+
19
+ function mint(address account,uint256 amount) public onlyOwner{
20
+ _mint(account, amount);
21
+ }
22
+
23
+ function burn(address account, uint256 amount) public onlyOwner
24
+ {
25
+ _burn(account,amount);
26
+ }
27
+ function getTokenAddr() public view returns(address,address){
28
+ return (token0,token1);
29
+ }
30
+
31
+
32
+
33
+ }