@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.
@@ -4,7 +4,7 @@ on:
4
4
  push:
5
5
  branches:
6
6
  - main
7
- - feat/hide-pools
7
+ - feat/init
8
8
 
9
9
  jobs:
10
10
  release:
package/README.md CHANGED
@@ -1976,4 +1976,350 @@ import llamalend from "@curvefi/llamalend-api";
1976
1976
  // '344': { stablecoin: '0.0', collateral: '0.206573194768962407' }
1977
1977
  // }
1978
1978
  })()
1979
+ ```
1980
+
1981
+ ### LeverageV2 (createLoan, borrowMore, repay) for mintMarket
1982
+ ```ts
1983
+ (async () => {
1984
+ await llamalend.init('JsonRpc', {}, {});
1985
+
1986
+ const mintMarket = llamalend.getMintMarket('cbbtc');
1987
+ console.log(await mintMarket.wallet.balances());
1988
+ // {
1989
+ // collateral: '100.0',
1990
+ // borrowed: '2000000.0',
1991
+ // vaultShares: '0.0',
1992
+ // gauge: '0'
1993
+ // }
1994
+
1995
+
1996
+ // - Create Loan -
1997
+
1998
+ // Creates leveraged position (userCollateral + collateralFromUserBorrowed + leverage_collateral)
1999
+ // ^
2000
+ // |
2001
+ // userCollateral | debt debt + userBorrowed
2002
+ // user ---> controller ----> leverage_zap ----> router
2003
+ // | ^ | ^ ^ |
2004
+ // | |__________________| | |___________________|
2005
+ // | leverageCollateral + collateralFromUserBorrowed
2006
+ // |_____________________________________|
2007
+ // userBorrowed
2008
+
2009
+ let userCollateral = 1;
2010
+ let userBorrowed = 1000;
2011
+ let debt = 2000;
2012
+ const range = 10;
2013
+ const slippage = 0.5; // %
2014
+ await mintMarket.leverageV2.maxLeverage(range);
2015
+ // 7.4728229145282742179
2016
+ await mintMarket.leverageV2.createLoanMaxRecv(userCollateral, userBorrowed, range);
2017
+ // {
2018
+ // maxDebt: '26089.494406081862861214',
2019
+ // maxTotalCollateral: '9.539182089833411347',
2020
+ // userCollateral: '1',
2021
+ // collateralFromUserBorrowed: '0.315221168834966496',
2022
+ // collateralFromMaxDebt: '8.223960920998444851',
2023
+ // maxLeverage: '7.25291100528992828612',
2024
+ // avgPrice: '3172.3757757003568790858'
2025
+ // }
2026
+ await mintMarket.leverageV2.createLoanExpectedCollateral(userCollateral, userBorrowed, debt, slippage);
2027
+ // {
2028
+ // totalCollateral: '1.946422996710829',
2029
+ // userCollateral: '1.0',
2030
+ // collateralFromUserBorrowed: '0.315474332236942984',
2031
+ // collateralFromDebt: '0.630948664473886',
2032
+ // leverage: '1.4796358613861877'
2033
+ // avgPrice: '3169.8299919022623523421'
2034
+ // }
2035
+ await mintMarket.leverageV2.createLoanPriceImpact(userBorrowed, debt);
2036
+ // 0.08944411854377342 %
2037
+ await mintMarket.leverageV2.createLoanMaxRange(userCollateral, userBorrowed, debt);
2038
+ // 50
2039
+ await mintMarket.leverageV2.createLoanBands(userCollateral, userBorrowed, debt, range);
2040
+ // [ 76, 67 ]
2041
+ await mintMarket.leverageV2.createLoanPrices(userCollateral, userBorrowed, debt, range);
2042
+ // [ '1027.977701011670136614', '1187.061409925215211173' ]
2043
+ await mintMarket.leverageV2.createLoanHealth(userCollateral, userBorrowed, debt, range);
2044
+ // 195.8994783042570637
2045
+ await mintMarket.leverageV2.createLoanHealth(userCollateral, userBorrowed, debt, range, false);
2046
+ // 3.2780908310686365
2047
+ await mintMarket.leverageV2.createLoanIsApproved(userCollateral, userBorrowed);
2048
+ // false
2049
+ await mintMarket.leverageV2.createLoanApprove(userCollateral, userBorrowed);
2050
+ // [
2051
+ // '0xd5491d9f1e9d8ac84b03867494e35b25efad151c597d2fa4211d7bf5d540c98e',
2052
+ // '0x93565f37ec5be902a824714a30bddc25cf9cd9ed39b4c0e8de61fab44af5bc8c'
2053
+ // ]
2054
+ await mintMarket.leverageV2.createLoanRouteImage(userBorrowed, debt);
2055
+ // 'data:image/svg+xml;base64,PHN2ZyBpZD0ic2Fua2V5UGFyZW50U3ZnIiB4bWxucz...'
2056
+
2057
+
2058
+ // You must call mintMarket.leverageV2.createLoanExpectedCollateral() with the same args before
2059
+ await mintMarket.leverageV2.createLoan(userCollateral, userBorrowed, debt, range);
2060
+ // 0xeb1b7a92bcb02598f00dc8bbfe8fa3a554e7a2b1ca764e0ee45e2bf583edf731
2061
+
2062
+ await mintMarket.wallet.balances();
2063
+ // {
2064
+ // collateral: '99.0',
2065
+ // borrowed: '599000.0',
2066
+ // vaultShares: '1400000000.0',
2067
+ // gauge: '0'
2068
+ // }
2069
+ await mintMarket.userState();
2070
+ // {
2071
+ // collateral: '1.945616160868693648',
2072
+ // borrowed: '0.0',
2073
+ // debt: '2000.0',
2074
+ // N: '10'
2075
+ // }
2076
+ await mintMarket.userBands();
2077
+ // [ 76, 67 ]
2078
+ await mintMarket.userPrices();
2079
+ // [ '1027.977718614028011906', '1187.061430251609195098' ]
2080
+ await mintMarket.userHealth();
2081
+ // 195.8372633833293605
2082
+ await mintMarket.userHealth(false);
2083
+ // 3.2518122092914609
2084
+
2085
+
2086
+ // - Borrow More -
2087
+
2088
+ // Updates leveraged position (dCollateral = userCollateral + collateralFromUserBorrowed + leverageCollateral)
2089
+ // ^
2090
+ // |
2091
+ // userCollateral | dDebt dDebt + userBorrowed
2092
+ // user ---> controller ----> leverage_zap ----> router
2093
+ // | ^ | ^ ^ |
2094
+ // | |__________________| | |___________________|
2095
+ // | leverageCollateral + collateralFromUSerBorrowed
2096
+ // |_____________________________________|
2097
+ // userBorrowed
2098
+
2099
+ userCollateral = 2;
2100
+ userBorrowed = 2000;
2101
+ debt = 10000;
2102
+ await mintMarket.leverageV2.borrowMoreMaxRecv(userCollateral, userBorrowed);
2103
+ // {
2104
+ // maxDebt: '76182.8497941193262889',
2105
+ // maxTotalCollateral: '26.639775583730298462',
2106
+ // userCollateral: '2',
2107
+ // collateralFromUserBorrowed: '1.677318306610359627',
2108
+ // collateralFromMaxDebt: '22.962457277119938834',
2109
+ // avgPrice: '3172.55402418338331369083'
2110
+ // }
2111
+ await mintMarket.leverageV2.borrowMoreExpectedCollateral(userCollateral, userBorrowed, debt, slippage);
2112
+ // {
2113
+ // totalCollateral: '5.783452104143246413',
2114
+ // userCollateral: '2.0',
2115
+ // collateralFromUserBorrowed: '0.630575350690541071',
2116
+ // collateralFromDebt: '3.152876753452705342'
2117
+ // avgPrice: '3171.70659749038129067231'
2118
+ // }
2119
+ await mintMarket.leverageV2.borrowMorePriceImpact(userBorrowed, debt);
2120
+ // 0.010784277354269765 %
2121
+ await mintMarket.leverageV2.borrowMoreBands(userCollateral, userBorrowed, debt);
2122
+ // [ 47, 38 ]
2123
+ await mintMarket.leverageV2.borrowMorePrices(userCollateral, userBorrowed, debt);
2124
+ // [ '1560.282474721398939216', '1801.742501325928269008' ]
2125
+ await mintMarket.leverageV2.borrowMoreHealth(userCollateral, userBorrowed, debt, true);
2126
+ // 91.6798951784708552
2127
+ await mintMarket.leverageV2.borrowMoreHealth(userCollateral, userBorrowed, debt, false);
2128
+ // 3.7614279042995641
2129
+ await mintMarket.leverageV2.borrowMoreIsApproved(userCollateral, userBorrowed);
2130
+ // true
2131
+ await mintMarket.leverageV2.borrowMoreApprove(userCollateral, userBorrowed);
2132
+ // []
2133
+ await mintMarket.leverageV2.borrowMoreRouteImage(userBorrowed, debt);
2134
+ // 'data:image/svg+xml;base64,PHN2ZyBpZD0ic2Fua2V5UGFyZW50U3ZnIiB4bWxucz...'
2135
+
2136
+ // You must call mintMarket.leverageV2.borrowMoreExpectedCollateral() with the same args before
2137
+ await mintMarket.leverageV2.borrowMore(userCollateral, userBorrowed, debt, slippage);
2138
+ // 0x6357dd6ea7250d7adb2344cd9295f8255fd8fbbe85f00120fbcd1ebf139e057c
2139
+
2140
+ await mintMarket.wallet.balances();
2141
+ // {
2142
+ // collateral: '97.0',
2143
+ // borrowed: '597000.0',
2144
+ // vaultShares: '1400000000.0',
2145
+ // gauge: '0'
2146
+ // }
2147
+ await mintMarket.userState();
2148
+ // {
2149
+ // collateral: '7.727839965845165558',
2150
+ // borrowed: '0.0',
2151
+ // debt: '12000.000010193901375446',
2152
+ // N: '10'
2153
+ // }
2154
+ await mintMarket.userBands();
2155
+ // [ 47, 38 ]
2156
+ await mintMarket.userPrices();
2157
+ // [ '1560.28248267408177179', '1801.742510509320950242' ]
2158
+ await mintMarket.userHealth();
2159
+ // 91.6519475547753288
2160
+ await lendMarket.userHealth(false);
2161
+ // 3.7449386373872907
2162
+
2163
+
2164
+ // - Repay -
2165
+
2166
+
2167
+ // Deleveraged position (-dDebt = borrowedFromStateCollateral + borrowedFromUSerCollateral + userBorrowed)
2168
+ // ^
2169
+ // | userCollateral
2170
+ // user ___|__________________________
2171
+ // | |
2172
+ // | | stateCollateral ↓ userCollateral + stateCollateral
2173
+ // | controller --> leverage_zap --> router
2174
+ // | ^ | ^ ^ |
2175
+ // | |______________________| | |___________________|
2176
+ // | | borrowedFromStateCollateral
2177
+ // |________________________________| +
2178
+ // userBorrowed borrowedFromUSerCollateral
2179
+
2180
+ const stateCollateral = 2;
2181
+ userCollateral = 1;
2182
+ userBorrowed = 1500;
2183
+ await mintMarket.leverageV2.repayExpectedBorrowed(stateCollateral, userCollateral, userBorrowed, slippage);
2184
+ // {
2185
+ // totalBorrowed: '10998.882838599741571472',
2186
+ // borrowedFromStateCollateral: '6332.588559066494374648',
2187
+ // borrowedFromUserCollateral: '3166.294279533247196824',
2188
+ // userBorrowed: '1500'
2189
+ // avgPrice: '3166.29427953324743125312'
2190
+ // }
2191
+
2192
+ await mintMarket.leverageV2.repayPriceImpact(stateCollateral, userCollateral);
2193
+ // 0.013150142802201724 %
2194
+ await mintMarket.leverageV2.repayIsFull(stateCollateral, userCollateral, userBorrowed);
2195
+ // false
2196
+ await mintMarket.leverageV2.repayIsAvailable(stateCollateral, userCollateral, userBorrowed);
2197
+ // true
2198
+ await mintMarket.leverageV2.repayBands(stateCollateral, userCollateral, userBorrowed);
2199
+ // [ 199, 190 ]
2200
+ await mintMarket.leverageV2.repayPrices(stateCollateral, userCollateral, userBorrowed);
2201
+ // [ '175.130965754280721633', '202.233191367561902757' ]
2202
+ await mintMarket.leverageV2.repayHealth(stateCollateral, userCollateral, userBorrowed, true);
2203
+ // 1699.6097751079226865
2204
+ await mintMarket.leverageV2.repayHealth(stateCollateral, userCollateral, userBorrowed, false);
2205
+ // 3.4560086962806991
2206
+ await mintMarket.leverageV2.repayIsApproved(userCollateral, userBorrowed);
2207
+ // false
2208
+ await mintMarket.leverageV2.repayApprove(userCollateral, userBorrowed);
2209
+ // ['0xd8a8d3b3f67395e1a4f4d4f95b041edcaf1c9f7bab5eb8a8a767467678295498']
2210
+ await mintMarket.leverageV2.repayRouteImage(stateCollateral, userCollateral);
2211
+ // 'data:image/svg+xml;base64,PHN2ZyBpZD0ic2Fua2V5UGFyZW50U3ZnIiB4bWxucz...'
2212
+
2213
+ // You must call mintMarket.leverageV2.repayExpectedBorrowed() with the same args before
2214
+ await mintMarket.leverageV2.repay(stateCollateral, userCollateral, userBorrowed, slippage);
2215
+ // 0xe48a97fef1c54180a2c7d104d210a95ac1a516fdd22109682179f1582da23a82
2216
+
2217
+ await mintMarket.wallet.balances();
2218
+ // {
2219
+ // collateral: '96.0',
2220
+ // borrowed: '595500.0',
2221
+ // vaultShares: '1400000000.0',
2222
+ // gauge: '0'
2223
+ // }
2224
+ await mintMarket.userState();
2225
+ // {
2226
+ // collateral: '5.727839965845165558',
2227
+ // borrowed: '0.0',
2228
+ // debt: '992.083214663467727334',
2229
+ // N: '10'
2230
+ // }
2231
+ await mintMarket.userBands();
2232
+ // [ 199, 190 ]
2233
+ await mintMarket.userPrices();
2234
+ // [ '175.13096689602455189', '202.233192685995210783' ]
2235
+ await mintMarket.userHealth();
2236
+ // 1716.0249924305707883
2237
+ await mintMarket.userHealth(false);
2238
+ // 3.6389352509210336
2239
+ })()
2240
+ ```
2241
+
2242
+ ### Leverage createLoan all ranges methods for mintMarket
2243
+ ```ts
2244
+ await llamalend.init('JsonRpc', {}, {}, API_KEY_1INCH);
2245
+
2246
+ const mintMarket = llamalend.getMintMarket('cbbtc');
2247
+
2248
+ const userCollateral = 1;
2249
+ const userBorrowed = 1000;
2250
+ const debt = 2000;
2251
+ await mintMarket.leverageV2.createLoanMaxRecvAllRanges(userCollateral, userBorrowed);
2252
+ // {
2253
+ // '4': {
2254
+ // maxDebt: '37916.338071504823875251',
2255
+ // maxTotalCollateral: '13.286983617364703479',
2256
+ // userCollateral: '1',
2257
+ // collateralFromUserBorrowed: '0.315728154966395280',
2258
+ // collateralFromMaxDebt: '11.971255462398308199',
2259
+ // maxLeverage: '10.09857816541446843865',
2260
+ // avgPrice: '3167.28167656266072703689'
2261
+ // },
2262
+ // '5': {
2263
+ // maxDebt: '35363.440522143354729759',
2264
+ // maxTotalCollateral: '12.480961984286574804',
2265
+ // userCollateral: '1',
2266
+ // collateralFromUserBorrowed: '0.315728154966395280',
2267
+ // collateralFromMaxDebt: '11.165233829320179524',
2268
+ // maxLeverage: '9.48597317551918486951',
2269
+ // avgPrice: '3167.28167656266072703689'
2270
+ // },
2271
+ // '6': {
2272
+ // maxDebt: '33122.824118147617102062',
2273
+ // maxTotalCollateral: '11.773536301065561222',
2274
+ // userCollateral: '1',
2275
+ // collateralFromUserBorrowed: '0.315728154966395280',
2276
+ // collateralFromMaxDebt: '10.457808146099165942',
2277
+ // maxLeverage: '8.94830459971897955699',
2278
+ // avgPrice: '3167.28167656266072703689'
2279
+ // },
2280
+ // '7': {
2281
+ // maxDebt: '31140.555201395785060968',
2282
+ // maxTotalCollateral: '11.147678193332270290',
2283
+ // userCollateral: '1',
2284
+ // collateralFromUserBorrowed: '0.315728154966395280',
2285
+ // collateralFromMaxDebt: '9.831950038365875010',
2286
+ // maxLeverage: '8.47263027035929823721',
2287
+ // avgPrice: '3167.28167656266072703689'
2288
+ // },
2289
+ //
2290
+ // ...
2291
+ //
2292
+ // '50': {
2293
+ // maxDebt: '8122.705063645852013929',
2294
+ // maxTotalCollateral: '3.880294838047496482',
2295
+ // userCollateral: '1',
2296
+ // collateralFromUserBorrowed: '0.315728154966395280',
2297
+ // collateralFromMaxDebt: '2.564566683081101202',
2298
+ // maxLeverage: '2.94916151440614435181',
2299
+ // avgPrice: '3167.28167656266072703689'
2300
+ // }
2301
+
2302
+ await mintMarket.leverageV2.createLoanBandsAllRanges(userCollateral, userBorrowed, debt);
2303
+ // {
2304
+ // '4': [ 73, 70 ],
2305
+ // '5': [ 73, 69 ],
2306
+ // '6': [ 74, 69 ],
2307
+ // '7': [ 74, 68 ],
2308
+ //
2309
+ // ...
2310
+ //
2311
+ // '50': [ 97, 48 ]
2312
+ // }
2313
+
2314
+ await mintMarket.leverageV2.createLoanPricesAllRanges(userCollateral, userBorrowed, debt);
2315
+ // {
2316
+ // '4': [ '1073.323292757532604807', '1136.910693647788699808' ],
2317
+ // '5': [ '1073.323292757532604807', '1153.387660222394333133' ],
2318
+ // '6': [ '1057.990102860996424743', '1153.387660222394333133' ],
2319
+ // '7': [ '1057.990102860996424743', '1170.103423414023236507' ],
2320
+ //
2321
+ // ...
2322
+ //
2323
+ // '50': [ '759.898822708156242647', '1560.282492846180089068' ]
2324
+ // }
1979
2325
  ```
@@ -16,5 +16,4 @@ export declare const _getMarketsData: ((network: INetworkName) => Promise<IMarke
16
16
  export declare function _getQuoteOdos(this: Llamalend, fromToken: string, toToken: string, _amount: bigint, blacklist: string, pathVizImage: boolean, slippage?: number): Promise<IQuoteOdos>;
17
17
  export declare function _getExpectedOdos(this: Llamalend, fromToken: string, toToken: string, _amount: bigint, blacklist: string): Promise<string>;
18
18
  export declare function _assembleTxOdos(this: Llamalend, pathId: string): Promise<string>;
19
- export declare const _getHiddenPools: (() => Promise<IDict<string[]>>) & memoize.Memoized<() => Promise<IDict<string[]>>>;
20
19
  export {};
@@ -188,9 +188,3 @@ export function _assembleTxOdos(pathId) {
188
188
  return _assembleTxOdosMemoized(this.constants.ALIASES.leverage_zap, pathId);
189
189
  });
190
190
  }
191
- export const _getHiddenPools = memoize(() => fetch(`https://api.curve.finance/api/getHiddenPools`)
192
- .then((r) => (r.json()))
193
- .then((json) => json.data), {
194
- promise: true,
195
- maxAge: 5 * 60 * 1000, // 5m
196
- });
@@ -76,6 +76,5 @@ declare class Llamalend implements ILlamalend {
76
76
  formatUnits(value: BigNumberish, unit?: string | Numeric): string;
77
77
  parseUnits(value: string, unit?: string | Numeric): bigint;
78
78
  updateFeeData(): Promise<void>;
79
- _filterHiddenPools(pools: IDict<ILlamma>): Promise<IDict<ILlamma>>;
80
79
  }
