@curvefi/llamalend-api 1.0.22-beta.2 → 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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@curvefi/llamalend-api",
3
- "version": "1.0.22-beta.2",
3
+ "version": "1.0.22",
4
4
  "description": "JavaScript library for Curve Lending",
5
5
  "main": "lib/index.js",
6
6
  "author": "Macket",
@@ -209,13 +209,3 @@ const _assembleTxOdosMemoized = memoize(
209
209
  export async function _assembleTxOdos(this: Llamalend, pathId: string): Promise<string> {
210
210
  return _assembleTxOdosMemoized(this.constants.ALIASES.leverage_zap, pathId);
211
211
  }
212
-
213
- export const _getHiddenPools = memoize(
214
- () => fetch(`https://api.curve.finance/api/getHiddenPools`)
215
- .then((r) => (r.json()))
216
- .then((json) => (json as {data: IDict<string[]>}).data),
217
- {
218
- promise: true,
219
- maxAge: 5 * 60 * 1000, // 5m
220
- }
221
- )
package/src/llamalend.ts CHANGED
@@ -79,7 +79,7 @@ import {LLAMMAS} from "./constants/llammas";
79
79
  import {L2Networks} from "./constants/L2Networks.js";
80
80
  import {createCall, handleMultiCallResponse} from "./utils.js";
81
81
  import {cacheKey, cacheStats} from "./cache/index.js";
82
- import {_getHiddenPools, _getMarketsData} from "./external-api.js";
82
+ import {_getMarketsData} from "./external-api.js";
83
83
  import {extractDecimals} from "./constants/utils.js";
84
84
 
85
85
  export const NETWORK_CONSTANTS: { [index: number]: any } = {
@@ -244,7 +244,7 @@ class Llamalend implements ILlamalend {
244
244
  this.options = {};
245
245
  this.constants = {
246
246
  ONE_WAY_MARKETS: {},
247
- LLAMMAS: await this._filterHiddenPools(LLAMMAS),
247
+ LLAMMAS: {...LLAMMAS},
248
248
  COINS: {},
249
249
  DECIMALS: {},
250
250
  NETWORK_NAME: 'ethereum',
@@ -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-LENDING-JS IS CONNECTED TO NETWORK:", { name: network.name.toUpperCase(), chainId: Number(this.chainId) });
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: "0x0000000000000000000000000000000000000000",
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,
@@ -797,11 +797,6 @@ class Llamalend implements ILlamalend {
797
797
  feeData.maxPriorityFeePerGas;
798
798
  }
799
799
  }
800
-
801
- async _filterHiddenPools(pools: IDict<ILlamma>): Promise<IDict<ILlamma>> {
802
- const hiddenPools = (await _getHiddenPools())[this.constants.NETWORK_NAME] || [];
803
- return Object.fromEntries(Object.entries(pools).filter(([id]) => !hiddenPools.includes(id))) as IDict<ILlamma>;
804
- }
805
800
  }
806
801
 
807
802
  export { Llamalend };
@@ -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
- private statsParameters = memoize(async (): Promise<{
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
- private _checkRange(range: number): void {
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
- private async _getPrices(_n2: bigint, _n1: bigint): Promise<string[]> {
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
- private async _calcPrices(_n2: bigint, _n1: bigint): Promise<[string, string]> {
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';