@kamino-finance/klend-sdk 5.11.14 → 5.11.16

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.
Files changed (42) hide show
  1. package/dist/classes/manager.d.ts +1 -1
  2. package/dist/classes/manager.d.ts.map +1 -1
  3. package/dist/classes/manager.js +3 -3
  4. package/dist/classes/manager.js.map +1 -1
  5. package/dist/classes/market.d.ts.map +1 -1
  6. package/dist/classes/market.js +3 -0
  7. package/dist/classes/market.js.map +1 -1
  8. package/dist/classes/reserve.d.ts +7 -1
  9. package/dist/classes/reserve.d.ts.map +1 -1
  10. package/dist/classes/reserve.js +145 -255
  11. package/dist/classes/reserve.js.map +1 -1
  12. package/dist/classes/types.d.ts +2 -0
  13. package/dist/classes/types.d.ts.map +1 -1
  14. package/dist/classes/utils.d.ts +1 -1
  15. package/dist/classes/utils.d.ts.map +1 -1
  16. package/dist/classes/utils.js +8 -2
  17. package/dist/classes/utils.js.map +1 -1
  18. package/dist/classes/vault.d.ts +1 -1
  19. package/dist/classes/vault.d.ts.map +1 -1
  20. package/dist/classes/vault.js +24 -5
  21. package/dist/classes/vault.js.map +1 -1
  22. package/dist/client_kamino_manager.d.ts.map +1 -1
  23. package/dist/client_kamino_manager.js +99 -89
  24. package/dist/client_kamino_manager.js.map +1 -1
  25. package/dist/utils/ata.d.ts +15 -2
  26. package/dist/utils/ata.d.ts.map +1 -1
  27. package/dist/utils/ata.js +68 -3
  28. package/dist/utils/ata.js.map +1 -1
  29. package/dist/utils/constants.d.ts +1 -0
  30. package/dist/utils/constants.d.ts.map +1 -1
  31. package/dist/utils/constants.js +2 -1
  32. package/dist/utils/constants.js.map +1 -1
  33. package/package.json +1 -1
  34. package/src/classes/manager.ts +5 -6
  35. package/src/classes/market.ts +4 -0
  36. package/src/classes/reserve.ts +178 -319
  37. package/src/classes/types.ts +3 -0
  38. package/src/classes/utils.ts +9 -3
  39. package/src/classes/vault.ts +44 -12
  40. package/src/client_kamino_manager.ts +225 -92
  41. package/src/utils/ata.ts +102 -4
  42. package/src/utils/constants.ts +2 -0
