@kamino-finance/klend-sdk 5.10.20 → 5.10.21

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.
@@ -24,6 +24,7 @@ import { FeeCalculation, Fees, ReserveDataType, ReserveFarmInfo, ReserveRewardYi
24
24
  import { Reserve, ReserveFields } from '../idl_codegen/accounts';
25
25
  import { BorrowRateCurve, CurvePointFields, ReserveConfig, UpdateConfigMode } from '../idl_codegen/types';
26
26
  import {
27
+ assertNever,
27
28
  calculateAPYFromAPR,
28
29
  getBorrowRate,
29
30
  lamportsToNumberDecimal,
@@ -1201,192 +1202,141 @@ export function updateReserveConfigIx(
1201
1202
  return ix;
1202
1203
  }
1203
1204
 
1204
- export function updateEntireReserveConfigIx(
1205
- marketWithAddress: MarketWithAddress,
1206
- reserveAddress: PublicKey,
1207
- reserveConfig: ReserveConfig,
1208
- programId: PublicKey
1209
- ): TransactionInstruction {
1210
- const layout = ReserveConfig.layout();
1211
- const data = Buffer.alloc(1000);
1212
- const len = layout.encode(reserveConfig.toEncodable(), data);
1213
- const value = Uint8Array.from([...data.subarray(0, len)]);
1205
+ type BaseReserveConfigKey = keyof ReturnType<typeof ReserveConfig.toEncodable>;
1214
1206
 
1215
- const args: UpdateReserveConfigArgs = {
1216
- mode: new anchor.BN(25),
1217
- value: value,
1218
- skipValidation: false,
1219
- };
1207
+ // Type that excludes reserved and padding fields
1208
+ type ReserveConfigKey = Exclude<BaseReserveConfigKey, ExcludedReserveConfigKey>;
1220
1209
 
1221
- const accounts: UpdateReserveConfigAccounts = {
1222
- lendingMarketOwner: marketWithAddress.state.lendingMarketOwner,
1223
- lendingMarket: marketWithAddress.address,
1224
- reserve: reserveAddress,
1225
- };
1210
+ const EXCLUDED_RESERVE_CONFIG_KEYS = ['reserved1', 'reserved2', 'reserved3'] as const;
1226
1211
 
1227
- const ix = updateReserveConfig(args, accounts, programId);
1212
+ export type ExcludedReserveConfigKey = (typeof EXCLUDED_RESERVE_CONFIG_KEYS)[number];
1228
1213
 
1229
- return ix;
1214
+ function isExcludedReserveConfigKey(value: unknown): value is ExcludedReserveConfigKey {
1215
+ return EXCLUDED_RESERVE_CONFIG_KEYS.includes(value as ExcludedReserveConfigKey);
1230
1216
  }
1231
1217
 
1232
- export function parseForChangesReserveConfigAndGetIxs(
1233
- marketWithAddress: MarketWithAddress,
1218
+ function handleConfigUpdate(
1219
+ key: ReserveConfigKey,
1234
1220
  reserve: Reserve | undefined,
1235
- reserveAddress: PublicKey,
1236
1221
  reserveConfig: ReserveConfig,
1237
- programId: PublicKey
1238
- ) {
1239
- const updateReserveIxnsArgs: { mode: number; value: Uint8Array }[] = [];
1240
- for (const key in reserveConfig.toEncodable()) {
1241
- if (key === 'borrowRateCurve') {
1222
+ updateReserveIxnsArgs: { mode: number; value: Uint8Array }[]
1223
+ ): void {
1224
+ switch (key) {
1225
+ case 'status':
1242
1226
  if (reserve === undefined) {
1243
1227
  updateReserveIxnsArgs.push({
1244
- mode: UpdateBorrowRateCurve.discriminator,
1245
- value: updateReserveConfigEncodedValue(UpdateBorrowRateCurve.discriminator, reserveConfig.borrowRateCurve),
1246
- });
1247
- } else {
1248
- for (let i = 0; i < reserveConfig.borrowRateCurve.points.length; i++) {
1249
- if (
1250
- reserve.config.borrowRateCurve.points[i].utilizationRateBps !==
1251
- reserveConfig.borrowRateCurve.points[i].utilizationRateBps ||
1252
- reserve.config.borrowRateCurve.points[i].borrowRateBps !==
1253
- reserveConfig.borrowRateCurve.points[i].borrowRateBps
1254
- ) {
1255
- updateReserveIxnsArgs.push({
1256
- mode: UpdateBorrowRateCurve.discriminator,
1257
- value: updateReserveConfigEncodedValue(
1258
- UpdateBorrowRateCurve.discriminator,
1259
- reserveConfig.borrowRateCurve
1260
- ),
1261
- });
1262
- break;
1263
- }
1264
- }
1265
- }
1266
- } else if (key === 'fees') {
1267
- if (reserve === undefined) {
1268
- updateReserveIxnsArgs.push({
1269
- mode: UpdateConfigMode.UpdateFeesBorrowFee.discriminator,
1270
- value: updateReserveConfigEncodedValue(
1271
- UpdateConfigMode.UpdateFeesBorrowFee.discriminator,
1272
- reserveConfig.fees.borrowFeeSf.toNumber()
1273
- ),
1274
- });
1275
- updateReserveIxnsArgs.push({
1276
- mode: UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator,
1277
- value: updateReserveConfigEncodedValue(
1278
- UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator,
1279
- reserveConfig.fees.flashLoanFeeSf.toNumber()
1280
- ),
1281
- });
1282
- } else if (!reserve.config.fees.borrowFeeSf.eq(reserveConfig.fees.borrowFeeSf)) {
1283
- updateReserveIxnsArgs.push({
1284
- mode: UpdateConfigMode.UpdateFeesBorrowFee.discriminator,
1228
+ mode: UpdateConfigMode.UpdateReserveStatus.discriminator,
1285
1229
  value: updateReserveConfigEncodedValue(
1286
- UpdateConfigMode.UpdateFeesBorrowFee.discriminator,
1287
- reserveConfig.fees.borrowFeeSf.toNumber()
1230
+ UpdateConfigMode.UpdateReserveStatus.discriminator,
1231
+ reserveConfig.status
1288
1232
  ),
1289
1233
  });
1290
- } else if (!reserve.config.fees.flashLoanFeeSf.eq(reserveConfig.fees.flashLoanFeeSf)) {
1234
+ } else if (reserve.config.status !== reserveConfig.status) {
1291
1235
  updateReserveIxnsArgs.push({
1292
- mode: UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator,
1236
+ mode: UpdateConfigMode.UpdateReserveStatus.discriminator,
1293
1237
  value: updateReserveConfigEncodedValue(
1294
- UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator,
1295
- reserveConfig.fees.flashLoanFeeSf.toNumber()
1238
+ UpdateConfigMode.UpdateReserveStatus.discriminator,
1239
+ reserveConfig.status
1296
1240
  ),
1297
1241
  });
1298
1242
  }
1299
- } else if (key === 'depositLimit') {
1243
+ break;
1244
+ case 'assetTier':
1300
1245
  if (reserve === undefined) {
1301
1246
  updateReserveIxnsArgs.push({
1302
- mode: UpdateConfigMode.UpdateDepositLimit.discriminator,
1247
+ mode: UpdateConfigMode.UpdateAssetTier.discriminator,
1303
1248
  value: updateReserveConfigEncodedValue(
1304
- UpdateConfigMode.UpdateDepositLimit.discriminator,
1305
- reserveConfig.depositLimit.toNumber()
1249
+ UpdateConfigMode.UpdateAssetTier.discriminator,
1250
+ reserveConfig.assetTier
1306
1251
  ),
1307
1252
  });
1308
- } else if (!reserve.config.depositLimit.eq(reserveConfig.depositLimit)) {
1253
+ } else if (reserve.config.assetTier !== reserveConfig.assetTier) {
1309
1254
  updateReserveIxnsArgs.push({
1310
- mode: UpdateConfigMode.UpdateDepositLimit.discriminator,
1255
+ mode: UpdateConfigMode.UpdateAssetTier.discriminator,
1311
1256
  value: updateReserveConfigEncodedValue(
1312
- UpdateConfigMode.UpdateDepositLimit.discriminator,
1313
- reserveConfig.depositLimit.toNumber()
1257
+ UpdateConfigMode.UpdateAssetTier.discriminator,
1258
+ reserveConfig.assetTier
1314
1259
  ),
1315
1260
  });
1316
1261
  }
1317
- } else if (key === 'borrowLimit') {
1262
+ break;
1263
+ case 'hostFixedInterestRateBps':
1318
1264
  if (reserve === undefined) {
1319
1265
  updateReserveIxnsArgs.push({
1320
- mode: UpdateConfigMode.UpdateBorrowLimit.discriminator,
1266
+ mode: UpdateConfigMode.UpdateHostFixedInterestRateBps.discriminator,
1321
1267
  value: updateReserveConfigEncodedValue(
1322
- UpdateConfigMode.UpdateBorrowLimit.discriminator,
1323
- reserveConfig.borrowLimit.toNumber()
1268
+ UpdateConfigMode.UpdateHostFixedInterestRateBps.discriminator,
1269
+ reserveConfig.hostFixedInterestRateBps
1324
1270
  ),
1325
1271
  });
1326
- } else if (!reserve.config.borrowLimit.eq(reserveConfig.borrowLimit)) {
1272
+ } else if (reserve.config.hostFixedInterestRateBps !== reserveConfig.hostFixedInterestRateBps) {
1327
1273
  updateReserveIxnsArgs.push({
1328
- mode: UpdateConfigMode.UpdateBorrowLimit.discriminator,
1274
+ mode: UpdateConfigMode.UpdateHostFixedInterestRateBps.discriminator,
1329
1275
  value: updateReserveConfigEncodedValue(
1330
- UpdateConfigMode.UpdateBorrowLimit.discriminator,
1331
- reserveConfig.borrowLimit.toNumber()
1276
+ UpdateConfigMode.UpdateHostFixedInterestRateBps.discriminator,
1277
+ reserveConfig.hostFixedInterestRateBps
1332
1278
  ),
1333
1279
  });
1334
1280
  }
1335
- } else if (key === 'maxLiquidationBonusBps') {
1281
+ break;
1282
+ case 'protocolTakeRatePct':
1336
1283
  if (reserve === undefined) {
1337
1284
  updateReserveIxnsArgs.push({
1338
- mode: UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator,
1285
+ mode: UpdateConfigMode.UpdateProtocolTakeRate.discriminator,
1339
1286
  value: updateReserveConfigEncodedValue(
1340
- UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator,
1341
- reserveConfig.maxLiquidationBonusBps
1287
+ UpdateConfigMode.UpdateProtocolTakeRate.discriminator,
1288
+ reserveConfig.protocolTakeRatePct
1342
1289
  ),
1343
1290
  });
1344
- } else if (reserve.config.maxLiquidationBonusBps !== reserveConfig.maxLiquidationBonusBps) {
1291
+ } else if (reserve.config.protocolTakeRatePct !== reserveConfig.protocolTakeRatePct) {
1345
1292
  updateReserveIxnsArgs.push({
1346
- mode: UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator,
1293
+ mode: UpdateConfigMode.UpdateProtocolTakeRate.discriminator,
1347
1294
  value: updateReserveConfigEncodedValue(
1348
- UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator,
1349
- reserveConfig.maxLiquidationBonusBps
1295
+ UpdateConfigMode.UpdateProtocolTakeRate.discriminator,
1296
+ reserveConfig.protocolTakeRatePct
1350
1297
  ),
1351
1298
  });
1352
1299
  }
1353
- } else if (key === 'minLiquidationBonusBps') {
1300
+ break;
1301
+ case 'protocolLiquidationFeePct':
1354
1302
  if (reserve === undefined) {
1355
1303
  updateReserveIxnsArgs.push({
1356
- mode: UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator,
1304
+ mode: UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator,
1357
1305
  value: updateReserveConfigEncodedValue(
1358
- UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator,
1359
- reserveConfig.minLiquidationBonusBps
1306
+ UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator,
1307
+ reserveConfig.protocolLiquidationFeePct
1360
1308
  ),
1361
1309
  });
1362
- } else if (reserve.config.minLiquidationBonusBps !== reserveConfig.minLiquidationBonusBps) {
1310
+ } else if (reserve.config.protocolLiquidationFeePct !== reserveConfig.protocolLiquidationFeePct) {
1363
1311
  updateReserveIxnsArgs.push({
1364
- mode: UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator,
1312
+ mode: UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator,
1365
1313
  value: updateReserveConfigEncodedValue(
1366
- UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator,
1367
- reserveConfig.minLiquidationBonusBps
1314
+ UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator,
1315
+ reserveConfig.protocolLiquidationFeePct
1368
1316
  ),
1369
1317
  });
1370
1318
  }
1371
- } else if (key === 'badDebtLiquidationBonusBps') {
1319
+ break;
1320
+ case 'loanToValuePct':
1372
1321
  if (reserve === undefined) {
1373
1322
  updateReserveIxnsArgs.push({
1374
- mode: UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator,
1323
+ mode: UpdateConfigMode.UpdateLoanToValuePct.discriminator,
1375
1324
  value: updateReserveConfigEncodedValue(
1376
- UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator,
1377
- reserveConfig.badDebtLiquidationBonusBps
1325
+ UpdateConfigMode.UpdateLoanToValuePct.discriminator,
1326
+ reserveConfig.loanToValuePct
1378
1327
  ),
1379
1328
  });
1380
- } else if (reserve.config.badDebtLiquidationBonusBps !== reserveConfig.badDebtLiquidationBonusBps) {
1329
+ } else if (reserve.config.loanToValuePct !== reserveConfig.loanToValuePct) {
1381
1330
  updateReserveIxnsArgs.push({
1382
- mode: UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator,
1331
+ mode: UpdateConfigMode.UpdateLoanToValuePct.discriminator,
1383
1332
  value: updateReserveConfigEncodedValue(
1384
- UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator,
1385
- reserveConfig.badDebtLiquidationBonusBps
1333
+ UpdateConfigMode.UpdateLoanToValuePct.discriminator,
1334
+ reserveConfig.loanToValuePct
1386
1335
  ),
1387
1336
  });
1388
1337
  }
1389
- } else if (key === 'liquidationThresholdPct') {
1338
+ break;
1339
+ case 'liquidationThresholdPct':
1390
1340
  if (reserve === undefined) {
1391
1341
  updateReserveIxnsArgs.push({
1392
1342
  mode: UpdateConfigMode.UpdateLiquidationThresholdPct.discriminator,
@@ -1404,81 +1354,84 @@ export function parseForChangesReserveConfigAndGetIxs(
1404
1354
  ),
1405
1355
  });
1406
1356
  }
1407
- } else if (key === 'protocolTakeRatePct') {
1357
+ break;
1358
+ case 'minLiquidationBonusBps':
1408
1359
  if (reserve === undefined) {
1409
1360
  updateReserveIxnsArgs.push({
1410
- mode: UpdateConfigMode.UpdateProtocolTakeRate.discriminator,
1361
+ mode: UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator,
1411
1362
  value: updateReserveConfigEncodedValue(
1412
- UpdateConfigMode.UpdateProtocolTakeRate.discriminator,
1413
- reserveConfig.protocolTakeRatePct
1363
+ UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator,
1364
+ reserveConfig.minLiquidationBonusBps
1414
1365
  ),
1415
1366
  });
1416
- } else if (reserve.config.protocolTakeRatePct !== reserveConfig.protocolTakeRatePct) {
1367
+ } else if (reserve.config.minLiquidationBonusBps !== reserveConfig.minLiquidationBonusBps) {
1417
1368
  updateReserveIxnsArgs.push({
1418
- mode: UpdateConfigMode.UpdateProtocolTakeRate.discriminator,
1369
+ mode: UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator,
1419
1370
  value: updateReserveConfigEncodedValue(
1420
- UpdateConfigMode.UpdateProtocolTakeRate.discriminator,
1421
- reserveConfig.protocolTakeRatePct
1371
+ UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator,
1372
+ reserveConfig.minLiquidationBonusBps
1422
1373
  ),
1423
1374
  });
1424
1375
  }
1425
- } else if (key === 'status') {
1376
+ break;
1377
+ case 'maxLiquidationBonusBps':
1426
1378
  if (reserve === undefined) {
1427
1379
  updateReserveIxnsArgs.push({
1428
- mode: UpdateConfigMode.UpdateReserveStatus.discriminator,
1380
+ mode: UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator,
1429
1381
  value: updateReserveConfigEncodedValue(
1430
- UpdateConfigMode.UpdateReserveStatus.discriminator,
1431
- reserveConfig.status
1382
+ UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator,
1383
+ reserveConfig.maxLiquidationBonusBps
1432
1384
  ),
1433
1385
  });
1434
- } else if (reserve.config.status !== reserveConfig.status) {
1386
+ } else if (reserve.config.maxLiquidationBonusBps !== reserveConfig.maxLiquidationBonusBps) {
1435
1387
  updateReserveIxnsArgs.push({
1436
- mode: UpdateConfigMode.UpdateReserveStatus.discriminator,
1388
+ mode: UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator,
1437
1389
  value: updateReserveConfigEncodedValue(
1438
- UpdateConfigMode.UpdateReserveStatus.discriminator,
1439
- reserveConfig.status
1390
+ UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator,
1391
+ reserveConfig.maxLiquidationBonusBps
1440
1392
  ),
1441
1393
  });
1442
1394
  }
1443
- } else if (key === 'disableUsageAsCollOutsideEmode') {
1395
+ break;
1396
+ case 'badDebtLiquidationBonusBps':
1444
1397
  if (reserve === undefined) {
1445
1398
  updateReserveIxnsArgs.push({
1446
- mode: UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator,
1399
+ mode: UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator,
1447
1400
  value: updateReserveConfigEncodedValue(
1448
- UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator,
1449
- reserveConfig.disableUsageAsCollOutsideEmode
1401
+ UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator,
1402
+ reserveConfig.badDebtLiquidationBonusBps
1450
1403
  ),
1451
1404
  });
1452
- } else if (reserve.config.disableUsageAsCollOutsideEmode !== reserveConfig.disableUsageAsCollOutsideEmode) {
1405
+ } else if (reserve.config.badDebtLiquidationBonusBps !== reserveConfig.badDebtLiquidationBonusBps) {
1453
1406
  updateReserveIxnsArgs.push({
1454
- mode: UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator,
1407
+ mode: UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator,
1455
1408
  value: updateReserveConfigEncodedValue(
1456
- UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator,
1457
- reserveConfig.disableUsageAsCollOutsideEmode
1409
+ UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator,
1410
+ reserveConfig.badDebtLiquidationBonusBps
1458
1411
  ),
1459
1412
  });
1460
1413
  }
1461
- } else if (key === 'utilizationLimitBlockBorrowingAbovePct') {
1414
+ break;
1415
+ case 'deleveragingMarginCallPeriodSecs':
1462
1416
  if (reserve === undefined) {
1463
1417
  updateReserveIxnsArgs.push({
1464
- mode: UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator,
1418
+ mode: UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator,
1465
1419
  value: updateReserveConfigEncodedValue(
1466
- UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator,
1467
- reserveConfig.utilizationLimitBlockBorrowingAbovePct
1420
+ UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator,
1421
+ reserveConfig.deleveragingMarginCallPeriodSecs.toNumber()
1468
1422
  ),
1469
1423
  });
1470
- } else if (
1471
- reserve.config.utilizationLimitBlockBorrowingAbovePct !== reserveConfig.utilizationLimitBlockBorrowingAbovePct
1472
- ) {
1424
+ } else if (!reserve.config.deleveragingMarginCallPeriodSecs.eq(reserveConfig.deleveragingMarginCallPeriodSecs)) {
1473
1425
  updateReserveIxnsArgs.push({
1474
- mode: UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator,
1426
+ mode: UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator,
1475
1427
  value: updateReserveConfigEncodedValue(
1476
- UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator,
1477
- reserveConfig.utilizationLimitBlockBorrowingAbovePct
1428
+ UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator,
1429
+ reserveConfig.deleveragingMarginCallPeriodSecs.toNumber()
1478
1430
  ),
1479
1431
  });
1480
1432
  }
1481
- } else if (key === 'deleveragingThresholdDecreaseBpsPerDay') {
1433
+ break;
1434
+ case 'deleveragingThresholdDecreaseBpsPerDay':
1482
1435
  if (reserve === undefined) {
1483
1436
  updateReserveIxnsArgs.push({
1484
1437
  mode: UpdateConfigMode.UpdateDeleveragingThresholdDecreaseBpsPerDay.discriminator,
@@ -1498,146 +1451,68 @@ export function parseForChangesReserveConfigAndGetIxs(
1498
1451
  ),
1499
1452
  });
1500
1453
  }
1501
- } else if (key === 'deleveragingBonusIncreaseBpsPerDay') {
1502
- if (reserve === undefined) {
1503
- updateReserveIxnsArgs.push({
1504
- mode: UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator,
1505
- value: updateReserveConfigEncodedValue(
1506
- UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator,
1507
- reserveConfig.deleveragingBonusIncreaseBpsPerDay.toNumber()
1508
- ),
1509
- });
1510
- } else if (
1511
- !reserve.config.deleveragingBonusIncreaseBpsPerDay.eq(reserveConfig.deleveragingBonusIncreaseBpsPerDay)
1512
- ) {
1513
- updateReserveIxnsArgs.push({
1514
- mode: UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator,
1515
- value: updateReserveConfigEncodedValue(
1516
- UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator,
1517
- reserveConfig.deleveragingBonusIncreaseBpsPerDay.toNumber()
1518
- ),
1519
- });
1520
- }
1521
- } else if (key === 'autodeleverageEnabled') {
1522
- if (reserve === undefined) {
1523
- updateReserveIxnsArgs.push({
1524
- mode: UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator,
1525
- value: updateReserveConfigEncodedValue(
1526
- UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator,
1527
- reserveConfig.autodeleverageEnabled
1528
- ),
1529
- });
1530
- } else if (reserve.config.autodeleverageEnabled != reserveConfig.autodeleverageEnabled) {
1531
- updateReserveIxnsArgs.push({
1532
- mode: UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator,
1533
- value: updateReserveConfigEncodedValue(
1534
- UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator,
1535
- reserveConfig.autodeleverageEnabled
1536
- ),
1537
- });
1538
- }
1539
- } else if (key === 'depositWithdrawalCap') {
1454
+ break;
1455
+ case 'fees':
1540
1456
  if (reserve === undefined) {
1541
1457
  updateReserveIxnsArgs.push({
1542
- mode: UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator,
1543
- value: updateReserveConfigEncodedValue(UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator, [
1544
- reserveConfig.depositWithdrawalCap.configCapacity.toNumber(),
1545
- reserveConfig.depositWithdrawalCap.configIntervalLengthSeconds.toNumber(),
1546
- ]),
1547
- });
1548
- updateReserveIxnsArgs.push({
1549
- mode: UpdateConfigMode.UpdateDepositWithdrawalCapCurrentTotal.discriminator,
1458
+ mode: UpdateConfigMode.UpdateFeesBorrowFee.discriminator,
1550
1459
  value: updateReserveConfigEncodedValue(
1551
- UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator,
1552
- reserveConfig.depositWithdrawalCap.currentTotal.toNumber()
1460
+ UpdateConfigMode.UpdateFeesBorrowFee.discriminator,
1461
+ reserveConfig.fees.borrowFeeSf.toNumber()
1553
1462
  ),
1554
1463
  });
1555
- } else if (
1556
- !reserve.config.depositWithdrawalCap.configCapacity.eq(reserveConfig.depositWithdrawalCap.configCapacity) ||
1557
- !reserve.config.depositWithdrawalCap.configIntervalLengthSeconds.eq(
1558
- reserveConfig.depositWithdrawalCap.configIntervalLengthSeconds
1559
- )
1560
- ) {
1561
- updateReserveIxnsArgs.push({
1562
- mode: UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator,
1563
- value: updateReserveConfigEncodedValue(UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator, [
1564
- reserveConfig.depositWithdrawalCap.configCapacity.toNumber(),
1565
- reserveConfig.depositWithdrawalCap.configIntervalLengthSeconds.toNumber(),
1566
- ]),
1567
- });
1568
- } else if (
1569
- !reserve.config.depositWithdrawalCap.currentTotal.eq(reserveConfig.depositWithdrawalCap.currentTotal)
1570
- ) {
1571
1464
  updateReserveIxnsArgs.push({
1572
- mode: UpdateConfigMode.UpdateDepositWithdrawalCapCurrentTotal.discriminator,
1465
+ mode: UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator,
1573
1466
  value: updateReserveConfigEncodedValue(
1574
- UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator,
1575
- reserveConfig.depositWithdrawalCap.currentTotal.toNumber()
1467
+ UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator,
1468
+ reserveConfig.fees.flashLoanFeeSf.toNumber()
1576
1469
  ),
1577
1470
  });
1578
- }
1579
- } else if (key === 'debtWithdrawalCap') {
1580
- if (reserve === undefined) {
1581
- updateReserveIxnsArgs.push({
1582
- mode: UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator,
1583
- value: updateReserveConfigEncodedValue(UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator, [
1584
- reserveConfig.debtWithdrawalCap.configCapacity.toNumber(),
1585
- reserveConfig.debtWithdrawalCap.configIntervalLengthSeconds.toNumber(),
1586
- ]),
1587
- });
1471
+ } else if (!reserve.config.fees.borrowFeeSf.eq(reserveConfig.fees.borrowFeeSf)) {
1588
1472
  updateReserveIxnsArgs.push({
1589
- mode: UpdateConfigMode.UpdateDebtWithdrawalCapCurrentTotal.discriminator,
1473
+ mode: UpdateConfigMode.UpdateFeesBorrowFee.discriminator,
1590
1474
  value: updateReserveConfigEncodedValue(
1591
- UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator,
1592
- reserveConfig.debtWithdrawalCap.currentTotal.toNumber()
1475
+ UpdateConfigMode.UpdateFeesBorrowFee.discriminator,
1476
+ reserveConfig.fees.borrowFeeSf.toNumber()
1593
1477
  ),
1594
1478
  });
1595
- } else if (
1596
- !reserve.config.debtWithdrawalCap.configCapacity.eq(reserveConfig.debtWithdrawalCap.configCapacity) ||
1597
- !reserve.config.debtWithdrawalCap.configIntervalLengthSeconds.eq(
1598
- reserveConfig.debtWithdrawalCap.configIntervalLengthSeconds
1599
- )
1600
- ) {
1601
- updateReserveIxnsArgs.push({
1602
- mode: UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator,
1603
- value: updateReserveConfigEncodedValue(UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator, [
1604
- reserveConfig.debtWithdrawalCap.configCapacity.toNumber(),
1605
- reserveConfig.debtWithdrawalCap.configIntervalLengthSeconds.toNumber(),
1606
- ]),
1607
- });
1608
- } else if (!reserve.config.debtWithdrawalCap.currentTotal.eq(reserveConfig.debtWithdrawalCap.currentTotal)) {
1479
+ } else if (!reserve.config.fees.flashLoanFeeSf.eq(reserveConfig.fees.flashLoanFeeSf)) {
1609
1480
  updateReserveIxnsArgs.push({
1610
- mode: UpdateConfigMode.UpdateDebtWithdrawalCapCurrentTotal.discriminator,
1481
+ mode: UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator,
1611
1482
  value: updateReserveConfigEncodedValue(
1612
- UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator,
1613
- reserveConfig.debtWithdrawalCap.currentTotal.toNumber()
1483
+ UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator,
1484
+ reserveConfig.fees.flashLoanFeeSf.toNumber()
1614
1485
  ),
1615
1486
  });
1616
1487
  }
1617
- } else if (key === 'elevationGroups') {
1488
+ break;
1489
+ case 'borrowRateCurve':
1618
1490
  if (reserve === undefined) {
1619
1491
  updateReserveIxnsArgs.push({
1620
- mode: UpdateConfigMode.UpdateElevationGroup.discriminator,
1621
- value: updateReserveConfigEncodedValue(
1622
- UpdateConfigMode.UpdateElevationGroup.discriminator,
1623
- reserveConfig.elevationGroups
1624
- ),
1492
+ mode: UpdateBorrowRateCurve.discriminator,
1493
+ value: updateReserveConfigEncodedValue(UpdateBorrowRateCurve.discriminator, reserveConfig.borrowRateCurve),
1625
1494
  });
1626
1495
  } else {
1627
- for (let i = 0; i < reserveConfig.elevationGroups.length; i++) {
1628
- if (reserve.config.elevationGroups[i] !== reserveConfig.elevationGroups[i]) {
1496
+ for (let i = 0; i < reserveConfig.borrowRateCurve.points.length; i++) {
1497
+ if (
1498
+ reserve.config.borrowRateCurve.points[i].utilizationRateBps !==
1499
+ reserveConfig.borrowRateCurve.points[i].utilizationRateBps ||
1500
+ reserve.config.borrowRateCurve.points[i].borrowRateBps !==
1501
+ reserveConfig.borrowRateCurve.points[i].borrowRateBps
1502
+ ) {
1629
1503
  updateReserveIxnsArgs.push({
1630
- mode: UpdateConfigMode.UpdateElevationGroup.discriminator,
1504
+ mode: UpdateBorrowRateCurve.discriminator,
1631
1505
  value: updateReserveConfigEncodedValue(
1632
- UpdateConfigMode.UpdateElevationGroup.discriminator,
1633
- reserveConfig.elevationGroups
1506
+ UpdateBorrowRateCurve.discriminator,
1507
+ reserveConfig.borrowRateCurve
1634
1508
  ),
1635
1509
  });
1636
1510
  break;
1637
1511
  }
1638
1512
  }
1639
1513
  }
1640
- } else if (key === 'borrowFactorPct') {
1514
+ break;
1515
+ case 'borrowFactorPct':
1641
1516
  if (reserve === undefined) {
1642
1517
  updateReserveIxnsArgs.push({
1643
1518
  mode: UpdateConfigMode.UpdateBorrowFactor.discriminator,
@@ -1655,79 +1530,46 @@ export function parseForChangesReserveConfigAndGetIxs(
1655
1530
  ),
1656
1531
  });
1657
1532
  }
1658
- } else if (key === 'loanToValuePct') {
1659
- if (reserve === undefined) {
1660
- updateReserveIxnsArgs.push({
1661
- mode: UpdateConfigMode.UpdateLoanToValuePct.discriminator,
1662
- value: updateReserveConfigEncodedValue(
1663
- UpdateConfigMode.UpdateLoanToValuePct.discriminator,
1664
- reserveConfig.loanToValuePct
1665
- ),
1666
- });
1667
- } else if (reserve.config.loanToValuePct !== reserveConfig.loanToValuePct) {
1668
- updateReserveIxnsArgs.push({
1669
- mode: UpdateConfigMode.UpdateLoanToValuePct.discriminator,
1670
- value: updateReserveConfigEncodedValue(
1671
- UpdateConfigMode.UpdateLoanToValuePct.discriminator,
1672
- reserveConfig.loanToValuePct
1673
- ),
1674
- });
1675
- }
1676
- } else if (key === 'protocolLiquidationFeePct') {
1677
- if (reserve === undefined) {
1678
- updateReserveIxnsArgs.push({
1679
- mode: UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator,
1680
- value: updateReserveConfigEncodedValue(
1681
- UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator,
1682
- reserveConfig.protocolLiquidationFeePct
1683
- ),
1684
- });
1685
- } else if (reserve.config.protocolLiquidationFeePct !== reserveConfig.protocolLiquidationFeePct) {
1686
- updateReserveIxnsArgs.push({
1687
- mode: UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator,
1688
- value: updateReserveConfigEncodedValue(
1689
- UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator,
1690
- reserveConfig.protocolLiquidationFeePct
1691
- ),
1692
- });
1693
- }
1694
- } else if (key === 'deleveragingMarginCallPeriodSecs') {
1533
+ break;
1534
+ case 'depositLimit':
1695
1535
  if (reserve === undefined) {
1696
1536
  updateReserveIxnsArgs.push({
1697
- mode: UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator,
1537
+ mode: UpdateConfigMode.UpdateDepositLimit.discriminator,
1698
1538
  value: updateReserveConfigEncodedValue(
1699
- UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator,
1700
- reserveConfig.deleveragingMarginCallPeriodSecs.toNumber()
1539
+ UpdateConfigMode.UpdateDepositLimit.discriminator,
1540
+ reserveConfig.depositLimit.toNumber()
1701
1541
  ),
1702
1542
  });
1703
- } else if (!reserve.config.deleveragingMarginCallPeriodSecs.eq(reserveConfig.deleveragingMarginCallPeriodSecs)) {
1543
+ } else if (!reserve.config.depositLimit.eq(reserveConfig.depositLimit)) {
1704
1544
  updateReserveIxnsArgs.push({
1705
- mode: UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator,
1545
+ mode: UpdateConfigMode.UpdateDepositLimit.discriminator,
1706
1546
  value: updateReserveConfigEncodedValue(
1707
- UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator,
1708
- reserveConfig.deleveragingMarginCallPeriodSecs.toNumber()
1547
+ UpdateConfigMode.UpdateDepositLimit.discriminator,
1548
+ reserveConfig.depositLimit.toNumber()
1709
1549
  ),
1710
1550
  });
1711
1551
  }
1712
- } else if (key === 'assetTier') {
1552
+ break;
1553
+ case 'borrowLimit':
1713
1554
  if (reserve === undefined) {
1714
1555
  updateReserveIxnsArgs.push({
1715
- mode: UpdateConfigMode.UpdateAssetTier.discriminator,
1556
+ mode: UpdateConfigMode.UpdateBorrowLimit.discriminator,
1716
1557
  value: updateReserveConfigEncodedValue(
1717
- UpdateConfigMode.UpdateAssetTier.discriminator,
1718
- reserveConfig.assetTier
1558
+ UpdateConfigMode.UpdateBorrowLimit.discriminator,
1559
+ reserveConfig.borrowLimit.toNumber()
1719
1560
  ),
1720
1561
  });
1721
- } else if (reserve.config.assetTier !== reserveConfig.assetTier) {
1562
+ } else if (!reserve.config.borrowLimit.eq(reserveConfig.borrowLimit)) {
1722
1563
  updateReserveIxnsArgs.push({
1723
- mode: UpdateConfigMode.UpdateAssetTier.discriminator,
1564
+ mode: UpdateConfigMode.UpdateBorrowLimit.discriminator,
1724
1565
  value: updateReserveConfigEncodedValue(
1725
- UpdateConfigMode.UpdateAssetTier.discriminator,
1726
- reserveConfig.assetTier
1566
+ UpdateConfigMode.UpdateBorrowLimit.discriminator,
1567
+ reserveConfig.borrowLimit.toNumber()
1727
1568
  ),
1728
1569
  });
1729
1570
  }
1730
- } else if (key === 'tokenInfo') {
1571
+ break;
1572
+ case 'tokenInfo':
1731
1573
  const tokenInfo = reserveConfig.tokenInfo;
1732
1574
  if (reserve === undefined) {
1733
1575
  updateReserveIxnsArgs.push({
@@ -1961,8 +1803,289 @@ export function parseForChangesReserveConfigAndGetIxs(
1961
1803
  });
1962
1804
  }
1963
1805
  }
1806
+ break;
1807
+ case 'depositWithdrawalCap':
1808
+ if (reserve === undefined) {
1809
+ updateReserveIxnsArgs.push({
1810
+ mode: UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator,
1811
+ value: updateReserveConfigEncodedValue(UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator, [
1812
+ reserveConfig.depositWithdrawalCap.configCapacity.toNumber(),
1813
+ reserveConfig.depositWithdrawalCap.configIntervalLengthSeconds.toNumber(),
1814
+ ]),
1815
+ });
1816
+ updateReserveIxnsArgs.push({
1817
+ mode: UpdateConfigMode.UpdateDepositWithdrawalCapCurrentTotal.discriminator,
1818
+ value: updateReserveConfigEncodedValue(
1819
+ UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator,
1820
+ reserveConfig.depositWithdrawalCap.currentTotal.toNumber()
1821
+ ),
1822
+ });
1823
+ } else if (
1824
+ !reserve.config.depositWithdrawalCap.configCapacity.eq(reserveConfig.depositWithdrawalCap.configCapacity) ||
1825
+ !reserve.config.depositWithdrawalCap.configIntervalLengthSeconds.eq(
1826
+ reserveConfig.depositWithdrawalCap.configIntervalLengthSeconds
1827
+ )
1828
+ ) {
1829
+ updateReserveIxnsArgs.push({
1830
+ mode: UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator,
1831
+ value: updateReserveConfigEncodedValue(UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator, [
1832
+ reserveConfig.depositWithdrawalCap.configCapacity.toNumber(),
1833
+ reserveConfig.depositWithdrawalCap.configIntervalLengthSeconds.toNumber(),
1834
+ ]),
1835
+ });
1836
+ } else if (
1837
+ !reserve.config.depositWithdrawalCap.currentTotal.eq(reserveConfig.depositWithdrawalCap.currentTotal)
1838
+ ) {
1839
+ updateReserveIxnsArgs.push({
1840
+ mode: UpdateConfigMode.UpdateDepositWithdrawalCapCurrentTotal.discriminator,
1841
+ value: updateReserveConfigEncodedValue(
1842
+ UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator,
1843
+ reserveConfig.depositWithdrawalCap.currentTotal.toNumber()
1844
+ ),
1845
+ });
1846
+ }
1847
+ break;
1848
+ case 'debtWithdrawalCap':
1849
+ if (reserve === undefined) {
1850
+ updateReserveIxnsArgs.push({
1851
+ mode: UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator,
1852
+ value: updateReserveConfigEncodedValue(UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator, [
1853
+ reserveConfig.debtWithdrawalCap.configCapacity.toNumber(),
1854
+ reserveConfig.debtWithdrawalCap.configIntervalLengthSeconds.toNumber(),
1855
+ ]),
1856
+ });
1857
+ updateReserveIxnsArgs.push({
1858
+ mode: UpdateConfigMode.UpdateDebtWithdrawalCapCurrentTotal.discriminator,
1859
+ value: updateReserveConfigEncodedValue(
1860
+ UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator,
1861
+ reserveConfig.debtWithdrawalCap.currentTotal.toNumber()
1862
+ ),
1863
+ });
1864
+ } else if (
1865
+ !reserve.config.debtWithdrawalCap.configCapacity.eq(reserveConfig.debtWithdrawalCap.configCapacity) ||
1866
+ !reserve.config.debtWithdrawalCap.configIntervalLengthSeconds.eq(
1867
+ reserveConfig.debtWithdrawalCap.configIntervalLengthSeconds
1868
+ )
1869
+ ) {
1870
+ updateReserveIxnsArgs.push({
1871
+ mode: UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator,
1872
+ value: updateReserveConfigEncodedValue(UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator, [
1873
+ reserveConfig.debtWithdrawalCap.configCapacity.toNumber(),
1874
+ reserveConfig.debtWithdrawalCap.configIntervalLengthSeconds.toNumber(),
1875
+ ]),
1876
+ });
1877
+ } else if (!reserve.config.debtWithdrawalCap.currentTotal.eq(reserveConfig.debtWithdrawalCap.currentTotal)) {
1878
+ updateReserveIxnsArgs.push({
1879
+ mode: UpdateConfigMode.UpdateDebtWithdrawalCapCurrentTotal.discriminator,
1880
+ value: updateReserveConfigEncodedValue(
1881
+ UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator,
1882
+ reserveConfig.debtWithdrawalCap.currentTotal.toNumber()
1883
+ ),
1884
+ });
1885
+ }
1886
+ break;
1887
+ case 'elevationGroups':
1888
+ if (reserve === undefined) {
1889
+ updateReserveIxnsArgs.push({
1890
+ mode: UpdateConfigMode.UpdateElevationGroup.discriminator,
1891
+ value: updateReserveConfigEncodedValue(
1892
+ UpdateConfigMode.UpdateElevationGroup.discriminator,
1893
+ reserveConfig.elevationGroups
1894
+ ),
1895
+ });
1896
+ } else {
1897
+ for (let i = 0; i < reserveConfig.elevationGroups.length; i++) {
1898
+ if (reserve.config.elevationGroups[i] !== reserveConfig.elevationGroups[i]) {
1899
+ updateReserveIxnsArgs.push({
1900
+ mode: UpdateConfigMode.UpdateElevationGroup.discriminator,
1901
+ value: updateReserveConfigEncodedValue(
1902
+ UpdateConfigMode.UpdateElevationGroup.discriminator,
1903
+ reserveConfig.elevationGroups
1904
+ ),
1905
+ });
1906
+ break;
1907
+ }
1908
+ }
1909
+ }
1910
+ break;
1911
+ case 'disableUsageAsCollOutsideEmode':
1912
+ if (reserve === undefined) {
1913
+ updateReserveIxnsArgs.push({
1914
+ mode: UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator,
1915
+ value: updateReserveConfigEncodedValue(
1916
+ UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator,
1917
+ reserveConfig.disableUsageAsCollOutsideEmode
1918
+ ),
1919
+ });
1920
+ } else if (reserve.config.disableUsageAsCollOutsideEmode !== reserveConfig.disableUsageAsCollOutsideEmode) {
1921
+ updateReserveIxnsArgs.push({
1922
+ mode: UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator,
1923
+ value: updateReserveConfigEncodedValue(
1924
+ UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator,
1925
+ reserveConfig.disableUsageAsCollOutsideEmode
1926
+ ),
1927
+ });
1928
+ }
1929
+ break;
1930
+ case 'utilizationLimitBlockBorrowingAbovePct':
1931
+ if (reserve === undefined) {
1932
+ updateReserveIxnsArgs.push({
1933
+ mode: UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator,
1934
+ value: updateReserveConfigEncodedValue(
1935
+ UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator,
1936
+ reserveConfig.utilizationLimitBlockBorrowingAbovePct
1937
+ ),
1938
+ });
1939
+ } else if (
1940
+ reserve.config.utilizationLimitBlockBorrowingAbovePct !== reserveConfig.utilizationLimitBlockBorrowingAbovePct
1941
+ ) {
1942
+ updateReserveIxnsArgs.push({
1943
+ mode: UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator,
1944
+ value: updateReserveConfigEncodedValue(
1945
+ UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator,
1946
+ reserveConfig.utilizationLimitBlockBorrowingAbovePct
1947
+ ),
1948
+ });
1949
+ }
1950
+ break;
1951
+ case 'autodeleverageEnabled':
1952
+ if (reserve === undefined) {
1953
+ updateReserveIxnsArgs.push({
1954
+ mode: UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator,
1955
+ value: updateReserveConfigEncodedValue(
1956
+ UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator,
1957
+ reserveConfig.autodeleverageEnabled
1958
+ ),
1959
+ });
1960
+ } else if (reserve.config.autodeleverageEnabled !== reserveConfig.autodeleverageEnabled) {
1961
+ updateReserveIxnsArgs.push({
1962
+ mode: UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator,
1963
+ value: updateReserveConfigEncodedValue(
1964
+ UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator,
1965
+ reserveConfig.autodeleverageEnabled
1966
+ ),
1967
+ });
1968
+ }
1969
+ break;
1970
+ case 'borrowLimitOutsideElevationGroup':
1971
+ if (reserve === undefined) {
1972
+ updateReserveIxnsArgs.push({
1973
+ mode: UpdateConfigMode.UpdateBorrowLimitOutsideElevationGroup.discriminator,
1974
+ value: updateReserveConfigEncodedValue(
1975
+ UpdateConfigMode.UpdateBorrowLimitOutsideElevationGroup.discriminator,
1976
+ reserveConfig.borrowLimitOutsideElevationGroup.toNumber()
1977
+ ),
1978
+ });
1979
+ } else if (
1980
+ reserve.config.borrowLimitOutsideElevationGroup.toNumber() !==
1981
+ reserveConfig.borrowLimitOutsideElevationGroup.toNumber()
1982
+ ) {
1983
+ updateReserveIxnsArgs.push({
1984
+ mode: UpdateConfigMode.UpdateBorrowLimitOutsideElevationGroup.discriminator,
1985
+ value: updateReserveConfigEncodedValue(
1986
+ UpdateConfigMode.UpdateBorrowLimitOutsideElevationGroup.discriminator,
1987
+ reserveConfig.borrowLimitOutsideElevationGroup.toNumber()
1988
+ ),
1989
+ });
1990
+ }
1991
+ break;
1992
+ case 'borrowLimitAgainstThisCollateralInElevationGroup':
1993
+ if (reserve === undefined) {
1994
+ updateReserveIxnsArgs.push({
1995
+ mode: UpdateConfigMode.UpdateBorrowLimitsInElevationGroupAgainstThisReserve.discriminator,
1996
+ value: updateReserveConfigEncodedValue(
1997
+ UpdateConfigMode.UpdateBorrowLimitsInElevationGroupAgainstThisReserve.discriminator,
1998
+ reserveConfig.borrowLimitAgainstThisCollateralInElevationGroup.map((borrowLimit) => borrowLimit.toNumber())
1999
+ ),
2000
+ });
2001
+ } else {
2002
+ for (let i = 0; i < reserveConfig.borrowLimitAgainstThisCollateralInElevationGroup.length; i++) {
2003
+ if (
2004
+ reserve.config.borrowLimitAgainstThisCollateralInElevationGroup[i] !==
2005
+ reserveConfig.borrowLimitAgainstThisCollateralInElevationGroup[i]
2006
+ ) {
2007
+ updateReserveIxnsArgs.push({
2008
+ mode: UpdateConfigMode.UpdateBorrowLimitsInElevationGroupAgainstThisReserve.discriminator,
2009
+ value: updateReserveConfigEncodedValue(
2010
+ UpdateConfigMode.UpdateBorrowLimitsInElevationGroupAgainstThisReserve.discriminator,
2011
+ reserveConfig.borrowLimitAgainstThisCollateralInElevationGroup.map((borrowLimit) =>
2012
+ borrowLimit.toNumber()
2013
+ )
2014
+ ),
2015
+ });
2016
+ }
2017
+ }
2018
+ }
2019
+ break;
2020
+ case 'deleveragingBonusIncreaseBpsPerDay':
2021
+ if (reserve === undefined) {
2022
+ updateReserveIxnsArgs.push({
2023
+ mode: UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator,
2024
+ value: updateReserveConfigEncodedValue(
2025
+ UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator,
2026
+ reserveConfig.deleveragingBonusIncreaseBpsPerDay.toNumber()
2027
+ ),
2028
+ });
2029
+ } else if (
2030
+ reserve.config.deleveragingBonusIncreaseBpsPerDay.toNumber() !==
2031
+ reserveConfig.deleveragingBonusIncreaseBpsPerDay.toNumber()
2032
+ ) {
2033
+ updateReserveIxnsArgs.push({
2034
+ mode: UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator,
2035
+ value: updateReserveConfigEncodedValue(
2036
+ UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator,
2037
+ reserveConfig.deleveragingBonusIncreaseBpsPerDay.toNumber()
2038
+ ),
2039
+ });
2040
+ }
2041
+ break;
2042
+ default:
2043
+ assertNever(key); // Will cause compile error if any case is missing
2044
+ }
2045
+ }
2046
+
2047
+ export function updateEntireReserveConfigIx(
2048
+ marketWithAddress: MarketWithAddress,
2049
+ reserveAddress: PublicKey,
2050
+ reserveConfig: ReserveConfig,
2051
+ programId: PublicKey
2052
+ ): TransactionInstruction {
2053
+ const layout = ReserveConfig.layout();
2054
+ const data = Buffer.alloc(1000);
2055
+ const len = layout.encode(reserveConfig.toEncodable(), data);
2056
+ const value = Uint8Array.from([...data.subarray(0, len)]);
2057
+
2058
+ const args: UpdateReserveConfigArgs = {
2059
+ mode: new anchor.BN(25),
2060
+ value: value,
2061
+ skipValidation: false,
2062
+ };
2063
+
2064
+ const accounts: UpdateReserveConfigAccounts = {
2065
+ lendingMarketOwner: marketWithAddress.state.lendingMarketOwner,
2066
+ lendingMarket: marketWithAddress.address,
2067
+ reserve: reserveAddress,
2068
+ };
2069
+
2070
+ const ix = updateReserveConfig(args, accounts, programId);
2071
+
2072
+ return ix;
2073
+ }
2074
+
2075
+ export function parseForChangesReserveConfigAndGetIxs(
2076
+ marketWithAddress: MarketWithAddress,
2077
+ reserve: Reserve | undefined,
2078
+ reserveAddress: PublicKey,
2079
+ reserveConfig: ReserveConfig,
2080
+ programId: PublicKey
2081
+ ) {
2082
+ const updateReserveIxnsArgs: { mode: number; value: Uint8Array }[] = [];
2083
+ for (const key in reserveConfig.toEncodable()) {
2084
+ if (isExcludedReserveConfigKey(key)) {
2085
+ continue;
1964
2086
  }
1965
- } // for loop
2087
+ handleConfigUpdate(key as ReserveConfigKey, reserve, reserveConfig, updateReserveIxnsArgs);
2088
+ }
1966
2089
 
1967
2090
  const ixns: TransactionInstruction[] = [];
1968
2091