@curvefi/llamalend-api 2.0.0 → 2.0.2

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.
@@ -159,14 +159,22 @@ export class LendMarketTemplate {
159
159
  partialSelfLiquidateApprove: loan.partialSelfLiquidateApprove.bind(loan),
160
160
  partialSelfLiquidate: loan.partialSelfLiquidate.bind(loan),
161
161
  estimateGas: {
162
+ createLoanApprove: loan.estimateGas.createLoanApprove,
162
163
  createLoan: loan.createLoanEstimateGas.bind(loan),
164
+ borrowMoreApprove: loan.estimateGas.borrowMoreApprove,
163
165
  borrowMore: loan.borrowMoreEstimateGas.bind(loan),
166
+ addCollateralApprove: loan.estimateGas.addCollateralApprove,
164
167
  addCollateral: loan.addCollateralEstimateGas.bind(loan),
165
168
  removeCollateral: loan.removeCollateralEstimateGas.bind(loan),
169
+ repayApprove: loan.estimateGas.repayApprove,
166
170
  repay: loan.repayEstimateGas.bind(loan),
171
+ fullRepayApprove: loan.estimateGas.fullRepayApprove,
167
172
  fullRepay: loan.fullRepayEstimateGas.bind(loan),
173
+ liquidateApprove: loan.estimateGas.liquidateApprove,
168
174
  liquidate: loan.liquidateEstimateGas.bind(loan),
175
+ selfLiquidateApprove: loan.estimateGas.selfLiquidateApprove,
169
176
  selfLiquidate: loan.selfLiquidateEstimateGas.bind(loan),
177
+ partialSelfLiquidateApprove: loan.estimateGas.partialSelfLiquidateApprove,
170
178
  partialSelfLiquidate: loan.partialSelfLiquidateEstimateGas.bind(loan),
171
179
  },
172
180
  };
