@curvefi/llamalend-api 1.0.42 → 1.1.1

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/llamalend.js CHANGED
@@ -488,6 +488,7 @@ class Llamalend {
488
488
  this.setContract(this.constants.ALIASES['one_way_factory'], OneWayLendingFactoryABI);
489
489
  this.setContract(this.constants.ALIASES['gauge_controller'], GaugeControllerABI);
490
490
  this.setContract(this.constants.ALIASES['leverage_zap'], LeverageZapABI);
491
+ this.setContract(this.constants.ALIASES['leverage_zap_v2'], LeverageZapABI);
491
492
  if (this.chainId === 1) {
492
493
  this.setContract(this.constants.ALIASES.minter, MinterABI);
493
494
  this.setContract(this.constants.ALIASES.gauge_factory, GaugeFactoryMainnetABI);
package/lib/utils.d.ts CHANGED
@@ -58,3 +58,4 @@ export declare const getLsdApy: ((name: "wstETH" | "sfrxETH") => Promise<{
58
58
  apyMean30d: number;
59
59
  }>>;
60
60
  export declare const calculateFutureLeverage: (currentCollateral: number | string, totalDepositFromUser: number | string, collateral: number | string, operation: "add" | "remove") => string;
61
+ export declare const buildCalldataForLeverageZapV2: (routerAddress: string, exchangeCalldata: string) => string;
package/lib/utils.js CHANGED
@@ -474,3 +474,8 @@ export const calculateFutureLeverage = (currentCollateral, totalDepositFromUser,
474
474
  return currentCollateralBN.minus(collateralBN).div(totalDepositBN.minus(collateralBN)).toString();
475
475
  }
476
476
  };
477
+ export const buildCalldataForLeverageZapV2 = (routerAddress, exchangeCalldata) => {
478
+ const cleanCalldata = exchangeCalldata.startsWith('0x') ? exchangeCalldata.slice(2) : exchangeCalldata;
479
+ const abiCoder = ethers.AbiCoder.defaultAbiCoder();
480
+ return abiCoder.encode(['address', 'bytes'], [routerAddress, '0x' + cleanCalldata]);
481
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@curvefi/llamalend-api",
3
- "version": "1.0.42",
3
+ "version": "1.1.1",
4
4
  "description": "JavaScript library for Curve Lending",
5
5
  "main": "lib/index.js",
6
6
  "author": "Macket",
@@ -16,6 +16,7 @@
16
16
  "scripts": {
17
17
  "build": "rm -rf lib && tsc --project tsconfig.build.json",
18
18
  "lint": "eslint src --ext .ts",
19
+ "lint:fix": "eslint src --ext .ts --fix",
19
20
  "watch": "tsc --watch",
20
21
  "watch:lib": "rm -rf lib && tsc --watch --project tsconfig.build.json"
21
22
  },
@@ -1,5 +1,5 @@
1
1
  class Cache {
2
- // eslint-disable-next-line no-use-before-define
2
+
3
3
  private static instance: Cache;
4
4
  readonly cache: Map<string, any>;
5
5
 
@@ -9,6 +9,7 @@ export const ALIASES_ETHEREUM = lowerCaseValues({
9
9
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
10
10
  // "leverage_zap": "0x3294514B78Df4Bb90132567fcf8E5e99f390B687", // 1inch
11
11
  "leverage_zap": "0xC5898606BdB494a994578453B92e7910a90aA873", // odos
12
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
12
13
  "leverage_markets_start_id": "9",
13
14
  "crvUSD": "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E",
14
15
  "st_crvUSD": "0x0655977FEb2f289A4aB78af67BAB0d17aAb84367",
@@ -20,6 +21,7 @@ export const ALIASES_POLYGON = lowerCaseValues({
20
21
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
21
22
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
22
23
  "leverage_zap": "0x0000000000000000000000000000000000000000",
24
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
23
25
  });
24
26
 
25
27
  export const ALIASES_FANTOM = lowerCaseValues({
@@ -28,6 +30,7 @@ export const ALIASES_FANTOM = lowerCaseValues({
28
30
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
29
31
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
30
32
  "leverage_zap": "0x0000000000000000000000000000000000000000",
33
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
31
34
  });
32
35
 
33
36
  export const ALIASES_AVALANCHE = lowerCaseValues({
@@ -36,6 +39,7 @@ export const ALIASES_AVALANCHE = lowerCaseValues({
36
39
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
37
40
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
38
41
  "leverage_zap": "0x0000000000000000000000000000000000000000",
42
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
39
43
  });
40
44
 
41
45
  export const ALIASES_ARBITRUM = lowerCaseValues({
@@ -45,6 +49,7 @@ export const ALIASES_ARBITRUM = lowerCaseValues({
45
49
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
46
50
  // "leverage_zap": "0x61C404B60ee9c5fB09F70F9A645DD38fE5b3A956", // 1inch
47
51
  "leverage_zap": "0xb7b240CFa985306563A301bC417Bc9715059a117", // odos
52
+ "leverage_zap_v2": "0x5b07Db9a85992c877b9fBeA6DCC4F79292577640",
48
53
  "leverage_markets_start_id": "9",
49
54
  });
50
55
 
@@ -55,6 +60,7 @@ export const ALIASES_OPTIMISM = lowerCaseValues({
55
60
  "gauge_factory_old": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
56
61
  "gauge_factory": "0x871fBD4E01012e2E8457346059e8C189d664DbA4",
57
62
  "leverage_zap": "0x273e44B9a1841857d9360e8792bB59f9e1FfE9Da",
63
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
58
64
  "leverage_markets_start_id": "0",
59
65
  "gas_oracle": '0xc0d3C0d3C0d3c0D3C0D3C0d3C0d3C0D3C0D3000f',
60
66
  "gas_oracle_blob": '0x420000000000000000000000000000000000000f',
@@ -66,6 +72,7 @@ export const ALIASES_XDAI = lowerCaseValues({
66
72
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
67
73
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
68
74
  "leverage_zap": "0x0000000000000000000000000000000000000000",
75
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
69
76
  });
70
77
 
71
78
  export const ALIASES_MOONBEAM = lowerCaseValues({
@@ -74,6 +81,7 @@ export const ALIASES_MOONBEAM = lowerCaseValues({
74
81
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
75
82
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
76
83
  "leverage_zap": "0x0000000000000000000000000000000000000000",
84
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
77
85
  });
78
86
 
79
87
  export const ALIASES_AURORA = lowerCaseValues({
@@ -89,6 +97,7 @@ export const ALIASES_KAVA = lowerCaseValues({
89
97
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
90
98
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
91
99
  "leverage_zap": "0x0000000000000000000000000000000000000000",
100
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
92
101
  });
93
102
 
94
103
  export const ALIASES_CELO = lowerCaseValues({
@@ -97,6 +106,7 @@ export const ALIASES_CELO = lowerCaseValues({
97
106
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
98
107
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
99
108
  "leverage_zap": "0x0000000000000000000000000000000000000000",
109
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
100
110
  });
101
111
 
102
112
  export const ALIASES_ZKSYNC = lowerCaseValues({
@@ -105,6 +115,7 @@ export const ALIASES_ZKSYNC = lowerCaseValues({
105
115
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB", // <--- TODO CHANGE
106
116
  "gauge_factory": "0x0000000000000000000000000000000000000000",
107
117
  "leverage_zap": "0x0000000000000000000000000000000000000000",
118
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
108
119
  });
109
120
 
110
121
  export const ALIASES_BASE = lowerCaseValues({
@@ -113,6 +124,7 @@ export const ALIASES_BASE = lowerCaseValues({
113
124
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB", // <--- TODO CHANGE
114
125
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
115
126
  "leverage_zap": "0x0000000000000000000000000000000000000000",
127
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
116
128
  });
117
129
 
118
130
  export const ALIASES_BSC = lowerCaseValues({
@@ -121,6 +133,7 @@ export const ALIASES_BSC = lowerCaseValues({
121
133
  "gauge_controller": "0x0000000000000000000000000000000000000000", // <--- TODO CHANGE
122
134
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
123
135
  "leverage_zap": "0x0000000000000000000000000000000000000000",
136
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
124
137
  });
125
138
 
126
139
  export const ALIASES_FRAXTAL = lowerCaseValues({
@@ -130,6 +143,7 @@ export const ALIASES_FRAXTAL = lowerCaseValues({
130
143
  "gauge_factory_old": "0xeF672bD94913CB6f1d2812a6e18c1fFdEd8eFf5c",
131
144
  "gauge_factory": "0x0b8d6b6cefc7aa1c2852442e518443b1b22e1c52",
132
145
  "leverage_zap": "0x37c5ab57AF7100Bdc9B668d766e193CCbF6614FD", // odos
146
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
133
147
  "leverage_markets_start_id": "0",
134
148
  });
135
149
 
@@ -139,5 +153,6 @@ export const ALIASES_SONIC = lowerCaseValues({
139
153
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
140
154
  "gauge_factory": "0xf3A431008396df8A8b2DF492C913706BDB0874ef",
141
155
  "leverage_zap": "0x5552b631e2aD801fAa129Aacf4B701071cC9D1f7", // odos
156
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
142
157
  "leverage_markets_start_id": "0",
143
158
  });
@@ -118,9 +118,9 @@ export const _getUserCollateral = memoize(
118
118
  )
119
119
 
120
120
  export const _getUserCollateralForce = async (
121
- network: INetworkName,
122
- controller: string,
123
- user: string,
121
+ network: INetworkName,
122
+ controller: string,
123
+ user: string,
124
124
  newTx: string
125
125
  ): Promise<void> => {
126
126
  await fetch(`https://prices.curve.finance/v1/lending/collateral_events/${network}/${controller}/${user}?new_tx=${newTx}`);
@@ -177,7 +177,7 @@ export async function _getQuoteOdos(this: Llamalend, fromToken: string, toToken:
177
177
  if (ethers.getAddress(fromToken) == "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE") fromToken = "0x0000000000000000000000000000000000000000";
178
178
  if (ethers.getAddress(toToken) == "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE") toToken = "0x0000000000000000000000000000000000000000";
179
179
 
180
- const url = `https://prices.curve.finance/odos/quote?chain_id=${this.chainId}&from_address=${ethers.getAddress(fromToken)}` +
180
+ const url = `https://prices.curve.finance/odos/v3/quote?chain_id=${this.chainId}&from_address=${ethers.getAddress(fromToken)}` +
181
181
  `&to_address=${ethers.getAddress(toToken)}&amount=${_amount.toString()}&slippage=${slippage}&pathVizImage=${pathVizImage}` +
182
182
  `&caller_address=${ethers.getAddress(this.constants.ALIASES.leverage_zap)}&blacklist=${ethers.getAddress(blacklist)}`;
183
183
 
@@ -234,4 +234,4 @@ async function fetchJson(url: string): Promise<any> {
234
234
  async function fetchData(url: string) {
235
235
  const {data} = await fetchJson(url);
236
236
  return data;
237
- }
237
+ }
package/src/interfaces.ts CHANGED
@@ -230,3 +230,22 @@ export interface ILlamma {
230
230
  export interface IResponseApi {
231
231
  data: any
232
232
  }
233
+
234
+ export interface IQuote {
235
+ outAmount: string,
236
+ priceImpact: number
237
+ }
238
+
239
+ export interface ILeverageMetrics {
240
+ priceImpact: number,
241
+ bands: [number, number],
242
+ prices: string[],
243
+ health: string,
244
+ }
245
+
246
+ export type GetExpectedFn = (
247
+ fromToken: string,
248
+ toToken: string,
249
+ amountIn: bigint,
250
+ blacklist: string | string[],
251
+ ) => Promise<IQuote>;
@@ -27,6 +27,8 @@ import {IDict, TGas, TAmount, IReward, IQuoteOdos, IOneWayMarket, IPartialFrac}
27
27
  import { _getExpectedOdos, _getQuoteOdos, _assembleTxOdos, _getUserCollateral, _getUserCollateralForce, _getMarketsData } from "../external-api.js";
28
28
  import ERC20Abi from '../constants/abis/ERC20.json' with {type: 'json'};
29
29
  import {cacheKey, cacheStats} from "../cache/index.js";
30
+ import {ILeverageZapV2} from "./interfaces/leverageZapV2.js";
31
+ import {LeverageZapV2Module} from "./modules/leverageZapV2.js";
30
32
 
31
33
 
32
34
  const DAY = 86400;
@@ -237,6 +239,7 @@ export class LendMarketTemplate {
237
239
  repay: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<number>,
238
240
  }
239
241
  };
242
+ leverageZapV2: ILeverageZapV2;
240
243
 
241
244
  constructor(id: string, marketData: IOneWayMarket, llamalend: Llamalend) {
242
245
  this.llamalend = llamalend;
@@ -387,6 +390,51 @@ export class LendMarketTemplate {
387
390
  },
388
391
  }
389
392
 
393
+ const leverageZapV2 = new LeverageZapV2Module(this);
394
+
395
+ this.leverageZapV2 = {
396
+ hasLeverage: leverageZapV2.hasLeverage.bind(leverageZapV2),
397
+
398
+ maxLeverage: leverageZapV2.maxLeverage.bind(leverageZapV2),
399
+
400
+ createLoanMaxRecv: leverageZapV2.leverageCreateLoanMaxRecv.bind(leverageZapV2),
401
+ createLoanMaxRecvAllRanges: leverageZapV2.leverageCreateLoanMaxRecvAllRanges.bind(leverageZapV2),
402
+ createLoanExpectedCollateral: leverageZapV2.leverageCreateLoanExpectedCollateral.bind(leverageZapV2),
403
+ createLoanMaxRange: leverageZapV2.leverageCreateLoanMaxRange.bind(leverageZapV2),
404
+ createLoanBandsAllRanges: leverageZapV2.leverageCreateLoanBandsAllRanges.bind(leverageZapV2),
405
+ createLoanPricesAllRanges: leverageZapV2.leverageCreateLoanPricesAllRanges.bind(leverageZapV2),
406
+ createLoanIsApproved: leverageZapV2.leverageCreateLoanIsApproved.bind(leverageZapV2),
407
+ createLoanApprove: leverageZapV2.leverageCreateLoanApprove.bind(leverageZapV2),
408
+ createLoanExpectedMetrics: leverageZapV2.leverageCreateLoanExpectedMetrics.bind(leverageZapV2),
409
+ createLoan: leverageZapV2.leverageCreateLoan.bind(leverageZapV2),
410
+
411
+ borrowMoreMaxRecv: leverageZapV2.leverageBorrowMoreMaxRecv.bind(leverageZapV2),
412
+ borrowMoreExpectedCollateral: leverageZapV2.leverageBorrowMoreExpectedCollateral.bind(leverageZapV2),
413
+ borrowMoreIsApproved: leverageZapV2.leverageCreateLoanIsApproved.bind(leverageZapV2),
414
+ borrowMoreApprove: leverageZapV2.leverageCreateLoanApprove.bind(leverageZapV2),
415
+ borrowMoreExpectedMetrics: leverageZapV2.leverageBorrowMoreExpectedMetrics.bind(leverageZapV2),
416
+ borrowMore: leverageZapV2.leverageBorrowMore.bind(leverageZapV2),
417
+
418
+ repayExpectedBorrowed: leverageZapV2.leverageRepayExpectedBorrowed.bind(leverageZapV2),
419
+ repayIsFull: leverageZapV2.leverageRepayIsFull.bind(leverageZapV2),
420
+ repayIsAvailable: leverageZapV2.leverageRepayIsAvailable.bind(leverageZapV2),
421
+ repayExpectedMetrics: leverageZapV2.leverageRepayExpectedMetrics.bind(leverageZapV2),
422
+ repayIsApproved: leverageZapV2.leverageRepayIsApproved.bind(leverageZapV2),
423
+ repayApprove: leverageZapV2.leverageRepayApprove.bind(leverageZapV2),
424
+ repay: leverageZapV2.leverageRepay.bind(leverageZapV2),
425
+
426
+ estimateGas: {
427
+ createLoanApprove: leverageZapV2.leverageCreateLoanApproveEstimateGas.bind(leverageZapV2),
428
+ createLoan: leverageZapV2.leverageCreateLoanEstimateGas.bind(leverageZapV2),
429
+
430
+ borrowMoreApprove: leverageZapV2.leverageCreateLoanApproveEstimateGas.bind(leverageZapV2),
431
+ borrowMore: leverageZapV2.leverageBorrowMoreEstimateGas.bind(leverageZapV2),
432
+
433
+ repayApprove: leverageZapV2.leverageRepayApproveEstimateGas.bind(leverageZapV2),
434
+ repay: leverageZapV2.leverageRepayEstimateGas.bind(leverageZapV2),
435
+ },
436
+ }
437
+
390
438
  }
391
439
 
392
440
  private _getMarketId = (): number => Number(this.id.split("-").slice(-1)[0]);
@@ -807,8 +855,7 @@ export class LendMarketTemplate {
807
855
  }
808
856
 
809
857
  return tokens.map((token, i) => ({ token, symbol: tokenInfo[i * 2] as string, decimals: Number(tokenInfo[(i * 2) + 1]) }));
810
- },
811
- {
858
+ }, {
812
859
  promise: true,
813
860
  maxAge: 30 * 60 * 1000, // 30m
814
861
  });
@@ -942,8 +989,7 @@ export class LendMarketTemplate {
942
989
  .map((_x) => formatUnits(_x * BigInt(100)));
943
990
 
944
991
  return { fee, admin_fee, liquidation_discount, loan_discount, base_price, A }
945
- },
946
- {
992
+ }, {
947
993
  promise: true,
948
994
  maxAge: 5 * 60 * 1000, // 5m
949
995
  });
@@ -1404,7 +1450,7 @@ export class LendMarketTemplate {
1404
1450
 
1405
1451
  // ---------------- CREATE LOAN ----------------
1406
1452
 
1407
- private _checkRange(range: number): void {
1453
+ public _checkRange(range: number): void {
1408
1454
  if (range < this.minBands) throw Error(`range must be >= ${this.minBands}`);
1409
1455
  if (range > this.maxBands) throw Error(`range must be <= ${this.maxBands}`);
1410
1456
  }
@@ -1460,7 +1506,7 @@ export class LendMarketTemplate {
1460
1506
  return await this.llamalend.multicallProvider.all(calls) as bigint[];
1461
1507
  }
1462
1508
 
1463
- private async _getPrices(_n2: bigint, _n1: bigint): Promise<string[]> {
1509
+ public async _getPrices(_n2: bigint, _n1: bigint): Promise<string[]> {
1464
1510
  const contract = this.llamalend.contracts[this.addresses.amm].multicallContract;
1465
1511
  return (await this.llamalend.multicallProvider.all([
1466
1512
  contract.p_oracle_down(_n2),
@@ -1468,7 +1514,7 @@ export class LendMarketTemplate {
1468
1514
  ]) as bigint[]).map((_p) => formatUnits(_p));
1469
1515
  }
1470
1516
 
1471
- private async _calcPrices(_n2: bigint, _n1: bigint): Promise<[string, string]> {
1517
+ public async _calcPrices(_n2: bigint, _n1: bigint): Promise<[string, string]> {
1472
1518
  return [await this.calcTickPrice(Number(_n2) + 1), await this.calcTickPrice(Number(_n1))];
1473
1519
  }
1474
1520
 
@@ -2078,13 +2124,13 @@ export class LendMarketTemplate {
2078
2124
  public async calcPartialFrac(amount: TAmount, address = ""): Promise<IPartialFrac> {
2079
2125
  address = _getAddress.call(this.llamalend, address);
2080
2126
  const tokensToLiquidate = await this.tokensToLiquidate(address);
2081
-
2127
+
2082
2128
  const amountBN = BN(amount);
2083
2129
  const tokensToLiquidateBN = BN(tokensToLiquidate);
2084
-
2130
+
2085
2131
  if (amountBN.gt(tokensToLiquidateBN)) throw Error("Amount cannot be greater than total tokens to liquidate");
2086
2132
  if (amountBN.lte(0)) throw Error("Amount must be greater than 0");
2087
-
2133
+
2088
2134
  // Calculate frac = amount / tokensToLiquidate * 10**18
2089
2135
  // 100% = 10**18
2090
2136
  const fracDecimalBN = amountBN.div(tokensToLiquidateBN);
@@ -2136,33 +2182,33 @@ export class LendMarketTemplate {
2136
2182
  if (slippage > 100) throw Error("Slippage must be <= 100");
2137
2183
  if (Number(currentDebt) === 0) throw Error(`Loan for ${address} does not exist`);
2138
2184
  if (Number(borrowed) === 0) throw Error(`User ${address} is not in liquidation mode`);
2139
-
2185
+
2140
2186
  const frac = partialFrac.frac;
2141
2187
  const fracBN = BN(partialFrac.fracDecimal);
2142
-
2188
+
2143
2189
  const borrowedBN = BN(borrowed);
2144
2190
  const expectedBorrowedBN = borrowedBN.times(fracBN);
2145
2191
  const minAmountBN = expectedBorrowedBN.times(100 - slippage).div(100);
2146
2192
  const _minAmount = fromBN(minAmountBN);
2147
-
2193
+
2148
2194
  const contract = this.llamalend.contracts[this.addresses.controller].contract;
2149
2195
  const gas = (await contract.liquidate_extended.estimateGas(
2150
- address,
2151
- _minAmount,
2152
- frac,
2196
+ address,
2197
+ _minAmount,
2198
+ frac,
2153
2199
  this.llamalend.constants.ZERO_ADDRESS,
2154
2200
  [],
2155
2201
  this.llamalend.constantOptions
2156
2202
  ));
2157
-
2203
+
2158
2204
  if (estimateGas) return smartNumber(gas);
2159
2205
 
2160
2206
  await this.llamalend.updateFeeData();
2161
2207
  const gasLimit = _mulBy1_3(DIGas(gas));
2162
2208
  return (await contract.liquidate_extended(
2163
- address,
2164
- _minAmount,
2165
- frac,
2209
+ address,
2210
+ _minAmount,
2211
+ frac,
2166
2212
  this.llamalend.constants.ZERO_ADDRESS,
2167
2213
  [],
2168
2214
  { ...this.llamalend.options, gasLimit }
@@ -2376,14 +2422,14 @@ export class LendMarketTemplate {
2376
2422
  const userEffectiveCollateralBN = BN(userCollateral).plus(BN(userBorrowed).div(pAvgBN as BigNumber));
2377
2423
 
2378
2424
  const res: IDict<{
2379
- maxDebt: string,
2380
- maxTotalCollateral: string,
2381
- userCollateral: string,
2382
- collateralFromUserBorrowed: string,
2383
- collateralFromMaxDebt: string,
2384
- maxLeverage: string,
2385
- avgPrice: string,
2386
- }> = {};
2425
+ maxDebt: string,
2426
+ maxTotalCollateral: string,
2427
+ userCollateral: string,
2428
+ collateralFromUserBorrowed: string,
2429
+ collateralFromMaxDebt: string,
2430
+ maxLeverage: string,
2431
+ avgPrice: string,
2432
+ }> = {};
2387
2433
  for (let N = this.minBands; N <= this.maxBands; N++) {
2388
2434
  const j = N - this.minBands;
2389
2435
  res[N] = {
@@ -2783,7 +2829,7 @@ export class LendMarketTemplate {
2783
2829
  const _userBorrowed = parseUnits(userBorrowed, this.borrowed_token.decimals);
2784
2830
  await this._setSwapDataToCache(this.addresses.borrowed_token, this.addresses.collateral_token, _dDebt + _userBorrowed, slippage);
2785
2831
  const { _totalCollateral, _userCollateral, _collateralFromUserBorrowed, _collateralFromDebt, avgPrice } =
2786
- await this._leverageExpectedCollateral(userCollateral, userBorrowed, dDebt, address);
2832
+ await this._leverageExpectedCollateral(userCollateral, userBorrowed, dDebt, address);
2787
2833
  return {
2788
2834
  totalCollateral: formatUnits(_totalCollateral, this.collateral_token.decimals),
2789
2835
  userCollateral: formatUnits(_userCollateral, this.collateral_token.decimals),
@@ -3072,7 +3118,6 @@ export class LendMarketTemplate {
3072
3118
  calldata = await _assembleTxOdos.call(this.llamalend, swapData.pathId as string);
3073
3119
  }
3074
3120
 
3075
- console.log('params', [0, parseUnits(this._getMarketId(), 0), _userCollateral, _userBorrowed], calldata)
3076
3121
  const contract = this.llamalend.contracts[this.addresses.controller].contract;
3077
3122
  const gas = await contract.repay_extended.estimateGas(
3078
3123
  this.llamalend.constants.ALIASES.leverage_zap,
@@ -3189,7 +3234,7 @@ export class LendMarketTemplate {
3189
3234
  public async forceUpdateUserState(newTx: string, userAddress?: string): Promise<void> {
3190
3235
  const address = userAddress || this.llamalend.signerAddress;
3191
3236
  if (!address) throw Error("Need to connect wallet or pass address into args");
3192
-
3237
+
3193
3238
  await _getUserCollateralForce(
3194
3239
  this.llamalend.constants.NETWORK_NAME,
3195
3240
  this.addresses.controller,
@@ -3197,4 +3242,8 @@ export class LendMarketTemplate {
3197
3242
  newTx
3198
3243
  );
3199
3244
  }
3200
- }
3245
+
3246
+ public getLlamalend(): Llamalend {
3247
+ return this.llamalend;
3248
+ }
3249
+ }