@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/README.md CHANGED
@@ -947,7 +947,457 @@ await lendMarket.forceUpdateUserState(txHash, "0x123...");
947
947
  })()
948
948
  ```
949
949
 
950
- ### Leverage (createLoan, borrowMore, repay) for lendMarket
950
+ ### Leverage (createLoan, borrowMore, repay) for lendMarket leverageZapV2
951
+
952
+ LendMarket leverage operations support different routers and require quote information from external routing services.
953
+
954
+ #### Breaking Changes
955
+
956
+ **1. New metrics methods - get all metrics in one call**
957
+ - Instead of `createLoanBands`, `createLoanPrices`, `createLoanHealth`, `createLoanPriceImpact`: `createLoanExpectedMetrics()` - returns priceImpact, bands, prices, health
958
+ - Instead of `borrowMoreBands`, `borrowMorePrices`, `borrowMoreHealth`, `borrowMorePriceImpact`:
959
+ `borrowMoreExpectedMetrics()` – returns priceImpact, bands, prices, health
960
+ - Instead of `repayBands`, `repayPrices`, `repayHealth`, `repayPriceImpact`:
961
+ `repayExpectedMetrics()` – returns priceImpact, bands, prices, health
962
+
963
+
964
+ **ILeverageMetrics** - metrics object returned by new methods:
965
+
966
+ ```ts
967
+ interface ILeverageMetrics {
968
+ priceImpact: number;
969
+ bands: [number, number];
970
+ prices: string[];
971
+ health: string;
972
+ }
973
+ ```
974
+
975
+ **2. Final methods now require `router` and `calldata` parameters**
976
+ - **Before**: `createLoan(userCollateral, userBorrowed, debt, range)`
977
+ - **Now**: `createLoan(userCollateral, userBorrowed, debt, range, router, calldata)`
978
+ - **Before**: `borrowMore(userCollateral, userBorrowed, debt, slippage)`
979
+ - **Now**: `borrowMore(userCollateral, userBorrowed, debt, router, calldata)`
980
+ - **Before**: `repay(stateCollateral, userCollateral, userBorrowed, slippage)`
981
+ - **Now**: `repay(stateCollateral, userCollateral, userBorrowed, router, calldata)`
982
+
983
+ where `router` - address of router, `calldata` - calldata byte code
984
+
985
+ #### Understanding Callback Functions and Quotes
986
+
987
+ **GetExpectedFn** - callback function for fetching quotes from router (e.g., Odos, Curve):
988
+
989
+ ```ts
990
+ type GetExpectedFn = (
991
+ fromToken: string, // Address of token to swap from
992
+ toToken: string, // Address of token to swap to
993
+ amountIn: bigint, // Amount of tokens to swap (in wei)
994
+ blacklist: string | string[], // Contract/pool addresses to exclude
995
+ ) => Promise<IQuote>;
996
+ ```
997
+
998
+ **IQuote** - quote object with swap information:
999
+
1000
+ ```ts
1001
+ interface IQuote {
1002
+ outAmount: string; // Amount of tokens to receive
1003
+ priceImpact: number; // Price impac
1004
+ }
1005
+ ```
1006
+
1007
+ #### Which quotes are needed for different operations
1008
+
1009
+ | Action type | Quote inputAmount |
1010
+ |--------------|------------------|
1011
+ | createLoan | debt + userBorrowed |
1012
+ | borrowMore | debt + userBorrowed |
1013
+ | repay | stateCollateral + userCollateral |
1014
+
1015
+ **For createLoan and borrowMore:**
1016
+ - Get quote for swapping `(debt + userBorrowed)` borrowed tokens → collateral tokens
1017
+ - Example: For debt=2000 and userBorrowed=1000, get quote for swapping 3000 borrowed tokens to collateral
1018
+
1019
+ !!! Be careful: here debt means the amount of debt added during the operation, not the new total debt the user will have after it.
1020
+
1021
+ **For repay:**
1022
+ - Get quote for swapping `(stateCollateral + userCollateral)` collateral tokens → borrowed tokens
1023
+ - Example: For stateCollateral=2 and userCollateral=1, get quote for swapping 3 collateral tokens to borrowed tokens
1024
+
1025
+
1026
+ #### Leverage operations with routers
1027
+
1028
+ ```ts
1029
+ (async () => {
1030
+ await llamalend.init('JsonRpc', {});
1031
+ await llamalend.lendMarkets.fetchMarkets();
1032
+
1033
+ const lendMarket = llamalend.getLendMarket('one-way-market-0');
1034
+
1035
+ const router = '0x.....'; // router name
1036
+ const calldata = '0x...'; // calldata from router for executing swap
1037
+ const quote = // quote from your router (debt + userBorrowed)
1038
+
1039
+ // - Create Loan -
1040
+
1041
+ // Creates leveraged position (userCollateral + collateralFromUserBorrowed + leverage_collateral)
1042
+ // ^
1043
+ // |
1044
+ // userCollateral | debt debt + userBorrowed
1045
+ // user ---> controller ----> leverage_zap ----> router
1046
+ // | ^ | ^ ^ |
1047
+ // | |__________________| | |___________________|
1048
+ // | leverageCollateral + collateralFromUserBorrowed
1049
+ // |_____________________________________|
1050
+ // userBorrowed
1051
+
1052
+ let userCollateral = 1;
1053
+ let userBorrowed = 1000;
1054
+ let debt = 2000;
1055
+ const range = 10;
1056
+ await lendMarket.leverageZapV2.maxLeverage(range);
1057
+ // 7.4728229145282742179
1058
+
1059
+ // Get maximum possible debt for given parameters
1060
+ await lendMarket.leverageZapV2.createLoanMaxRecv({ userCollateral, userBorrowed, range, getExpected });
1061
+ // {
1062
+ // maxDebt: '26089.494406081862861214',
1063
+ // maxTotalCollateral: '9.539182089833411347',
1064
+ // userCollateral: '1',
1065
+ // collateralFromUserBorrowed: '0.315221168834966496',
1066
+ // collateralFromMaxDebt: '8.223960920998444851',
1067
+ // maxLeverage: '7.25291100528992828612',
1068
+ // avgPrice: '3172.3757757003568790858'
1069
+ // }
1070
+
1071
+ // Get quote for swapping (debt + userBorrowed)!!!
1072
+
1073
+ // Get expected collateral amount
1074
+ await lendMarket.leverageZapV2.createLoanExpectedCollateral({ userCollateral, userBorrowed, debt, quote });
1075
+ // {
1076
+ // totalCollateral: '1.946422996710829',
1077
+ // userCollateral: '1.0',
1078
+ // collateralFromUserBorrowed: '0.315474332236942984',
1079
+ // collateralFromDebt: '0.630948664473886',
1080
+ // leverage: '1.4796358613861877'
1081
+ // avgPrice: '3169.8299919022623523421'
1082
+ // }
1083
+
1084
+ // NEW: Get all metrics in one call
1085
+ const metrics = await lendMarket.leverageZapV2.createLoanExpectedMetrics({
1086
+ userCollateral,
1087
+ userBorrowed,
1088
+ debt,
1089
+ range,
1090
+ quote,
1091
+ healthIsFull: true // true for full health, false for not full
1092
+ });
1093
+ // {
1094
+ // priceImpact: 0.08944411854377342, // %
1095
+ // bands: [76, 67],
1096
+ // prices: ['1027.977701011670136614', '1187.061409925215211173'],
1097
+ // health: '195.8994783042570637' // %
1098
+ //
1099
+
1100
+ await lendMarket.leverageZapV2.createLoanIsApproved({ userCollateral, userBorrowed });
1101
+ // false
1102
+ await lendMarket.leverageZapV2.createLoanApprove({ userCollateral, userBorrowed });
1103
+ // [
1104
+ // '0xd5491d9f1e9d8ac84b03867494e35b25efad151c597d2fa4211d7bf5d540c98e',
1105
+ // '0x93565f37ec5be902a824714a30bddc25cf9cd9ed39b4c0e8de61fab44af5bc8c'
1106
+ // ]
1107
+
1108
+
1109
+ // Create loan, passing router address and calldata from router
1110
+ await lendMarket.leverageZapV2.createLoan({ userCollateral, userBorrowed, debt, range, router, calldata });
1111
+ // 0xeb1b7a92bcb02598f00dc8bbfe8fa3a554e7a2b1ca764e0ee45e2bf583edf731
1112
+
1113
+ await lendMarket.wallet.balances();
1114
+ // {
1115
+ // collateral: '99.0',
1116
+ // borrowed: '599000.0',
1117
+ // vaultShares: '1400000000.0',
1118
+ // gauge: '0'
1119
+ // }
1120
+ await lendMarket.userState();
1121
+ // {
1122
+ // collateral: '1.945616160868693648',
1123
+ // borrowed: '0.0',
1124
+ // debt: '2000.0',
1125
+ // N: '10'
1126
+ // }
1127
+ await lendMarket.userBands();
1128
+ // [ 76, 67 ]
1129
+ await lendMarket.userPrices();
1130
+ // [ '1027.977718614028011906', '1187.061430251609195098' ]
1131
+ await lendMarket.userHealth();
1132
+ // 195.8372633833293605
1133
+ await lendMarket.userHealth(false);
1134
+ // 3.2518122092914609
1135
+
1136
+
1137
+ // - Borrow More -
1138
+
1139
+ // Updates leveraged position (dCollateral = userCollateral + collateralFromUserBorrowed + leverageCollateral)
1140
+ // ^
1141
+ // |
1142
+ // userCollateral | dDebt dDebt + userBorrowed
1143
+ // user ---> controller ----> leverage_zap ----> router
1144
+ // | ^ | ^ ^ |
1145
+ // | |__________________| | |___________________|
1146
+ // | leverageCollateral + collateralFromUSerBorrowed
1147
+ // |_____________________________________|
1148
+ // userBorrowed
1149
+
1150
+ userCollateral = 2;
1151
+ userBorrowed = 2000;
1152
+ debt = 10000;
1153
+
1154
+ // Get maximum possible debt for given parameters
1155
+ await lendMarket.leverageZapV2.borrowMoreMaxRecv({ userCollateral, userBorrowed, getExpected });
1156
+ // {
1157
+ // maxDebt: '76182.8497941193262889',
1158
+ // maxTotalCollateral: '26.639775583730298462',
1159
+ // userCollateral: '2',
1160
+ // collateralFromUserBorrowed: '1.677318306610359627',
1161
+ // collateralFromMaxDebt: '22.962457277119938834',
1162
+ // avgPrice: '3172.55402418338331369083'
1163
+ // }
1164
+
1165
+ // Get quote for swapping (debt + userBorrowed)
1166
+
1167
+ await lendMarket.leverageZapV2.borrowMoreExpectedCollateral({ userCollateral, userBorrowed, dDebt: debt, quote });
1168
+ // {
1169
+ // totalCollateral: '5.783452104143246413',
1170
+ // userCollateral: '2.0',
1171
+ // collateralFromUserBorrowed: '0.630575350690541071',
1172
+ // collateralFromDebt: '3.152876753452705342'
1173
+ // avgPrice: '3171.70659749038129067231'
1174
+ // }
1175
+
1176
+ // NEW: Get all metrics in one call
1177
+ const metricsBM = await lendMarket.leverageZapV2.borrowMoreExpectedMetrics({
1178
+ userCollateral,
1179
+ userBorrowed,
1180
+ debt,
1181
+ quote,
1182
+ healthIsFull: true // true for full health, false for not full
1183
+ });
1184
+ // {
1185
+ // priceImpact: 0.010784277354269765, // %
1186
+ // bands: [47, 38],
1187
+ // prices: ['1560.282474721398939216', '1801.742501325928269008'],
1188
+ // health: '91.6798951784708552' // %
1189
+ // }
1190
+
1191
+ await lendMarket.leverageZapV2.borrowMoreIsApproved({ userCollateral, userBorrowed });
1192
+ // true
1193
+ await lendMarket.leverageZapV2.borrowMoreApprove({ userCollateral, userBorrowed });
1194
+ // []
1195
+
1196
+ // Execute borrowMore, passing router address and calldata from router
1197
+ await lendMarket.leverageZapV2.borrowMore({ userCollateral, userBorrowed, debt, router, calldata });
1198
+ // 0x6357dd6ea7250d7adb2344cd9295f8255fd8fbbe85f00120fbcd1ebf139e057c
1199
+
1200
+ await lendMarket.wallet.balances();
1201
+ // {
1202
+ // collateral: '97.0',
1203
+ // borrowed: '597000.0',
1204
+ // vaultShares: '1400000000.0',
1205
+ // gauge: '0'
1206
+ // }
1207
+ await lendMarket.userState();
1208
+ // {
1209
+ // collateral: '7.727839965845165558',
1210
+ // borrowed: '0.0',
1211
+ // debt: '12000.000010193901375446',
1212
+ // N: '10'
1213
+ // }
1214
+ await lendMarket.userBands();
1215
+ // [ 47, 38 ]
1216
+ await lendMarket.userPrices();
1217
+ // [ '1560.28248267408177179', '1801.742510509320950242' ]
1218
+ await lendMarket.userHealth();
1219
+ // 91.6519475547753288
1220
+ await lendMarket.userHealth(false);
1221
+ // 3.7449386373872907
1222
+
1223
+
1224
+ // - Repay -
1225
+
1226
+
1227
+ // Deleveraged position (-dDebt = borrowedFromStateCollateral + borrowedFromUSerCollateral + userBorrowed)
1228
+ // ^
1229
+ // | userCollateral
1230
+ // user ___|__________________________
1231
+ // | |
1232
+ // | | stateCollateral ↓ userCollateral + stateCollateral
1233
+ // | controller --> leverage_zap --> router
1234
+ // | ^ | ^ ^ |
1235
+ // | |______________________| | |___________________|
1236
+ // | | borrowedFromStateCollateral
1237
+ // |________________________________| +
1238
+ // userBorrowed borrowedFromUSerCollateral
1239
+
1240
+ const stateCollateral = 2;
1241
+ userCollateral = 1;
1242
+ userBorrowed = 1500;
1243
+
1244
+ // Get quote for swapping (stateCollateral + userCollateral)
1245
+
1246
+ await lendMarket.leverageZapV2.repayExpectedBorrowed({ stateCollateral, userCollateral, userBorrowed, quote });
1247
+ // {
1248
+ // totalBorrowed: '10998.882838599741571472',
1249
+ // borrowedFromStateCollateral: '6332.588559066494374648',
1250
+ // borrowedFromUserCollateral: '3166.294279533247196824',
1251
+ // userBorrowed: '1500'
1252
+ // avgPrice: '3166.29427953324743125312'
1253
+ // }
1254
+
1255
+ await lendMarket.leverageZapV2.repayIsFull({ stateCollateral, userCollateral, userBorrowed, quote });
1256
+ // false
1257
+ await lendMarket.leverageZapV2.repayIsAvailable({ stateCollateral, userCollateral, userBorrowed, quote });
1258
+ // true
1259
+
1260
+ // NEW: Get all metrics in one call
1261
+ const metricsRepay = await lendMarket.leverageZapV2.repayExpectedMetrics({
1262
+ stateCollateral,
1263
+ userCollateral,
1264
+ userBorrowed,
1265
+ healthIsFull: true, // true for full health, false for not full
1266
+ quote,
1267
+ address: llamalend.signerAddress
1268
+ });
1269
+ // {
1270
+ // priceImpact: 0.013150142802201724, // %
1271
+ // bands: [199, 190],
1272
+ // prices: ['175.130965754280721633', '202.233191367561902757'],
1273
+ // health: '1699.6097751079226865' // %
1274
+ // }
1275
+
1276
+ await lendMarket.leverageZapV2.repayIsApproved({ userCollateral, userBorrowed });
1277
+ // false
1278
+ await lendMarket.leverageZapV2.repayApprove({ userCollateral, userBorrowed });
1279
+ // ['0xd8a8d3b3f67395e1a4f4d4f95b041edcaf1c9f7bab5eb8a8a767467678295498']
1280
+
1281
+ // Execute repay, passing router address and calldata from router
1282
+ await lendMarket.leverageZapV2.repay({ stateCollateral, userCollateral, userBorrowed, router, calldata });
1283
+ // 0xe48a97fef1c54180a2c7d104d210a95ac1a516fdd22109682179f1582da23a82
1284
+
1285
+ await lendMarket.wallet.balances();
1286
+ // {
1287
+ // collateral: '96.0',
1288
+ // borrowed: '595500.0',
1289
+ // vaultShares: '1400000000.0',
1290
+ // gauge: '0'
1291
+ // }
1292
+ await lendMarket.userState();
1293
+ // {
1294
+ // collateral: '5.727839965845165558',
1295
+ // borrowed: '0.0',
1296
+ // debt: '992.083214663467727334',
1297
+ // N: '10'
1298
+ // }
1299
+ await lendMarket.userBands();
1300
+ // [ 199, 190 ]
1301
+ await lendMarket.userPrices();
1302
+ // [ '175.13096689602455189', '202.233192685995210783' ]
1303
+ await lendMarket.userHealth();
1304
+ // 1716.0249924305707883
1305
+ await lendMarket.userHealth(false);
1306
+ // 3.6389352509210336
1307
+ })()
1308
+ ```
1309
+
1310
+ ### Leverage createLoan all ranges methods for lendMarket
1311
+ ```ts
1312
+ await llamalend.init('JsonRpc', {});
1313
+ await llamalend.lendMarkets.fetchMarkets();
1314
+
1315
+ const lendMarket = llamalend.getLendMarket('one-way-market-0');
1316
+
1317
+ const userCollateral = 1;
1318
+ const userBorrowed = 1000;
1319
+ const debt = 2000;
1320
+
1321
+ // Get maximum values for all possible ranges
1322
+ await lendMarket.leverageZapV2.createLoanMaxRecvAllRanges({ userCollateral, userBorrowed, getExpected });
1323
+ // {
1324
+ // '4': {
1325
+ // maxDebt: '37916.338071504823875251',
1326
+ // maxTotalCollateral: '13.286983617364703479',
1327
+ // userCollateral: '1',
1328
+ // collateralFromUserBorrowed: '0.315728154966395280',
1329
+ // collateralFromMaxDebt: '11.971255462398308199',
1330
+ // maxLeverage: '10.09857816541446843865',
1331
+ // avgPrice: '3167.28167656266072703689'
1332
+ // },
1333
+ // '5': {
1334
+ // maxDebt: '35363.440522143354729759',
1335
+ // maxTotalCollateral: '12.480961984286574804',
1336
+ // userCollateral: '1',
1337
+ // collateralFromUserBorrowed: '0.315728154966395280',
1338
+ // collateralFromMaxDebt: '11.165233829320179524',
1339
+ // maxLeverage: '9.48597317551918486951',
1340
+ // avgPrice: '3167.28167656266072703689'
1341
+ // },
1342
+ // '6': {
1343
+ // maxDebt: '33122.824118147617102062',
1344
+ // maxTotalCollateral: '11.773536301065561222',
1345
+ // userCollateral: '1',
1346
+ // collateralFromUserBorrowed: '0.315728154966395280',
1347
+ // collateralFromMaxDebt: '10.457808146099165942',
1348
+ // maxLeverage: '8.94830459971897955699',
1349
+ // avgPrice: '3167.28167656266072703689'
1350
+ // },
1351
+ // '7': {
1352
+ // maxDebt: '31140.555201395785060968',
1353
+ // maxTotalCollateral: '11.147678193332270290',
1354
+ // userCollateral: '1',
1355
+ // collateralFromUserBorrowed: '0.315728154966395280',
1356
+ // collateralFromMaxDebt: '9.831950038365875010',
1357
+ // maxLeverage: '8.47263027035929823721',
1358
+ // avgPrice: '3167.28167656266072703689'
1359
+ // },
1360
+ //
1361
+ // ...
1362
+ //
1363
+ // '50': {
1364
+ // maxDebt: '8122.705063645852013929',
1365
+ // maxTotalCollateral: '3.880294838047496482',
1366
+ // userCollateral: '1',
1367
+ // collateralFromUserBorrowed: '0.315728154966395280',
1368
+ // collateralFromMaxDebt: '2.564566683081101202',
1369
+ // maxLeverage: '2.94916151440614435181',
1370
+ // avgPrice: '3167.28167656266072703689'
1371
+ // }
1372
+
1373
+ // Get quote for specific debt + userBorrowed
1374
+ // and provide getExpected callback
1375
+ await lendMarket.leverageZapV2.createLoanBandsAllRanges({ userCollateral, userBorrowed, debt, getExpected, quote });
1376
+ // {
1377
+ // '4': [ 73, 70 ],
1378
+ // '5': [ 73, 69 ],
1379
+ // '6': [ 74, 69 ],
1380
+ // '7': [ 74, 68 ],
1381
+ //
1382
+ // ...
1383
+ //
1384
+ // '50': [ 97, 48 ]
1385
+ // }
1386
+
1387
+ await lendMarket.leverageZapV2.createLoanPricesAllRanges({ userCollateral, userBorrowed, debt, getExpected, quote });
1388
+ // {
1389
+ // '4': [ '1073.323292757532604807', '1136.910693647788699808' ],
1390
+ // '5': [ '1073.323292757532604807', '1153.387660222394333133' ],
1391
+ // '6': [ '1057.990102860996424743', '1153.387660222394333133' ],
1392
+ // '7': [ '1057.990102860996424743', '1170.103423414023236507' ],
1393
+ //
1394
+ // ...
1395
+ //
1396
+ // '50': [ '759.898822708156242647', '1560.282492846180089068' ]
1397
+ // }
1398
+ ```
1399
+
1400
+ ### Leverage (createLoan, borrowMore, repay) for lendMarket (Deprecated!!! Will be deleted in the future, please use leverageZapV2)
951
1401
  ```ts
