@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.
- package/docs/MIGRATION.md +325 -0
- package/docs/SUPPORT_LLv2.md +409 -0
- package/lib/constants/abis/OneWayLendingFactoryV2ABI.json +543 -0
- package/lib/constants/aliases.d.ts +0 -11
- package/lib/constants/aliases.js +1 -86
- package/lib/constants/coins.d.ts +0 -11
- package/lib/constants/coins.js +0 -14
- package/lib/constants/utils.d.ts +2 -0
- package/lib/constants/utils.js +2 -0
- package/lib/index.d.ts +10 -4
- package/lib/interfaces.d.ts +3 -2
- package/lib/lendMarkets/LendMarketTemplate.d.ts +13 -502
- package/lib/lendMarkets/LendMarketTemplate.js +245 -2860
- package/lib/lendMarkets/fetch/fetchFactoryData.d.ts +13 -0
- package/lib/lendMarkets/fetch/fetchFactoryData.js +101 -0
- package/lib/lendMarkets/fetch/fetchLendMarkets.d.ts +3 -0
- package/lib/lendMarkets/fetch/fetchLendMarkets.js +94 -0
- package/lib/lendMarkets/interfaces/common/amm.d.ts +10 -0
- package/lib/lendMarkets/interfaces/common/amm.js +1 -0
- package/lib/lendMarkets/interfaces/common/index.d.ts +5 -0
- package/lib/lendMarkets/interfaces/common/index.js +5 -0
- package/lib/lendMarkets/interfaces/common/prices.d.ts +13 -0
- package/lib/lendMarkets/interfaces/common/prices.js +1 -0
- package/lib/lendMarkets/interfaces/common/userPosition.d.ts +39 -0
- package/lib/lendMarkets/interfaces/common/userPosition.js +1 -0
- package/lib/lendMarkets/interfaces/common/vault.d.ts +55 -0
- package/lib/lendMarkets/interfaces/common/vault.js +1 -0
- package/lib/lendMarkets/interfaces/common/wallet.d.ts +8 -0
- package/lib/lendMarkets/interfaces/common/wallet.js +1 -0
- package/lib/lendMarkets/interfaces/v1/index.d.ts +4 -0
- package/lib/lendMarkets/interfaces/v1/index.js +4 -0
- package/lib/lendMarkets/interfaces/v1/leverageV1.d.ts +90 -0
- package/lib/lendMarkets/interfaces/v1/leverageV1.js +1 -0
- package/lib/lendMarkets/interfaces/v1/loanV1.d.ts +81 -0
- package/lib/lendMarkets/interfaces/v1/loanV1.js +1 -0
- package/lib/lendMarkets/interfaces/v1/statsV1.d.ts +49 -0
- package/lib/lendMarkets/interfaces/v1/statsV1.js +1 -0
- package/lib/lendMarkets/interfaces/v2/index.d.ts +3 -0
- package/lib/lendMarkets/interfaces/v2/index.js +3 -0
- package/lib/lendMarkets/interfaces/v2/leverageV2.d.ts +90 -0
- package/lib/lendMarkets/interfaces/v2/leverageV2.js +1 -0
- package/lib/lendMarkets/interfaces/v2/loanV2.d.ts +81 -0
- package/lib/lendMarkets/interfaces/v2/loanV2.js +1 -0
- package/lib/lendMarkets/interfaces/v2/statsV2.d.ts +49 -0
- package/lib/lendMarkets/interfaces/v2/statsV2.js +1 -0
- package/lib/lendMarkets/lendMarketConstructor.js +1 -1
- package/lib/lendMarkets/modules/common/amm.d.ts +19 -0
- package/lib/lendMarkets/modules/common/amm.js +137 -0
- package/lib/lendMarkets/modules/common/index.d.ts +9 -0
- package/lib/lendMarkets/modules/common/index.js +9 -0
- package/lib/lendMarkets/modules/common/leverageZapV1Base.d.ts +118 -0
- package/lib/lendMarkets/modules/common/leverageZapV1Base.js +770 -0
- package/lib/lendMarkets/modules/{leverageZapV2.d.ts → common/leverageZapV2Base.d.ts} +10 -5
- package/lib/lendMarkets/modules/{leverageZapV2.js → common/leverageZapV2Base.js} +36 -32
- package/lib/lendMarkets/modules/common/loanBase.d.ts +123 -0
- package/lib/lendMarkets/modules/common/loanBase.js +801 -0
- package/lib/lendMarkets/modules/common/prices.d.ts +19 -0
- package/lib/lendMarkets/modules/common/prices.js +104 -0
- package/lib/lendMarkets/modules/common/statsBase.d.ts +69 -0
- package/lib/lendMarkets/modules/common/statsBase.js +291 -0
- package/lib/lendMarkets/modules/common/userPosition.d.ts +46 -0
- package/lib/lendMarkets/modules/common/userPosition.js +223 -0
- package/lib/lendMarkets/modules/common/vault.d.ts +69 -0
- package/lib/lendMarkets/modules/common/vault.js +535 -0
- package/lib/lendMarkets/modules/common/wallet.d.ts +13 -0
- package/lib/lendMarkets/modules/common/wallet.js +28 -0
- package/lib/lendMarkets/modules/index.d.ts +1 -1
- package/lib/lendMarkets/modules/index.js +1 -1
- package/lib/lendMarkets/modules/v1/index.d.ts +4 -0
- package/lib/lendMarkets/modules/v1/index.js +4 -0
- package/lib/lendMarkets/modules/v1/leverageV1ZapV1.d.ts +3 -0
- package/lib/lendMarkets/modules/v1/leverageV1ZapV1.js +3 -0
- package/lib/lendMarkets/modules/v1/leverageV1ZapV2.d.ts +3 -0
- package/lib/lendMarkets/modules/v1/leverageV1ZapV2.js +3 -0
- package/lib/lendMarkets/modules/v1/loanV1.d.ts +4 -0
- package/lib/lendMarkets/modules/v1/loanV1.js +3 -0
- package/lib/lendMarkets/modules/v1/statsV1.d.ts +3 -0
- package/lib/lendMarkets/modules/v1/statsV1.js +3 -0
- package/lib/lendMarkets/modules/v2/index.d.ts +4 -0
- package/lib/lendMarkets/modules/v2/index.js +4 -0
- package/lib/lendMarkets/modules/v2/leverageV2ZapV1.d.ts +3 -0
- package/lib/lendMarkets/modules/v2/leverageV2ZapV1.js +3 -0
- package/lib/lendMarkets/modules/v2/leverageV2ZapV2.d.ts +3 -0
- package/lib/lendMarkets/modules/v2/leverageV2ZapV2.js +3 -0
- package/lib/lendMarkets/modules/v2/loanV2.d.ts +4 -0
- package/lib/lendMarkets/modules/v2/loanV2.js +3 -0
- package/lib/lendMarkets/modules/v2/statsV2.d.ts +3 -0
- package/lib/lendMarkets/modules/v2/statsV2.js +3 -0
- package/lib/llamalend.d.ts +6 -6
- package/lib/llamalend.js +46 -210
- package/lib/utils.js +2 -33
- package/package.json +1 -1
- package/src/constants/abis/OneWayLendingFactoryV2ABI.json +543 -0
- package/src/constants/aliases.ts +1 -97
- package/src/constants/coins.ts +0 -25
- package/src/constants/utils.ts +4 -0
- package/src/interfaces.ts +3 -2
- package/src/lendMarkets/LendMarketTemplate.ts +327 -3223
- package/src/lendMarkets/fetch/fetchFactoryData.ts +113 -0
- package/src/lendMarkets/fetch/fetchLendMarkets.ts +108 -0
- package/src/lendMarkets/interfaces/common/amm.ts +11 -0
- package/src/lendMarkets/interfaces/common/index.ts +5 -0
- package/src/lendMarkets/interfaces/common/prices.ts +13 -0
- package/src/lendMarkets/interfaces/common/userPosition.ts +24 -0
- package/src/lendMarkets/interfaces/common/vault.ts +48 -0
- package/src/lendMarkets/interfaces/common/wallet.ts +3 -0
- package/src/lendMarkets/interfaces/v1/index.ts +4 -0
- package/src/lendMarkets/interfaces/v1/leverageV1.ts +84 -0
- package/src/lendMarkets/interfaces/v1/loanV1.ts +85 -0
- package/src/lendMarkets/interfaces/v1/statsV1.ts +21 -0
- package/src/lendMarkets/interfaces/v2/index.ts +3 -0
- package/src/lendMarkets/interfaces/v2/leverageV2.ts +84 -0
- package/src/lendMarkets/interfaces/v2/loanV2.ts +85 -0
- package/src/lendMarkets/interfaces/v2/statsV2.ts +21 -0
- package/src/lendMarkets/lendMarketConstructor.ts +1 -1
- package/src/lendMarkets/modules/common/amm.ts +132 -0
- package/src/lendMarkets/modules/common/index.ts +9 -0
- package/src/lendMarkets/modules/common/leverageZapV1Base.ts +912 -0
- package/src/lendMarkets/modules/{leverageZapV2.ts → common/leverageZapV2Base.ts} +41 -37
- package/src/lendMarkets/modules/common/loanBase.ts +781 -0
- package/src/lendMarkets/modules/common/prices.ts +111 -0
- package/src/lendMarkets/modules/common/statsBase.ts +313 -0
- package/src/lendMarkets/modules/common/userPosition.ts +243 -0
- package/src/lendMarkets/modules/common/vault.ts +551 -0
- package/src/lendMarkets/modules/common/wallet.ts +29 -0
- package/src/lendMarkets/modules/index.ts +1 -1
- package/src/lendMarkets/modules/v1/index.ts +4 -0
- package/src/lendMarkets/modules/v1/leverageV1ZapV1.ts +3 -0
- package/src/lendMarkets/modules/v1/leverageV1ZapV2.ts +3 -0
- package/src/lendMarkets/modules/v1/loanV1.ts +4 -0
- package/src/lendMarkets/modules/v1/statsV1.ts +3 -0
- package/src/lendMarkets/modules/v2/index.ts +4 -0
- package/src/lendMarkets/modules/v2/leverageV2ZapV1.ts +3 -0
- package/src/lendMarkets/modules/v2/leverageV2ZapV2.ts +3 -0
- package/src/lendMarkets/modules/v2/loanV2.ts +4 -0
- package/src/lendMarkets/modules/v2/statsV2.ts +3 -0
- package/src/llamalend.ts +47 -244
- 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 "
|
|
3
|
-
import type { LendMarketTemplate } from "
|
|
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
|
|
9
|
-
|
|
10
|
-
|
|
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 "
|
|
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
|
|
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.
|
|
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.
|
|
106
|
+
this.market.prices.checkRange(range);
|
|
103
107
|
let _stateDebt = BigInt(0);
|
|
104
108
|
if (user) {
|
|
105
|
-
const { _debt, _borrowed, _N } = yield this.market.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
+
}
|