@kamino-finance/klend-sdk 5.10.19 → 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,108 +1451,68 @@ export function parseForChangesReserveConfigAndGetIxs(
1498
1451
  ),
1499
1452
  });
1500
1453
  }
1501
- } else if (key === 'depositWithdrawalCap') {
1454
+ break;
1455
+ case 'fees':
1502
1456
  if (reserve === undefined) {
1503
1457
  updateReserveIxnsArgs.push({
1504
- mode: UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator,
1505
- value: updateReserveConfigEncodedValue(UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator, [
1506
- reserveConfig.depositWithdrawalCap.configCapacity.toNumber(),
1507
- reserveConfig.depositWithdrawalCap.configIntervalLengthSeconds.toNumber(),
1508
- ]),
1509
- });
1510
- updateReserveIxnsArgs.push({
1511
- mode: UpdateConfigMode.UpdateDepositWithdrawalCapCurrentTotal.discriminator,
1458
+ mode: UpdateConfigMode.UpdateFeesBorrowFee.discriminator,
1512
1459
  value: updateReserveConfigEncodedValue(
1513
- UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator,
1514
- reserveConfig.depositWithdrawalCap.currentTotal.toNumber()
1460
+ UpdateConfigMode.UpdateFeesBorrowFee.discriminator,
1461
+ reserveConfig.fees.borrowFeeSf.toNumber()
1515
1462
  ),
1516
1463
  });
1517
- } else if (
1518
- !reserve.config.depositWithdrawalCap.configCapacity.eq(reserveConfig.depositWithdrawalCap.configCapacity) ||
1519
- !reserve.config.depositWithdrawalCap.configIntervalLengthSeconds.eq(
1520
- reserveConfig.depositWithdrawalCap.configIntervalLengthSeconds
1521
- )
1522
- ) {
1523
- updateReserveIxnsArgs.push({
1524
- mode: UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator,
1525
- value: updateReserveConfigEncodedValue(UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator, [
1526
- reserveConfig.depositWithdrawalCap.configCapacity.toNumber(),
1527
- reserveConfig.depositWithdrawalCap.configIntervalLengthSeconds.toNumber(),
1528
- ]),
1529
- });
1530
- } else if (
1531
- !reserve.config.depositWithdrawalCap.currentTotal.eq(reserveConfig.depositWithdrawalCap.currentTotal)
1532
- ) {
1533
1464
  updateReserveIxnsArgs.push({
1534
- mode: UpdateConfigMode.UpdateDepositWithdrawalCapCurrentTotal.discriminator,
1465
+ mode: UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator,
1535
1466
  value: updateReserveConfigEncodedValue(
1536
- UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator,
1537
- reserveConfig.depositWithdrawalCap.currentTotal.toNumber()
1467
+ UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator,
1468
+ reserveConfig.fees.flashLoanFeeSf.toNumber()
1538
1469
  ),
1539
1470
  });
1540
- }
1541
- } else if (key === 'debtWithdrawalCap') {
1542
- if (reserve === undefined) {
1543
- updateReserveIxnsArgs.push({
1544
- mode: UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator,
1545
- value: updateReserveConfigEncodedValue(UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator, [
1546
- reserveConfig.debtWithdrawalCap.configCapacity.toNumber(),
1547
- reserveConfig.debtWithdrawalCap.configIntervalLengthSeconds.toNumber(),
1548
- ]),
1549
- });
1471
+ } else if (!reserve.config.fees.borrowFeeSf.eq(reserveConfig.fees.borrowFeeSf)) {
1550
1472
  updateReserveIxnsArgs.push({
1551
- mode: UpdateConfigMode.UpdateDebtWithdrawalCapCurrentTotal.discriminator,
1473
+ mode: UpdateConfigMode.UpdateFeesBorrowFee.discriminator,
1552
1474
  value: updateReserveConfigEncodedValue(
1553
- UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator,
1554
- reserveConfig.debtWithdrawalCap.currentTotal.toNumber()
1475
+ UpdateConfigMode.UpdateFeesBorrowFee.discriminator,
1476
+ reserveConfig.fees.borrowFeeSf.toNumber()
1555
1477
  ),
1556
1478
  });
1557
- } else if (
1558
- !reserve.config.debtWithdrawalCap.configCapacity.eq(reserveConfig.debtWithdrawalCap.configCapacity) ||
1559
- !reserve.config.debtWithdrawalCap.configIntervalLengthSeconds.eq(
1560
- reserveConfig.debtWithdrawalCap.configIntervalLengthSeconds
1561
- )
1562
- ) {
1563
- updateReserveIxnsArgs.push({
1564
- mode: UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator,
1565
- value: updateReserveConfigEncodedValue(UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator, [
1566
- reserveConfig.debtWithdrawalCap.configCapacity.toNumber(),
1567
- reserveConfig.debtWithdrawalCap.configIntervalLengthSeconds.toNumber(),
1568
- ]),
1569
- });
1570
- } else if (!reserve.config.debtWithdrawalCap.currentTotal.eq(reserveConfig.debtWithdrawalCap.currentTotal)) {
1479
+ } else if (!reserve.config.fees.flashLoanFeeSf.eq(reserveConfig.fees.flashLoanFeeSf)) {
1571
1480
  updateReserveIxnsArgs.push({
1572
- mode: UpdateConfigMode.UpdateDebtWithdrawalCapCurrentTotal.discriminator,
1481
+ mode: UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator,
1573
1482
  value: updateReserveConfigEncodedValue(
1574
- UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator,
1575
- reserveConfig.debtWithdrawalCap.currentTotal.toNumber()
1483
+ UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator,
1484
+ reserveConfig.fees.flashLoanFeeSf.toNumber()
1576
1485
  ),
1577
1486
  });
1578
1487
  }
1579
- } else if (key === 'elevationGroups') {
1488
+ break;
1489
+ case 'borrowRateCurve':
1580
1490
  if (reserve === undefined) {
1581
1491
  updateReserveIxnsArgs.push({
1582
- mode: UpdateConfigMode.UpdateElevationGroup.discriminator,
1583
- value: updateReserveConfigEncodedValue(
1584
- UpdateConfigMode.UpdateElevationGroup.discriminator,
1585
- reserveConfig.elevationGroups
1586
- ),
1492
+ mode: UpdateBorrowRateCurve.discriminator,
1493
+ value: updateReserveConfigEncodedValue(UpdateBorrowRateCurve.discriminator, reserveConfig.borrowRateCurve),
1587
1494
  });
1588
1495
  } else {
1589
- for (let i = 0; i < reserveConfig.elevationGroups.length; i++) {
1590
- 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
+ ) {
1591
1503
  updateReserveIxnsArgs.push({
1592
- mode: UpdateConfigMode.UpdateElevationGroup.discriminator,
1504
+ mode: UpdateBorrowRateCurve.discriminator,
1593
1505
  value: updateReserveConfigEncodedValue(
1594
- UpdateConfigMode.UpdateElevationGroup.discriminator,
1595
- reserveConfig.elevationGroups
1506
+ UpdateBorrowRateCurve.discriminator,
1507
+ reserveConfig.borrowRateCurve
1596
1508
  ),
1597
1509
  });
1598
1510
  break;
1599
1511
  }
1600
1512
  }
1601
1513
  }
