@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.
- package/lib/lendMarkets/LendMarketTemplate.js +10 -0
- package/lib/lendMarkets/interfaces/v1/leverageV1.d.ts +2 -0
- package/lib/lendMarkets/interfaces/v1/loanV1.d.ts +8 -0
- package/lib/lendMarkets/interfaces/v2/leverageV2.d.ts +2 -0
- package/lib/lendMarkets/interfaces/v2/loanV2.d.ts +8 -0
- package/lib/lendMarkets/modules/common/leverageZapV1Base.d.ts +2 -0
- package/lib/lendMarkets/modules/common/leverageZapV1Base.js +22 -0
- package/lib/lendMarkets/modules/common/loanBase.d.ts +8 -0
- package/lib/lendMarkets/modules/common/loanBase.js +8 -0
- package/package.json +1 -1
- package/src/lendMarkets/LendMarketTemplate.ts +11 -1
- package/src/lendMarkets/interfaces/v1/leverageV1.ts +2 -0
- package/src/lendMarkets/interfaces/v1/loanV1.ts +8 -0
- package/src/lendMarkets/interfaces/v2/leverageV2.ts +2 -0
- package/src/lendMarkets/interfaces/v2/loanV2.ts +8 -0
- package/src/lendMarkets/modules/common/leverageZapV1Base.ts +28 -0
- package/src/lendMarkets/modules/common/loanBase.ts +9 -1
|
@@ -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
|
@@ -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
|
+
}
|