@@ -12,6 +12,7 @@ import {
12
12
  INITIAL_COLLATERAL_RATE,
13
13
  lendingMarketAuthPda,
14
14
  MarketWithAddress,
15
+ MIN_INITIAL_DEPOSIT,
15
16
  ONE_HUNDRED_PCT_IN_BPS,
16
17
  reservePdas,
17
18
  SLOTS_PER_DAY,
@@ -1184,13 +1185,14 @@ export function updateReserveConfigIx(
1184
1185
  reserveAddress: PublicKey,
1185
1186
  modeDiscriminator: number,
1186
1187
  value: Uint8Array,
1187
- programId: PublicKey
1188
+ programId: PublicKey,
1189
+ skipValidation: boolean = false
1188
1190
  ): TransactionInstruction {
1189
1191
  value;
1190
1192
  const args: UpdateReserveConfigArgs = {
1191
1193
  mode: new anchor.BN(modeDiscriminator),
1192
1194
  value: value,
1193
- skipValidation: false,
1195
+ skipValidation,
1194
1196
  };
1195
1197
 
1196
1198
  const accounts: UpdateReserveConfigAccounts = {
@@ -1221,21 +1223,15 @@ function handleConfigUpdate(
1221
1223
  key: ReserveConfigKey,
1222
1224
  reserve: Reserve | undefined,
1223
1225
  reserveConfig: ReserveConfig,
1224
- updateReserveIxnsArgs: { mode: number; value: Uint8Array }[]
1226
+ updateReserveIxnsArgs: UpdateReserveIxnsArgs[]
1225
1227
  ): void {
1228
+ // We add 1 to the discriminator, to account for the fact that the UpdateConfigMode
1229
+ // inside the SC starts incrementing from 1
1226
1230
  switch (key) {
1227
1231
  case 'status':
1228
- if (reserve === undefined) {
1232
+ if (reserve === undefined || reserve.config.status !== reserveConfig.status) {
1229
1233
  updateReserveIxnsArgs.push({
1230
- mode: UpdateConfigMode.UpdateReserveStatus.discriminator,
1231
- value: updateReserveConfigEncodedValue(
1232
- UpdateConfigMode.UpdateReserveStatus.discriminator,
1233
- reserveConfig.status
1234
- ),
1235
- });
1236
- } else if (reserve.config.status !== reserveConfig.status) {
1237
- updateReserveIxnsArgs.push({
1238
- mode: UpdateConfigMode.UpdateReserveStatus.discriminator,
1234
+ mode: UpdateConfigMode.UpdateReserveStatus.discriminator + 1,
1239
1235
  value: updateReserveConfigEncodedValue(
1240
1236
  UpdateConfigMode.UpdateReserveStatus.discriminator,
1241
1237
  reserveConfig.status
@@ -1244,17 +1240,9 @@ function handleConfigUpdate(
1244
1240
  }
1245
1241
  break;
1246
1242
  case 'assetTier':
1247
- if (reserve === undefined) {
1248
- updateReserveIxnsArgs.push({
1249
- mode: UpdateConfigMode.UpdateAssetTier.discriminator,
1250
- value: updateReserveConfigEncodedValue(
1251
- UpdateConfigMode.UpdateAssetTier.discriminator,
1252
- reserveConfig.assetTier
1253
- ),
1254
- });
1255
- } else if (reserve.config.assetTier !== reserveConfig.assetTier) {
1243
+ if (reserve === undefined || reserve.config.assetTier !== reserveConfig.assetTier) {
1256
1244
  updateReserveIxnsArgs.push({
1257
- mode: UpdateConfigMode.UpdateAssetTier.discriminator,
1245
+ mode: UpdateConfigMode.UpdateAssetTier.discriminator + 1,
1258
1246
  value: updateReserveConfigEncodedValue(
1259
1247
  UpdateConfigMode.UpdateAssetTier.discriminator,
1260
1248
  reserveConfig.assetTier
@@ -1263,17 +1251,9 @@ function handleConfigUpdate(
1263
1251
  }
1264
1252
  break;
1265
1253
  case 'hostFixedInterestRateBps':
1266
- if (reserve === undefined) {
1254
+ if (reserve === undefined || reserve.config.hostFixedInterestRateBps !== reserveConfig.hostFixedInterestRateBps) {
1267
1255
  updateReserveIxnsArgs.push({
1268
- mode: UpdateConfigMode.UpdateHostFixedInterestRateBps.discriminator,
1269
- value: updateReserveConfigEncodedValue(
1270
- UpdateConfigMode.UpdateHostFixedInterestRateBps.discriminator,
1271
- reserveConfig.hostFixedInterestRateBps
1272
- ),
1273
- });
1274
- } else if (reserve.config.hostFixedInterestRateBps !== reserveConfig.hostFixedInterestRateBps) {
1275
- updateReserveIxnsArgs.push({
1276
- mode: UpdateConfigMode.UpdateHostFixedInterestRateBps.discriminator,
1256
+ mode: UpdateConfigMode.UpdateHostFixedInterestRateBps.discriminator + 1,
1277
1257
  value: updateReserveConfigEncodedValue(
1278
1258
  UpdateConfigMode.UpdateHostFixedInterestRateBps.discriminator,
1279
1259
  reserveConfig.hostFixedInterestRateBps
@@ -1282,17 +1262,9 @@ function handleConfigUpdate(
1282
1262
  }
1283
1263
  break;
1284
1264
  case 'protocolTakeRatePct':
1285
- if (reserve === undefined) {
1286
- updateReserveIxnsArgs.push({
1287
- mode: UpdateConfigMode.UpdateProtocolTakeRate.discriminator,
1288
- value: updateReserveConfigEncodedValue(
1289
- UpdateConfigMode.UpdateProtocolTakeRate.discriminator,
1290
- reserveConfig.protocolTakeRatePct
1291
- ),
1292
- });
1293
- } else if (reserve.config.protocolTakeRatePct !== reserveConfig.protocolTakeRatePct) {
1265
+ if (reserve === undefined || reserve.config.protocolTakeRatePct !== reserveConfig.protocolTakeRatePct) {
1294
1266
  updateReserveIxnsArgs.push({
1295
- mode: UpdateConfigMode.UpdateProtocolTakeRate.discriminator,
1267
+ mode: UpdateConfigMode.UpdateProtocolTakeRate.discriminator + 1,
1296
1268
  value: updateReserveConfigEncodedValue(
1297
1269
  UpdateConfigMode.UpdateProtocolTakeRate.discriminator,
1298
1270
  reserveConfig.protocolTakeRatePct
@@ -1301,17 +1273,12 @@ function handleConfigUpdate(
1301
1273
  }
1302
1274
  break;
1303
1275
  case 'protocolLiquidationFeePct':
1304
- if (reserve === undefined) {
1305
- updateReserveIxnsArgs.push({
1306
- mode: UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator,
1307
- value: updateReserveConfigEncodedValue(
1308
- UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator,
1309
- reserveConfig.protocolLiquidationFeePct
1310
- ),
1311
- });
1312
- } else if (reserve.config.protocolLiquidationFeePct !== reserveConfig.protocolLiquidationFeePct) {
1276
+ if (
1277
+ reserve === undefined ||
1278
+ reserve.config.protocolLiquidationFeePct !== reserveConfig.protocolLiquidationFeePct
1279
+ ) {
1313
1280
  updateReserveIxnsArgs.push({
1314
- mode: UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator,
1281
+ mode: UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator + 1,
1315
1282
  value: updateReserveConfigEncodedValue(
1316
1283
  UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator,
1317
1284
  reserveConfig.protocolLiquidationFeePct
@@ -1320,17 +1287,9 @@ function handleConfigUpdate(
1320
1287
  }
1321
1288
  break;
1322
1289
  case 'loanToValuePct':
1323
- if (reserve === undefined) {
1290
+ if (reserve === undefined || reserve.config.loanToValuePct !== reserveConfig.loanToValuePct) {
1324
1291
  updateReserveIxnsArgs.push({
1325
- mode: UpdateConfigMode.UpdateLoanToValuePct.discriminator,
1326
- value: updateReserveConfigEncodedValue(
1327
- UpdateConfigMode.UpdateLoanToValuePct.discriminator,
1328
- reserveConfig.loanToValuePct
1329
- ),
1330
- });
1331
- } else if (reserve.config.loanToValuePct !== reserveConfig.loanToValuePct) {
1332
- updateReserveIxnsArgs.push({
1333
- mode: UpdateConfigMode.UpdateLoanToValuePct.discriminator,
1292
+ mode: UpdateConfigMode.UpdateLoanToValuePct.discriminator + 1,
1334
1293
  value: updateReserveConfigEncodedValue(
1335
1294
  UpdateConfigMode.UpdateLoanToValuePct.discriminator,
1336
1295
  reserveConfig.loanToValuePct
@@ -1339,17 +1298,9 @@ function handleConfigUpdate(
1339
1298
  }
1340
1299
  break;
1341
1300
  case 'liquidationThresholdPct':
1342
- if (reserve === undefined) {
1343
- updateReserveIxnsArgs.push({
1344
- mode: UpdateConfigMode.UpdateLiquidationThresholdPct.discriminator,
1345
- value: updateReserveConfigEncodedValue(
1346
- UpdateConfigMode.UpdateLiquidationThresholdPct.discriminator,
1347
- reserveConfig.liquidationThresholdPct
1348
- ),
1349
- });
1350
- } else if (reserve.config.liquidationThresholdPct !== reserveConfig.liquidationThresholdPct) {
1301
+ if (reserve === undefined || reserve.config.liquidationThresholdPct !== reserveConfig.liquidationThresholdPct) {
1351
1302
  updateReserveIxnsArgs.push({
1352
- mode: UpdateConfigMode.UpdateLiquidationThresholdPct.discriminator,
1303
+ mode: UpdateConfigMode.UpdateLiquidationThresholdPct.discriminator + 1,
1353
1304
  value: updateReserveConfigEncodedValue(
1354
1305
  UpdateConfigMode.UpdateLiquidationThresholdPct.discriminator,
1355
1306
  reserveConfig.liquidationThresholdPct
@@ -1358,17 +1309,9 @@ function handleConfigUpdate(
1358
1309
  }
1359
1310
  break;
1360
1311
  case 'minLiquidationBonusBps':
1361
- if (reserve === undefined) {
1362
- updateReserveIxnsArgs.push({
1363
- mode: UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator,
1364
- value: updateReserveConfigEncodedValue(
1365
- UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator,
1366
- reserveConfig.minLiquidationBonusBps
1367
- ),
1368
- });
1369
- } else if (reserve.config.minLiquidationBonusBps !== reserveConfig.minLiquidationBonusBps) {
1312
+ if (reserve === undefined || reserve.config.minLiquidationBonusBps !== reserveConfig.minLiquidationBonusBps) {
1370
1313
  updateReserveIxnsArgs.push({
1371
- mode: UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator,
1314
+ mode: UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator + 1,
1372
1315
  value: updateReserveConfigEncodedValue(
1373
1316
  UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator,
1374
1317
  reserveConfig.minLiquidationBonusBps
@@ -1377,17 +1320,9 @@ function handleConfigUpdate(
1377
1320
  }
1378
1321
  break;
1379
1322
  case 'maxLiquidationBonusBps':
1380
- if (reserve === undefined) {
1381
- updateReserveIxnsArgs.push({
1382
- mode: UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator,
1383
- value: updateReserveConfigEncodedValue(
1384
- UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator,
1385
- reserveConfig.maxLiquidationBonusBps
1386
- ),
1387
- });
1388
- } else if (reserve.config.maxLiquidationBonusBps !== reserveConfig.maxLiquidationBonusBps) {
1323
+ if (reserve === undefined || reserve.config.maxLiquidationBonusBps !== reserveConfig.maxLiquidationBonusBps) {
1389
1324
  updateReserveIxnsArgs.push({
1390
- mode: UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator,
1325
+ mode: UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator + 1,
1391
1326
  value: updateReserveConfigEncodedValue(
1392
1327
  UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator,
1393
1328
  reserveConfig.maxLiquidationBonusBps
@@ -1396,17 +1331,12 @@ function handleConfigUpdate(
1396
1331
  }
1397
1332
  break;
1398
1333
  case 'badDebtLiquidationBonusBps':
1399
- if (reserve === undefined) {
1400
- updateReserveIxnsArgs.push({
1401
- mode: UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator,
1402
- value: updateReserveConfigEncodedValue(
1403
- UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator,
1404
- reserveConfig.badDebtLiquidationBonusBps
1405
- ),
1406
- });
1407
- } else if (reserve.config.badDebtLiquidationBonusBps !== reserveConfig.badDebtLiquidationBonusBps) {
1334
+ if (
1335
+ reserve === undefined ||
1336
+ reserve.config.badDebtLiquidationBonusBps !== reserveConfig.badDebtLiquidationBonusBps
1337
+ ) {
1408
1338
  updateReserveIxnsArgs.push({
1409
- mode: UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator,
1339
+ mode: UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator + 1,
1410
1340
  value: updateReserveConfigEncodedValue(
1411
1341
  UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator,
1412
1342
  reserveConfig.badDebtLiquidationBonusBps
@@ -1415,17 +1345,12 @@ function handleConfigUpdate(
1415
1345
  }
1416
1346
  break;
1417
1347
  case 'deleveragingMarginCallPeriodSecs':
1418
- if (reserve === undefined) {
1419
- updateReserveIxnsArgs.push({
1420
- mode: UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator,
1421
- value: updateReserveConfigEncodedValue(
1422
- UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator,
1423
- reserveConfig.deleveragingMarginCallPeriodSecs.toNumber()
1424
- ),
1425
- });
1426
- } else if (!reserve.config.deleveragingMarginCallPeriodSecs.eq(reserveConfig.deleveragingMarginCallPeriodSecs)) {
1348
+ if (
1349
+ reserve === undefined ||
1350
+ !reserve.config.deleveragingMarginCallPeriodSecs.eq(reserveConfig.deleveragingMarginCallPeriodSecs)
1351
+ ) {
1427
1352
  updateReserveIxnsArgs.push({
1428
- mode: UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator,
1353
+ mode: UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator + 1,
1429
1354
  value: updateReserveConfigEncodedValue(
1430
1355
  UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator,
1431
1356
  reserveConfig.deleveragingMarginCallPeriodSecs.toNumber()
@@ -1434,19 +1359,12 @@ function handleConfigUpdate(
1434
1359
  }
1435
1360
  break;
1436
1361
  case 'deleveragingThresholdDecreaseBpsPerDay':
1437
- if (reserve === undefined) {
1438
- updateReserveIxnsArgs.push({
1439
- mode: UpdateConfigMode.UpdateDeleveragingThresholdDecreaseBpsPerDay.discriminator,
1440
- value: updateReserveConfigEncodedValue(
1441
- UpdateConfigMode.UpdateDeleveragingThresholdDecreaseBpsPerDay.discriminator,
1442
- reserveConfig.deleveragingThresholdDecreaseBpsPerDay.toNumber()
1443
- ),
1444
- });
1445
- } else if (
1362
+ if (
1363
+ reserve === undefined ||
1446
1364
  !reserve.config.deleveragingThresholdDecreaseBpsPerDay.eq(reserveConfig.deleveragingThresholdDecreaseBpsPerDay)
1447
1365
  ) {
1448
1366
  updateReserveIxnsArgs.push({
1449
- mode: UpdateConfigMode.UpdateDeleveragingThresholdDecreaseBpsPerDay.discriminator,
1367
+ mode: UpdateConfigMode.UpdateDeleveragingThresholdDecreaseBpsPerDay.discriminator + 1,
1450
1368
  value: updateReserveConfigEncodedValue(
1451
1369
  UpdateConfigMode.UpdateDeleveragingThresholdDecreaseBpsPerDay.discriminator,
1452
1370
  reserveConfig.deleveragingThresholdDecreaseBpsPerDay.toNumber()
@@ -1455,46 +1373,35 @@ function handleConfigUpdate(
1455
1373
  }
1456
1374
  break;
1457
1375
  case 'fees':
1458
- if (reserve === undefined) {
1376
+ if (reserve === undefined || !reserve.config.fees.borrowFeeSf.eq(reserveConfig.fees.borrowFeeSf)) {
1459
1377
  updateReserveIxnsArgs.push({
1460
- mode: UpdateConfigMode.UpdateFeesBorrowFee.discriminator,
1378
+ mode: UpdateConfigMode.UpdateFeesBorrowFee.discriminator + 1,
1461
1379
  value: updateReserveConfigEncodedValue(
1462
1380
  UpdateConfigMode.UpdateFeesBorrowFee.discriminator,
1463
1381
  reserveConfig.fees.borrowFeeSf.toNumber()
1464
1382
  ),
1465
1383
  });
1384
+ }
1385
+
1386
+ if (reserve === undefined || !reserve.config.fees.flashLoanFeeSf.eq(reserveConfig.fees.flashLoanFeeSf)) {
1466
1387
  updateReserveIxnsArgs.push({
1467
- mode: UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator,
1468
- value: updateReserveConfigEncodedValue(
1469
- UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator,
1470
- reserveConfig.fees.flashLoanFeeSf.toNumber()
1471
- ),
1472
- });
1473
- } else if (!reserve.config.fees.borrowFeeSf.eq(reserveConfig.fees.borrowFeeSf)) {
1474
- updateReserveIxnsArgs.push({
1475
- mode: UpdateConfigMode.UpdateFeesBorrowFee.discriminator,
1476
- value: updateReserveConfigEncodedValue(
1477
- UpdateConfigMode.UpdateFeesBorrowFee.discriminator,
1478
- reserveConfig.fees.borrowFeeSf.toNumber()
1479
- ),
1480
- });
1481
- } else if (!reserve.config.fees.flashLoanFeeSf.eq(reserveConfig.fees.flashLoanFeeSf)) {
1482
- updateReserveIxnsArgs.push({
1483
- mode: UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator,
1388
+ mode: UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator + 1,
1484
1389
  value: updateReserveConfigEncodedValue(
1485
1390
  UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator,
1486
1391
  reserveConfig.fees.flashLoanFeeSf.toNumber()
1487
1392
  ),
1488
1393
  });
1489
1394
  }
1395
+
1490
1396
  break;
1491
1397
  case 'borrowRateCurve':
1492
1398
  if (reserve === undefined) {
1493
1399
  updateReserveIxnsArgs.push({
1494
- mode: UpdateBorrowRateCurve.discriminator,
1400
+ mode: UpdateBorrowRateCurve.discriminator + 1,
1495
1401
  value: updateReserveConfigEncodedValue(UpdateBorrowRateCurve.discriminator, reserveConfig.borrowRateCurve),
1496
1402
  });
1497
1403
  } else {
1404
+ let shouldBorrowCurveBeUpdated = false;
1498
1405
  for (let i = 0; i < reserveConfig.borrowRateCurve.points.length; i++) {
1499
1406
  if (
1500
1407
  reserve.config.borrowRateCurve.points[i].utilizationRateBps !==
@@ -1502,30 +1409,24 @@ function handleConfigUpdate(
1502
1409
  reserve.config.borrowRateCurve.points[i].borrowRateBps !==
1503
1410
  reserveConfig.borrowRateCurve.points[i].borrowRateBps
1504
1411
  ) {
1505
- updateReserveIxnsArgs.push({
1506
- mode: UpdateBorrowRateCurve.discriminator,
1507
- value: updateReserveConfigEncodedValue(
1508
- UpdateBorrowRateCurve.discriminator,
1509
- reserveConfig.borrowRateCurve
1510
- ),
1511
- });
1412
+ shouldBorrowCurveBeUpdated = true;
1512
1413
  break;
1513
1414
  }
1514
1415
  }
1416
+
1417
+ if (shouldBorrowCurveBeUpdated) {
1418
+ updateReserveIxnsArgs.push({
1419
+ mode: UpdateBorrowRateCurve.discriminator + 1,
1420
+ value: updateReserveConfigEncodedValue(UpdateBorrowRateCurve.discriminator, reserveConfig.borrowRateCurve),
1421
+ });
1422
+ break;
1423
+ }
1515
1424
  }
1516
1425
  break;
1517
1426
  case 'borrowFactorPct':
1518
- if (reserve === undefined) {
1519
- updateReserveIxnsArgs.push({
1520
- mode: UpdateConfigMode.UpdateBorrowFactor.discriminator,
1521
- value: updateReserveConfigEncodedValue(
1522
- UpdateConfigMode.UpdateBorrowFactor.discriminator,
1523
- reserveConfig.borrowFactorPct.toNumber()
1524
- ),
1525
- });
1526
- } else if (!reserve.config.borrowFactorPct.eq(reserveConfig.borrowFactorPct)) {
1427
+ if (reserve === undefined || !reserve.config.borrowFactorPct.eq(reserveConfig.borrowFactorPct)) {
1527
1428
  updateReserveIxnsArgs.push({
1528
- mode: UpdateConfigMode.UpdateBorrowFactor.discriminator,
1429
+ mode: UpdateConfigMode.UpdateBorrowFactor.discriminator + 1,
1529
1430
  value: updateReserveConfigEncodedValue(
1530
1431
  UpdateConfigMode.UpdateBorrowFactor.discriminator,
1531
1432
  reserveConfig.borrowFactorPct.toNumber()
@@ -1534,17 +1435,9 @@ function handleConfigUpdate(
1534
1435
  }
1535
1436
  break;
1536
1437
  case 'depositLimit':
1537
- if (reserve === undefined) {
1538
- updateReserveIxnsArgs.push({
1539
- mode: UpdateConfigMode.UpdateDepositLimit.discriminator,
1540
- value: updateReserveConfigEncodedValue(
1541
- UpdateConfigMode.UpdateDepositLimit.discriminator,
1542
- BigInt(reserveConfig.depositLimit.toString())
1543
- ),
1544
- });
1545
- } else if (!reserve.config.depositLimit.eq(reserveConfig.depositLimit)) {
1438
+ if (reserve === undefined || !reserve.config.depositLimit.eq(reserveConfig.depositLimit)) {
1546
1439
  updateReserveIxnsArgs.push({
1547
- mode: UpdateConfigMode.UpdateDepositLimit.discriminator,
1440
+ mode: UpdateConfigMode.UpdateDepositLimit.discriminator + 1,
1548
1441
  value: updateReserveConfigEncodedValue(
1549
1442
  UpdateConfigMode.UpdateDepositLimit.discriminator,
1550
1443
  BigInt(reserveConfig.depositLimit.toString())
@@ -1553,17 +1446,9 @@ function handleConfigUpdate(
1553
1446
  }
1554
1447
  break;
1555
1448
  case 'borrowLimit':
1556
- if (reserve === undefined) {
1557
- updateReserveIxnsArgs.push({
1558
- mode: UpdateConfigMode.UpdateBorrowLimit.discriminator,
1559
- value: updateReserveConfigEncodedValue(
1560
- UpdateConfigMode.UpdateBorrowLimit.discriminator,
1561
- BigInt(reserveConfig.borrowLimit.toString())
1562
- ),
1563
- });
1564
- } else if (!reserve.config.borrowLimit.eq(reserveConfig.borrowLimit)) {
1449
+ if (reserve === undefined || !reserve.config.borrowLimit.eq(reserveConfig.borrowLimit)) {
1565
1450
  updateReserveIxnsArgs.push({
1566
- mode: UpdateConfigMode.UpdateBorrowLimit.discriminator,
1451
+ mode: UpdateConfigMode.UpdateBorrowLimit.discriminator + 1,
1567
1452
  value: updateReserveConfigEncodedValue(
1568
1453
  UpdateConfigMode.UpdateBorrowLimit.discriminator,
1569
1454
  BigInt(reserveConfig.borrowLimit.toString())
@@ -1575,88 +1460,88 @@ function handleConfigUpdate(
1575
1460
  const tokenInfo = reserveConfig.tokenInfo;
1576
1461
  if (reserve === undefined) {
1577
1462
  updateReserveIxnsArgs.push({
1578
- mode: UpdateConfigMode.UpdateTokenInfoName.discriminator,
1463
+ mode: UpdateConfigMode.UpdateTokenInfoName.discriminator + 1,
1579
1464
  value: updateReserveConfigEncodedValue(UpdateConfigMode.UpdateTokenInfoName.discriminator, tokenInfo.name),
1580
1465
  });
1581
1466
  updateReserveIxnsArgs.push({
1582
- mode: UpdateConfigMode.UpdateTokenInfoLowerHeuristic.discriminator,
1467
+ mode: UpdateConfigMode.UpdateTokenInfoLowerHeuristic.discriminator + 1,
1583
1468
  value: updateReserveConfigEncodedValue(
1584
1469
  UpdateConfigMode.UpdateTokenInfoLowerHeuristic.discriminator,
1585
1470
  tokenInfo.heuristic.lower.toNumber()
1586
1471
  ),
1587
1472
  });
1588
1473
  updateReserveIxnsArgs.push({
1589
- mode: UpdateConfigMode.UpdateTokenInfoUpperHeuristic.discriminator,
1474
+ mode: UpdateConfigMode.UpdateTokenInfoUpperHeuristic.discriminator + 1,
1590
1475
  value: updateReserveConfigEncodedValue(
1591
1476
  UpdateConfigMode.UpdateTokenInfoUpperHeuristic.discriminator,
1592
1477
  tokenInfo.heuristic.upper.toNumber()
1593
1478
  ),
1594
1479
  });
1595
1480
  updateReserveIxnsArgs.push({
1596
- mode: UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator,
1481
+ mode: UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator + 1,
1597
1482
  value: updateReserveConfigEncodedValue(
1598
1483
  UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator,
1599
1484
  tokenInfo.heuristic.exp.toNumber()
1600
1485
  ),
1601
1486
  });
1602
1487
  updateReserveIxnsArgs.push({
1603
- mode: UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator,
1488
+ mode: UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator + 1,
1604
1489
  value: updateReserveConfigEncodedValue(
1605
1490
  UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator,
1606
1491
  tokenInfo.maxTwapDivergenceBps.toNumber()
1607
1492
  ),
1608
1493
  });
1609
1494
  updateReserveIxnsArgs.push({
1610
- mode: UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator,
1495
+ mode: UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator + 1,
1611
1496
  value: updateReserveConfigEncodedValue(
1612
1497
  UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator,
1613
1498
  tokenInfo.maxAgePriceSeconds.toNumber()
1614
1499
  ),
1615
1500
  });
1616
1501
  updateReserveIxnsArgs.push({
1617
- mode: UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator,
1502
+ mode: UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator + 1,
1618
1503
  value: updateReserveConfigEncodedValue(
1619
1504
  UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator,
1620
1505
  tokenInfo.maxAgeTwapSeconds.toNumber()
1621
1506
  ),
1622
1507
  });
1623
1508
  updateReserveIxnsArgs.push({
1624
- mode: UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator,
1509
+ mode: UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator + 1,
1625
1510
  value: updateReserveConfigEncodedValue(
1626
1511
  UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator,
1627
1512
  tokenInfo.scopeConfiguration.priceChain
1628
1513
  ),
1629
1514
  });
1630
1515
  updateReserveIxnsArgs.push({
1631
- mode: UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator,
1516
+ mode: UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator + 1,
1632
1517
  value: updateReserveConfigEncodedValue(
1633
1518
  UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator,
1634
1519
  tokenInfo.scopeConfiguration.twapChain
1635
1520
  ),
1636
1521
  });
1637
1522
  updateReserveIxnsArgs.push({
1638
- mode: UpdateConfigMode.UpdateSwitchboardFeed.discriminator,
1523
+ mode: UpdateConfigMode.UpdateSwitchboardFeed.discriminator + 1,
1639
1524
  value: updateReserveConfigEncodedValue(
1640
1525
  UpdateConfigMode.UpdateSwitchboardFeed.discriminator,
1641
1526
  tokenInfo.switchboardConfiguration.priceAggregator
1642
1527
  ),
1643
1528
  });
1644
1529
  updateReserveIxnsArgs.push({
1645
- mode: UpdateConfigMode.UpdateSwitchboardTwapFeed.discriminator,
1530
+ mode: UpdateConfigMode.UpdateSwitchboardTwapFeed.discriminator + 1,
1646
1531
  value: updateReserveConfigEncodedValue(
1647
1532
  UpdateConfigMode.UpdateSwitchboardTwapFeed.discriminator,
1648
1533
  tokenInfo.switchboardConfiguration.twapAggregator
1649
1534
  ),
1650
1535
  });
1651
1536
  updateReserveIxnsArgs.push({
1652
- mode: UpdateConfigMode.UpdatePythPrice.discriminator,
1537
+ mode: UpdateConfigMode.UpdatePythPrice.discriminator + 1,
1653
1538
  value: updateReserveConfigEncodedValue(
1654
1539
  UpdateConfigMode.UpdatePythPrice.discriminator,
1655
1540
  tokenInfo.pythConfiguration.price
1656
1541
  ),
1657
1542
  });
1658
1543
  updateReserveIxnsArgs.push({
1659
- mode: UpdateConfigMode.UpdateBlockPriceUsage.discriminator,
1544
+ mode: UpdateConfigMode.UpdateBlockPriceUsage.discriminator + 1,
1660
1545
  value: updateReserveConfigEncodedValue(
1661
1546
  UpdateConfigMode.UpdateBlockPriceUsage.discriminator,
1662
1547
  tokenInfo.blockPriceUsage
@@ -1665,13 +1550,13 @@ function handleConfigUpdate(
1665
1550
  } else {
1666
1551
  if (!sameLengthArrayEquals(reserve.config.tokenInfo.name, tokenInfo.name)) {
1667
1552
  updateReserveIxnsArgs.push({
1668
- mode: UpdateConfigMode.UpdateTokenInfoName.discriminator,
1553
+ mode: UpdateConfigMode.UpdateTokenInfoName.discriminator + 1,
1669
1554
  value: updateReserveConfigEncodedValue(UpdateConfigMode.UpdateTokenInfoName.discriminator, tokenInfo.name),
1670
1555
  });
1671
1556
  }
1672
1557
  if (!reserve.config.tokenInfo.heuristic.lower.eq(tokenInfo.heuristic.lower)) {
1673
1558
  updateReserveIxnsArgs.push({
1674
- mode: UpdateConfigMode.UpdateTokenInfoLowerHeuristic.discriminator,
1559
+ mode: UpdateConfigMode.UpdateTokenInfoLowerHeuristic.discriminator + 1,
1675
1560
  value: updateReserveConfigEncodedValue(
1676
1561
  UpdateConfigMode.UpdateTokenInfoLowerHeuristic.discriminator,
1677
1562
  tokenInfo.heuristic.lower.toNumber()
@@ -1680,7 +1565,7 @@ function handleConfigUpdate(
1680
1565
  }
1681
1566
  if (!reserve.config.tokenInfo.heuristic.upper.eq(tokenInfo.heuristic.upper)) {
1682
1567
  updateReserveIxnsArgs.push({
1683
- mode: UpdateConfigMode.UpdateTokenInfoUpperHeuristic.discriminator,
1568
+ mode: UpdateConfigMode.UpdateTokenInfoUpperHeuristic.discriminator + 1,
1684
1569
  value: updateReserveConfigEncodedValue(
1685
1570
  UpdateConfigMode.UpdateTokenInfoUpperHeuristic.discriminator,
1686
1571
  tokenInfo.heuristic.upper.toNumber()
@@ -1689,7 +1574,7 @@ function handleConfigUpdate(
1689
1574
  }
1690
1575
  if (!reserve.config.tokenInfo.heuristic.exp.eq(tokenInfo.heuristic.exp)) {
1691
1576
  updateReserveIxnsArgs.push({
1692
- mode: UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator,
1577
+ mode: UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator + 1,
1693
1578
  value: updateReserveConfigEncodedValue(
1694
1579
  UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator,
1695
1580
  tokenInfo.heuristic.exp.toNumber()
@@ -1698,7 +1583,7 @@ function handleConfigUpdate(
1698
1583
  }
1699
1584
  if (!reserve.config.tokenInfo.maxTwapDivergenceBps.eq(tokenInfo.maxTwapDivergenceBps)) {
1700
1585
  updateReserveIxnsArgs.push({
1701
- mode: UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator,
1586
+ mode: UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator + 1,
1702
1587
  value: updateReserveConfigEncodedValue(
1703
1588
  UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator,
1704
1589
  tokenInfo.maxTwapDivergenceBps.toNumber()
@@ -1707,7 +1592,7 @@ function handleConfigUpdate(
1707
1592
  }
1708
1593
  if (!reserve.config.tokenInfo.maxAgePriceSeconds.eq(tokenInfo.maxAgePriceSeconds)) {
1709
1594
  updateReserveIxnsArgs.push({
1710
- mode: UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator,
1595
+ mode: UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator + 1,
1711
1596
  value: updateReserveConfigEncodedValue(
1712
1597
  UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator,
1713
1598
  tokenInfo.maxAgePriceSeconds.toNumber()
@@ -1716,7 +1601,7 @@ function handleConfigUpdate(
1716
1601
  }
1717
1602
  if (!reserve.config.tokenInfo.maxAgeTwapSeconds.eq(tokenInfo.maxAgeTwapSeconds)) {
1718
1603
  updateReserveIxnsArgs.push({
1719
- mode: UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator,
1604
+ mode: UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator + 1,
1720
1605
  value: updateReserveConfigEncodedValue(
1721
1606
  UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator,
1722
1607
  tokenInfo.maxAgeTwapSeconds.toNumber()
@@ -1730,7 +1615,7 @@ function handleConfigUpdate(
1730
1615
  )
1731
1616
  ) {
1732
1617
  updateReserveIxnsArgs.push({
1733
- mode: UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator,
1618
+ mode: UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator + 1,
1734
1619
  value: updateReserveConfigEncodedValue(
1735
1620
  UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator,
1736
1621
  tokenInfo.scopeConfiguration.priceChain
@@ -1744,7 +1629,7 @@ function handleConfigUpdate(
1744
1629
  )
1745
1630
  ) {
1746
1631
  updateReserveIxnsArgs.push({
1747
- mode: UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator,
1632
+ mode: UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator + 1,
1748
1633
  value: updateReserveConfigEncodedValue(
1749
1634
  UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator,
1750
1635
  tokenInfo.scopeConfiguration.twapChain
@@ -1757,7 +1642,7 @@ function handleConfigUpdate(
1757
1642
  )
1758
1643
  ) {
1759
1644
  updateReserveIxnsArgs.push({
1760
- mode: UpdateConfigMode.UpdateSwitchboardFeed.discriminator,
1645
+ mode: UpdateConfigMode.UpdateSwitchboardFeed.discriminator + 1,
1761
1646
  value: updateReserveConfigEncodedValue(
1762
1647
  UpdateConfigMode.UpdateSwitchboardFeed.discriminator,
1763
1648
  tokenInfo.switchboardConfiguration.priceAggregator
@@ -1770,7 +1655,7 @@ function handleConfigUpdate(
1770
1655
  )
1771
1656
  ) {
1772
1657
  updateReserveIxnsArgs.push({
1773
- mode: UpdateConfigMode.UpdateSwitchboardTwapFeed.discriminator,
1658
+ mode: UpdateConfigMode.UpdateSwitchboardTwapFeed.discriminator + 1,
1774
1659
  value: updateReserveConfigEncodedValue(
1775
1660
  UpdateConfigMode.UpdateSwitchboardTwapFeed.discriminator,
1776
1661
  tokenInfo.switchboardConfiguration.twapAggregator
@@ -1779,7 +1664,7 @@ function handleConfigUpdate(
1779
1664
  }
1780
1665
  if (!reserve.config.tokenInfo.pythConfiguration.price.equals(tokenInfo.pythConfiguration.price)) {
1781
1666
  updateReserveIxnsArgs.push({
1782
- mode: UpdateConfigMode.UpdatePythPrice.discriminator,
1667
+ mode: UpdateConfigMode.UpdatePythPrice.discriminator + 1,
1783
1668
  value: updateReserveConfigEncodedValue(
1784
1669
  UpdateConfigMode.UpdatePythPrice.discriminator,
1785
1670
  tokenInfo.pythConfiguration.price
@@ -1788,7 +1673,7 @@ function handleConfigUpdate(
1788
1673
  }
1789
1674
  if (reserve.config.tokenInfo.blockPriceUsage !== tokenInfo.blockPriceUsage) {
1790
1675
  updateReserveIxnsArgs.push({
1791
- mode: UpdateConfigMode.UpdateBlockPriceUsage.discriminator,
1676
+ mode: UpdateConfigMode.UpdateBlockPriceUsage.discriminator + 1,
1792
1677
  value: updateReserveConfigEncodedValue(
1793
1678
  UpdateConfigMode.UpdateBlockPriceUsage.discriminator,
1794
1679
  tokenInfo.blockPriceUsage
@@ -1797,7 +1682,7 @@ function handleConfigUpdate(
1797
1682
  }
1798
1683
  if (!reserve.config.tokenInfo.scopeConfiguration.priceFeed.equals(tokenInfo.scopeConfiguration.priceFeed)) {
1799
1684
  updateReserveIxnsArgs.push({
1800
- mode: UpdateConfigMode.UpdateScopePriceFeed.discriminator,
1685
+ mode: UpdateConfigMode.UpdateScopePriceFeed.discriminator + 1,
1801
1686
  value: updateReserveConfigEncodedValue(
1802
1687
  UpdateConfigMode.UpdateScopePriceFeed.discriminator,
1803
1688
  tokenInfo.scopeConfiguration.priceFeed
@@ -1809,19 +1694,12 @@ function handleConfigUpdate(
1809
1694
  case 'depositWithdrawalCap':
1810
1695
  if (reserve === undefined) {
1811
1696
  updateReserveIxnsArgs.push({
1812
- mode: UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator,
1697
+ mode: UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator + 1,
1813
1698
  value: updateReserveConfigEncodedValue(UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator, [
1814
1699
  reserveConfig.depositWithdrawalCap.configCapacity.toNumber(),
1815
1700
  reserveConfig.depositWithdrawalCap.configIntervalLengthSeconds.toNumber(),
1816
1701
  ]),
1817
1702
  });
1818
- updateReserveIxnsArgs.push({
1819
- mode: UpdateConfigMode.UpdateDepositWithdrawalCapCurrentTotal.discriminator,
1820
- value: updateReserveConfigEncodedValue(
1821
- UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator,
1822
- reserveConfig.depositWithdrawalCap.currentTotal.toNumber()
1823
- ),
1824
- });
1825
1703
  } else if (
1826
1704
  !reserve.config.depositWithdrawalCap.configCapacity.eq(reserveConfig.depositWithdrawalCap.configCapacity) ||
1827
1705
  !reserve.config.depositWithdrawalCap.configIntervalLengthSeconds.eq(
@@ -1829,7 +1707,7 @@ function handleConfigUpdate(
1829
1707
  )
1830
1708
  ) {
1831
1709
  updateReserveIxnsArgs.push({
1832
- mode: UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator,
1710
+ mode: UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator + 1,
1833
1711
  value: updateReserveConfigEncodedValue(UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator, [
1834
1712
  reserveConfig.depositWithdrawalCap.configCapacity.toNumber(),
1835
1713
  reserveConfig.depositWithdrawalCap.configIntervalLengthSeconds.toNumber(),
@@ -1839,7 +1717,7 @@ function handleConfigUpdate(
1839
1717
  !reserve.config.depositWithdrawalCap.currentTotal.eq(reserveConfig.depositWithdrawalCap.currentTotal)
1840
1718
  ) {
1841
1719
  updateReserveIxnsArgs.push({
1842
- mode: UpdateConfigMode.UpdateDepositWithdrawalCapCurrentTotal.discriminator,
1720
+ mode: UpdateConfigMode.UpdateDepositWithdrawalCapCurrentTotal.discriminator + 1,
1843
1721
  value: updateReserveConfigEncodedValue(
1844
1722
  UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator,
1845
1723
  reserveConfig.depositWithdrawalCap.currentTotal.toNumber()
@@ -1850,19 +1728,12 @@ function handleConfigUpdate(
1850
1728
  case 'debtWithdrawalCap':
1851
1729
  if (reserve === undefined) {
1852
1730
  updateReserveIxnsArgs.push({
1853
- mode: UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator,
1731
+ mode: UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator + 1,
1854
1732
  value: updateReserveConfigEncodedValue(UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator, [
1855
1733
  reserveConfig.debtWithdrawalCap.configCapacity.toNumber(),
1856
1734
  reserveConfig.debtWithdrawalCap.configIntervalLengthSeconds.toNumber(),
1857
1735
  ]),
1858
1736
  });
1859
- updateReserveIxnsArgs.push({
1860
- mode: UpdateConfigMode.UpdateDebtWithdrawalCapCurrentTotal.discriminator,
1861
- value: updateReserveConfigEncodedValue(
1862
- UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator,
1863
- reserveConfig.debtWithdrawalCap.currentTotal.toNumber()
1864
- ),
1865
- });
1866
1737
  } else if (
1867
1738
  !reserve.config.debtWithdrawalCap.configCapacity.eq(reserveConfig.debtWithdrawalCap.configCapacity) ||
1868
1739
  !reserve.config.debtWithdrawalCap.configIntervalLengthSeconds.eq(
@@ -1870,7 +1741,7 @@ function handleConfigUpdate(
1870
1741
  )
1871
1742
  ) {
1872
1743
  updateReserveIxnsArgs.push({
1873
- mode: UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator,
1744
+ mode: UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator + 1,
1874
1745
  value: updateReserveConfigEncodedValue(UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator, [
1875
1746
  reserveConfig.debtWithdrawalCap.configCapacity.toNumber(),
1876
1747
  reserveConfig.debtWithdrawalCap.configIntervalLengthSeconds.toNumber(),
@@ -1878,7 +1749,7 @@ function handleConfigUpdate(
1878
1749
  });
1879
1750
  } else if (!reserve.config.debtWithdrawalCap.currentTotal.eq(reserveConfig.debtWithdrawalCap.currentTotal)) {
1880
1751
  updateReserveIxnsArgs.push({
1881
- mode: UpdateConfigMode.UpdateDebtWithdrawalCapCurrentTotal.discriminator,
1752
+ mode: UpdateConfigMode.UpdateDebtWithdrawalCapCurrentTotal.discriminator + 1,
1882
1753
  value: updateReserveConfigEncodedValue(
1883
1754
  UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator,
1884
1755
  reserveConfig.debtWithdrawalCap.currentTotal.toNumber()
@@ -1887,41 +1758,26 @@ function handleConfigUpdate(
1887
1758
  }
1888
1759
  break;
1889
1760
  case 'elevationGroups':
1890
- if (reserve === undefined) {
1761
+ if (
1762
+ reserve === undefined ||
1763
+ !sameLengthArrayEquals(reserve.config.elevationGroups, reserveConfig.elevationGroups)
1764
+ ) {
1891
1765
  updateReserveIxnsArgs.push({
1892
- mode: UpdateConfigMode.UpdateElevationGroup.discriminator,
1766
+ mode: UpdateConfigMode.UpdateElevationGroup.discriminator + 1,
1893
1767
  value: updateReserveConfigEncodedValue(
1894
1768
  UpdateConfigMode.UpdateElevationGroup.discriminator,
1895
1769
  reserveConfig.elevationGroups
1896
1770
  ),
1897
1771
  });
1898
- } else {
1899
- for (let i = 0; i < reserveConfig.elevationGroups.length; i++) {
1900
- if (reserve.config.elevationGroups[i] !== reserveConfig.elevationGroups[i]) {
1901
- updateReserveIxnsArgs.push({
1902
- mode: UpdateConfigMode.UpdateElevationGroup.discriminator,
1903
- value: updateReserveConfigEncodedValue(
1904
- UpdateConfigMode.UpdateElevationGroup.discriminator,
1905
- reserveConfig.elevationGroups
1906
- ),
1907
- });
1908
- break;
1909
- }
1910
- }
1911
1772
  }
1912
1773
  break;
1913
1774
  case 'disableUsageAsCollOutsideEmode':
1914
- if (reserve === undefined) {
1915
- updateReserveIxnsArgs.push({
1916
- mode: UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator,
1917
- value: updateReserveConfigEncodedValue(
1918
- UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator,
1919
- reserveConfig.disableUsageAsCollOutsideEmode
1920
- ),
1921
- });
1922
- } else if (reserve.config.disableUsageAsCollOutsideEmode !== reserveConfig.disableUsageAsCollOutsideEmode) {
1775
+ if (
1776
+ reserve === undefined ||
1777
+ reserve.config.disableUsageAsCollOutsideEmode !== reserveConfig.disableUsageAsCollOutsideEmode
1778
+ ) {
1923
1779
  updateReserveIxnsArgs.push({
1924
- mode: UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator,
1780
+ mode: UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator + 1,
1925
1781
  value: updateReserveConfigEncodedValue(
1926
1782
  UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator,
1927
1783
  reserveConfig.disableUsageAsCollOutsideEmode
@@ -1930,19 +1786,12 @@ function handleConfigUpdate(
1930
1786
  }
1931
1787
  break;
1932
1788
  case 'utilizationLimitBlockBorrowingAbovePct':
1933
- if (reserve === undefined) {
1934
- updateReserveIxnsArgs.push({
1935
- mode: UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator,
1936
- value: updateReserveConfigEncodedValue(
1937
- UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator,
1938
- reserveConfig.utilizationLimitBlockBorrowingAbovePct
1939
- ),
1940
- });
1941
- } else if (
1789
+ if (
1790
+ reserve === undefined ||
1942
1791
  reserve.config.utilizationLimitBlockBorrowingAbovePct !== reserveConfig.utilizationLimitBlockBorrowingAbovePct
1943
1792
  ) {
1944
1793
  updateReserveIxnsArgs.push({
1945
- mode: UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator,
1794
+ mode: UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator + 1,
1946
1795
  value: updateReserveConfigEncodedValue(
1947
1796
  UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator,
1948
1797
  reserveConfig.utilizationLimitBlockBorrowingAbovePct
@@ -1951,17 +1800,9 @@ function handleConfigUpdate(
1951
1800
  }
1952
1801
  break;
1953
1802
  case 'autodeleverageEnabled':
1954
- if (reserve === undefined) {
1955
- updateReserveIxnsArgs.push({
1956
- mode: UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator,
1957
- value: updateReserveConfigEncodedValue(
1958
- UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator,
1959
- reserveConfig.autodeleverageEnabled
1960
- ),
1961
- });
1962
- } else if (reserve.config.autodeleverageEnabled !== reserveConfig.autodeleverageEnabled) {
1803
+ if (reserve === undefined || reserve.config.autodeleverageEnabled !== reserveConfig.autodeleverageEnabled) {
1963
1804
  updateReserveIxnsArgs.push({
1964
- mode: UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator,
1805
+ mode: UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator + 1,
1965
1806
  value: updateReserveConfigEncodedValue(
1966
1807
  UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator,
1967
1808
  reserveConfig.autodeleverageEnabled
@@ -1970,67 +1811,44 @@ function handleConfigUpdate(
1970
1811
  }
1971
1812
  break;
1972
1813
  case 'borrowLimitOutsideElevationGroup':
1973
- if (reserve === undefined) {
1814
+ if (
1815
+ reserve === undefined ||
1816
+ !reserve.config.borrowLimitOutsideElevationGroup.eq(reserveConfig.borrowLimitOutsideElevationGroup)
1817
+ ) {
1974
1818
  updateReserveIxnsArgs.push({
1975
- mode: UpdateConfigMode.UpdateBorrowLimitOutsideElevationGroup.discriminator,
1819
+ mode: UpdateConfigMode.UpdateBorrowLimitOutsideElevationGroup.discriminator + 1,
1976
1820
  value: updateReserveConfigEncodedValue(
1977
1821
  UpdateConfigMode.UpdateBorrowLimitOutsideElevationGroup.discriminator,
1978
1822
  reserveConfig.borrowLimitOutsideElevationGroup.toNumber()
1979
1823
  ),
1980
1824
  });
1981
- } else if (!reserve.config.borrowLimitOutsideElevationGroup.eq(reserveConfig.borrowLimitOutsideElevationGroup)) {
1982
- updateReserveIxnsArgs.push({
1983
- mode: UpdateConfigMode.UpdateBorrowLimitOutsideElevationGroup.discriminator,
1984
- value: updateReserveConfigEncodedValue(
1985
- UpdateConfigMode.UpdateBorrowLimitOutsideElevationGroup.discriminator,
1986
- BigInt(reserveConfig.borrowLimitOutsideElevationGroup.toString())
1987
- ),
1988
- });
1989
1825
  }
1990
1826
  break;
1991
1827
  case 'borrowLimitAgainstThisCollateralInElevationGroup':
1992
- if (reserve === undefined) {
1828
+ if (
1829
+ reserve === undefined ||
1830
+ !sameLengthArrayEquals(
1831
+ reserve.config.borrowLimitAgainstThisCollateralInElevationGroup,
1832
+ reserveConfig.borrowLimitAgainstThisCollateralInElevationGroup
1833
+ )
1834
+ ) {
1993
1835
  updateReserveIxnsArgs.push({
1994
- mode: UpdateConfigMode.UpdateBorrowLimitsInElevationGroupAgainstThisReserve.discriminator,
1836
+ mode: UpdateConfigMode.UpdateBorrowLimitsInElevationGroupAgainstThisReserve.discriminator + 1,
1995
1837
  value: updateReserveConfigEncodedValue(
1996
1838
  UpdateConfigMode.UpdateBorrowLimitsInElevationGroupAgainstThisReserve.discriminator,
1997
1839
  reserveConfig.borrowLimitAgainstThisCollateralInElevationGroup.map((borrowLimit) => borrowLimit.toNumber())
1998
1840
  ),
1999
1841
  });
2000
- } else {
2001
- for (let i = 0; i < reserveConfig.borrowLimitAgainstThisCollateralInElevationGroup.length; i++) {
2002
- if (
2003
- reserve.config.borrowLimitAgainstThisCollateralInElevationGroup[i] !==
2004
- reserveConfig.borrowLimitAgainstThisCollateralInElevationGroup[i]
2005
- ) {
2006
- updateReserveIxnsArgs.push({
2007
- mode: UpdateConfigMode.UpdateBorrowLimitsInElevationGroupAgainstThisReserve.discriminator,
2008
- value: updateReserveConfigEncodedValue(
2009
- UpdateConfigMode.UpdateBorrowLimitsInElevationGroupAgainstThisReserve.discriminator,
2010
- reserveConfig.borrowLimitAgainstThisCollateralInElevationGroup.map((borrowLimit) =>
2011
- borrowLimit.toNumber()
2012
- )
2013
- ),
2014
- });
2015
- }
2016
- }
2017
1842
  }
1843
+
2018
1844
  break;
2019
1845
  case 'deleveragingBonusIncreaseBpsPerDay':
2020
- if (reserve === undefined) {
2021
- updateReserveIxnsArgs.push({
2022
- mode: UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator,
2023
- value: updateReserveConfigEncodedValue(
2024
- UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator,
2025
- reserveConfig.deleveragingBonusIncreaseBpsPerDay.toNumber()
2026
- ),
2027
- });
2028
- } else if (
2029
- reserve.config.deleveragingBonusIncreaseBpsPerDay.toNumber() !==
2030
- reserveConfig.deleveragingBonusIncreaseBpsPerDay.toNumber()
1846
+ if (
1847
+ reserve === undefined ||
1848
+ !reserve.config.deleveragingBonusIncreaseBpsPerDay.eq(reserveConfig.deleveragingBonusIncreaseBpsPerDay)
2031
1849
  ) {
2032
1850
  updateReserveIxnsArgs.push({
2033
- mode: UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator,
1851
+ mode: UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator + 1,
2034
1852
  value: updateReserveConfigEncodedValue(
2035
1853
  UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator,
2036
1854
  reserveConfig.deleveragingBonusIncreaseBpsPerDay.toNumber()
@@ -2078,7 +1896,7 @@ export function parseForChangesReserveConfigAndGetIxs(
2078
1896
  reserveConfig: ReserveConfig,
2079
1897
  programId: PublicKey
2080
1898
  ) {
2081
- const updateReserveIxnsArgs: { mode: number; value: Uint8Array }[] = [];
1899
+ let updateReserveIxnsArgs: UpdateReserveIxnsArgs[] = [];
2082
1900
  for (const key in reserveConfig.toEncodable()) {
2083
1901
  if (isExcludedReserveConfigKey(key)) {
2084
1902
  continue;
@@ -2088,14 +1906,21 @@ export function parseForChangesReserveConfigAndGetIxs(
2088
1906
 
2089
1907
  const ixns: TransactionInstruction[] = [];
2090
1908
 
1909
+ updateReserveIxnsArgs = sortIxnsByPriority(updateReserveIxnsArgs);
1910
+
2091
1911
  updateReserveIxnsArgs.forEach((updateReserveConfigArgs) => {
1912
+ let skipValidation = false;
1913
+ if (modeMatches(updateReserveConfigArgs.mode) && !reserve?.liquidity.availableAmount.gten(MIN_INITIAL_DEPOSIT)) {
1914
+ skipValidation = true;
1915
+ }
2092
1916
  ixns.push(
2093
1917
  updateReserveConfigIx(
2094
1918
  marketWithAddress,
2095
1919
  reserveAddress,
2096
- updateReserveConfigArgs.mode + 1,
1920
+ updateReserveConfigArgs.mode,
2097
1921
  updateReserveConfigArgs.value,
2098
- programId
1922
+ programId,
1923
+ skipValidation
2099
1924
  )
2100
1925
  );
2101
1926
  });
@@ -2215,11 +2040,11 @@ export function updateReserveConfigEncodedValue(
2215
2040
  }
2216
2041
 
2217
2042
  export function serializeBorrowRateCurve(curve: BorrowRateCurve): Buffer {
2218
- const buffer = Buffer.alloc(4 + 8 * curve.points.length);
2043
+ const buffer = Buffer.alloc(8 * curve.points.length);
2219
2044
  buffer.writeUInt32LE(curve.points.length, 0);
2220
2045
  for (let i = 0; i < curve.points.length; i++) {
2221
- buffer.writeUInt32LE(curve.points[i].utilizationRateBps, 4 + 8 * i);
2222
- buffer.writeUInt32LE(curve.points[i].borrowRateBps, 8 + 8 * i);
2046
+ buffer.writeUInt32LE(curve.points[i].utilizationRateBps, 8 * i);
2047
+ buffer.writeUInt32LE(curve.points[i].borrowRateBps, 4 + 8 * i);
2223
2048
  }
2224
2049
  return buffer;
2225
2050
  }
@@ -2228,3 +2053,37 @@ export type ReserveWithAddress = {
2228
2053
  address: PublicKey;
2229
2054
  state: Reserve;
2230
2055
  };
2056
+
2057
+ export type UpdateReserveIxnsArgs = {
2058
+ mode: number;
2059
+ value: Uint8Array;
2060
+ };
2061
+
2062
+ export const modeMatches = (mode: number): boolean => {
2063
+ const validModes = [
2064
+ UpdateConfigMode.UpdateScopePriceFeed.discriminator + 1,
2065
+ UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator + 1,
2066
+ UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator + 1,
2067
+ UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator + 1,
2068
+ UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator + 1,
2069
+ UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator + 1,
2070
+ UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator + 1,
2071
+ ];
2072
+ return validModes.includes(mode);
2073
+ };
2074
+
2075
+ // Sort update reserve ixns, to first have the oracle config updates first
2076
+ // In order to skip the validation for the scope config updates
2077
+ export const sortIxnsByPriority = (updateReserveIxnsArgs: UpdateReserveIxnsArgs[]) => {
2078
+ return updateReserveIxnsArgs.sort((a, b) => {
2079
+ const isPriorityA = a.mode === 20 || a.mode === 16;
2080
+ const isPriorityB = b.mode === 20 || b.mode === 16;
2081
+ if (isPriorityA && !isPriorityB) {
2082
+ return -1;
2083
+ }
2084
+ if (isPriorityB && !isPriorityA) {
2085
+ return 1;
2086
+ }
2087
+ return 0;
2088
+ });
2089
+ };