1602
- } else if (key === 'borrowFactorPct') {
1514
+ break;
1515
+ case 'borrowFactorPct':
1603
1516
  if (reserve === undefined) {
1604
1517
  updateReserveIxnsArgs.push({
1605
1518
  mode: UpdateConfigMode.UpdateBorrowFactor.discriminator,
@@ -1617,79 +1530,46 @@ export function parseForChangesReserveConfigAndGetIxs(
1617
1530
  ),
1618
1531
  });
1619
1532
  }
1620
- } else if (key === 'loanToValuePct') {
1621
- if (reserve === undefined) {
1622
- updateReserveIxnsArgs.push({
1623
- mode: UpdateConfigMode.UpdateLoanToValuePct.discriminator,
1624
- value: updateReserveConfigEncodedValue(
1625
- UpdateConfigMode.UpdateLoanToValuePct.discriminator,
1626
- reserveConfig.loanToValuePct
1627
- ),
1628
- });
1629
- } else if (reserve.config.loanToValuePct !== reserveConfig.loanToValuePct) {
1630
- updateReserveIxnsArgs.push({
1631
- mode: UpdateConfigMode.UpdateLoanToValuePct.discriminator,
1632
- value: updateReserveConfigEncodedValue(
1633
- UpdateConfigMode.UpdateLoanToValuePct.discriminator,
1634
- reserveConfig.loanToValuePct
1635
- ),
1636
- });
1637
- }
1638
- } else if (key === 'protocolLiquidationFeePct') {
1639
- if (reserve === undefined) {
1640
- updateReserveIxnsArgs.push({
1641
- mode: UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator,
1642
- value: updateReserveConfigEncodedValue(
1643
- UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator,
1644
- reserveConfig.protocolLiquidationFeePct
1645
- ),
1646
- });
1647
- } else if (reserve.config.protocolLiquidationFeePct !== reserveConfig.protocolLiquidationFeePct) {
1648
- updateReserveIxnsArgs.push({
1649
- mode: UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator,
1650
- value: updateReserveConfigEncodedValue(
1651
- UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator,
1652
- reserveConfig.protocolLiquidationFeePct
1653
- ),
1654
- });
1655
- }
1656
- } else if (key === 'deleveragingMarginCallPeriodSecs') {
1533
+ break;
1534
+ case 'depositLimit':
1657
1535
  if (reserve === undefined) {
1658
1536
  updateReserveIxnsArgs.push({
1659
- mode: UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator,
1537
+ mode: UpdateConfigMode.UpdateDepositLimit.discriminator,
1660
1538
  value: updateReserveConfigEncodedValue(
1661
- UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator,
1662
- reserveConfig.deleveragingMarginCallPeriodSecs.toNumber()
1539
+ UpdateConfigMode.UpdateDepositLimit.discriminator,
1540
+ reserveConfig.depositLimit.toNumber()
1663
1541
  ),
1664
1542
  });
1665
- } else if (!reserve.config.deleveragingMarginCallPeriodSecs.eq(reserveConfig.deleveragingMarginCallPeriodSecs)) {
1543
+ } else if (!reserve.config.depositLimit.eq(reserveConfig.depositLimit)) {
1666
1544
  updateReserveIxnsArgs.push({
1667
- mode: UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator,
1545
+ mode: UpdateConfigMode.UpdateDepositLimit.discriminator,
1668
1546
  value: updateReserveConfigEncodedValue(
1669
- UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator,
1670
- reserveConfig.deleveragingMarginCallPeriodSecs.toNumber()
1547
+ UpdateConfigMode.UpdateDepositLimit.discriminator,
1548
+ reserveConfig.depositLimit.toNumber()
1671
1549
  ),
1672
1550
  });
1673
1551
  }
1674
- } else if (key === 'assetTier') {
1552
+ break;
1553
+ case 'borrowLimit':
1675
1554
  if (reserve === undefined) {
1676
1555
  updateReserveIxnsArgs.push({
1677
- mode: UpdateConfigMode.UpdateAssetTier.discriminator,
1556
+ mode: UpdateConfigMode.UpdateBorrowLimit.discriminator,
1678
1557
  value: updateReserveConfigEncodedValue(
1679
- UpdateConfigMode.UpdateAssetTier.discriminator,
1680
- reserveConfig.assetTier
1558
+ UpdateConfigMode.UpdateBorrowLimit.discriminator,
1559
+ reserveConfig.borrowLimit.toNumber()
1681
1560
  ),
1682
1561
  });
1683
- } else if (reserve.config.assetTier !== reserveConfig.assetTier) {
1562
+ } else if (!reserve.config.borrowLimit.eq(reserveConfig.borrowLimit)) {
1684
1563
  updateReserveIxnsArgs.push({
1685
- mode: UpdateConfigMode.UpdateAssetTier.discriminator,
1564
+ mode: UpdateConfigMode.UpdateBorrowLimit.discriminator,
1686
1565
  value: updateReserveConfigEncodedValue(
1687
- UpdateConfigMode.UpdateAssetTier.discriminator,
1688
- reserveConfig.assetTier
1566
+ UpdateConfigMode.UpdateBorrowLimit.discriminator,
1567
+ reserveConfig.borrowLimit.toNumber()
1689
1568
  ),
1690
1569
  });
1691
1570
  }
1692
- } else if (key === 'tokenInfo') {
1571
+ break;
1572
+ case 'tokenInfo':
1693
1573
  const tokenInfo = reserveConfig.tokenInfo;
1694
1574
  if (reserve === undefined) {
1695
1575
  updateReserveIxnsArgs.push({
@@ -1923,8 +1803,289 @@ export function parseForChangesReserveConfigAndGetIxs(
1923
1803
  });
1924
1804
  }
1925
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;
1926
2086
  }
1927
- } // for loop
2087
+ handleConfigUpdate(key as ReserveConfigKey, reserve, reserveConfig, updateReserveIxnsArgs);
2088
+ }
1928
2089
 
1929
2090
  const ixns: TransactionInstruction[] = [];
1930
2091
 
@@ -1960,6 +2121,7 @@ export function updateReserveConfigEncodedValue(
1960
2121
  case UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator:
1961
2122
  case UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator:
1962
2123
  case UpdateConfigMode.UpdateBlockPriceUsage.discriminator:
2124
+ case UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator:
1963
2125
  buffer = Buffer.alloc(1);
1964
2126
  buffer.writeUIntLE(value as number, 0, 1);
1965
2127
  break;
@@ -1984,6 +2146,7 @@ export function updateReserveConfigEncodedValue(
1984
2146
  case UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator:
1985
2147
  case UpdateConfigMode.UpdateBorrowFactor.discriminator:
1986
2148
  case UpdateConfigMode.UpdateDeleveragingThresholdDecreaseBpsPerDay.discriminator:
2149
+ case UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator:
1987
2150
  case UpdateConfigMode.UpdateBorrowLimitOutsideElevationGroup.discriminator:
1988
2151
  value = value as number;
1989
2152
  buffer = Buffer.alloc(8);