@curvefi/llamalend-api 1.1.10 → 2.0.1

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 (138) hide show
  1. package/docs/MIGRATION.md +325 -0
  2. package/docs/SUPPORT_LLv2.md +409 -0
  3. package/lib/constants/abis/OneWayLendingFactoryV2ABI.json +543 -0
  4. package/lib/constants/aliases.d.ts +0 -11
  5. package/lib/constants/aliases.js +1 -86
  6. package/lib/constants/coins.d.ts +0 -11
  7. package/lib/constants/coins.js +0 -14
  8. package/lib/constants/utils.d.ts +2 -0
  9. package/lib/constants/utils.js +2 -0
  10. package/lib/index.d.ts +10 -4
  11. package/lib/interfaces.d.ts +3 -2
  12. package/lib/lendMarkets/LendMarketTemplate.d.ts +13 -502
  13. package/lib/lendMarkets/LendMarketTemplate.js +245 -2860
  14. package/lib/lendMarkets/fetch/fetchFactoryData.d.ts +13 -0
  15. package/lib/lendMarkets/fetch/fetchFactoryData.js +101 -0
  16. package/lib/lendMarkets/fetch/fetchLendMarkets.d.ts +3 -0
  17. package/lib/lendMarkets/fetch/fetchLendMarkets.js +94 -0
  18. package/lib/lendMarkets/interfaces/common/amm.d.ts +10 -0
  19. package/lib/lendMarkets/interfaces/common/amm.js +1 -0
  20. package/lib/lendMarkets/interfaces/common/index.d.ts +5 -0
  21. package/lib/lendMarkets/interfaces/common/index.js +5 -0
  22. package/lib/lendMarkets/interfaces/common/prices.d.ts +13 -0
  23. package/lib/lendMarkets/interfaces/common/prices.js +1 -0
  24. package/lib/lendMarkets/interfaces/common/userPosition.d.ts +39 -0
  25. package/lib/lendMarkets/interfaces/common/userPosition.js +1 -0
  26. package/lib/lendMarkets/interfaces/common/vault.d.ts +55 -0
  27. package/lib/lendMarkets/interfaces/common/vault.js +1 -0
  28. package/lib/lendMarkets/interfaces/common/wallet.d.ts +8 -0
  29. package/lib/lendMarkets/interfaces/common/wallet.js +1 -0
  30. package/lib/lendMarkets/interfaces/v1/index.d.ts +4 -0
  31. package/lib/lendMarkets/interfaces/v1/index.js +4 -0
  32. package/lib/lendMarkets/interfaces/v1/leverageV1.d.ts +90 -0
  33. package/lib/lendMarkets/interfaces/v1/leverageV1.js +1 -0
  34. package/lib/lendMarkets/interfaces/v1/loanV1.d.ts +81 -0
  35. package/lib/lendMarkets/interfaces/v1/loanV1.js +1 -0
  36. package/lib/lendMarkets/interfaces/v1/statsV1.d.ts +49 -0
  37. package/lib/lendMarkets/interfaces/v1/statsV1.js +1 -0
  38. package/lib/lendMarkets/interfaces/v2/index.d.ts +3 -0
  39. package/lib/lendMarkets/interfaces/v2/index.js +3 -0
  40. package/lib/lendMarkets/interfaces/v2/leverageV2.d.ts +90 -0
  41. package/lib/lendMarkets/interfaces/v2/leverageV2.js +1 -0
  42. package/lib/lendMarkets/interfaces/v2/loanV2.d.ts +81 -0
  43. package/lib/lendMarkets/interfaces/v2/loanV2.js +1 -0
  44. package/lib/lendMarkets/interfaces/v2/statsV2.d.ts +49 -0
  45. package/lib/lendMarkets/interfaces/v2/statsV2.js +1 -0
  46. package/lib/lendMarkets/lendMarketConstructor.js +1 -1
  47. package/lib/lendMarkets/modules/common/amm.d.ts +19 -0
  48. package/lib/lendMarkets/modules/common/amm.js +137 -0
  49. package/lib/lendMarkets/modules/common/index.d.ts +9 -0
  50. package/lib/lendMarkets/modules/common/index.js +9 -0
  51. package/lib/lendMarkets/modules/common/leverageZapV1Base.d.ts +118 -0
  52. package/lib/lendMarkets/modules/common/leverageZapV1Base.js +770 -0
  53. package/lib/lendMarkets/modules/{leverageZapV2.d.ts → common/leverageZapV2Base.d.ts} +10 -5
  54. package/lib/lendMarkets/modules/{leverageZapV2.js → common/leverageZapV2Base.js} +36 -32
  55. package/lib/lendMarkets/modules/common/loanBase.d.ts +123 -0
  56. package/lib/lendMarkets/modules/common/loanBase.js +801 -0
  57. package/lib/lendMarkets/modules/common/prices.d.ts +19 -0
  58. package/lib/lendMarkets/modules/common/prices.js +104 -0
  59. package/lib/lendMarkets/modules/common/statsBase.d.ts +69 -0
  60. package/lib/lendMarkets/modules/common/statsBase.js +291 -0
  61. package/lib/lendMarkets/modules/common/userPosition.d.ts +46 -0
  62. package/lib/lendMarkets/modules/common/userPosition.js +223 -0
  63. package/lib/lendMarkets/modules/common/vault.d.ts +69 -0
  64. package/lib/lendMarkets/modules/common/vault.js +535 -0
  65. package/lib/lendMarkets/modules/common/wallet.d.ts +13 -0
  66. package/lib/lendMarkets/modules/common/wallet.js +28 -0
  67. package/lib/lendMarkets/modules/index.d.ts +1 -1
  68. package/lib/lendMarkets/modules/index.js +1 -1
  69. package/lib/lendMarkets/modules/v1/index.d.ts +4 -0
  70. package/lib/lendMarkets/modules/v1/index.js +4 -0
  71. package/lib/lendMarkets/modules/v1/leverageV1ZapV1.d.ts +3 -0
  72. package/lib/lendMarkets/modules/v1/leverageV1ZapV1.js +3 -0
  73. package/lib/lendMarkets/modules/v1/leverageV1ZapV2.d.ts +3 -0
  74. package/lib/lendMarkets/modules/v1/leverageV1ZapV2.js +3 -0
  75. package/lib/lendMarkets/modules/v1/loanV1.d.ts +4 -0
  76. package/lib/lendMarkets/modules/v1/loanV1.js +3 -0
  77. package/lib/lendMarkets/modules/v1/statsV1.d.ts +3 -0
  78. package/lib/lendMarkets/modules/v1/statsV1.js +3 -0
  79. package/lib/lendMarkets/modules/v2/index.d.ts +4 -0
  80. package/lib/lendMarkets/modules/v2/index.js +4 -0
  81. package/lib/lendMarkets/modules/v2/leverageV2ZapV1.d.ts +3 -0
  82. package/lib/lendMarkets/modules/v2/leverageV2ZapV1.js +3 -0
  83. package/lib/lendMarkets/modules/v2/leverageV2ZapV2.d.ts +3 -0
  84. package/lib/lendMarkets/modules/v2/leverageV2ZapV2.js +3 -0
  85. package/lib/lendMarkets/modules/v2/loanV2.d.ts +4 -0
  86. package/lib/lendMarkets/modules/v2/loanV2.js +3 -0
  87. package/lib/lendMarkets/modules/v2/statsV2.d.ts +3 -0
  88. package/lib/lendMarkets/modules/v2/statsV2.js +3 -0
  89. package/lib/llamalend.d.ts +6 -6
  90. package/lib/llamalend.js +46 -210
  91. package/lib/utils.js +2 -33
  92. package/package.json +1 -1
  93. package/src/constants/abis/OneWayLendingFactoryV2ABI.json +543 -0
  94. package/src/constants/aliases.ts +1 -97
  95. package/src/constants/coins.ts +0 -25
  96. package/src/constants/utils.ts +4 -0
  97. package/src/interfaces.ts +3 -2
  98. package/src/lendMarkets/LendMarketTemplate.ts +327 -3223
  99. package/src/lendMarkets/fetch/fetchFactoryData.ts +113 -0
  100. package/src/lendMarkets/fetch/fetchLendMarkets.ts +108 -0
  101. package/src/lendMarkets/interfaces/common/amm.ts +11 -0
  102. package/src/lendMarkets/interfaces/common/index.ts +5 -0
  103. package/src/lendMarkets/interfaces/common/prices.ts +13 -0
  104. package/src/lendMarkets/interfaces/common/userPosition.ts +24 -0
  105. package/src/lendMarkets/interfaces/common/vault.ts +48 -0
  106. package/src/lendMarkets/interfaces/common/wallet.ts +3 -0
  107. package/src/lendMarkets/interfaces/v1/index.ts +4 -0
  108. package/src/lendMarkets/interfaces/v1/leverageV1.ts +84 -0
  109. package/src/lendMarkets/interfaces/v1/loanV1.ts +85 -0
  110. package/src/lendMarkets/interfaces/v1/statsV1.ts +21 -0
  111. package/src/lendMarkets/interfaces/v2/index.ts +3 -0
  112. package/src/lendMarkets/interfaces/v2/leverageV2.ts +84 -0
  113. package/src/lendMarkets/interfaces/v2/loanV2.ts +85 -0
  114. package/src/lendMarkets/interfaces/v2/statsV2.ts +21 -0
  115. package/src/lendMarkets/lendMarketConstructor.ts +1 -1
  116. package/src/lendMarkets/modules/common/amm.ts +132 -0
  117. package/src/lendMarkets/modules/common/index.ts +9 -0
  118. package/src/lendMarkets/modules/common/leverageZapV1Base.ts +912 -0
  119. package/src/lendMarkets/modules/{leverageZapV2.ts → common/leverageZapV2Base.ts} +41 -37
  120. package/src/lendMarkets/modules/common/loanBase.ts +781 -0
  121. package/src/lendMarkets/modules/common/prices.ts +111 -0
  122. package/src/lendMarkets/modules/common/statsBase.ts +313 -0
  123. package/src/lendMarkets/modules/common/userPosition.ts +243 -0
  124. package/src/lendMarkets/modules/common/vault.ts +551 -0
  125. package/src/lendMarkets/modules/common/wallet.ts +29 -0
  126. package/src/lendMarkets/modules/index.ts +1 -1
  127. package/src/lendMarkets/modules/v1/index.ts +4 -0
  128. package/src/lendMarkets/modules/v1/leverageV1ZapV1.ts +3 -0
  129. package/src/lendMarkets/modules/v1/leverageV1ZapV2.ts +3 -0
  130. package/src/lendMarkets/modules/v1/loanV1.ts +4 -0
  131. package/src/lendMarkets/modules/v1/statsV1.ts +3 -0
  132. package/src/lendMarkets/modules/v2/index.ts +4 -0
  133. package/src/lendMarkets/modules/v2/leverageV2ZapV1.ts +3 -0
  134. package/src/lendMarkets/modules/v2/leverageV2ZapV2.ts +3 -0
  135. package/src/lendMarkets/modules/v2/loanV2.ts +4 -0
  136. package/src/lendMarkets/modules/v2/statsV2.ts +3 -0
  137. package/src/llamalend.ts +47 -244
  138. package/src/utils.ts +2 -35
