@curvefi/llamalend-api 2.2.6 → 2.3.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.
- package/README.md +23 -26
- package/lib/constants/aliases.js +5 -5
- package/lib/lendMarkets/interfaces/leverageZapV2.d.ts +31 -63
- package/lib/lendMarkets/modules/common/leverageZapV2Base.d.ts +34 -65
- package/lib/lendMarkets/modules/common/leverageZapV2Base.js +107 -127
- package/lib/lendMarkets/modules/v1/leverageV1ZapV2.d.ts +3 -3
- package/lib/lendMarkets/modules/v1/leverageV1ZapV2.js +12 -12
- package/lib/lendMarkets/modules/v2/leverageV2ZapV2.d.ts +3 -3
- package/lib/lendMarkets/modules/v2/leverageV2ZapV2.js +10 -17
- package/lib/utils.d.ts +3 -11
- package/lib/utils.js +2 -10
- package/package.json +1 -1
- package/src/constants/aliases.ts +5 -5
- package/src/lendMarkets/interfaces/leverageZapV2.ts +30 -72
- package/src/lendMarkets/modules/common/leverageZapV2Base.ts +112 -175
- package/src/lendMarkets/modules/v1/leverageV1ZapV2.ts +9 -12
- package/src/lendMarkets/modules/v2/leverageV2ZapV2.ts +7 -17
- package/src/utils.ts +5 -27
|
@@ -25,7 +25,7 @@ export class LeverageZapV2BaseModule {
|
|
|
25
25
|
return this._getLeverageZapAddress() !== this.llamalend.constants.ZERO_ADDRESS &&
|
|
26
26
|
this._getMarketId() >= Number(this.llamalend.constants.ALIASES["leverage_markets_start_id"]);
|
|
27
27
|
};
|
|
28
|
-
this.leverageCreateLoanMaxRecvAllRanges = memoize((_a) => __awaiter(this, [_a], void 0, function* ({ userCollateral,
|
|
28
|
+
this.leverageCreateLoanMaxRecvAllRanges = memoize((_a) => __awaiter(this, [_a], void 0, function* ({ userCollateral, getExpected }) {
|
|
29
29
|
this._checkLeverageZap();
|
|
30
30
|
const _userCollateral = parseUnits(userCollateral, this.market.collateral_token.decimals);
|
|
31
31
|
const contract = this.llamalend.contracts[this._getLeverageZapAddress()].multicallContract;
|
|
@@ -41,7 +41,7 @@ export class LeverageZapV2BaseModule {
|
|
|
41
41
|
for (let i = 0; i < 5; i++) {
|
|
42
42
|
const pBN = pAvgBN !== null && pAvgBN !== void 0 ? pAvgBN : pAvgApproxBN;
|
|
43
43
|
maxBorrowablePrevBN = maxBorrowableBN;
|
|
44
|
-
const _userEffectiveCollateral = _userCollateral
|
|
44
|
+
const _userEffectiveCollateral = _userCollateral;
|
|
45
45
|
const calls = [];
|
|
46
46
|
for (let N = this.market.minBands; N <= this.market.maxBands; N++) {
|
|
47
47
|
const j = N - this.market.minBands;
|
|
@@ -62,7 +62,7 @@ export class LeverageZapV2BaseModule {
|
|
|
62
62
|
maxLeverageCollateralBN = maxBorrowableBN.map((mb) => mb.div(pAvgBN));
|
|
63
63
|
_maxLeverageCollateral = maxLeverageCollateralBN.map((mlc) => fromBN(mlc, this.market.collateral_token.decimals));
|
|
64
64
|
}
|
|
65
|
-
const userEffectiveCollateralBN = BN(userCollateral)
|
|
65
|
+
const userEffectiveCollateralBN = BN(userCollateral);
|
|
66
66
|
const res = {};
|
|
67
67
|
for (let N = this.market.minBands; N <= this.market.maxBands; N++) {
|
|
68
68
|
const j = N - this.market.minBands;
|
|
@@ -70,7 +70,7 @@ export class LeverageZapV2BaseModule {
|
|
|
70
70
|
maxDebt: formatNumber(maxBorrowableBN[j].toString(), this.market.borrowed_token.decimals),
|
|
71
71
|
maxTotalCollateral: formatNumber(maxLeverageCollateralBN[j].plus(userEffectiveCollateralBN).toString(), this.market.collateral_token.decimals),
|
|
72
72
|
userCollateral: formatNumber(userCollateral, this.market.collateral_token.decimals),
|
|
73
|
-
collateralFromUserBorrowed: formatNumber(BN(
|
|
73
|
+
collateralFromUserBorrowed: formatNumber(BN(0).toString(), this.market.collateral_token.decimals),
|
|
74
74
|
collateralFromMaxDebt: formatNumber(maxLeverageCollateralBN[j].toString(), this.market.collateral_token.decimals),
|
|
75
75
|
maxLeverage: maxLeverageCollateralBN[j].plus(userEffectiveCollateralBN).div(userEffectiveCollateralBN).toString(),
|
|
76
76
|
avgPrice: pAvgBN.toString(),
|
|
@@ -81,14 +81,12 @@ export class LeverageZapV2BaseModule {
|
|
|
81
81
|
promise: true,
|
|
82
82
|
maxAge: 60 * 1000, // 1m
|
|
83
83
|
});
|
|
84
|
-
this._leverageExpectedCollateral = (userCollateral,
|
|
84
|
+
this._leverageExpectedCollateral = (userCollateral, debt, quote, user) => __awaiter(this, void 0, void 0, function* () {
|
|
85
85
|
const _userCollateral = parseUnits(userCollateral, this.market.collateral_token.decimals);
|
|
86
86
|
const _debt = parseUnits(debt, this.market.borrowed_token.decimals);
|
|
87
|
-
const _userBorrowed = parseUnits(userBorrowed, this.market.borrowed_token.decimals);
|
|
88
|
-
// additionalCollateral = (userBorrowed / p) + leverageCollateral
|
|
89
87
|
const _additionalCollateral = BigInt(quote.outAmount);
|
|
90
|
-
const _collateralFromDebt =
|
|
91
|
-
const _collateralFromUserBorrowed =
|
|
88
|
+
const _collateralFromDebt = _additionalCollateral;
|
|
89
|
+
const _collateralFromUserBorrowed = BigInt(0);
|
|
92
90
|
let _stateCollateral = BigInt(0);
|
|
93
91
|
if (user) {
|
|
94
92
|
const { _collateral, _borrowed } = yield this.market.userPosition.userStateBigInt(user);
|
|
@@ -98,10 +96,10 @@ export class LeverageZapV2BaseModule {
|
|
|
98
96
|
}
|
|
99
97
|
const _totalCollateral = _userCollateral + _additionalCollateral;
|
|
100
98
|
const _futureStateCollateral = _stateCollateral + _totalCollateral;
|
|
101
|
-
const avgPrice = toBN(_debt
|
|
99
|
+
const avgPrice = toBN(_debt, this.market.borrowed_token.decimals).div(toBN(_additionalCollateral, this.market.collateral_token.decimals)).toString();
|
|
102
100
|
return { _futureStateCollateral, _totalCollateral, _userCollateral, _collateralFromUserBorrowed, _collateralFromDebt, avgPrice };
|
|
103
101
|
});
|
|
104
|
-
this._leverageCalcN1 = memoize((userCollateral,
|
|
102
|
+
this._leverageCalcN1 = memoize((userCollateral, debt, range, quote, user) => __awaiter(this, void 0, void 0, function* () {
|
|
105
103
|
if (range > 0)
|
|
106
104
|
this.market.prices.checkRange(range);
|
|
107
105
|
let _stateDebt = BigInt(0);
|
|
@@ -113,15 +111,15 @@ export class LeverageZapV2BaseModule {
|
|
|
113
111
|
if (range < 0)
|
|
114
112
|
range = Number(this.llamalend.formatUnits(_N, 0));
|
|
115
113
|
}
|
|
116
|
-
const { _futureStateCollateral } = yield this._leverageExpectedCollateral(userCollateral,
|
|
114
|
+
const { _futureStateCollateral } = yield this._leverageExpectedCollateral(userCollateral, debt, quote, user);
|
|
117
115
|
const _debt = _stateDebt + parseUnits(debt, this.market.borrowed_token.decimals);
|
|
118
116
|
return yield this._calcDebtN1Call(_futureStateCollateral, _debt, range);
|
|
119
117
|
}), {
|
|
120
118
|
promise: true,
|
|
121
119
|
maxAge: 60 * 1000, // 1m
|
|
122
120
|
});
|
|
123
|
-
this._leverageCalcN1AllRanges = memoize((userCollateral,
|
|
124
|
-
const { _futureStateCollateral } = yield this._leverageExpectedCollateral(userCollateral,
|
|
121
|
+
this._leverageCalcN1AllRanges = memoize((userCollateral, debt, maxN, quote) => __awaiter(this, void 0, void 0, function* () {
|
|
122
|
+
const { _futureStateCollateral } = yield this._leverageExpectedCollateral(userCollateral, debt, quote);
|
|
125
123
|
const _debt = parseUnits(debt, this.market.borrowed_token.decimals);
|
|
126
124
|
const calls = [];
|
|
127
125
|
for (let N = this.market.minBands; N <= maxN; N++) {
|
|
@@ -133,7 +131,7 @@ export class LeverageZapV2BaseModule {
|
|
|
133
131
|
maxAge: 60 * 1000, // 1m
|
|
134
132
|
});
|
|
135
133
|
// ---------------- LEVERAGE REPAY ----------------
|
|
136
|
-
this._leverageRepayExpectedBorrowed = (stateCollateral, userCollateral,
|
|
134
|
+
this._leverageRepayExpectedBorrowed = (stateCollateral, userCollateral, quote) => {
|
|
137
135
|
this._checkLeverageZap();
|
|
138
136
|
const _stateCollateral = parseUnits(stateCollateral, this.market.collateral_token.decimals);
|
|
139
137
|
const _userCollateral = parseUnits(userCollateral, this.market.collateral_token.decimals);
|
|
@@ -145,24 +143,24 @@ export class LeverageZapV2BaseModule {
|
|
|
145
143
|
_borrowedFromStateCollateral = _stateCollateral * BigInt(Math.pow(10, 18)) / (_stateCollateral + _userCollateral) * _borrowedExpected / BigInt(Math.pow(10, 18));
|
|
146
144
|
_borrowedFromUserCollateral = _borrowedExpected - _borrowedFromStateCollateral;
|
|
147
145
|
}
|
|
148
|
-
const _totalBorrowed = _borrowedExpected
|
|
146
|
+
const _totalBorrowed = _borrowedExpected;
|
|
149
147
|
const avgPrice = toBN(_borrowedExpected, this.market.borrowed_token.decimals).div(toBN(_stateCollateral + _userCollateral, this.market.collateral_token.decimals)).toString();
|
|
150
148
|
return { _totalBorrowed, _borrowedFromStateCollateral, _borrowedFromUserCollateral, avgPrice };
|
|
151
149
|
};
|
|
152
|
-
this.leverageRepayExpectedBorrowed = (_a) => __awaiter(this, [_a], void 0, function* ({ stateCollateral, userCollateral,
|
|
150
|
+
this.leverageRepayExpectedBorrowed = (_a) => __awaiter(this, [_a], void 0, function* ({ stateCollateral, userCollateral, quote }) {
|
|
153
151
|
this._checkLeverageZap();
|
|
154
|
-
const { _totalBorrowed, _borrowedFromStateCollateral, _borrowedFromUserCollateral, avgPrice } = this._leverageRepayExpectedBorrowed(stateCollateral, userCollateral,
|
|
152
|
+
const { _totalBorrowed, _borrowedFromStateCollateral, _borrowedFromUserCollateral, avgPrice } = this._leverageRepayExpectedBorrowed(stateCollateral, userCollateral, quote);
|
|
155
153
|
return {
|
|
156
154
|
totalBorrowed: formatUnits(_totalBorrowed, this.market.borrowed_token.decimals),
|
|
157
155
|
borrowedFromStateCollateral: formatUnits(_borrowedFromStateCollateral, this.market.borrowed_token.decimals),
|
|
158
156
|
borrowedFromUserCollateral: formatUnits(_borrowedFromUserCollateral, this.market.borrowed_token.decimals),
|
|
159
|
-
userBorrowed: formatNumber(
|
|
157
|
+
userBorrowed: formatNumber(0, this.market.borrowed_token.decimals),
|
|
160
158
|
avgPrice,
|
|
161
159
|
};
|
|
162
160
|
});
|
|
163
|
-
this._leverageRepayBands = memoize((stateCollateral, userCollateral,
|
|
161
|
+
this._leverageRepayBands = memoize((stateCollateral, userCollateral, quote, address) => __awaiter(this, void 0, void 0, function* () {
|
|
164
162
|
address = _getAddress.call(this.llamalend, address);
|
|
165
|
-
if (!(yield this.leverageRepayIsAvailable({ stateCollateral, userCollateral,
|
|
163
|
+
if (!(yield this.leverageRepayIsAvailable({ stateCollateral, userCollateral, quote, address })))
|
|
166
164
|
return [parseUnits(0, 0), parseUnits(0, 0)];
|
|
167
165
|
const _stateRepayCollateral = parseUnits(stateCollateral, this.market.collateral_token.decimals);
|
|
168
166
|
const { _collateral: _stateCollateral, _debt: _stateDebt, _N } = yield this.market.userPosition.userStateBigInt(address);
|
|
@@ -172,7 +170,7 @@ export class LeverageZapV2BaseModule {
|
|
|
172
170
|
throw Error(`Can't use more collateral than user's position has (${_stateRepayCollateral}) > ${_stateCollateral})`);
|
|
173
171
|
let _n1 = parseUnits(0, 0);
|
|
174
172
|
let _n2 = parseUnits(0, 0);
|
|
175
|
-
const { _totalBorrowed: _repayExpected } = this._leverageRepayExpectedBorrowed(stateCollateral, userCollateral,
|
|
173
|
+
const { _totalBorrowed: _repayExpected } = this._leverageRepayExpectedBorrowed(stateCollateral, userCollateral, quote);
|
|
176
174
|
try {
|
|
177
175
|
_n1 = yield this._calcDebtN1Call(_stateCollateral - _stateRepayCollateral, _stateDebt - _repayExpected, _N);
|
|
178
176
|
_n2 = _n1 + (_N - BigInt(1));
|
|
@@ -221,13 +219,12 @@ export class LeverageZapV2BaseModule {
|
|
|
221
219
|
return BN(expected).times(BN(100).minus(slippage)).div(100).toString();
|
|
222
220
|
}
|
|
223
221
|
leverageCreateLoanMaxRecv(_a) {
|
|
224
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral,
|
|
222
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral, range, getExpected }) {
|
|
225
223
|
// max_borrowable = userCollateral / (1 / (k_effective * max_p_base) - 1 / p_avg)
|
|
226
224
|
this._checkLeverageZap();
|
|
227
225
|
if (range > 0)
|
|
228
226
|
this.market.prices.checkRange(range);
|
|
229
227
|
const _userCollateral = parseUnits(userCollateral, this.market.collateral_token.decimals);
|
|
230
|
-
const _userBorrowed = parseUnits(userBorrowed, this.market.borrowed_token.decimals);
|
|
231
228
|
const oraclePriceBand = yield this.market.prices.oraclePriceBand();
|
|
232
229
|
let pAvgBN = BN(yield this.market.prices.calcTickPrice(oraclePriceBand)); // upper tick of oracle price band
|
|
233
230
|
let maxBorrowablePrevBN = BN(0);
|
|
@@ -237,7 +234,7 @@ export class LeverageZapV2BaseModule {
|
|
|
237
234
|
const contract = this.llamalend.contracts[this._getLeverageZapAddress()].contract;
|
|
238
235
|
for (let i = 0; i < 5; i++) {
|
|
239
236
|
maxBorrowablePrevBN = maxBorrowableBN;
|
|
240
|
-
_userEffectiveCollateral = _userCollateral
|
|
237
|
+
_userEffectiveCollateral = _userCollateral;
|
|
241
238
|
let _maxBorrowable = yield contract.max_borrowable(this.market.addresses.controller, _userEffectiveCollateral, _maxLeverageCollateral, range, fromBN(pAvgBN));
|
|
242
239
|
_maxBorrowable = _maxBorrowable * BigInt(970) / BigInt(1000);
|
|
243
240
|
if (_maxBorrowable === BigInt(0))
|
|
@@ -247,10 +244,9 @@ export class LeverageZapV2BaseModule {
|
|
|
247
244
|
maxBorrowableBN = maxBorrowablePrevBN;
|
|
248
245
|
break;
|
|
249
246
|
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
_maxLeverageCollateral = _maxAdditionalCollateral - fromBN(BN(userBorrowed).div(pAvgBN), this.market.collateral_token.decimals);
|
|
247
|
+
const _maxAdditionalCollateral = BigInt((yield getExpected(this.market.addresses.borrowed_token, this.market.addresses.collateral_token, _maxBorrowable, this.market.addresses.amm)).outAmount);
|
|
248
|
+
pAvgBN = maxBorrowableBN.div(toBN(_maxAdditionalCollateral, this.market.collateral_token.decimals));
|
|
249
|
+
_maxLeverageCollateral = _maxAdditionalCollateral;
|
|
254
250
|
}
|
|
255
251
|
const userEffectiveCollateralBN = maxBorrowableBN.gt(0) ? toBN(_userEffectiveCollateral, this.market.collateral_token.decimals) : BN(0);
|
|
256
252
|
const maxLeverageCollateralBN = toBN(_maxLeverageCollateral, this.market.collateral_token.decimals);
|
|
@@ -259,7 +255,7 @@ export class LeverageZapV2BaseModule {
|
|
|
259
255
|
maxDebt: formatNumber(maxBorrowableBN.toString(), this.market.borrowed_token.decimals),
|
|
260
256
|
maxTotalCollateral: formatNumber(maxLeverageCollateralBN.plus(userEffectiveCollateralBN).toString(), this.market.collateral_token.decimals),
|
|
261
257
|
userCollateral: formatNumber(userCollateral, this.market.collateral_token.decimals),
|
|
262
|
-
collateralFromUserBorrowed: formatNumber(BN(
|
|
258
|
+
collateralFromUserBorrowed: formatNumber(BN(0).toString(), this.market.collateral_token.decimals),
|
|
263
259
|
collateralFromMaxDebt: formatNumber(maxLeverageCollateralBN.toString(), this.market.collateral_token.decimals),
|
|
264
260
|
maxLeverage: maxLeverageCollateralBN.plus(userEffectiveCollateralBN).div(userEffectiveCollateralBN).toString(),
|
|
265
261
|
avgPrice: pAvgBN.toString(),
|
|
@@ -267,9 +263,9 @@ export class LeverageZapV2BaseModule {
|
|
|
267
263
|
});
|
|
268
264
|
}
|
|
269
265
|
leverageCreateLoanExpectedCollateral(_a) {
|
|
270
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral,
|
|
266
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral, debt, quote }) {
|
|
271
267
|
this._checkLeverageZap();
|
|
272
|
-
const { _totalCollateral, _userCollateral, _collateralFromUserBorrowed, _collateralFromDebt, avgPrice } = yield this._leverageExpectedCollateral(userCollateral,
|
|
268
|
+
const { _totalCollateral, _userCollateral, _collateralFromUserBorrowed, _collateralFromDebt, avgPrice } = yield this._leverageExpectedCollateral(userCollateral, debt, quote);
|
|
273
269
|
return {
|
|
274
270
|
totalCollateral: formatUnits(_totalCollateral, this.market.collateral_token.decimals),
|
|
275
271
|
userCollateral: formatUnits(_userCollateral, this.market.collateral_token.decimals),
|
|
@@ -282,11 +278,11 @@ export class LeverageZapV2BaseModule {
|
|
|
282
278
|
});
|
|
283
279
|
}
|
|
284
280
|
leverageCreateLoanExpectedMetrics(_a) {
|
|
285
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral,
|
|
281
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral, debt, range, quote, healthIsFull = true }) {
|
|
286
282
|
this._checkLeverageZap();
|
|
287
|
-
const [_n2, _n1] = yield this._leverageBands(userCollateral,
|
|
283
|
+
const [_n2, _n1] = yield this._leverageBands(userCollateral, debt, range, quote);
|
|
288
284
|
const prices = yield this.market.prices.getPrices(_n2, _n1);
|
|
289
|
-
const health = yield this._leverageHealth(userCollateral,
|
|
285
|
+
const health = yield this._leverageHealth(userCollateral, debt, range, quote, healthIsFull);
|
|
290
286
|
return {
|
|
291
287
|
priceImpact: quote.priceImpact,
|
|
292
288
|
bands: [Number(_n2), Number(_n1)],
|
|
@@ -296,9 +292,9 @@ export class LeverageZapV2BaseModule {
|
|
|
296
292
|
});
|
|
297
293
|
}
|
|
298
294
|
leverageCreateLoanMaxRange(_a) {
|
|
299
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral,
|
|
295
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral, debt, getExpected }) {
|
|
300
296
|
this._checkLeverageZap();
|
|
301
|
-
const maxRecv = yield this.leverageCreateLoanMaxRecvAllRanges({ userCollateral,
|
|
297
|
+
const maxRecv = yield this.leverageCreateLoanMaxRecvAllRanges({ userCollateral, getExpected });
|
|
302
298
|
for (let N = this.market.minBands; N <= this.market.maxBands; N++) {
|
|
303
299
|
if (BN(debt).gt(maxRecv[N].maxDebt))
|
|
304
300
|
return N - 1;
|
|
@@ -306,9 +302,9 @@ export class LeverageZapV2BaseModule {
|
|
|
306
302
|
return this.market.maxBands;
|
|
307
303
|
});
|
|
308
304
|
}
|
|
309
|
-
_leverageBands(userCollateral,
|
|
305
|
+
_leverageBands(userCollateral, debt, range, quote, user) {
|
|
310
306
|
return __awaiter(this, void 0, void 0, function* () {
|
|
311
|
-
const _n1 = yield this._leverageCalcN1(userCollateral,
|
|
307
|
+
const _n1 = yield this._leverageCalcN1(userCollateral, debt, range, quote, user);
|
|
312
308
|
if (range < 0) {
|
|
313
309
|
const { N } = yield this.market.userPosition.userState(user);
|
|
314
310
|
range = Number(N);
|
|
@@ -317,10 +313,10 @@ export class LeverageZapV2BaseModule {
|
|
|
317
313
|
return [_n2, _n1];
|
|
318
314
|
});
|
|
319
315
|
}
|
|
320
|
-
_leverageCreateLoanBandsAllRanges(userCollateral,
|
|
316
|
+
_leverageCreateLoanBandsAllRanges(userCollateral, debt, getExpected, quote) {
|
|
321
317
|
return __awaiter(this, void 0, void 0, function* () {
|
|
322
|
-
const maxN = yield this.leverageCreateLoanMaxRange({ userCollateral,
|
|
323
|
-
const _n1_arr = yield this._leverageCalcN1AllRanges(userCollateral,
|
|
318
|
+
const maxN = yield this.leverageCreateLoanMaxRange({ userCollateral, debt, getExpected });
|
|
319
|
+
const _n1_arr = yield this._leverageCalcN1AllRanges(userCollateral, debt, maxN, quote);
|
|
324
320
|
const _n2_arr = [];
|
|
325
321
|
for (let N = this.market.minBands; N <= maxN; N++) {
|
|
326
322
|
_n2_arr.push(_n1_arr[N - this.market.minBands] + BigInt(N - 1));
|
|
@@ -333,9 +329,9 @@ export class LeverageZapV2BaseModule {
|
|
|
333
329
|
});
|
|
334
330
|
}
|
|
335
331
|
leverageCreateLoanBandsAllRanges(_a) {
|
|
336
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral,
|
|
332
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral, debt, getExpected, quote }) {
|
|
337
333
|
this._checkLeverageZap();
|
|
338
|
-
const _bands = yield this._leverageCreateLoanBandsAllRanges(userCollateral,
|
|
334
|
+
const _bands = yield this._leverageCreateLoanBandsAllRanges(userCollateral, debt, getExpected, quote);
|
|
339
335
|
const bands = {};
|
|
340
336
|
for (let N = this.market.minBands; N <= this.market.maxBands; N++) {
|
|
341
337
|
if (_bands[N]) {
|
|
@@ -349,9 +345,9 @@ export class LeverageZapV2BaseModule {
|
|
|
349
345
|
});
|
|
350
346
|
}
|
|
351
347
|
leverageCreateLoanPricesAllRanges(_a) {
|
|
352
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral,
|
|
348
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral, debt, getExpected, quote }) {
|
|
353
349
|
this._checkLeverageZap();
|
|
354
|
-
const _bands = yield this._leverageCreateLoanBandsAllRanges(userCollateral,
|
|
350
|
+
const _bands = yield this._leverageCreateLoanBandsAllRanges(userCollateral, debt, getExpected, quote);
|
|
355
351
|
const prices = {};
|
|
356
352
|
for (let N = this.market.minBands; N <= this.market.maxBands; N++) {
|
|
357
353
|
if (_bands[N]) {
|
|
@@ -364,11 +360,11 @@ export class LeverageZapV2BaseModule {
|
|
|
364
360
|
return prices;
|
|
365
361
|
});
|
|
366
362
|
}
|
|
367
|
-
_leverageHealth(userCollateral_1,
|
|
368
|
-
return __awaiter(this, arguments, void 0, function* (userCollateral,
|
|
363
|
+
_leverageHealth(userCollateral_1, dDebt_1, range_1, quote_1, full_1) {
|
|
364
|
+
return __awaiter(this, arguments, void 0, function* (userCollateral, dDebt, range, quote, full, user = this.llamalend.constants.ZERO_ADDRESS) {
|
|
369
365
|
if (range > 0)
|
|
370
366
|
this.market.prices.checkRange(range);
|
|
371
|
-
const { _totalCollateral } = yield this._leverageExpectedCollateral(userCollateral,
|
|
367
|
+
const { _totalCollateral } = yield this._leverageExpectedCollateral(userCollateral, dDebt, quote, user);
|
|
372
368
|
const { _borrowed, _N } = yield this.market.userPosition.userStateBigInt(user);
|
|
373
369
|
if (_borrowed > BigInt(0))
|
|
374
370
|
throw Error(`User ${user} is already in liquidation mode`);
|
|
@@ -384,64 +380,52 @@ export class LeverageZapV2BaseModule {
|
|
|
384
380
|
});
|
|
385
381
|
}
|
|
386
382
|
leverageCreateLoanIsApproved(_a) {
|
|
387
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral
|
|
383
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral }) {
|
|
388
384
|
this._checkLeverageZap();
|
|
389
|
-
|
|
390
|
-
const borrowedAllowance = yield hasAllowance.call(this.llamalend, [this.market.borrowed_token.address], [userBorrowed], this.llamalend.signerAddress, this._getLeverageZapAddress());
|
|
391
|
-
return collateralAllowance && borrowedAllowance;
|
|
385
|
+
return yield hasAllowance.call(this.llamalend, [this.market.collateral_token.address], [userCollateral], this.llamalend.signerAddress, this.market.addresses.controller);
|
|
392
386
|
});
|
|
393
387
|
}
|
|
394
388
|
leverageCreateLoanApproveEstimateGas(_a) {
|
|
395
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral
|
|
389
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral }) {
|
|
396
390
|
this._checkLeverageZap();
|
|
397
|
-
|
|
398
|
-
const borrowedGas = yield ensureAllowanceEstimateGas.call(this.llamalend, [this.market.borrowed_token.address], [userBorrowed], this._getLeverageZapAddress());
|
|
399
|
-
if (Array.isArray(collateralGas) && Array.isArray(borrowedGas)) {
|
|
400
|
-
return [collateralGas[0] + borrowedGas[0], collateralGas[1] + borrowedGas[1]];
|
|
401
|
-
}
|
|
402
|
-
else {
|
|
403
|
-
return collateralGas + borrowedGas;
|
|
404
|
-
}
|
|
391
|
+
return yield ensureAllowanceEstimateGas.call(this.llamalend, [this.market.collateral_token.address], [userCollateral], this.market.addresses.controller);
|
|
405
392
|
});
|
|
406
393
|
}
|
|
407
394
|
leverageCreateLoanApprove(_a) {
|
|
408
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral
|
|
395
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral }) {
|
|
409
396
|
this._checkLeverageZap();
|
|
410
|
-
|
|
411
|
-
const borrowedApproveTx = yield ensureAllowance.call(this.llamalend, [this.market.borrowed_token.address], [userBorrowed], this._getLeverageZapAddress());
|
|
412
|
-
return [...collateralApproveTx, ...borrowedApproveTx];
|
|
397
|
+
return yield ensureAllowance.call(this.llamalend, [this.market.collateral_token.address], [userCollateral], this.market.addresses.controller);
|
|
413
398
|
});
|
|
414
399
|
}
|
|
415
|
-
_leverageCreateLoan(userCollateral,
|
|
400
|
+
_leverageCreateLoan(userCollateral, debt, range, minRecv, router, calldata, estimateGas) {
|
|
416
401
|
return __awaiter(this, void 0, void 0, function* () {
|
|
417
402
|
if (yield this.market.userPosition.userLoanExists())
|
|
418
403
|
throw Error("Loan already created");
|
|
419
404
|
this.market.prices.checkRange(range);
|
|
420
405
|
const _userCollateral = parseUnits(userCollateral, this.market.collateral_token.decimals);
|
|
421
|
-
const _userBorrowed = parseUnits(userBorrowed, this.market.borrowed_token.decimals);
|
|
422
406
|
const _debt = parseUnits(debt, this.market.borrowed_token.decimals);
|
|
423
407
|
const _minRecv = parseUnits(minRecv, this.market.collateral_token.decimals);
|
|
424
|
-
return yield this._createLoanContractCall(_userCollateral,
|
|
408
|
+
return yield this._createLoanContractCall(_userCollateral, _debt, _minRecv, range, router, calldata, estimateGas);
|
|
425
409
|
});
|
|
426
410
|
}
|
|
427
411
|
leverageCreateLoanEstimateGas(_a) {
|
|
428
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral,
|
|
412
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral, debt, range, minRecv, router, calldata }) {
|
|
429
413
|
this._checkLeverageZap();
|
|
430
|
-
if (!(yield this.leverageCreateLoanIsApproved({ userCollateral
|
|
414
|
+
if (!(yield this.leverageCreateLoanIsApproved({ userCollateral })))
|
|
431
415
|
throw Error("Approval is needed for gas estimation");
|
|
432
|
-
return yield this._leverageCreateLoan(userCollateral,
|
|
416
|
+
return yield this._leverageCreateLoan(userCollateral, debt, range, minRecv, router, calldata, true);
|
|
433
417
|
});
|
|
434
418
|
}
|
|
435
419
|
leverageCreateLoan(_a) {
|
|
436
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral,
|
|
420
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral, debt, range, minRecv, router, calldata }) {
|
|
437
421
|
this._checkLeverageZap();
|
|
438
|
-
yield this.leverageCreateLoanApprove({ userCollateral
|
|
439
|
-
return yield this._leverageCreateLoan(userCollateral,
|
|
422
|
+
yield this.leverageCreateLoanApprove({ userCollateral });
|
|
423
|
+
return yield this._leverageCreateLoan(userCollateral, debt, range, minRecv, router, calldata, false);
|
|
440
424
|
});
|
|
441
425
|
}
|
|
442
426
|
// ---------------- LEVERAGE BORROW MORE ----------------
|
|
443
427
|
leverageBorrowMoreMaxRecv(_a) {
|
|
444
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral,
|
|
428
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral, getExpected, address = "" }) {
|
|
445
429
|
// max_borrowable = userCollateral / (1 / (k_effective * max_p_base) - 1 / p_avg)
|
|
446
430
|
this._checkLeverageZap();
|
|
447
431
|
address = _getAddress.call(this.llamalend, address);
|
|
@@ -450,8 +434,8 @@ export class LeverageZapV2BaseModule {
|
|
|
450
434
|
throw Error(`User ${address} is already in liquidation mode`);
|
|
451
435
|
const _userCollateral = parseUnits(userCollateral, this.market.collateral_token.decimals);
|
|
452
436
|
const _borrowedFromStateCollateral = yield this._getMaxAdditionalBorrowable(_stateCollateral, BigInt(0), _N, _stateDebt, address);
|
|
453
|
-
const _userBorrowed = _borrowedFromStateCollateral
|
|
454
|
-
userBorrowed = formatUnits(_userBorrowed, this.market.borrowed_token.decimals);
|
|
437
|
+
const _userBorrowed = _borrowedFromStateCollateral;
|
|
438
|
+
const userBorrowed = formatUnits(_userBorrowed, this.market.borrowed_token.decimals);
|
|
455
439
|
const oraclePriceBand = yield this.market.prices.oraclePriceBand();
|
|
456
440
|
let pAvgBN = BN(yield this.market.prices.calcTickPrice(oraclePriceBand)); // upper tick of oracle price band
|
|
457
441
|
let maxBorrowablePrevBN = BN(0);
|
|
@@ -492,10 +476,10 @@ export class LeverageZapV2BaseModule {
|
|
|
492
476
|
});
|
|
493
477
|
}
|
|
494
478
|
leverageBorrowMoreExpectedCollateral(_a) {
|
|
495
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral,
|
|
479
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral, dDebt, quote, address = "" }) {
|
|
496
480
|
this._checkLeverageZap();
|
|
497
481
|
address = _getAddress.call(this.llamalend, address);
|
|
498
|
-
const { _totalCollateral, _userCollateral, _collateralFromUserBorrowed, _collateralFromDebt, avgPrice } = yield this._leverageExpectedCollateral(userCollateral,
|
|
482
|
+
const { _totalCollateral, _userCollateral, _collateralFromUserBorrowed, _collateralFromDebt, avgPrice } = yield this._leverageExpectedCollateral(userCollateral, dDebt, quote, address);
|
|
499
483
|
return {
|
|
500
484
|
totalCollateral: formatUnits(_totalCollateral, this.market.collateral_token.decimals),
|
|
501
485
|
userCollateral: formatUnits(_userCollateral, this.market.collateral_token.decimals),
|
|
@@ -506,12 +490,12 @@ export class LeverageZapV2BaseModule {
|
|
|
506
490
|
});
|
|
507
491
|
}
|
|
508
492
|
leverageBorrowMoreExpectedMetrics(_a) {
|
|
509
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral,
|
|
493
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral, debt, quote, healthIsFull = true, address = "" }) {
|
|
510
494
|
this._checkLeverageZap();
|
|
511
495
|
address = _getAddress.call(this.llamalend, address);
|
|
512
|
-
const [_n2, _n1] = yield this._leverageBands(userCollateral,
|
|
496
|
+
const [_n2, _n1] = yield this._leverageBands(userCollateral, debt, -1, quote, address);
|
|
513
497
|
const prices = yield this.market.prices.getPrices(_n2, _n1);
|
|
514
|
-
const health = yield this._leverageHealth(userCollateral,
|
|
498
|
+
const health = yield this._leverageHealth(userCollateral, debt, -1, quote, healthIsFull, address);
|
|
515
499
|
return {
|
|
516
500
|
priceImpact: quote.priceImpact,
|
|
517
501
|
bands: [Number(_n2), Number(_n1)],
|
|
@@ -520,50 +504,48 @@ export class LeverageZapV2BaseModule {
|
|
|
520
504
|
};
|
|
521
505
|
});
|
|
522
506
|
}
|
|
523
|
-
_leverageBorrowMore(userCollateral,
|
|
507
|
+
_leverageBorrowMore(userCollateral, debt, minRecv, router, calldata, estimateGas) {
|
|
524
508
|
return __awaiter(this, void 0, void 0, function* () {
|
|
525
509
|
if (!(yield this.market.userPosition.userLoanExists()))
|
|
526
510
|
throw Error("Loan does not exist");
|
|
527
511
|
const _userCollateral = parseUnits(userCollateral, this.market.collateral_token.decimals);
|
|
528
|
-
const _userBorrowed = parseUnits(userBorrowed, this.market.borrowed_token.decimals);
|
|
529
512
|
const _debt = parseUnits(debt, this.market.borrowed_token.decimals);
|
|
530
513
|
const _minRecv = parseUnits(minRecv, this.market.collateral_token.decimals);
|
|
531
|
-
return yield this._borrowMoreContractCall(_userCollateral,
|
|
514
|
+
return yield this._borrowMoreContractCall(_userCollateral, _debt, _minRecv, router, calldata, estimateGas);
|
|
532
515
|
});
|
|
533
516
|
}
|
|
534
517
|
leverageBorrowMoreIsApproved(_a) {
|
|
535
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral
|
|
536
|
-
return yield this.leverageCreateLoanIsApproved({ userCollateral
|
|
518
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral }) {
|
|
519
|
+
return yield this.leverageCreateLoanIsApproved({ userCollateral });
|
|
537
520
|
});
|
|
538
521
|
}
|
|
539
522
|
leverageBorrowMoreApprove(_a) {
|
|
540
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral
|
|
541
|
-
return yield this.leverageCreateLoanApprove({ userCollateral
|
|
523
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral }) {
|
|
524
|
+
return yield this.leverageCreateLoanApprove({ userCollateral });
|
|
542
525
|
});
|
|
543
526
|
}
|
|
544
527
|
leverageBorrowMoreEstimateGas(_a) {
|
|
545
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral,
|
|
528
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral, debt, minRecv, router, calldata }) {
|
|
546
529
|
this._checkLeverageZap();
|
|
547
|
-
if (!(yield this.leverageCreateLoanIsApproved({ userCollateral
|
|
530
|
+
if (!(yield this.leverageCreateLoanIsApproved({ userCollateral })))
|
|
548
531
|
throw Error("Approval is needed for gas estimation");
|
|
549
|
-
return yield this._leverageBorrowMore(userCollateral,
|
|
532
|
+
return yield this._leverageBorrowMore(userCollateral, debt, minRecv, router, calldata, true);
|
|
550
533
|
});
|
|
551
534
|
}
|
|
552
535
|
leverageBorrowMore(_a) {
|
|
553
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral,
|
|
536
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral, debt, minRecv, router, calldata }) {
|
|
554
537
|
this._checkLeverageZap();
|
|
555
|
-
yield this.leverageCreateLoanApprove({ userCollateral
|
|
556
|
-
return yield this._leverageBorrowMore(userCollateral,
|
|
538
|
+
yield this.leverageCreateLoanApprove({ userCollateral });
|
|
539
|
+
return yield this._leverageBorrowMore(userCollateral, debt, minRecv, router, calldata, false);
|
|
557
540
|
});
|
|
558
541
|
}
|
|
559
542
|
leverageBorrowMoreFutureLeverage(_a) {
|
|
560
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral,
|
|
543
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral, debt, quote, address = "" }) {
|
|
561
544
|
address = _getAddress.call(this.llamalend, address);
|
|
562
545
|
this._checkLeverageZap();
|
|
563
546
|
const { stateCollateral, totalDepositFromUser } = yield this.market.userPosition.getCurrentLeverageParams(address);
|
|
564
547
|
const expected = yield this.leverageBorrowMoreExpectedCollateral({
|
|
565
548
|
userCollateral,
|
|
566
|
-
userBorrowed,
|
|
567
549
|
dDebt: debt,
|
|
568
550
|
quote,
|
|
569
551
|
address,
|
|
@@ -574,16 +556,16 @@ export class LeverageZapV2BaseModule {
|
|
|
574
556
|
});
|
|
575
557
|
}
|
|
576
558
|
leverageRepayIsFull(_a) {
|
|
577
|
-
return __awaiter(this, arguments, void 0, function* ({ stateCollateral, userCollateral,
|
|
559
|
+
return __awaiter(this, arguments, void 0, function* ({ stateCollateral, userCollateral, quote, address = "" }) {
|
|
578
560
|
this._checkLeverageZap();
|
|
579
561
|
address = _getAddress.call(this.llamalend, address);
|
|
580
562
|
const { _borrowed: _stateBorrowed, _debt } = yield this.market.userPosition.userStateBigInt(address);
|
|
581
|
-
const { _totalBorrowed } = this._leverageRepayExpectedBorrowed(stateCollateral, userCollateral,
|
|
563
|
+
const { _totalBorrowed } = this._leverageRepayExpectedBorrowed(stateCollateral, userCollateral, quote);
|
|
582
564
|
return _stateBorrowed + _totalBorrowed > _debt;
|
|
583
565
|
});
|
|
584
566
|
}
|
|
585
567
|
leverageRepayIsAvailable(_a) {
|
|
586
|
-
return __awaiter(this, arguments, void 0, function* ({ stateCollateral, userCollateral,
|
|
568
|
+
return __awaiter(this, arguments, void 0, function* ({ stateCollateral, userCollateral, quote, address = "" }) {
|
|
587
569
|
// 0. const { collateral, stablecoin, debt } = await this.market.userPosition.userState(address);
|
|
588
570
|
// 1. maxCollateral for deleverage is collateral from line above.
|
|
589
571
|
// 2. If user is underwater (stablecoin > 0), only full repayment is available:
|
|
@@ -599,17 +581,17 @@ export class LeverageZapV2BaseModule {
|
|
|
599
581
|
return false;
|
|
600
582
|
// Only full repayment and closing the position is available if user is underwater+
|
|
601
583
|
if (BN(borrowed).gt(0))
|
|
602
|
-
return yield this.leverageRepayIsFull({ stateCollateral, userCollateral,
|
|
584
|
+
return yield this.leverageRepayIsFull({ stateCollateral, userCollateral, quote, address });
|
|
603
585
|
return true;
|
|
604
586
|
});
|
|
605
587
|
}
|
|
606
588
|
leverageRepayExpectedMetrics(_a) {
|
|
607
|
-
return __awaiter(this, arguments, void 0, function* ({ stateCollateral, userCollateral,
|
|
589
|
+
return __awaiter(this, arguments, void 0, function* ({ stateCollateral, userCollateral, healthIsFull, quote, address }) {
|
|
608
590
|
this._checkLeverageZap();
|
|
609
591
|
address = _getAddress.call(this.llamalend, address);
|
|
610
|
-
const [_n2, _n1] = yield this._leverageRepayBands(stateCollateral, userCollateral,
|
|
592
|
+
const [_n2, _n1] = yield this._leverageRepayBands(stateCollateral, userCollateral, quote, address);
|
|
611
593
|
const prices = yield this.market.prices.getPrices(_n2, _n1);
|
|
612
|
-
const health = yield this._leverageRepayHealth(stateCollateral, userCollateral,
|
|
594
|
+
const health = yield this._leverageRepayHealth(stateCollateral, userCollateral, quote, healthIsFull, address);
|
|
613
595
|
const _stateCollateral = parseUnits(stateCollateral, this.market.collateral_token.decimals);
|
|
614
596
|
const _userCollateral = parseUnits(userCollateral, this.market.collateral_token.decimals);
|
|
615
597
|
const priceImpact = _stateCollateral + _userCollateral > BigInt(0) ? quote.priceImpact : null;
|
|
@@ -621,16 +603,16 @@ export class LeverageZapV2BaseModule {
|
|
|
621
603
|
};
|
|
622
604
|
});
|
|
623
605
|
}
|
|
624
|
-
_leverageRepayHealth(stateCollateral_1, userCollateral_1,
|
|
625
|
-
return __awaiter(this, arguments, void 0, function* (stateCollateral, userCollateral,
|
|
606
|
+
_leverageRepayHealth(stateCollateral_1, userCollateral_1, quote_1) {
|
|
607
|
+
return __awaiter(this, arguments, void 0, function* (stateCollateral, userCollateral, quote, full = true, address = "") {
|
|
626
608
|
this._checkLeverageZap();
|
|
627
609
|
address = _getAddress.call(this.llamalend, address);
|
|
628
610
|
const { _borrowed: _stateBorrowed, _debt, _N } = yield this.market.userPosition.userStateBigInt(address);
|
|
629
611
|
if (_stateBorrowed > BigInt(0))
|
|
630
612
|
return "0.0";
|
|
631
|
-
if (!(yield this.leverageRepayIsAvailable({ stateCollateral, userCollateral,
|
|
613
|
+
if (!(yield this.leverageRepayIsAvailable({ stateCollateral, userCollateral, quote, address })))
|
|
632
614
|
return "0.0";
|
|
633
|
-
const { _totalBorrowed } = this._leverageRepayExpectedBorrowed(stateCollateral, userCollateral,
|
|
615
|
+
const { _totalBorrowed } = this._leverageRepayExpectedBorrowed(stateCollateral, userCollateral, quote);
|
|
634
616
|
const _dCollateral = parseUnits(stateCollateral, this.market.collateral_token.decimals) * BigInt(-1);
|
|
635
617
|
const _dDebt = _totalBorrowed * BigInt(-1);
|
|
636
618
|
if (_debt + _dDebt <= BigInt(0))
|
|
@@ -641,58 +623,56 @@ export class LeverageZapV2BaseModule {
|
|
|
641
623
|
});
|
|
642
624
|
}
|
|
643
625
|
leverageRepayIsApproved(_a) {
|
|
644
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral
|
|
626
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral }) {
|
|
645
627
|
this._checkLeverageZap();
|
|
646
|
-
return yield hasAllowance.call(this.llamalend, [this.market.collateral_token.address
|
|
628
|
+
return yield hasAllowance.call(this.llamalend, [this.market.collateral_token.address], [userCollateral], this.llamalend.signerAddress, this._getLeverageZapAddress());
|
|
647
629
|
});
|
|
648
630
|
}
|
|
649
631
|
leverageRepayApproveEstimateGas(_a) {
|
|
650
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral
|
|
632
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral }) {
|
|
651
633
|
this._checkLeverageZap();
|
|
652
|
-
return yield ensureAllowanceEstimateGas.call(this.llamalend, [this.market.collateral_token.address
|
|
634
|
+
return yield ensureAllowanceEstimateGas.call(this.llamalend, [this.market.collateral_token.address], [userCollateral], this._getLeverageZapAddress());
|
|
653
635
|
});
|
|
654
636
|
}
|
|
655
637
|
leverageRepayApprove(_a) {
|
|
656
|
-
return __awaiter(this, arguments, void 0, function* ({ userCollateral
|
|
638
|
+
return __awaiter(this, arguments, void 0, function* ({ userCollateral }) {
|
|
657
639
|
this._checkLeverageZap();
|
|
658
|
-
return yield ensureAllowance.call(this.llamalend, [this.market.collateral_token.address
|
|
640
|
+
return yield ensureAllowance.call(this.llamalend, [this.market.collateral_token.address], [userCollateral], this._getLeverageZapAddress());
|
|
659
641
|
});
|
|
660
642
|
}
|
|
661
|
-
_leverageRepay(stateCollateral, userCollateral,
|
|
643
|
+
_leverageRepay(stateCollateral, userCollateral, minRecv, router, calldata, estimateGas) {
|
|
662
644
|
return __awaiter(this, void 0, void 0, function* () {
|
|
663
645
|
if (!(yield this.market.userPosition.userLoanExists()))
|
|
664
646
|
throw Error("Loan does not exist");
|
|
665
647
|
const _stateCollateral = parseUnits(stateCollateral, this.market.collateral_token.decimals);
|
|
666
648
|
const _userCollateral = parseUnits(userCollateral, this.market.collateral_token.decimals);
|
|
667
|
-
const _userBorrowed = parseUnits(userBorrowed, this.market.borrowed_token.decimals);
|
|
668
649
|
const _minRecv = parseUnits(minRecv, this.market.borrowed_token.decimals);
|
|
669
650
|
const exchangeCalldata = _stateCollateral + _userCollateral > BigInt(0) ? calldata : "0x";
|
|
670
|
-
return yield this._repayContractCall(_userCollateral,
|
|
651
|
+
return yield this._repayContractCall(_userCollateral, _minRecv, router, exchangeCalldata, estimateGas);
|
|
671
652
|
});
|
|
672
653
|
}
|
|
673
654
|
leverageRepayEstimateGas(_a) {
|
|
674
|
-
return __awaiter(this, arguments, void 0, function* ({ stateCollateral, userCollateral,
|
|
655
|
+
return __awaiter(this, arguments, void 0, function* ({ stateCollateral, userCollateral, minRecv, router, calldata }) {
|
|
675
656
|
this._checkLeverageZap();
|
|
676
|
-
if (!(yield this.leverageRepayIsApproved({ userCollateral
|
|
657
|
+
if (!(yield this.leverageRepayIsApproved({ userCollateral })))
|
|
677
658
|
throw Error("Approval is needed for gas estimation");
|
|
678
|
-
return yield this._leverageRepay(stateCollateral, userCollateral,
|
|
659
|
+
return yield this._leverageRepay(stateCollateral, userCollateral, minRecv, router, calldata, true);
|
|
679
660
|
});
|
|
680
661
|
}
|
|
681
662
|
leverageRepay(_a) {
|
|
682
|
-
return __awaiter(this, arguments, void 0, function* ({ stateCollateral, userCollateral,
|
|
663
|
+
return __awaiter(this, arguments, void 0, function* ({ stateCollateral, userCollateral, minRecv, router, calldata }) {
|
|
683
664
|
this._checkLeverageZap();
|
|
684
|
-
yield this.leverageRepayApprove({ userCollateral
|
|
685
|
-
return yield this._leverageRepay(stateCollateral, userCollateral,
|
|
665
|
+
yield this.leverageRepayApprove({ userCollateral });
|
|
666
|
+
return yield this._leverageRepay(stateCollateral, userCollateral, minRecv, router, calldata, false);
|
|
686
667
|
});
|
|
687
668
|
}
|
|
688
669
|
leverageRepayFutureLeverage(_a) {
|
|
689
|
-
return __awaiter(this, arguments, void 0, function* ({ stateCollateral, userCollateral,
|
|
670
|
+
return __awaiter(this, arguments, void 0, function* ({ stateCollateral, userCollateral, address = "" }) {
|
|
690
671
|
address = _getAddress.call(this.llamalend, address);
|
|
691
672
|
this._checkLeverageZap();
|
|
692
673
|
const { stateCollateral: currentStateCollateral, totalDepositFromUser } = yield this.market.userPosition.getCurrentLeverageParams(address);
|
|
693
|
-
const collateralFromUserBorrowed = yield this.market.amm.swapExpected(0, 1, userBorrowed);
|
|
694
674
|
const futureCollateralState = BN(currentStateCollateral).minus(stateCollateral);
|
|
695
|
-
const futureTotalDepositFromUserPrecise = BN(totalDepositFromUser).plus(userCollateral)
|
|
675
|
+
const futureTotalDepositFromUserPrecise = BN(totalDepositFromUser).plus(userCollateral);
|
|
696
676
|
return futureCollateralState.div(futureTotalDepositFromUserPrecise).toString();
|
|
697
677
|
});
|
|
698
678
|
}
|
|
@@ -8,7 +8,7 @@ export declare class LeverageV1ZapV2Module extends LeverageZapV2BaseModule {
|
|
|
8
8
|
protected _calcCreateLoanHealthCall(_collateral: bigint, _dDebt: bigint, N: number | bigint, full: boolean): Promise<bigint>;
|
|
9
9
|
protected _calcBorrowMoreHealthCall(_collateral: bigint, _dDebt: bigint, N: number | bigint, user: string, full: boolean): Promise<bigint>;
|
|
10
10
|
protected _calcRepayHealthCall(_dCollateral: bigint, _dDebt: bigint, N: number | bigint, user: string, full: boolean): Promise<bigint>;
|
|
11
|
-
protected _createLoanContractCall(_userCollateral: bigint,
|
|
12
|
-
protected _borrowMoreContractCall(_userCollateral: bigint,
|
|
13
|
-
protected _repayContractCall(_userCollateral: bigint,
|
|
11
|
+
protected _createLoanContractCall(_userCollateral: bigint, _debt: bigint, _minRecv: bigint, range: number, router: string, exchangeCalldata: string, estimateGas: boolean): Promise<string | TGas>;
|
|
12
|
+
protected _borrowMoreContractCall(_userCollateral: bigint, _debt: bigint, _minRecv: bigint, router: string, exchangeCalldata: string, estimateGas: boolean): Promise<string | TGas>;
|
|
13
|
+
protected _repayContractCall(_userCollateral: bigint, _minRecv: bigint, router: string, exchangeCalldata: string, estimateGas: boolean): Promise<string | TGas>;
|
|
14
14
|
}
|