952
1402
  (async () => {
953
1403
  await llamalend.init('JsonRpc', {}, {}, API_KEY_1INCH);
@@ -7,6 +7,7 @@ export const ALIASES_ETHEREUM = lowerCaseValues({
7
7
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
8
8
  // "leverage_zap": "0x3294514B78Df4Bb90132567fcf8E5e99f390B687", // 1inch
9
9
  "leverage_zap": "0xC5898606BdB494a994578453B92e7910a90aA873", // odos
10
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
10
11
  "leverage_markets_start_id": "9",
11
12
  "crvUSD": "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E",
12
13
  "st_crvUSD": "0x0655977FEb2f289A4aB78af67BAB0d17aAb84367",
@@ -17,6 +18,7 @@ export const ALIASES_POLYGON = lowerCaseValues({
17
18
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
18
19
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
19
20
  "leverage_zap": "0x0000000000000000000000000000000000000000",
21
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
20
22
  });
21
23
  export const ALIASES_FANTOM = lowerCaseValues({
22
24
  "crv": "0x1E4F97b9f9F913c46F1632781732927B9019C68b",
@@ -24,6 +26,7 @@ export const ALIASES_FANTOM = lowerCaseValues({
24
26
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
25
27
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
26
28
  "leverage_zap": "0x0000000000000000000000000000000000000000",
29
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
27
30
  });
28
31
  export const ALIASES_AVALANCHE = lowerCaseValues({
29
32
  "crv": "0x47536F17F4fF30e64A96a7555826b8f9e66ec468",
@@ -31,6 +34,7 @@ export const ALIASES_AVALANCHE = lowerCaseValues({
31
34
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
32
35
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
33
36
  "leverage_zap": "0x0000000000000000000000000000000000000000",
37
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
34
38
  });
35
39
  export const ALIASES_ARBITRUM = lowerCaseValues({
36
40
  "crv": "0x11cDb42B0EB46D95f990BeDD4695A6e3fA034978",
@@ -39,6 +43,7 @@ export const ALIASES_ARBITRUM = lowerCaseValues({
39
43
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
40
44
  // "leverage_zap": "0x61C404B60ee9c5fB09F70F9A645DD38fE5b3A956", // 1inch
41
45
  "leverage_zap": "0xb7b240CFa985306563A301bC417Bc9715059a117", // odos
46
+ "leverage_zap_v2": "0x5b07Db9a85992c877b9fBeA6DCC4F79292577640",
42
47
  "leverage_markets_start_id": "9",
43
48
  });
44
49
  export const ALIASES_OPTIMISM = lowerCaseValues({
@@ -48,6 +53,7 @@ export const ALIASES_OPTIMISM = lowerCaseValues({
48
53
  "gauge_factory_old": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
49
54
  "gauge_factory": "0x871fBD4E01012e2E8457346059e8C189d664DbA4",
50
55
  "leverage_zap": "0x273e44B9a1841857d9360e8792bB59f9e1FfE9Da",
56
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
51
57
  "leverage_markets_start_id": "0",
52
58
  "gas_oracle": '0xc0d3C0d3C0d3c0D3C0D3C0d3C0d3C0D3C0D3000f',
53
59
  "gas_oracle_blob": '0x420000000000000000000000000000000000000f',
@@ -58,6 +64,7 @@ export const ALIASES_XDAI = lowerCaseValues({
58
64
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
59
65
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
60
66
  "leverage_zap": "0x0000000000000000000000000000000000000000",
67
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
61
68
  });
62
69
  export const ALIASES_MOONBEAM = lowerCaseValues({
63
70
  "crv": "0x7C598c96D02398d89FbCb9d41Eab3DF0C16F227D",
@@ -65,6 +72,7 @@ export const ALIASES_MOONBEAM = lowerCaseValues({
65
72
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
66
73
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
67
74
  "leverage_zap": "0x0000000000000000000000000000000000000000",
75
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
68
76
  });
69
77
  export const ALIASES_AURORA = lowerCaseValues({
70
78
  "crv": "0x64D5BaF5ac030e2b7c435aDD967f787ae94D0205",
@@ -78,6 +86,7 @@ export const ALIASES_KAVA = lowerCaseValues({
78
86
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
79
87
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
80
88
  "leverage_zap": "0x0000000000000000000000000000000000000000",
89
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
81
90
  });
82
91
  export const ALIASES_CELO = lowerCaseValues({
83
92
  "crv": "0x0a7432cF27F1aE3825c313F3C81e7D3efD7639aB", // <--- TODO CHANGE
@@ -85,6 +94,7 @@ export const ALIASES_CELO = lowerCaseValues({
85
94
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
86
95
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
87
96
  "leverage_zap": "0x0000000000000000000000000000000000000000",
97
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
88
98
  });
89
99
  export const ALIASES_ZKSYNC = lowerCaseValues({
90
100
  "crv": "0x0a7432cF27F1aE3825c313F3C81e7D3efD7639aB", // <--- TODO CHANGE
@@ -92,6 +102,7 @@ export const ALIASES_ZKSYNC = lowerCaseValues({
92
102
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB", // <--- TODO CHANGE
93
103
  "gauge_factory": "0x0000000000000000000000000000000000000000",
94
104
  "leverage_zap": "0x0000000000000000000000000000000000000000",
105
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
95
106
  });
96
107
  export const ALIASES_BASE = lowerCaseValues({
97
108
  "crv": "0x8Ee73c484A26e0A5df2Ee2a4960B789967dd0415",
@@ -99,6 +110,7 @@ export const ALIASES_BASE = lowerCaseValues({
99
110
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB", // <--- TODO CHANGE
100
111
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
101
112
  "leverage_zap": "0x0000000000000000000000000000000000000000",
113
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
102
114
  });
103
115
  export const ALIASES_BSC = lowerCaseValues({
104
116
  "crv": "0x8Ee73c484A26e0A5df2Ee2a4960B789967dd0415", // <--- TODO CHANGE
@@ -106,6 +118,7 @@ export const ALIASES_BSC = lowerCaseValues({
106
118
  "gauge_controller": "0x0000000000000000000000000000000000000000", // <--- TODO CHANGE
107
119
  "gauge_factory": "0xabC000d88f23Bb45525E447528DBF656A9D55bf5",
108
120
  "leverage_zap": "0x0000000000000000000000000000000000000000",
121
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
109
122
  });
110
123
  export const ALIASES_FRAXTAL = lowerCaseValues({
111
124
  "crv": "0x331B9182088e2A7d6D3Fe4742AbA1fB231aEcc56",
@@ -114,6 +127,7 @@ export const ALIASES_FRAXTAL = lowerCaseValues({
114
127
  "gauge_factory_old": "0xeF672bD94913CB6f1d2812a6e18c1fFdEd8eFf5c",
115
128
  "gauge_factory": "0x0b8d6b6cefc7aa1c2852442e518443b1b22e1c52",
116
129
  "leverage_zap": "0x37c5ab57AF7100Bdc9B668d766e193CCbF6614FD", // odos
130
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
117
131
  "leverage_markets_start_id": "0",
118
132
  });
119
133
  export const ALIASES_SONIC = lowerCaseValues({
@@ -122,5 +136,6 @@ export const ALIASES_SONIC = lowerCaseValues({
122
136
  "gauge_controller": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
123
137
  "gauge_factory": "0xf3A431008396df8A8b2DF492C913706BDB0874ef",
124
138
  "leverage_zap": "0x5552b631e2aD801fAa129Aacf4B701071cC9D1f7", // odos
139
+ "leverage_zap_v2": "0x0000000000000000000000000000000000000000",
125
140
  "leverage_markets_start_id": "0",
126
141
  });
@@ -147,7 +147,7 @@ export function _getQuoteOdos(fromToken_1, toToken_1, _amount_1, blacklist_1, pa
147
147
  fromToken = "0x0000000000000000000000000000000000000000";
148
148
  if (ethers.getAddress(toToken) == "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE")
149
149
  toToken = "0x0000000000000000000000000000000000000000";
150
- const url = `https://prices.curve.finance/odos/quote?chain_id=${this.chainId}&from_address=${ethers.getAddress(fromToken)}` +
150
+ const url = `https://prices.curve.finance/odos/v3/quote?chain_id=${this.chainId}&from_address=${ethers.getAddress(fromToken)}` +
151
151
  `&to_address=${ethers.getAddress(toToken)}&amount=${_amount.toString()}&slippage=${slippage}&pathVizImage=${pathVizImage}` +
152
152
  `&caller_address=${ethers.getAddress(this.constants.ALIASES.leverage_zap)}&blacklist=${ethers.getAddress(blacklist)}`;
153
153
  const response = yield fetch(url, { headers: { "accept": "application/json" } });
@@ -218,4 +218,15 @@ export interface ILlamma {
218
218
  export interface IResponseApi {
219
219
  data: any;
220
220
  }
221
+ export interface IQuote {
222
+ outAmount: string;
223
+ priceImpact: number;
224
+ }
225
+ export interface ILeverageMetrics {
226
+ priceImpact: number;
227
+ bands: [number, number];
228
+ prices: string[];
229
+ health: string;
230
+ }
231
+ export type GetExpectedFn = (fromToken: string, toToken: string, amountIn: bigint, blacklist: string | string[]) => Promise<IQuote>;
221
232
  export {};
@@ -1,6 +1,7 @@
1
1
  import memoize from "memoizee";
2
2
  import type { Llamalend } from "../llamalend.js";
3
3
  import { IDict, TGas, TAmount, IReward, IQuoteOdos, IOneWayMarket, IPartialFrac } from "../interfaces.js";
4
+ import { ILeverageZapV2 } from "./interfaces/leverageZapV2.js";
4
5
  export declare class LendMarketTemplate {
5
6
  private llamalend;
6
7
  id: string;
@@ -252,6 +253,7 @@ export declare class LendMarketTemplate {
252
253
  repay: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<number>;
253
254
  };
254
255
  };
256
+ leverageZapV2: ILeverageZapV2;
255
257
  constructor(id: string, marketData: IOneWayMarket, llamalend: Llamalend);
256
258
  private _getMarketId;
257
259
  private vaultMaxDeposit;
@@ -357,7 +359,7 @@ export declare class LendMarketTemplate {
357
359
  collateral: string;
358
360
  borrowed: string;
359
361
  }>>;
360
- private _checkRange;
362
+ _checkRange(range: number): void;
361
363
  createLoanMaxRecv(collateral: number | string, range: number): Promise<string>;
362
364
  createLoanMaxRecvAllRanges: ((collateral: number | string) => Promise<{
363
365
  [index: number]: string;
@@ -367,8 +369,8 @@ export declare class LendMarketTemplate {
367
369
  getMaxRange(collateral: number | string, debt: number | string): Promise<number>;
368
370
  private _calcN1;
369
371
  private _calcN1AllRanges;
370
- private _getPrices;
371
- private _calcPrices;
372
+ _getPrices(_n2: bigint, _n1: bigint): Promise<string[]>;
373
+ _calcPrices(_n2: bigint, _n1: bigint): Promise<[string, string]>;
372
374
  private _createLoanBands;
373
375
  private _createLoanBandsAllRanges;
374
376
  createLoanBands(collateral: number | string, debt: number | string, range: number): Promise<[number, number]>;
@@ -522,4 +524,5 @@ export declare class LendMarketTemplate {
522
524
  currentPnL(userAddress?: string): Promise<Record<string, string>>;
523
525
  userBoost(address?: string): Promise<string>;
524
526
  forceUpdateUserState(newTx: string, userAddress?: string): Promise<void>;
527
+ getLlamalend(): Llamalend;
525
528
  }