@@ -1,13 +1,18 @@
1
1
  import memoize from "memoizee";
2
- import type { TAmount, TGas, IDict, IQuote, ILeverageMetrics, GetExpectedFn } from "../../interfaces.js";
3
- import type { LendMarketTemplate } from "../LendMarketTemplate.js";
2
+ import type { TAmount, TGas, IDict, IQuote, ILeverageMetrics, GetExpectedFn } from "../../../interfaces";
3
+ import type { LendMarketTemplate } from "../../LendMarketTemplate";
4
+ import { Llamalend } from "../../../llamalend";
4
5
  import BigNumber from "bignumber.js";
5
6
  /**
6
7
  * LeverageZapV2 module for LendMarketTemplate
8
+ *
9
+ * DEPENDENCIES:
10
+ * - prices
11
+ * - userPosition
7
12
  */
8
- export declare class LeverageZapV2Module {
9
- private market;
10
- private llamalend;
13
+ export declare class LeverageZapV2BaseModule {
14
+ protected market: LendMarketTemplate;
15
+ protected llamalend: Llamalend;
11
16
  constructor(market: LendMarketTemplate);
12
17
  private _getMarketId;
13
18
  hasLeverage: () => boolean;
@@ -8,12 +8,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import memoize from "memoizee";
11
- import { _getAddress, parseUnits, BN, toBN, fromBN, ensureAllowance, hasAllowance, ensureAllowanceEstimateGas, formatUnits, smartNumber, formatNumber, _mulBy1_3, DIGas, buildCalldataForLeverageZapV2, } from "../../utils.js";
11
+ import { _getAddress, parseUnits, BN, toBN, fromBN, ensureAllowance, hasAllowance, ensureAllowanceEstimateGas, formatUnits, smartNumber, formatNumber, _mulBy1_3, DIGas, buildCalldataForLeverageZapV2, } from "../../../utils";
12
12
  import BigNumber from "bignumber.js";
13
13
  /**
14
14
  * LeverageZapV2 module for LendMarketTemplate
15
+ *
16
+ * DEPENDENCIES:
17
+ * - prices
18
+ * - userPosition
15
19
  */
16
- export class LeverageZapV2Module {
20
+ export class LeverageZapV2BaseModule {
17
21
  constructor(market) {
18
22
  this._getMarketId = () => Number(this.market.id.split("-").slice(-1)[0]);
19
23
  // ============ CREATE LOAN METHODS ============
@@ -25,8 +29,8 @@ export class LeverageZapV2Module {
25
29
  this._checkLeverageZap();
26
30
  const _userCollateral = parseUnits(userCollateral, this.market.collateral_token.decimals);
27
31
  const contract = this.llamalend.contracts[this.llamalend.constants.ALIASES.leverage_zap_v2].multicallContract;
28
- const oraclePriceBand = yield this.market.oraclePriceBand();
29
- const pAvgApproxBN = BN(yield this.market.calcTickPrice(oraclePriceBand)); // upper tick of oracle price band
32
+ const oraclePriceBand = yield this.market.prices.oraclePriceBand();
33
+ const pAvgApproxBN = BN(yield this.market.prices.calcTickPrice(oraclePriceBand)); // upper tick of oracle price band
30
34
  let pAvgBN = null;
31
35
  const arrLength = this.market.maxBands - this.market.minBands + 1;
32
36
  let maxLeverageCollateralBN = new Array(arrLength).fill(BN(0));
@@ -87,7 +91,7 @@ export class LeverageZapV2Module {
87
91
  const _collateralFromUserBorrowed = _additionalCollateral - _collateralFromDebt;
88
92
  let _stateCollateral = BigInt(0);
89
93
  if (user) {
90
- const { _collateral, _borrowed } = yield this.market._userState(user);
94
+ const { _collateral, _borrowed } = yield this.market.userPosition.userStateBigInt(user);
91
95
  if (_borrowed > BigInt(0))
92
96
  throw Error(`User ${user} is already in liquidation mode`);
93
97
  _stateCollateral = _collateral;
@@ -99,10 +103,10 @@ export class LeverageZapV2Module {
99
103
  });
100
104
  this._leverageCalcN1 = memoize((userCollateral, userBorrowed, debt, range, quote, user) => __awaiter(this, void 0, void 0, function* () {
101
105
  if (range > 0)
102
- this.market._checkRange(range);
106
+ this.market.prices.checkRange(range);
103
107
  let _stateDebt = BigInt(0);
104
108
  if (user) {
105
- const { _debt, _borrowed, _N } = yield this.market._userState(user);
109
+ const { _debt, _borrowed, _N } = yield this.market.userPosition.userStateBigInt(user);
106
110
  if (_borrowed > BigInt(0))
107
111
  throw Error(`User ${user} is already in liquidation mode`);
108
112
  _stateDebt = _debt;
@@ -161,7 +165,7 @@ export class LeverageZapV2Module {
161
165
  if (!(yield this.leverageRepayIsAvailable({ stateCollateral, userCollateral, userBorrowed, quote, address })))
162
166
  return [parseUnits(0, 0), parseUnits(0, 0)];
163
167
  const _stateRepayCollateral = parseUnits(stateCollateral, this.market.collateral_token.decimals);
164
- const { _collateral: _stateCollateral, _debt: _stateDebt, _N } = yield this.market._userState(address);
168
+ const { _collateral: _stateCollateral, _debt: _stateDebt, _N } = yield this.market.userPosition.userStateBigInt(address);
165
169
  if (_stateDebt == BigInt(0))
166
170
  throw Error(`Loan for ${address} does not exist`);
167
171
  if (_stateCollateral < _stateRepayCollateral)
@@ -221,11 +225,11 @@ export class LeverageZapV2Module {
221
225
  // max_borrowable = userCollateral / (1 / (k_effective * max_p_base) - 1 / p_avg)
222
226
  this._checkLeverageZap();
223
227
  if (range > 0)
224
- this.market._checkRange(range);
228
+ this.market.prices.checkRange(range);
225
229
  const _userCollateral = parseUnits(userCollateral, this.market.collateral_token.decimals);
226
230
  const _userBorrowed = parseUnits(userBorrowed, this.market.borrowed_token.decimals);
227
- const oraclePriceBand = yield this.market.oraclePriceBand();
228
- let pAvgBN = BN(yield this.market.calcTickPrice(oraclePriceBand)); // upper tick of oracle price band
231
+ const oraclePriceBand = yield this.market.prices.oraclePriceBand();
232
+ let pAvgBN = BN(yield this.market.prices.calcTickPrice(oraclePriceBand)); // upper tick of oracle price band
229
233
  let maxBorrowablePrevBN = BN(0);
230
234
  let maxBorrowableBN = BN(0);
231
235
  let _userEffectiveCollateral = BigInt(0);
@@ -280,7 +284,7 @@ export class LeverageZapV2Module {
280
284
  return __awaiter(this, arguments, void 0, function* ({ userCollateral, userBorrowed, debt, range, quote, healthIsFull = true }) {
281
285
  this._checkLeverageZap();
282
286
  const [_n2, _n1] = yield this._leverageBands(userCollateral, userBorrowed, debt, range, quote);
283
- const prices = yield this.market._getPrices(_n2, _n1);
287
+ const prices = yield this.market.prices.getPrices(_n2, _n1);
284
288
  const health = yield this._leverageHealth(userCollateral, userBorrowed, debt, range, quote, healthIsFull);
285
289
  return {
286
290
  priceImpact: quote.priceImpact,
@@ -305,7 +309,7 @@ export class LeverageZapV2Module {
305
309
  return __awaiter(this, void 0, void 0, function* () {
306
310
  const _n1 = yield this._leverageCalcN1(userCollateral, userBorrowed, debt, range, quote, user);
307
311
  if (range < 0) {
308
- const { N } = yield this.market.userState(user);
312
+ const { N } = yield this.market.userPosition.userState(user);
309
313
  range = Number(N);
310
314
  }
311
315
  const _n2 = _n1 + BigInt(range - 1);
@@ -350,7 +354,7 @@ export class LeverageZapV2Module {
350
354
  const prices = {};
351
355
  for (let N = this.market.minBands; N <= this.market.maxBands; N++) {
352
356
  if (_bands[N]) {
353
- prices[N] = yield this.market._calcPrices(..._bands[N]);
357
+ prices[N] = yield this.market.prices.calcPrices(..._bands[N]);
354
358
  }
355
359
  else {
356
360
  prices[N] = null;
@@ -362,9 +366,9 @@ export class LeverageZapV2Module {
362
366
  _leverageHealth(userCollateral_1, userBorrowed_1, dDebt_1, range_1, quote_1, full_1) {
363
367
  return __awaiter(this, arguments, void 0, function* (userCollateral, userBorrowed, dDebt, range, quote, full, user = this.llamalend.constants.ZERO_ADDRESS) {
364
368
  if (range > 0)
365
- this.market._checkRange(range);
369
+ this.market.prices.checkRange(range);
366
370
  const { _totalCollateral } = yield this._leverageExpectedCollateral(userCollateral, userBorrowed, dDebt, quote, user);
367
- const { _borrowed, _N } = yield this.market._userState(user);
371
+ const { _borrowed, _N } = yield this.market.userPosition.userStateBigInt(user);
368
372
  if (_borrowed > BigInt(0))
369
373
  throw Error(`User ${user} is already in liquidation mode`);
370
374
  if (range < 0)
@@ -407,9 +411,9 @@ export class LeverageZapV2Module {
407
411
  }
408
412
  _leverageCreateLoan(userCollateral, userBorrowed, debt, range, minRecv, router, calldata, estimateGas) {
409
413
  return __awaiter(this, void 0, void 0, function* () {
410
- if (yield this.market.userLoanExists())
414
+ if (yield this.market.userPosition.userLoanExists())
411
415
  throw Error("Loan already created");
412
- this.market._checkRange(range);
416
+ this.market.prices.checkRange(range);
413
417
  const _userCollateral = parseUnits(userCollateral, this.market.collateral_token.decimals);
414
418
  const _userBorrowed = parseUnits(userBorrowed, this.market.borrowed_token.decimals);
415
419
  const _debt = parseUnits(debt, this.market.borrowed_token.decimals);
@@ -445,7 +449,7 @@ export class LeverageZapV2Module {
445
449
  // max_borrowable = userCollateral / (1 / (k_effective * max_p_base) - 1 / p_avg)
446
450
  this._checkLeverageZap();
447
451
  address = _getAddress.call(this.llamalend, address);
448
- const { _collateral: _stateCollateral, _borrowed: _stateBorrowed, _debt: _stateDebt, _N } = yield this.market._userState(address);
452
+ const { _collateral: _stateCollateral, _borrowed: _stateBorrowed, _debt: _stateDebt, _N } = yield this.market.userPosition.userStateBigInt(address);
449
453
  if (_stateBorrowed > BigInt(0))
450
454
  throw Error(`User ${address} is already in liquidation mode`);
451
455
  const _userCollateral = parseUnits(userCollateral, this.market.collateral_token.decimals);
@@ -453,8 +457,8 @@ export class LeverageZapV2Module {
453
457
  const _borrowedFromStateCollateral = (yield controllerContract.max_borrowable(_stateCollateral, _N, _stateDebt, this.llamalend.constantOptions)) - _stateDebt;
454
458
  const _userBorrowed = _borrowedFromStateCollateral + parseUnits(userBorrowed, this.market.borrowed_token.decimals);
455
459
  userBorrowed = formatUnits(_userBorrowed, this.market.borrowed_token.decimals);
456
- const oraclePriceBand = yield this.market.oraclePriceBand();
457
- let pAvgBN = BN(yield this.market.calcTickPrice(oraclePriceBand)); // upper tick of oracle price band
460
+ const oraclePriceBand = yield this.market.prices.oraclePriceBand();
461
+ let pAvgBN = BN(yield this.market.prices.calcTickPrice(oraclePriceBand)); // upper tick of oracle price band
458
462
  let maxBorrowablePrevBN = BN(0);
459
463
  let maxBorrowableBN = BN(0);
460
464
  let _userEffectiveCollateral = BigInt(0);
@@ -511,7 +515,7 @@ export class LeverageZapV2Module {
511
515
  this._checkLeverageZap();
512
516
  address = _getAddress.call(this.llamalend, address);
513
517
  const [_n2, _n1] = yield this._leverageBands(userCollateral, userBorrowed, debt, -1, quote, address);
514
- const prices = yield this.market._getPrices(_n2, _n1);
518
+ const prices = yield this.market.prices.getPrices(_n2, _n1);
515
519
  const health = yield this._leverageHealth(userCollateral, userBorrowed, debt, -1, quote, healthIsFull, address);
516
520
  return {
517
521
  priceImpact: quote.priceImpact,
@@ -523,7 +527,7 @@ export class LeverageZapV2Module {
523
527
  }
524
528
  _leverageBorrowMore(userCollateral, userBorrowed, debt, minRecv, router, calldata, estimateGas) {
525
529
  return __awaiter(this, void 0, void 0, function* () {
526
- if (!(yield this.market.userLoanExists()))
530
+ if (!(yield this.market.userPosition.userLoanExists()))
527
531
  throw Error("Loan does not exist");
528
532
  const _userCollateral = parseUnits(userCollateral, this.market.collateral_token.decimals);
529
533
  const _userBorrowed = parseUnits(userBorrowed, this.market.borrowed_token.decimals);
@@ -568,7 +572,7 @@ export class LeverageZapV2Module {
568
572
  return __awaiter(this, arguments, void 0, function* ({ userCollateral, userBorrowed, debt, quote, address = "" }) {
569
573
  address = _getAddress.call(this.llamalend, address);
570
574
  this._checkLeverageZap();
571
- const { stateCollateral, totalDepositFromUser } = yield this.market._getCurrentLeverageParams(address);
575
+ const { stateCollateral, totalDepositFromUser } = yield this.market.userPosition.getCurrentLeverageParams(address);
572
576
  const expected = yield this.leverageBorrowMoreExpectedCollateral({
573
577
  userCollateral,
574
578
  userBorrowed,
@@ -585,20 +589,20 @@ export class LeverageZapV2Module {
585
589
  return __awaiter(this, arguments, void 0, function* ({ stateCollateral, userCollateral, userBorrowed, quote, address = "" }) {
586
590
  this._checkLeverageZap();
587
591
  address = _getAddress.call(this.llamalend, address);
588
- const { _borrowed: _stateBorrowed, _debt } = yield this.market._userState(address);
592
+ const { _borrowed: _stateBorrowed, _debt } = yield this.market.userPosition.userStateBigInt(address);
589
593
  const { _totalBorrowed } = this._leverageRepayExpectedBorrowed(stateCollateral, userCollateral, userBorrowed, quote);
590
594
  return _stateBorrowed + _totalBorrowed > _debt;
591
595
  });
592
596
  }
593
597
  leverageRepayIsAvailable(_a) {
594
598
  return __awaiter(this, arguments, void 0, function* ({ stateCollateral, userCollateral, userBorrowed, quote, address = "" }) {
595
- // 0. const { collateral, stablecoin, debt } = await this.market.userState(address);
599
+ // 0. const { collateral, stablecoin, debt } = await this.market.userPosition.userState(address);
596
600
  // 1. maxCollateral for deleverage is collateral from line above.
597
601
  // 2. If user is underwater (stablecoin > 0), only full repayment is available:
598
602
  // await this.deleverageRepayStablecoins(deleverageCollateral) + stablecoin > debt
599
603
  this._checkLeverageZap();
600
604
  address = _getAddress.call(this.llamalend, address);
601
- const { collateral, borrowed, debt } = yield this.market.userState(address);
605
+ const { collateral, borrowed, debt } = yield this.market.userPosition.userState(address);
602
606
  // Loan does not exist
603
607
  if (BN(debt).eq(0))
604
608
  return false;
@@ -616,7 +620,7 @@ export class LeverageZapV2Module {
616
620
  this._checkLeverageZap();
617
621
  address = _getAddress.call(this.llamalend, address);
618
622
  const [_n2, _n1] = yield this._leverageRepayBands(stateCollateral, userCollateral, userBorrowed, quote, address);
619
- const prices = yield this.market._getPrices(_n2, _n1);
623
+ const prices = yield this.market.prices.getPrices(_n2, _n1);
620
624
  const health = yield this._leverageRepayHealth(stateCollateral, userCollateral, userBorrowed, quote, healthIsFull, address);
621
625
  const _stateCollateral = parseUnits(stateCollateral, this.market.collateral_token.decimals);
622
626
  const _userCollateral = parseUnits(userCollateral, this.market.collateral_token.decimals);
@@ -633,7 +637,7 @@ export class LeverageZapV2Module {
633
637
  return __awaiter(this, arguments, void 0, function* (stateCollateral, userCollateral, userBorrowed, quote, full = true, address = "") {
634
638
  this._checkLeverageZap();
635
639
  address = _getAddress.call(this.llamalend, address);
636
- const { _borrowed: _stateBorrowed, _debt, _N } = yield this.market._userState(address);
640
+ const { _borrowed: _stateBorrowed, _debt, _N } = yield this.market.userPosition.userStateBigInt(address);
637
641
  if (_stateBorrowed > BigInt(0))
638
642
  return "0.0";
639
643
  if (!(yield this.leverageRepayIsAvailable({ stateCollateral, userCollateral, userBorrowed, quote, address })))
@@ -669,7 +673,7 @@ export class LeverageZapV2Module {
669
673
  }
670
674
  _leverageRepay(stateCollateral, userCollateral, userBorrowed, minRecv, router, calldata, estimateGas) {
671
675
  return __awaiter(this, void 0, void 0, function* () {
672
- if (!(yield this.market.userLoanExists()))
676
+ if (!(yield this.market.userPosition.userLoanExists()))
673
677
  throw Error("Loan does not exist");
674
678
  const _stateCollateral = parseUnits(stateCollateral, this.market.collateral_token.decimals);
675
679
  const _userCollateral = parseUnits(userCollateral, this.market.collateral_token.decimals);
@@ -707,8 +711,8 @@ export class LeverageZapV2Module {
707
711
  return __awaiter(this, arguments, void 0, function* ({ stateCollateral, userCollateral, userBorrowed, address = "" }) {
708
712
  address = _getAddress.call(this.llamalend, address);
709
713
  this._checkLeverageZap();
710
- const { stateCollateral: currentStateCollateral, totalDepositFromUser } = yield this.market._getCurrentLeverageParams(address);
711
- const collateralFromUserBorrowed = yield this.market.swapExpected(0, 1, userBorrowed);
714
+ const { stateCollateral: currentStateCollateral, totalDepositFromUser } = yield this.market.userPosition.getCurrentLeverageParams(address);
715
+ const collateralFromUserBorrowed = yield this.market.amm.swapExpected(0, 1, userBorrowed);
712
716
  const futureCollateralState = BN(currentStateCollateral).minus(stateCollateral);
713
717
  const futureTotalDepositFromUserPrecise = BN(totalDepositFromUser).plus(userCollateral).plus(collateralFromUserBorrowed);
714
718
  return futureCollateralState.div(futureTotalDepositFromUserPrecise).toString();
@@ -0,0 +1,123 @@
1
+ import memoize from "memoizee";
2
+ import { TAmount, TGas, IPartialFrac } from "../../../interfaces";
3
+ import type { LendMarketTemplate } from "../../LendMarketTemplate";
4
+ import { Llamalend } from "../../../llamalend";
5
+ export declare class LoanBaseModule {
6
+ protected market: LendMarketTemplate;
7
+ protected llamalend: Llamalend;
8
+ constructor(market: LendMarketTemplate);
9
+ _checkRange(range: number): void;
10
+ createLoanMaxRecv(collateral: number | string, range: number): Promise<string>;
11
+ createLoanMaxRecvAllRanges: ((collateral: number | string) => Promise<{
12
+ [index: number]: string;
13
+ }>) & memoize.Memoized<(collateral: number | string) => Promise<{
14
+ [index: number]: string;
15
+ }>>;
16
+ getMaxRange(collateral: number | string, debt: number | string): Promise<number>;
17
+ private _calcN1;
18
+ private _calcN1AllRanges;
19
+ private _createLoanBands;
20
+ private _createLoanBandsAllRanges;
21
+ createLoanBands(collateral: number | string, debt: number | string, range: number): Promise<[number, number]>;
22
+ createLoanBandsAllRanges(collateral: number | string, debt: number | string): Promise<{
23
+ [index: number]: [number, number] | null;
24
+ }>;
25
+ createLoanPrices(collateral: number | string, debt: number | string, range: number): Promise<string[]>;
26
+ createLoanPricesAllRanges(collateral: number | string, debt: number | string): Promise<{
27
+ [index: number]: [string, string] | null;
28
+ }>;
29
+ createLoanHealth(collateral: number | string, debt: number | string, range: number, full?: boolean): Promise<string>;
30
+ createLoanIsApproved(collateral: number | string): Promise<boolean>;
31
+ private createLoanApproveEstimateGas;
32
+ createLoanApprove(collateral: number | string): Promise<string[]>;
33
+ private _createLoan;
34
+ createLoanEstimateGas(collateral: number | string, debt: number | string, range: number): Promise<TGas>;
35
+ createLoan(collateral: number | string, debt: number | string, range: number): Promise<string>;
36
+ borrowMoreMaxRecv(collateralAmount: number | string): Promise<string>;
37
+ private _borrowMoreBands;
38
+ borrowMoreBands(collateral: number | string, debt: number | string): Promise<[number, number]>;
39
+ borrowMorePrices(collateral: number | string, debt: number | string): Promise<string[]>;
40
+ borrowMoreHealth(collateral: number | string, debt: number | string, full?: boolean, address?: string): Promise<string>;
41
+ borrowMoreIsApproved(collateral: number | string): Promise<boolean>;
42
+ private borrowMoreApproveEstimateGas;
43
+ borrowMoreApprove(collateral: number | string): Promise<string[]>;
44
+ private _borrowMore;
45
+ borrowMoreEstimateGas(collateral: number | string, debt: number | string): Promise<TGas>;
46
+ borrowMore(collateral: number | string, debt: number | string): Promise<string>;
47
+ borrowMoreFutureLeverage(collateral: number | string, debt: number | string, userAddress?: string): Promise<string>;
48
+ private _addCollateralBands;
49
+ addCollateralBands(collateral: number | string, address?: string): Promise<[number, number]>;
50
+ addCollateralPrices(collateral: number | string, address?: string): Promise<string[]>;
51
+ addCollateralHealth(collateral: number | string, full?: boolean, address?: string): Promise<string>;
52
+ addCollateralIsApproved(collateral: number | string): Promise<boolean>;
53
+ private addCollateralApproveEstimateGas;
54
+ addCollateralApprove(collateral: number | string): Promise<string[]>;
55
+ private _addCollateral;
56
+ addCollateralEstimateGas(collateral: number | string, address?: string): Promise<TGas>;
57
+ addCollateral(collateral: number | string, address?: string): Promise<string>;
58
+ addCollateralFutureLeverage(collateral: number | string, userAddress?: string): Promise<string>;
59
+ maxRemovable(): Promise<string>;
60
+ private _removeCollateralBands;
61
+ removeCollateralBands(collateral: number | string): Promise<[number, number]>;
62
+ removeCollateralPrices(collateral: number | string): Promise<string[]>;
63
+ removeCollateralHealth(collateral: number | string, full?: boolean, address?: string): Promise<string>;
64
+ private _removeCollateral;
65
+ removeCollateralEstimateGas(collateral: number | string): Promise<TGas>;
66
+ removeCollateral(collateral: number | string): Promise<string>;
67
+ removeCollateralFutureLeverage(collateral: number | string, userAddress?: string): Promise<string>;
68
+ private _repayBands;
69
+ repayBands(debt: number | string, address?: string): Promise<[number, number]>;
70
+ repayPrices(debt: number | string, address?: string): Promise<string[]>;
71
+ repayIsApproved(debt: number | string): Promise<boolean>;
72
+ private repayApproveEstimateGas;
73
+ repayApprove(debt: number | string): Promise<string[]>;
74
+ repayHealth(debt: number | string, full?: boolean, address?: string): Promise<string>;
75
+ private _repay;
76
+ repayEstimateGas(debt: number | string, address?: string): Promise<TGas>;
77
+ repay(debt: number | string, address?: string): Promise<string>;
78
+ repayFutureLeverage(debt: number | string, userAddress?: string): Promise<string>;
79
+ private _fullRepayAmount;
80
+ fullRepayIsApproved(address?: string): Promise<boolean>;
81
+ private fullRepayApproveEstimateGas;
82
+ fullRepayApprove(address?: string): Promise<string[]>;
83
+ fullRepayEstimateGas(address?: string): Promise<TGas>;
84
+ fullRepay(address?: string): Promise<string>;
85
+ tokensToLiquidate(address?: string): Promise<string>;
86
+ calcPartialFrac(amount: TAmount, address?: string): Promise<IPartialFrac>;
87
+ liquidateIsApproved(address?: string): Promise<boolean>;
88
+ private liquidateApproveEstimateGas;
89
+ liquidateApprove(address?: string): Promise<string[]>;
90
+ private _liquidate;
91
+ private _partialLiquidate;
92
+ liquidateEstimateGas(address: string, slippage?: number): Promise<TGas>;
93
+ liquidate(address: string, slippage?: number): Promise<string>;
94
+ selfLiquidateIsApproved(): Promise<boolean>;
95
+ private selfLiquidateApproveEstimateGas;
96
+ selfLiquidateApprove(): Promise<string[]>;
97
+ selfLiquidateEstimateGas(slippage?: number): Promise<TGas>;
98
+ selfLiquidate(slippage?: number): Promise<string>;
99
+ partialSelfLiquidateIsApproved(partialFrac: IPartialFrac): Promise<boolean>;
100
+ private partialSelfLiquidateApproveEstimateGas;
101
+ partialSelfLiquidateApprove(partialFrac: IPartialFrac): Promise<string[]>;
102
+ partialSelfLiquidateEstimateGas(partialFrac: IPartialFrac, slippage?: number): Promise<TGas>;
103
+ partialSelfLiquidate(partialFrac: IPartialFrac, slippage?: number): Promise<string>;
104
+ estimateGas: {
105
+ createLoanApprove: (collateral: number | string) => Promise<TGas>;
106
+ createLoan: (collateral: number | string, debt: number | string, range: number) => Promise<TGas>;
107
+ borrowMoreApprove: (collateral: number | string) => Promise<TGas>;
108
+ borrowMore: (collateral: number | string, debt: number | string) => Promise<TGas>;
109
+ addCollateralApprove: (collateral: number | string) => Promise<TGas>;
110
+ addCollateral: (collateral: number | string, address?: string) => Promise<TGas>;
111
+ removeCollateral: (collateral: number | string) => Promise<TGas>;
112
+ repayApprove: (debt: number | string) => Promise<TGas>;
113
+ repay: (debt: number | string, address?: string) => Promise<TGas>;
114
+ fullRepayApprove: (address?: string) => Promise<TGas>;
115
+ fullRepay: (address?: string) => Promise<TGas>;
116
+ liquidateApprove: (address?: string) => Promise<TGas>;
117
+ liquidate: (address: string, slippage?: number) => Promise<TGas>;
118
+ selfLiquidateApprove: () => Promise<TGas>;
119
+ selfLiquidate: (slippage?: number) => Promise<TGas>;
120
+ partialSelfLiquidateApprove: (partialFrac: IPartialFrac) => Promise<TGas>;
121
+ partialSelfLiquidate: (partialFrac: IPartialFrac, slippage?: number) => Promise<TGas>;
122
+ };
123
+ }