@kamino-finance/klend-sdk 5.11.12-beta.0 → 5.11.12

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