81
80
  export { Llamalend };
package/lib/llamalend.js CHANGED
@@ -42,7 +42,7 @@ import { LLAMMAS } from "./constants/llammas";
42
42
  import { L2Networks } from "./constants/L2Networks.js";
43
43
  import { createCall, handleMultiCallResponse } from "./utils.js";
44
44
  import { cacheKey, cacheStats } from "./cache/index.js";
45
- import { _getHiddenPools, _getMarketsData } from "./external-api.js";
45
+ import { _getMarketsData } from "./external-api.js";
46
46
  import { extractDecimals } from "./constants/utils.js";
47
47
  export const NETWORK_CONSTANTS = {
48
48
  1: {
@@ -388,7 +388,7 @@ class Llamalend {
388
388
  this.options = {};
389
389
  this.constants = {
390
390
  ONE_WAY_MARKETS: {},
391
- LLAMMAS: yield this._filterHiddenPools(LLAMMAS),
391
+ LLAMMAS: Object.assign({}, LLAMMAS),
392
392
  COINS: {},
393
393
  DECIMALS: {},
394
394
  NETWORK_NAME: 'ethereum',
@@ -455,7 +455,7 @@ class Llamalend {
455
455
  }
456
456
  const network = yield this.provider.getNetwork();
457
457
  this.chainId = Number(network.chainId) === 133 || Number(network.chainId) === 31337 ? 1 : Number(network.chainId);
458
- console.log("CURVE-LENDING-JS IS CONNECTED TO NETWORK:", { name: network.name.toUpperCase(), chainId: Number(this.chainId) });
458
+ console.log("CURVE-LLAMALEND-JS IS CONNECTED TO NETWORK:", { name: network.name.toUpperCase(), chainId: Number(this.chainId) });
459
459
  if (this.chainId === 42161) {
460
460
  this.constantOptions = { gasLimit: 1125899906842624 }; // https://arbiscan.io/chart/gaslimit
461
461
  }
@@ -584,7 +584,7 @@ class Llamalend {
584
584
  controller_address: controllers[i],
585
585
  monetary_policy_address,
586
586
  collateral_address: is_eth ? "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" : collaterals[i],
587
- leverage_zap: "0x0000000000000000000000000000000000000000",
587
+ leverage_zap: this.constants.ALIASES.leverage_zap,
588
588
  deleverage_zap: "0x0000000000000000000000000000000000000000",
589
589
  collateral_symbol: is_eth ? "ETH" : collateral_symbol,
590
590
  collateral_decimals,
@@ -676,11 +676,5 @@ class Llamalend {
676
676
  }
677
677
  });
678
678
  }
679
- _filterHiddenPools(pools) {
680
- return __awaiter(this, void 0, void 0, function* () {
681
- const hiddenPools = (yield _getHiddenPools())[this.constants.NETWORK_NAME] || [];
682
- return Object.fromEntries(Object.entries(pools).filter(([id]) => !hiddenPools.includes(id)));
683
- });
684
- }
685
679
  }
686
680
  export { Llamalend };
@@ -1,6 +1,7 @@
1
1
  import memoize from "memoizee";
2
2
  import type { Llamalend } from "../llamalend.js";
3
3
  import { IDict, TGas } from "../interfaces";
4
+ import { ILeverageV2 } from "./interfaces/leverage.js";
4
5
  export declare class MintMarketTemplate {
5
6
  private llamalend;
6
7
  id: string;
@@ -112,6 +113,7 @@ export declare class MintMarketTemplate {
112
113
  createLoan: (collateral: number | string, debt: number | string, range: number, slippage?: number) => Promise<TGas>;
113
114
  };
114
115
  };
116
+ leverageV2: ILeverageV2;
115
117
  deleverage: {
116
118
  repayStablecoins: (collateral: number | string) => Promise<{
117
119
  stablecoins: string;
@@ -130,7 +132,21 @@ export declare class MintMarketTemplate {
130
132
  };
131
133
  };
132
134
  constructor(id: string, llamalend: Llamalend);
133
- private statsParameters;
135
+ statsParameters: (() => Promise<{
136
+ fee: string;
137
+ admin_fee: string;
138
+ rate: string;
139
+ future_rate: string;
140
+ liquidation_discount: string;
141
+ loan_discount: string;
142
+ }>) & memoize.Memoized<() => Promise<{
143
+ fee: string;
144
+ admin_fee: string;
145
+ rate: string;
146
+ future_rate: string;
147
+ liquidation_discount: string;
148
+ loan_discount: string;
149
+ }>>;
134
150
  private statsBalances;
135
151
  private statsMaxMinBands;
136
152
  private statsActiveBand;
@@ -176,7 +192,7 @@ export declare class MintMarketTemplate {
176
192
  calcBandPrices(n: number): Promise<[string, string]>;
177
193
  calcRangePct(range: number): string;
178
194
  private walletBalances;
179
- private _checkRange;
195
+ _checkRange(range: number): void;
180
196
  createLoanMaxRecv(collateral: number | string, range: number): Promise<string>;
181
197
  createLoanMaxRecvAllRanges: ((collateral: number | string) => Promise<{
182
198
  [index: number]: string;
@@ -186,8 +202,8 @@ export declare class MintMarketTemplate {
186
202
  getMaxRange(collateral: number | string, debt: number | string): Promise<number>;
187
203
  private _calcN1;
188
204
  private _calcN1AllRanges;
189
- private _getPrices;
190
- private _calcPrices;
205
+ _getPrices(_n2: bigint, _n1: bigint): Promise<string[]>;
206
+ _calcPrices(_n2: bigint, _n1: bigint): Promise<[string, string]>;
191
207
  private _createLoanBands;
192
208
  private _createLoanBandsAllRanges;
193
209
  createLoanBands(collateral: number | string, debt: number | string, range: number): Promise<[number, number]>;
@@ -309,4 +325,5 @@ export declare class MintMarketTemplate {
309
325
  private _deleverageRepay;
310
326
  private deleverageRepayEstimateGas;
311
327
  private deleverageRepay;
328
+ getLlamalend(): Llamalend;
312
329
  }
@@ -11,6 +11,7 @@ import memoize from "memoizee";
11
11
  import BigNumber from "bignumber.js";
12
12
  import { _getAddress, parseUnits, BN, toBN, fromBN, getBalances, ensureAllowance, hasAllowance, ensureAllowanceEstimateGas, isEth, _cutZeros, formatUnits, smartNumber, MAX_ALLOWANCE, MAX_ACTIVE_BAND, _mulBy1_3, DIGas, } from "../utils";
13
13
  import { _getUserCollateralCrvUsd } from "../external-api.js";
14
+ import { LeverageV2Module } from "./modules";
14
15
  export class MintMarketTemplate {
15
16
  constructor(id, llamalend) {
16
17
  var _a;
@@ -312,6 +313,54 @@ export class MintMarketTemplate {
312
313
  createLoan: this.leverageCreateLoanEstimateGas.bind(this),
313
314
  },
314
315
  };
316
+ const leverageV2 = new LeverageV2Module(this);
317
+ this.leverageV2 = {
318
+ hasLeverage: leverageV2.hasLeverage,
319
+ maxLeverage: leverageV2.maxLeverage,
320
+ createLoanMaxRecv: leverageV2.leverageCreateLoanMaxRecv,
321
+ createLoanMaxRecvAllRanges: leverageV2.leverageCreateLoanMaxRecvAllRanges,
322
+ createLoanExpectedCollateral: leverageV2.leverageCreateLoanExpectedCollateral,
323
+ createLoanPriceImpact: leverageV2.leverageCreateLoanPriceImpact,
324
+ createLoanMaxRange: leverageV2.leverageCreateLoanMaxRange,
325
+ createLoanBands: leverageV2.leverageCreateLoanBands,
326
+ createLoanBandsAllRanges: leverageV2.leverageCreateLoanBandsAllRanges,
327
+ createLoanPrices: leverageV2.leverageCreateLoanPrices,
328
+ createLoanPricesAllRanges: leverageV2.leverageCreateLoanPricesAllRanges,
329
+ createLoanHealth: leverageV2.leverageCreateLoanHealth,
330
+ createLoanIsApproved: leverageV2.leverageCreateLoanIsApproved,
331
+ createLoanApprove: leverageV2.leverageCreateLoanApprove,
332
+ createLoanRouteImage: leverageV2.leverageCreateLoanRouteImage,
333
+ createLoan: leverageV2.leverageCreateLoan,
334
+ borrowMoreMaxRecv: leverageV2.leverageBorrowMoreMaxRecv,
335
+ borrowMoreExpectedCollateral: leverageV2.leverageBorrowMoreExpectedCollateral,
336
+ borrowMorePriceImpact: leverageV2.leverageBorrowMorePriceImpact,
337
+ borrowMoreBands: leverageV2.leverageBorrowMoreBands,
338
+ borrowMorePrices: leverageV2.leverageBorrowMorePrices,
339
+ borrowMoreHealth: leverageV2.leverageBorrowMoreHealth,
340
+ borrowMoreIsApproved: leverageV2.leverageCreateLoanIsApproved,
341
+ borrowMoreApprove: leverageV2.leverageCreateLoanApprove,
342
+ borrowMoreRouteImage: leverageV2.leverageBorrowMoreRouteImage,
343
+ borrowMore: leverageV2.leverageBorrowMore,
344
+ repayExpectedBorrowed: leverageV2.leverageRepayExpectedBorrowed,
345
+ repayPriceImpact: leverageV2.leverageRepayPriceImpact,
346
+ repayIsFull: leverageV2.leverageRepayIsFull,
347
+ repayIsAvailable: leverageV2.leverageRepayIsAvailable,
348
+ repayBands: leverageV2.leverageRepayBands,
349
+ repayPrices: leverageV2.leverageRepayPrices,
350
+ repayHealth: leverageV2.leverageRepayHealth,
351
+ repayIsApproved: leverageV2.leverageRepayIsApproved,
352
+ repayApprove: leverageV2.leverageRepayApprove,
353
+ repayRouteImage: leverageV2.leverageRepayRouteImage,
354
+ repay: leverageV2.leverageRepay,
355
+ estimateGas: {
356
+ createLoanApprove: leverageV2.leverageCreateLoanApproveEstimateGas,
357
+ createLoan: leverageV2.leverageCreateLoanEstimateGas,
358
+ borrowMoreApprove: leverageV2.leverageCreateLoanApproveEstimateGas,
359
+ borrowMore: leverageV2.leverageBorrowMoreEstimateGas,
360
+ repayApprove: leverageV2.leverageRepayApproveEstimateGas,
361
+ repay: leverageV2.leverageRepayEstimateGas,
362
+ },
363
+ };
315
364
  this.deleverage = {
316
365
  repayStablecoins: this.deleverageRepayStablecoins.bind(this),
317
366
  getRouteName: this.deleverageGetRouteName.bind(this),
@@ -1668,4 +1717,7 @@ export class MintMarketTemplate {
1668
1717
  return yield this._deleverageRepay(collateral, slippage, false);
1669
1718
  });
1670
1719
  }
1720
+ getLlamalend() {
1721
+ return this.llamalend;
1722
+ }
1671
1723
  }
@@ -0,0 +1,90 @@
1
+ import { IDict, TAmount, TGas } from "../../interfaces";
2
+ export interface ILeverageV2 {
3
+ hasLeverage: () => boolean;
4
+ maxLeverage: (N: number) => Promise<string>;
5
+ createLoanMaxRecv: (userCollateral: TAmount, userBorrowed: TAmount, range: number) => Promise<{
6
+ maxDebt: string;
7
+ maxTotalCollateral: string;
8
+ userCollateral: string;
9
+ collateralFromUserBorrowed: string;
10
+ collateralFromMaxDebt: string;
11
+ maxLeverage: string;
12
+ avgPrice: string;
13
+ }>;
14
+ createLoanMaxRecvAllRanges: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<IDict<{
15
+ maxDebt: string;
16
+ maxTotalCollateral: string;
17
+ userCollateral: string;
18
+ collateralFromUserBorrowed: string;
19
+ collateralFromMaxDebt: string;
20
+ maxLeverage: string;
21
+ avgPrice: string;
22
+ }>>;
23
+ createLoanExpectedCollateral: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number) => Promise<{
24
+ totalCollateral: string;
25
+ userCollateral: string;
26
+ collateralFromUserBorrowed: string;
27
+ collateralFromDebt: string;
28
+ leverage: string;
29
+ avgPrice: string;
30
+ }>;
31
+ createLoanPriceImpact: (userBorrowed: TAmount, debt: TAmount) => Promise<string>;
32
+ createLoanMaxRange: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount) => Promise<number>;
33
+ createLoanBands: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number) => Promise<[number, number]>;
34
+ createLoanBandsAllRanges: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount) => Promise<IDict<[number, number] | null>>;
35
+ createLoanPrices: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number) => Promise<string[]>;
36
+ createLoanPricesAllRanges: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount) => Promise<IDict<[string, string] | null>>;
37
+ createLoanHealth: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number, full?: boolean) => Promise<string>;
38
+ createLoanIsApproved: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<boolean>;
39
+ createLoanApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
40
+ createLoanRouteImage: (userBorrowed: TAmount, debt: TAmount) => Promise<string>;
41
+ createLoan: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number, slippage?: number) => Promise<string>;
42
+ borrowMoreMaxRecv: (userCollateral: TAmount, userBorrowed: TAmount, address?: string) => Promise<{
43
+ maxDebt: string;
44
+ maxTotalCollateral: string;
45
+ userCollateral: string;
46
+ collateralFromUserBorrowed: string;
47
+ collateralFromMaxDebt: string;
48
+ avgPrice: string;
49
+ }>;
50
+ borrowMoreExpectedCollateral: (userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, slippage?: number, address?: string) => Promise<{
51
+ totalCollateral: string;
52
+ userCollateral: string;
53
+ collateralFromUserBorrowed: string;
54
+ collateralFromDebt: string;
55
+ avgPrice: string;
56
+ }>;
57
+ borrowMorePriceImpact: (userBorrowed: TAmount, dDebt: TAmount, address?: string) => Promise<string>;
58
+ borrowMoreBands: (userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, address?: string) => Promise<[number, number]>;
59
+ borrowMorePrices: (userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, address?: string) => Promise<string[]>;
60
+ borrowMoreHealth: (userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, full?: boolean, address?: string) => Promise<string>;
61
+ borrowMoreIsApproved: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<boolean>;
62
+ borrowMoreApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
63
+ borrowMoreRouteImage: (userBorrowed: TAmount, debt: TAmount) => Promise<string>;
64
+ borrowMore: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number) => Promise<string>;
65
+ repayExpectedBorrowed: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<{
66
+ totalBorrowed: string;
67
+ borrowedFromStateCollateral: string;
68
+ borrowedFromUserCollateral: string;
69
+ userBorrowed: string;
70
+ avgPrice: string;
71
+ }>;
72
+ repayPriceImpact: (stateCollateral: TAmount, userCollateral: TAmount) => Promise<string>;
73
+ repayIsFull: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string) => Promise<boolean>;
74
+ repayIsAvailable: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string) => Promise<boolean>;
75
+ repayBands: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string) => Promise<[number, number]>;
76
+ repayPrices: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string) => Promise<string[]>;
77
+ repayHealth: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, full?: boolean, address?: string) => Promise<string>;
78
+ repayIsApproved: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<boolean>;
79
+ repayApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
80
+ repayRouteImage: (stateCollateral: TAmount, userCollateral: TAmount) => Promise<string>;
81
+ repay: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<string>;
82
+ estimateGas: {
83
+ createLoanApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<TGas>;
84
+ createLoan: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number, slippage?: number) => Promise<number>;
85
+ borrowMoreApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<TGas>;
86
+ borrowMore: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number) => Promise<number>;
87
+ repayApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<TGas>;
88
+ repay: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<number>;
89
+ };
90
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export { LeverageV2Module } from './leverageV2.js';