@@ -243,6 +251,7 @@ export class LendMarketTemplate {
243
251
  borrowMoreApprove: leverageZapV1.leverageCreateLoanApprove.bind(leverageZapV1),
244
252
  borrowMoreRouteImage: leverageZapV1.leverageBorrowMoreRouteImage.bind(leverageZapV1),
245
253
  borrowMore: leverageZapV1.leverageBorrowMore.bind(leverageZapV1),
254
+ borrowMoreFutureLeverage: leverageZapV1.leverageBorrowMoreFutureLeverage.bind(leverageZapV1),
246
255
  repayExpectedBorrowed: leverageZapV1.leverageRepayExpectedBorrowed.bind(leverageZapV1),
247
256
  repayPriceImpact: leverageZapV1.leverageRepayPriceImpact.bind(leverageZapV1),
248
257
  repayIsFull: leverageZapV1.leverageRepayIsFull.bind(leverageZapV1),
@@ -254,6 +263,7 @@ export class LendMarketTemplate {
254
263
  repayApprove: leverageZapV1.leverageRepayApprove.bind(leverageZapV1),
255
264
  repayRouteImage: leverageZapV1.leverageRepayRouteImage.bind(leverageZapV1),
256
265
  repay: leverageZapV1.leverageRepay.bind(leverageZapV1),
266
+ repayFutureLeverage: leverageZapV1.leverageRepayFutureLeverage.bind(leverageZapV1),
257
267
  estimateGas: {
258
268
  createLoanApprove: leverageZapV1.leverageCreateLoanApproveEstimateGas.bind(leverageZapV1),
259
269
  createLoan: leverageZapV1.leverageCreateLoanEstimateGas.bind(leverageZapV1),
@@ -62,6 +62,7 @@ export interface ILeverageV1 {
62
62
  borrowMoreApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
63
63
  borrowMoreRouteImage: (userBorrowed: TAmount, debt: TAmount) => Promise<string>;
64
64
  borrowMore: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number) => Promise<string>;
65
+ borrowMoreFutureLeverage: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, userAddress?: string, slippage?: number) => Promise<string>;
65
66
  repayExpectedBorrowed: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<{
66
67
  totalBorrowed: string;
67
68
  borrowedFromStateCollateral: string;
@@ -79,6 +80,7 @@ export interface ILeverageV1 {
79
80
  repayApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
80
81
  repayRouteImage: (stateCollateral: TAmount, userCollateral: TAmount) => Promise<string>;
81
82
  repay: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<string>;
83
+ repayFutureLeverage: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, userAddress?: string, slippage?: number) => Promise<string>;
82
84
  estimateGas: {
83
85
  createLoanApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<TGas>;
84
86
  createLoan: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number, slippage?: number) => Promise<number>;
@@ -60,14 +60,22 @@ export interface ILoanV1 {
60
60
  partialSelfLiquidateApprove: (partialFrac: IPartialFrac) => Promise<string[]>;
61
61
  partialSelfLiquidate: (partialFrac: IPartialFrac, slippage?: number) => Promise<string>;
62
62
  estimateGas: {
63
+ createLoanApprove: (collateral: TAmount) => Promise<TGas>;
63
64
  createLoan: (collateral: TAmount, debt: TAmount, range: number) => Promise<TGas>;
65
+ borrowMoreApprove: (collateral: TAmount) => Promise<TGas>;
64
66
  borrowMore: (collateral: TAmount, debt: TAmount) => Promise<TGas>;
67
+ addCollateralApprove: (collateral: TAmount) => Promise<TGas>;
65
68
  addCollateral: (collateral: TAmount, address?: string) => Promise<TGas>;
66
69
  removeCollateral: (collateral: TAmount) => Promise<TGas>;
70
+ repayApprove: (debt: TAmount) => Promise<TGas>;
67
71
  repay: (debt: TAmount, address?: string) => Promise<TGas>;
72
+ fullRepayApprove: (address?: string) => Promise<TGas>;
68
73
  fullRepay: (address?: string) => Promise<TGas>;
74
+ liquidateApprove: (address?: string) => Promise<TGas>;
69
75
  liquidate: (address: string, slippage?: number) => Promise<TGas>;
76
+ selfLiquidateApprove: () => Promise<TGas>;
70
77
  selfLiquidate: (slippage?: number) => Promise<TGas>;
78
+ partialSelfLiquidateApprove: (partialFrac: IPartialFrac) => Promise<TGas>;
71
79
  partialSelfLiquidate: (partialFrac: IPartialFrac, slippage?: number) => Promise<TGas>;
72
80
  };
73
81
  }
@@ -62,6 +62,7 @@ export interface ILeverageV2 {
62
62
  borrowMoreApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
63
63
  borrowMoreRouteImage: (userBorrowed: TAmount, debt: TAmount) => Promise<string>;
64
64
  borrowMore: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number) => Promise<string>;
65
+ borrowMoreFutureLeverage: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, userAddress?: string, slippage?: number) => Promise<string>;
65
66
  repayExpectedBorrowed: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<{
66
67
  totalBorrowed: string;
67
68
  borrowedFromStateCollateral: string;
@@ -79,6 +80,7 @@ export interface ILeverageV2 {
79
80
  repayApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
80
81
  repayRouteImage: (stateCollateral: TAmount, userCollateral: TAmount) => Promise<string>;
81
82
  repay: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<string>;
83
+ repayFutureLeverage: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, userAddress?: string, slippage?: number) => Promise<string>;
82
84
  estimateGas: {
83
85
  createLoanApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<TGas>;
84
86
  createLoan: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number, slippage?: number) => Promise<number>;
@@ -60,14 +60,22 @@ export interface ILoanV2 {
60
60
  partialSelfLiquidateApprove: (partialFrac: IPartialFrac) => Promise<string[]>;
61
61
  partialSelfLiquidate: (partialFrac: IPartialFrac, slippage?: number) => Promise<string>;
62
62
  estimateGas: {
63
+ createLoanApprove: (collateral: TAmount) => Promise<TGas>;
63
64
  createLoan: (collateral: TAmount, debt: TAmount, range: number) => Promise<TGas>;
65
+ borrowMoreApprove: (collateral: TAmount) => Promise<TGas>;
64
66
  borrowMore: (collateral: TAmount, debt: TAmount) => Promise<TGas>;
67
+ addCollateralApprove: (collateral: TAmount) => Promise<TGas>;
65
68
  addCollateral: (collateral: TAmount, address?: string) => Promise<TGas>;
66
69
  removeCollateral: (collateral: TAmount) => Promise<TGas>;
70
+ repayApprove: (debt: TAmount) => Promise<TGas>;
67
71
  repay: (debt: TAmount, address?: string) => Promise<TGas>;
72
+ fullRepayApprove: (address?: string) => Promise<TGas>;
68
73
  fullRepay: (address?: string) => Promise<TGas>;
74
+ liquidateApprove: (address?: string) => Promise<TGas>;
69
75
  liquidate: (address: string, slippage?: number) => Promise<TGas>;
76
+ selfLiquidateApprove: () => Promise<TGas>;
70
77
  selfLiquidate: (slippage?: number) => Promise<TGas>;
78
+ partialSelfLiquidateApprove: (partialFrac: IPartialFrac) => Promise<TGas>;
71
79
  partialSelfLiquidate: (partialFrac: IPartialFrac, slippage?: number) => Promise<TGas>;
72
80
  };
73
81
  }
@@ -93,6 +93,7 @@ export declare class LeverageZapV1BaseModule {
93
93
  private _leverageBorrowMore;
94
94
  leverageBorrowMoreEstimateGas(userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number): Promise<number>;
95
95
  leverageBorrowMore(userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number): Promise<string>;
96
+ leverageBorrowMoreFutureLeverage(userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, userAddress?: string, slippage?: number): Promise<string>;
96
97
  private _leverageRepayExpectedBorrowed;
97
98
  leverageRepayExpectedBorrowed: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<{
98
99
  totalBorrowed: string;
@@ -115,4 +116,5 @@ export declare class LeverageZapV1BaseModule {
115
116
  private _leverageRepay;
116
117
  leverageRepayEstimateGas(stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number): Promise<number>;
117
118
  leverageRepay(stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number): Promise<string>;
119
+ leverageRepayFutureLeverage(stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, userAddress?: string): Promise<string>;
118
120
  }
@@ -626,6 +626,17 @@ export class LeverageZapV1BaseModule {
626
626
  return yield this._leverageBorrowMore(userCollateral, userBorrowed, debt, slippage, false);
627
627
  });
628
628
  }
629
+ leverageBorrowMoreFutureLeverage(userCollateral_1, userBorrowed_1, debt_1) {
630
+ return __awaiter(this, arguments, void 0, function* (userCollateral, userBorrowed, debt, userAddress = '', slippage = 0.1) {
631
+ userAddress = _getAddress.call(this.llamalend, userAddress);
632
+ this._checkLeverageZap();
633
+ const { stateCollateral, totalDepositFromUser } = yield this.market.userPosition.getCurrentLeverageParams(userAddress);
634
+ const expected = yield this.leverageBorrowMoreExpectedCollateral(userCollateral, userBorrowed, debt, slippage, userAddress);
635
+ const futureCollateralState = BN(stateCollateral).plus(expected.totalCollateral);
636
+ const futureTotalDepositFromUserPrecise = BN(totalDepositFromUser).plus(userCollateral).plus(expected.collateralFromUserBorrowed);
637
+ return futureCollateralState.div(futureTotalDepositFromUserPrecise).toString();
638
+ });
639
+ }
629
640
  leverageRepayPriceImpact(stateCollateral, userCollateral) {
630
641
  return __awaiter(this, void 0, void 0, function* () {
631
642
  this._checkLeverageZap();
@@ -767,4 +778,15 @@ export class LeverageZapV1BaseModule {
767
778
  return yield this._leverageRepay(stateCollateral, userCollateral, userBorrowed, slippage, false);
768
779
  });
769
780
  }
781
+ leverageRepayFutureLeverage(stateCollateral_1, userCollateral_1, userBorrowed_1) {
782
+ return __awaiter(this, arguments, void 0, function* (stateCollateral, userCollateral, userBorrowed, userAddress = '') {
783
+ userAddress = _getAddress.call(this.llamalend, userAddress);
784
+ this._checkLeverageZap();
785
+ const { stateCollateral: currentStateCollateral, totalDepositFromUser } = yield this.market.userPosition.getCurrentLeverageParams(userAddress);
786
+ const collateralFromUserBorrowed = yield this.market.amm.swapExpected(0, 1, userBorrowed);
787
+ const futureCollateralState = BN(currentStateCollateral).minus(stateCollateral);
788
+ const futureTotalDepositFromUserPrecise = BN(totalDepositFromUser).plus(userCollateral).plus(collateralFromUserBorrowed);
789
+ return futureCollateralState.div(futureTotalDepositFromUserPrecise).toString();
790
+ });
791
+ }
770
792
  }
@@ -102,14 +102,22 @@ export declare class LoanBaseModule {
102
102
  partialSelfLiquidateEstimateGas(partialFrac: IPartialFrac, slippage?: number): Promise<TGas>;
103
103
  partialSelfLiquidate(partialFrac: IPartialFrac, slippage?: number): Promise<string>;
104
104
  estimateGas: {
105
+ createLoanApprove: (collateral: number | string) => Promise<TGas>;
105
106
  createLoan: (collateral: number | string, debt: number | string, range: number) => Promise<TGas>;
107
+ borrowMoreApprove: (collateral: number | string) => Promise<TGas>;
106
108
  borrowMore: (collateral: number | string, debt: number | string) => Promise<TGas>;
109
+ addCollateralApprove: (collateral: number | string) => Promise<TGas>;
107
110
  addCollateral: (collateral: number | string, address?: string) => Promise<TGas>;
108
111
  removeCollateral: (collateral: number | string) => Promise<TGas>;
112
+ repayApprove: (debt: number | string) => Promise<TGas>;
109
113
  repay: (debt: number | string, address?: string) => Promise<TGas>;
114
+ fullRepayApprove: (address?: string) => Promise<TGas>;
110
115
  fullRepay: (address?: string) => Promise<TGas>;
116
+ liquidateApprove: (address?: string) => Promise<TGas>;
111
117
  liquidate: (address: string, slippage?: number) => Promise<TGas>;
118
+ selfLiquidateApprove: () => Promise<TGas>;
112
119
  selfLiquidate: (slippage?: number) => Promise<TGas>;
120
+ partialSelfLiquidateApprove: (partialFrac: IPartialFrac) => Promise<TGas>;
113
121
  partialSelfLiquidate: (partialFrac: IPartialFrac, slippage?: number) => Promise<TGas>;
114
122
  };
115
123
  }
@@ -30,14 +30,22 @@ export class LoanBaseModule {
30
30
  maxAge: 5 * 60 * 1000, // 5m
31
31
  });
32
32
  this.estimateGas = {
33
+ createLoanApprove: this.createLoanApproveEstimateGas.bind(this),
33
34
  createLoan: this.createLoanEstimateGas.bind(this),
35
+ borrowMoreApprove: this.borrowMoreApproveEstimateGas.bind(this),
34
36
  borrowMore: this.borrowMoreEstimateGas.bind(this),
37
+ addCollateralApprove: this.addCollateralApproveEstimateGas.bind(this),
35
38
  addCollateral: this.addCollateralEstimateGas.bind(this),
36
39
  removeCollateral: this.removeCollateralEstimateGas.bind(this),
40
+ repayApprove: this.repayApproveEstimateGas.bind(this),
37
41
  repay: this.repayEstimateGas.bind(this),
42
+ fullRepayApprove: this.fullRepayApproveEstimateGas.bind(this),
38
43
  fullRepay: this.fullRepayEstimateGas.bind(this),
44
+ liquidateApprove: this.liquidateApproveEstimateGas.bind(this),
39
45
  liquidate: this.liquidateEstimateGas.bind(this),
46
+ selfLiquidateApprove: this.selfLiquidateApproveEstimateGas.bind(this),
40
47
  selfLiquidate: this.selfLiquidateEstimateGas.bind(this),
48
+ partialSelfLiquidateApprove: this.partialSelfLiquidateApproveEstimateGas.bind(this),
41
49
  partialSelfLiquidate: this.partialSelfLiquidateEstimateGas.bind(this),
42
50
  };
43
51
  this.market = market;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@curvefi/llamalend-api",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "description": "JavaScript library for Curve Lending",
5
5
  "main": "lib/index.js",
6
6
  "author": "Macket",
@@ -267,14 +267,22 @@ export class LendMarketTemplate {
267
267
  partialSelfLiquidate: loan.partialSelfLiquidate.bind(loan),
268
268
 
269
269
  estimateGas: {
270
+ createLoanApprove: loan.estimateGas.createLoanApprove,
270
271
  createLoan: loan.createLoanEstimateGas.bind(loan),
272
+ borrowMoreApprove: loan.estimateGas.borrowMoreApprove,
271
273
  borrowMore: loan.borrowMoreEstimateGas.bind(loan),
274
+ addCollateralApprove: loan.estimateGas.addCollateralApprove,
272
275
  addCollateral: loan.addCollateralEstimateGas.bind(loan),
273
276
  removeCollateral: loan.removeCollateralEstimateGas.bind(loan),
277
+ repayApprove: loan.estimateGas.repayApprove,
274
278
  repay: loan.repayEstimateGas.bind(loan),
279
+ fullRepayApprove: loan.estimateGas.fullRepayApprove,
275
280
  fullRepay: loan.fullRepayEstimateGas.bind(loan),
281
+ liquidateApprove: loan.estimateGas.liquidateApprove,
276
282
  liquidate: loan.liquidateEstimateGas.bind(loan),
283
+ selfLiquidateApprove: loan.estimateGas.selfLiquidateApprove,
277
284
  selfLiquidate: loan.selfLiquidateEstimateGas.bind(loan),
285
+ partialSelfLiquidateApprove: loan.estimateGas.partialSelfLiquidateApprove,
278
286
  partialSelfLiquidate: loan.partialSelfLiquidateEstimateGas.bind(loan),
279
287
  },
280
288
  }
@@ -356,6 +364,7 @@ export class LendMarketTemplate {
356
364
  borrowMoreApprove: leverageZapV1.leverageCreateLoanApprove.bind(leverageZapV1),
357
365
  borrowMoreRouteImage: leverageZapV1.leverageBorrowMoreRouteImage.bind(leverageZapV1),
358
366
  borrowMore: leverageZapV1.leverageBorrowMore.bind(leverageZapV1),
367
+ borrowMoreFutureLeverage: leverageZapV1.leverageBorrowMoreFutureLeverage.bind(leverageZapV1),
359
368
 
360
369
  repayExpectedBorrowed: leverageZapV1.leverageRepayExpectedBorrowed.bind(leverageZapV1),
361
370
  repayPriceImpact: leverageZapV1.leverageRepayPriceImpact.bind(leverageZapV1),
@@ -368,6 +377,7 @@ export class LendMarketTemplate {
368
377
  repayApprove: leverageZapV1.leverageRepayApprove.bind(leverageZapV1),
369
378
  repayRouteImage: leverageZapV1.leverageRepayRouteImage.bind(leverageZapV1),
370
379
  repay: leverageZapV1.leverageRepay.bind(leverageZapV1),
380
+ repayFutureLeverage: leverageZapV1.leverageRepayFutureLeverage.bind(leverageZapV1),
371
381
 
372
382
  estimateGas: {
373
383
  createLoanApprove: leverageZapV1.leverageCreateLoanApproveEstimateGas.bind(leverageZapV1),
@@ -432,4 +442,4 @@ export class LendMarketTemplate {
432
442
  public getLlamalend(): Llamalend {
433
443
  return this.llamalend;
434
444
  }
435
- }
445
+ }
@@ -57,6 +57,7 @@ export interface ILeverageV1 {
57
57
  borrowMoreApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
58
58
  borrowMoreRouteImage: (userBorrowed: TAmount, debt: TAmount) => Promise<string>;
59
59
  borrowMore: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number) => Promise<string>;
60
+ borrowMoreFutureLeverage: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, userAddress?: string, slippage?: number) => Promise<string>;
60
61
 
61
62
  repayExpectedBorrowed: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) =>
62
63
  Promise<{ totalBorrowed: string, borrowedFromStateCollateral: string, borrowedFromUserCollateral: string, userBorrowed: string, avgPrice: string }>;
@@ -70,6 +71,7 @@ export interface ILeverageV1 {
70
71
  repayApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
71
72
  repayRouteImage: (stateCollateral: TAmount, userCollateral: TAmount) => Promise<string>;
72
73
  repay: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<string>;
74
+ repayFutureLeverage: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, userAddress?: string, slippage?: number) => Promise<string>,
73
75
 
74
76
  estimateGas: {
75
77
  createLoanApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<TGas>;
@@ -64,14 +64,22 @@ export interface ILoanV1 {
64
64
  partialSelfLiquidate: (partialFrac: IPartialFrac, slippage?: number) => Promise<string>;
65
65
 
66
66
  estimateGas: {
67
+ createLoanApprove: (collateral: TAmount) => Promise<TGas>;
67
68
  createLoan: (collateral: TAmount, debt: TAmount, range: number) => Promise<TGas>;
69
+ borrowMoreApprove: (collateral: TAmount) => Promise<TGas>;
68
70
  borrowMore: (collateral: TAmount, debt: TAmount) => Promise<TGas>;
71
+ addCollateralApprove: (collateral: TAmount) => Promise<TGas>;
69
72
  addCollateral: (collateral: TAmount, address?: string) => Promise<TGas>;
70
73
  removeCollateral: (collateral: TAmount) => Promise<TGas>;
74
+ repayApprove: (debt: TAmount) => Promise<TGas>;
71
75
  repay: (debt: TAmount, address?: string) => Promise<TGas>;
76
+ fullRepayApprove: (address?: string) => Promise<TGas>;
72
77
  fullRepay: (address?: string) => Promise<TGas>;
78
+ liquidateApprove: (address?: string) => Promise<TGas>;
73
79
  liquidate: (address: string, slippage?: number) => Promise<TGas>;
80
+ selfLiquidateApprove: () => Promise<TGas>;
74
81
  selfLiquidate: (slippage?: number) => Promise<TGas>;
82
+ partialSelfLiquidateApprove: (partialFrac: IPartialFrac) => Promise<TGas>;
75
83
  partialSelfLiquidate: (partialFrac: IPartialFrac, slippage?: number) => Promise<TGas>;
76
84
  };
77
85
  }
@@ -57,6 +57,7 @@ export interface ILeverageV2 {
57
57
  borrowMoreApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
58
58
  borrowMoreRouteImage: (userBorrowed: TAmount, debt: TAmount) => Promise<string>;
59
59
  borrowMore: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number) => Promise<string>;
60
+ borrowMoreFutureLeverage: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, userAddress?: string, slippage?: number) => Promise<string>;
60
61
 
61
62
  repayExpectedBorrowed: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) =>
62
63
  Promise<{ totalBorrowed: string, borrowedFromStateCollateral: string, borrowedFromUserCollateral: string, userBorrowed: string, avgPrice: string }>;
@@ -70,6 +71,7 @@ export interface ILeverageV2 {
70
71
  repayApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
71
72
  repayRouteImage: (stateCollateral: TAmount, userCollateral: TAmount) => Promise<string>;
72
73
  repay: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<string>;
74
+ repayFutureLeverage: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, userAddress?: string, slippage?: number) => Promise<string>,
73
75
 
74
76
  estimateGas: {
75
77
  createLoanApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<TGas>;
@@ -64,14 +64,22 @@ export interface ILoanV2 {
64
64
  partialSelfLiquidate: (partialFrac: IPartialFrac, slippage?: number) => Promise<string>;
65
65
 
66
66
  estimateGas: {
67
+ createLoanApprove: (collateral: TAmount) => Promise<TGas>;
67
68
  createLoan: (collateral: TAmount, debt: TAmount, range: number) => Promise<TGas>;
69
+ borrowMoreApprove: (collateral: TAmount) => Promise<TGas>;
68
70
  borrowMore: (collateral: TAmount, debt: TAmount) => Promise<TGas>;
71
+ addCollateralApprove: (collateral: TAmount) => Promise<TGas>;
69
72
  addCollateral: (collateral: TAmount, address?: string) => Promise<TGas>;
70
73
  removeCollateral: (collateral: TAmount) => Promise<TGas>;
74
+ repayApprove: (debt: TAmount) => Promise<TGas>;
71
75
  repay: (debt: TAmount, address?: string) => Promise<TGas>;
76
+ fullRepayApprove: (address?: string) => Promise<TGas>;
72
77
  fullRepay: (address?: string) => Promise<TGas>;
78
+ liquidateApprove: (address?: string) => Promise<TGas>;
73
79
  liquidate: (address: string, slippage?: number) => Promise<TGas>;
80
+ selfLiquidateApprove: () => Promise<TGas>;
74
81
  selfLiquidate: (slippage?: number) => Promise<TGas>;
82
+ partialSelfLiquidateApprove: (partialFrac: IPartialFrac) => Promise<TGas>;
75
83
  partialSelfLiquidate: (partialFrac: IPartialFrac, slippage?: number) => Promise<TGas>;
76
84
  };
77
85
  }
@@ -687,6 +687,20 @@ export class LeverageZapV1BaseModule {
687
687
  return await this._leverageBorrowMore(userCollateral, userBorrowed, debt, slippage, false) as string;
688
688
  }
689
689
 
690
+ public async leverageBorrowMoreFutureLeverage(userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, userAddress = '', slippage = 0.1): Promise<string> {
691
+ userAddress = _getAddress.call(this.llamalend, userAddress);
692
+ this._checkLeverageZap();
693
+
694
+ const { stateCollateral, totalDepositFromUser } = await this.market.userPosition.getCurrentLeverageParams(userAddress);
695
+
696
+ const expected = await this.leverageBorrowMoreExpectedCollateral(userCollateral, userBorrowed, debt, slippage, userAddress);
697
+
698
+ const futureCollateralState = BN(stateCollateral).plus(expected.totalCollateral);
699
+ const futureTotalDepositFromUserPrecise = BN(totalDepositFromUser).plus(userCollateral).plus(expected.collateralFromUserBorrowed);
700
+
701
+ return futureCollateralState.div(futureTotalDepositFromUserPrecise).toString();
702
+ }
703
+
690
704
  // ---------------- LEVERAGE REPAY ----------------
691
705
 
692
706
  private _leverageRepayExpectedBorrowed = (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount):
@@ -909,4 +923,18 @@ export class LeverageZapV1BaseModule {
909
923
  await this.leverageRepayApprove(userCollateral, userBorrowed);
910
924
  return await this._leverageRepay(stateCollateral, userCollateral, userBorrowed, slippage, false) as string;
911
925
  }
926
+
927
+ public async leverageRepayFutureLeverage(stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, userAddress = ''): Promise<string> {
928
+ userAddress = _getAddress.call(this.llamalend, userAddress);
929
+ this._checkLeverageZap();
930
+
931
+ const { stateCollateral: currentStateCollateral, totalDepositFromUser } = await this.market.userPosition.getCurrentLeverageParams(userAddress);
932
+
933
+ const collateralFromUserBorrowed = await this.market.amm.swapExpected(0, 1, userBorrowed);
934
+
935
+ const futureCollateralState = BN(currentStateCollateral).minus(stateCollateral);
936
+ const futureTotalDepositFromUserPrecise = BN(totalDepositFromUser).plus(userCollateral).plus(collateralFromUserBorrowed);
937
+
938
+ return futureCollateralState.div(futureTotalDepositFromUserPrecise).toString();
939
+ }
912
940
  }
@@ -759,15 +759,23 @@ export class LoanBaseModule {
759
759
  }
760
760
 
761
761
  public estimateGas = {
762
+ createLoanApprove: this.createLoanApproveEstimateGas.bind(this),
762
763
  createLoan: this.createLoanEstimateGas.bind(this),
764
+ borrowMoreApprove: this.borrowMoreApproveEstimateGas.bind(this),
763
765
  borrowMore: this.borrowMoreEstimateGas.bind(this),
766
+ addCollateralApprove: this.addCollateralApproveEstimateGas.bind(this),
764
767
  addCollateral: this.addCollateralEstimateGas.bind(this),
765
768
  removeCollateral: this.removeCollateralEstimateGas.bind(this),
769
+ repayApprove: this.repayApproveEstimateGas.bind(this),
766
770
  repay: this.repayEstimateGas.bind(this),
771
+ fullRepayApprove: this.fullRepayApproveEstimateGas.bind(this),
767
772
  fullRepay: this.fullRepayEstimateGas.bind(this),
773
+ liquidateApprove: this.liquidateApproveEstimateGas.bind(this),
768
774
  liquidate: this.liquidateEstimateGas.bind(this),
775
+ selfLiquidateApprove: this.selfLiquidateApproveEstimateGas.bind(this),
769
776
  selfLiquidate: this.selfLiquidateEstimateGas.bind(this),
777
+ partialSelfLiquidateApprove: this.partialSelfLiquidateApproveEstimateGas.bind(this),
770
778
  partialSelfLiquidate: this.partialSelfLiquidateEstimateGas.bind(this),
771
779
  };
772
780
 
773
- }
781
+ }