@curvefi/llamalend-api 1.0.22-beta.1 → 1.0.22
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 +346 -0
- package/lib/llamalend.js +2 -2
- package/lib/mintMarkets/MintMarketTemplate.d.ts +21 -4
- package/lib/mintMarkets/MintMarketTemplate.js +52 -0
- package/lib/mintMarkets/interfaces/leverage.d.ts +90 -0
- package/lib/mintMarkets/interfaces/leverage.js +1 -0
- package/lib/mintMarkets/modules/index.d.ts +1 -0
- package/lib/mintMarkets/modules/index.js +1 -0
- package/lib/mintMarkets/modules/leverageV2.d.ts +131 -0
- package/lib/mintMarkets/modules/leverageV2.js +788 -0
- package/package.json +1 -1
- package/src/llamalend.ts +2 -2
- package/src/mintMarkets/MintMarketTemplate.ts +67 -4
- package/src/mintMarkets/interfaces/leverage.ts +104 -0
- package/src/mintMarkets/modules/index.ts +1 -0
- package/src/mintMarkets/modules/leverageV2.ts +932 -0
package/package.json
CHANGED
package/src/llamalend.ts
CHANGED
|
@@ -309,7 +309,7 @@ class Llamalend implements ILlamalend {
|
|
|
309
309
|
|
|
310
310
|
const network = await this.provider.getNetwork();
|
|
311
311
|
this.chainId = Number(network.chainId) === 133 || Number(network.chainId) === 31337 ? 1 : Number(network.chainId) as IChainId;
|
|
312
|
-
console.log("CURVE-
|
|
312
|
+
console.log("CURVE-LLAMALEND-JS IS CONNECTED TO NETWORK:", { name: network.name.toUpperCase(), chainId: Number(this.chainId) });
|
|
313
313
|
|
|
314
314
|
if(this.chainId === 42161) {
|
|
315
315
|
this.constantOptions = { gasLimit: 1125899906842624 } // https://arbiscan.io/chart/gaslimit
|
|
@@ -455,7 +455,7 @@ class Llamalend implements ILlamalend {
|
|
|
455
455
|
controller_address: controllers[i],
|
|
456
456
|
monetary_policy_address,
|
|
457
457
|
collateral_address: is_eth ? "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" : collaterals[i],
|
|
458
|
-
leverage_zap:
|
|
458
|
+
leverage_zap: this.constants.ALIASES.leverage_zap,
|
|
459
459
|
deleverage_zap: "0x0000000000000000000000000000000000000000",
|
|
460
460
|
collateral_symbol: is_eth ? "ETH" : collateral_symbol,
|
|
461
461
|
collateral_decimals,
|
|
@@ -22,6 +22,8 @@ import {
|
|
|
22
22
|
} from "../utils";
|
|
23
23
|
import {IDict, TGas} from "../interfaces";
|
|
24
24
|
import {_getUserCollateralCrvUsd} from "../external-api.js";
|
|
25
|
+
import { ILeverageV2 } from "./interfaces/leverage.js";
|
|
26
|
+
import { LeverageV2Module } from "./modules";
|
|
25
27
|
|
|
26
28
|
|
|
27
29
|
export class MintMarketTemplate {
|
|
@@ -107,6 +109,7 @@ export class MintMarketTemplate {
|
|
|
107
109
|
createLoan: (collateral: number | string, debt: number | string, range: number, slippage?: number) => Promise<TGas>,
|
|
108
110
|
}
|
|
109
111
|
}
|
|
112
|
+
leverageV2: ILeverageV2
|
|
110
113
|
deleverage: {
|
|
111
114
|
repayStablecoins: (collateral: number | string) => Promise<{ stablecoins: string, routeIdx: number }>,
|
|
112
115
|
getRouteName: (routeIdx: number) => Promise<string>,
|
|
@@ -201,6 +204,62 @@ export class MintMarketTemplate {
|
|
|
201
204
|
createLoan: this.leverageCreateLoanEstimateGas.bind(this),
|
|
202
205
|
},
|
|
203
206
|
}
|
|
207
|
+
|
|
208
|
+
const leverageV2 = new LeverageV2Module(this);
|
|
209
|
+
this.leverageV2 = {
|
|
210
|
+
hasLeverage: leverageV2.hasLeverage,
|
|
211
|
+
|
|
212
|
+
maxLeverage: leverageV2.maxLeverage,
|
|
213
|
+
|
|
214
|
+
createLoanMaxRecv: leverageV2.leverageCreateLoanMaxRecv,
|
|
215
|
+
createLoanMaxRecvAllRanges: leverageV2.leverageCreateLoanMaxRecvAllRanges,
|
|
216
|
+
createLoanExpectedCollateral: leverageV2.leverageCreateLoanExpectedCollateral,
|
|
217
|
+
createLoanPriceImpact: leverageV2.leverageCreateLoanPriceImpact,
|
|
218
|
+
createLoanMaxRange: leverageV2.leverageCreateLoanMaxRange,
|
|
219
|
+
createLoanBands: leverageV2.leverageCreateLoanBands,
|
|
220
|
+
createLoanBandsAllRanges: leverageV2.leverageCreateLoanBandsAllRanges,
|
|
221
|
+
createLoanPrices: leverageV2.leverageCreateLoanPrices,
|
|
222
|
+
createLoanPricesAllRanges: leverageV2.leverageCreateLoanPricesAllRanges,
|
|
223
|
+
createLoanHealth: leverageV2.leverageCreateLoanHealth,
|
|
224
|
+
createLoanIsApproved: leverageV2.leverageCreateLoanIsApproved,
|
|
225
|
+
createLoanApprove: leverageV2.leverageCreateLoanApprove,
|
|
226
|
+
createLoanRouteImage: leverageV2.leverageCreateLoanRouteImage,
|
|
227
|
+
createLoan: leverageV2.leverageCreateLoan,
|
|
228
|
+
|
|
229
|
+
borrowMoreMaxRecv: leverageV2.leverageBorrowMoreMaxRecv,
|
|
230
|
+
borrowMoreExpectedCollateral: leverageV2.leverageBorrowMoreExpectedCollateral,
|
|
231
|
+
borrowMorePriceImpact: leverageV2.leverageBorrowMorePriceImpact,
|
|
232
|
+
borrowMoreBands: leverageV2.leverageBorrowMoreBands,
|
|
233
|
+
borrowMorePrices: leverageV2.leverageBorrowMorePrices,
|
|
234
|
+
borrowMoreHealth: leverageV2.leverageBorrowMoreHealth,
|
|
235
|
+
borrowMoreIsApproved: leverageV2.leverageCreateLoanIsApproved,
|
|
236
|
+
borrowMoreApprove: leverageV2.leverageCreateLoanApprove,
|
|
237
|
+
borrowMoreRouteImage: leverageV2.leverageBorrowMoreRouteImage,
|
|
238
|
+
borrowMore: leverageV2.leverageBorrowMore,
|
|
239
|
+
|
|
240
|
+
repayExpectedBorrowed: leverageV2.leverageRepayExpectedBorrowed,
|
|
241
|
+
repayPriceImpact: leverageV2.leverageRepayPriceImpact,
|
|
242
|
+
repayIsFull: leverageV2.leverageRepayIsFull,
|
|
243
|
+
repayIsAvailable: leverageV2.leverageRepayIsAvailable,
|
|
244
|
+
repayBands: leverageV2.leverageRepayBands,
|
|
245
|
+
repayPrices: leverageV2.leverageRepayPrices,
|
|
246
|
+
repayHealth: leverageV2.leverageRepayHealth,
|
|
247
|
+
repayIsApproved: leverageV2.leverageRepayIsApproved,
|
|
248
|
+
repayApprove: leverageV2.leverageRepayApprove,
|
|
249
|
+
repayRouteImage: leverageV2.leverageRepayRouteImage,
|
|
250
|
+
repay: leverageV2.leverageRepay,
|
|
251
|
+
|
|
252
|
+
estimateGas: {
|
|
253
|
+
createLoanApprove: leverageV2.leverageCreateLoanApproveEstimateGas,
|
|
254
|
+
createLoan: leverageV2.leverageCreateLoanEstimateGas,
|
|
255
|
+
|
|
256
|
+
borrowMoreApprove: leverageV2.leverageCreateLoanApproveEstimateGas,
|
|
257
|
+
borrowMore: leverageV2.leverageBorrowMoreEstimateGas,
|
|
258
|
+
|
|
259
|
+
repayApprove: leverageV2.leverageRepayApproveEstimateGas,
|
|
260
|
+
repay: leverageV2.leverageRepayEstimateGas,
|
|
261
|
+
},
|
|
262
|
+
}
|
|
204
263
|
this.deleverage = {
|
|
205
264
|
repayStablecoins: this.deleverageRepayStablecoins.bind(this),
|
|
206
265
|
getRouteName: this.deleverageGetRouteName.bind(this),
|
|
@@ -219,7 +278,7 @@ export class MintMarketTemplate {
|
|
|
219
278
|
|
|
220
279
|
// ---------------- STATS ----------------
|
|
221
280
|
|
|
222
|
-
|
|
281
|
+
public statsParameters = memoize(async (): Promise<{
|
|
223
282
|
fee: string, // %
|
|
224
283
|
admin_fee: string, // %
|
|
225
284
|
rate: string, // %
|
|
@@ -591,7 +650,7 @@ export class MintMarketTemplate {
|
|
|
591
650
|
|
|
592
651
|
// ---------------- CREATE LOAN ----------------
|
|
593
652
|
|
|
594
|
-
|
|
653
|
+
public _checkRange(range: number): void {
|
|
595
654
|
if (range < this.minBands) throw Error(`range must be >= ${this.minBands}`);
|
|
596
655
|
if (range > this.maxBands) throw Error(`range must be <= ${this.maxBands}`);
|
|
597
656
|
}
|
|
@@ -646,7 +705,7 @@ export class MintMarketTemplate {
|
|
|
646
705
|
return await this.llamalend.multicallProvider.all(calls) as bigint[];
|
|
647
706
|
}
|
|
648
707
|
|
|
649
|
-
|
|
708
|
+
public async _getPrices(_n2: bigint, _n1: bigint): Promise<string[]> {
|
|
650
709
|
const contract = this.llamalend.contracts[this.address].multicallContract;
|
|
651
710
|
return (await this.llamalend.multicallProvider.all([
|
|
652
711
|
contract.p_oracle_down(_n2),
|
|
@@ -654,7 +713,7 @@ export class MintMarketTemplate {
|
|
|
654
713
|
]) as bigint[]).map((_p) => formatUnits(_p));
|
|
655
714
|
}
|
|
656
715
|
|
|
657
|
-
|
|
716
|
+
public async _calcPrices(_n2: bigint, _n1: bigint): Promise<[string, string]> {
|
|
658
717
|
return [await this.calcTickPrice(Number(_n2) + 1), await this.calcTickPrice(Number(_n1))];
|
|
659
718
|
}
|
|
660
719
|
|
|
@@ -1786,4 +1845,8 @@ export class MintMarketTemplate {
|
|
|
1786
1845
|
this._checkDeleverageZap();
|
|
1787
1846
|
return await this._deleverageRepay(collateral, slippage, false) as string;
|
|
1788
1847
|
}
|
|
1848
|
+
|
|
1849
|
+
public getLlamalend(): Llamalend {
|
|
1850
|
+
return this.llamalend;
|
|
1851
|
+
}
|
|
1789
1852
|
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import {IDict, TAmount, TGas} from "../../interfaces";
|
|
2
|
+
|
|
3
|
+
export interface ILeverageV2 {
|
|
4
|
+
hasLeverage: () => boolean,
|
|
5
|
+
|
|
6
|
+
maxLeverage: (N: number) => Promise<string>,
|
|
7
|
+
|
|
8
|
+
createLoanMaxRecv: (userCollateral: TAmount, userBorrowed: TAmount, range: number) =>
|
|
9
|
+
Promise<{
|
|
10
|
+
maxDebt: string,
|
|
11
|
+
maxTotalCollateral: string,
|
|
12
|
+
userCollateral: string,
|
|
13
|
+
collateralFromUserBorrowed: string,
|
|
14
|
+
collateralFromMaxDebt: string,
|
|
15
|
+
maxLeverage: string,
|
|
16
|
+
avgPrice: string,
|
|
17
|
+
}>,
|
|
18
|
+
createLoanMaxRecvAllRanges: (userCollateral: TAmount, userBorrowed: TAmount) =>
|
|
19
|
+
Promise<IDict<{
|
|
20
|
+
maxDebt: string,
|
|
21
|
+
maxTotalCollateral: string,
|
|
22
|
+
userCollateral: string,
|
|
23
|
+
collateralFromUserBorrowed: string,
|
|
24
|
+
collateralFromMaxDebt: string,
|
|
25
|
+
maxLeverage: string,
|
|
26
|
+
avgPrice: string,
|
|
27
|
+
}>>,
|
|
28
|
+
createLoanExpectedCollateral: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number) =>
|
|
29
|
+
Promise<{
|
|
30
|
+
totalCollateral: string,
|
|
31
|
+
userCollateral: string,
|
|
32
|
+
collateralFromUserBorrowed: string,
|
|
33
|
+
collateralFromDebt: string,
|
|
34
|
+
leverage: string,
|
|
35
|
+
avgPrice: string
|
|
36
|
+
}>,
|
|
37
|
+
createLoanPriceImpact: (userBorrowed: TAmount, debt: TAmount) => Promise<string>,
|
|
38
|
+
createLoanMaxRange: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount) => Promise<number>,
|
|
39
|
+
createLoanBands: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number) => Promise<[number, number]>,
|
|
40
|
+
createLoanBandsAllRanges: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount) => Promise<IDict<[number, number] | null>>,
|
|
41
|
+
createLoanPrices: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number) => Promise<string[]>,
|
|
42
|
+
createLoanPricesAllRanges: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount) => Promise<IDict<[string, string] | null>>,
|
|
43
|
+
createLoanHealth: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number, full?: boolean) => Promise<string>,
|
|
44
|
+
createLoanIsApproved: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<boolean>,
|
|
45
|
+
createLoanApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>,
|
|
46
|
+
createLoanRouteImage: (userBorrowed: TAmount, debt: TAmount) => Promise<string>,
|
|
47
|
+
createLoan: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number, slippage?: number) => Promise<string>,
|
|
48
|
+
|
|
49
|
+
borrowMoreMaxRecv: (userCollateral: TAmount, userBorrowed: TAmount, address?: string) =>
|
|
50
|
+
Promise<{
|
|
51
|
+
maxDebt: string,
|
|
52
|
+
maxTotalCollateral: string,
|
|
53
|
+
userCollateral: string,
|
|
54
|
+
collateralFromUserBorrowed: string,
|
|
55
|
+
collateralFromMaxDebt: string,
|
|
56
|
+
avgPrice: string,
|
|
57
|
+
}>,
|
|
58
|
+
borrowMoreExpectedCollateral: (userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, slippage?: number, address?: string) =>
|
|
59
|
+
Promise<{
|
|
60
|
+
totalCollateral: string,
|
|
61
|
+
userCollateral: string,
|
|
62
|
+
collateralFromUserBorrowed: string,
|
|
63
|
+
collateralFromDebt: string,
|
|
64
|
+
avgPrice: string
|
|
65
|
+
}>,
|
|
66
|
+
borrowMorePriceImpact: (userBorrowed: TAmount, dDebt: TAmount, address?: string) => Promise<string>,
|
|
67
|
+
borrowMoreBands: (userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, address?: string) => Promise<[number, number]>,
|
|
68
|
+
borrowMorePrices: (userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, address?: string) => Promise<string[]>,
|
|
69
|
+
borrowMoreHealth: (userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, full?: boolean, address?: string) => Promise<string>,
|
|
70
|
+
borrowMoreIsApproved: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<boolean>,
|
|
71
|
+
borrowMoreApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>,
|
|
72
|
+
borrowMoreRouteImage: (userBorrowed: TAmount, debt: TAmount) => Promise<string>,
|
|
73
|
+
borrowMore: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number) => Promise<string>,
|
|
74
|
+
|
|
75
|
+
repayExpectedBorrowed: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) =>
|
|
76
|
+
Promise<{
|
|
77
|
+
totalBorrowed: string,
|
|
78
|
+
borrowedFromStateCollateral: string,
|
|
79
|
+
borrowedFromUserCollateral: string,
|
|
80
|
+
userBorrowed: string,
|
|
81
|
+
avgPrice: string
|
|
82
|
+
}>,
|
|
83
|
+
repayPriceImpact: (stateCollateral: TAmount, userCollateral: TAmount) => Promise<string>,
|
|
84
|
+
repayIsFull: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string) => Promise<boolean>,
|
|
85
|
+
repayIsAvailable: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string) => Promise<boolean>,
|
|
86
|
+
repayBands: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string) => Promise<[number, number]>,
|
|
87
|
+
repayPrices: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string) => Promise<string[]>,
|
|
88
|
+
repayHealth: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, full?: boolean, address?: string) => Promise<string>,
|
|
89
|
+
repayIsApproved: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<boolean>,
|
|
90
|
+
repayApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>,
|
|
91
|
+
repayRouteImage: (stateCollateral: TAmount, userCollateral: TAmount) => Promise<string>,
|
|
92
|
+
repay: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<string>,
|
|
93
|
+
|
|
94
|
+
estimateGas: {
|
|
95
|
+
createLoanApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<TGas>,
|
|
96
|
+
createLoan: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number, slippage?: number) => Promise<number>,
|
|
97
|
+
|
|
98
|
+
borrowMoreApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<TGas>,
|
|
99
|
+
borrowMore: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number) => Promise<number>,
|
|
100
|
+
|
|
101
|
+
repayApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<TGas>,
|
|
102
|
+
repay: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<number>,
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { LeverageV2Module } from './leverageV2.js';
|