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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/dist/classes/farm_utils.d.ts.map +1 -1
  2. package/dist/classes/farm_utils.js +10 -3
  3. package/dist/classes/farm_utils.js.map +1 -1
  4. package/dist/classes/manager.d.ts +12 -5
  5. package/dist/classes/manager.d.ts.map +1 -1
  6. package/dist/classes/manager.js +300 -39
  7. package/dist/classes/manager.js.map +1 -1
  8. package/dist/classes/obligation.d.ts.map +1 -1
  9. package/dist/classes/obligation.js +0 -14
  10. package/dist/classes/obligation.js.map +1 -1
  11. package/dist/classes/reserve.d.ts +14 -5
  12. package/dist/classes/reserve.d.ts.map +1 -1
  13. package/dist/classes/reserve.js +463 -91
  14. package/dist/classes/reserve.js.map +1 -1
  15. package/dist/classes/utils.d.ts +0 -1
  16. package/dist/classes/utils.d.ts.map +1 -1
  17. package/dist/classes/utils.js +0 -12
  18. package/dist/classes/utils.js.map +1 -1
  19. package/dist/classes/vault.d.ts +2 -1
  20. package/dist/classes/vault.d.ts.map +1 -1
  21. package/dist/classes/vault.js +9 -5
  22. package/dist/classes/vault.js.map +1 -1
  23. package/dist/client_kamino_manager.d.ts.map +1 -1
  24. package/dist/client_kamino_manager.js +26 -27
  25. package/dist/client_kamino_manager.js.map +1 -1
  26. package/dist/idl.json +9 -186
  27. package/dist/idl_codegen/accounts/LendingMarket.d.ts +3 -24
  28. package/dist/idl_codegen/accounts/LendingMarket.d.ts.map +1 -1
  29. package/dist/idl_codegen/accounts/LendingMarket.js +7 -25
  30. package/dist/idl_codegen/accounts/LendingMarket.js.map +1 -1
  31. package/dist/idl_codegen/accounts/index.d.ts +0 -2
  32. package/dist/idl_codegen/accounts/index.d.ts.map +1 -1
  33. package/dist/idl_codegen/accounts/index.js +1 -3
  34. package/dist/idl_codegen/accounts/index.js.map +1 -1
  35. package/dist/idl_codegen/errors/custom.d.ts +1 -25
  36. package/dist/idl_codegen/errors/custom.d.ts.map +1 -1
  37. package/dist/idl_codegen/errors/custom.js +1 -43
  38. package/dist/idl_codegen/errors/custom.js.map +1 -1
  39. package/dist/idl_codegen/instructions/idlMissingTypes.d.ts +1 -2
  40. package/dist/idl_codegen/instructions/idlMissingTypes.d.ts.map +1 -1
  41. package/dist/idl_codegen/instructions/idlMissingTypes.js +1 -2
  42. package/dist/idl_codegen/instructions/idlMissingTypes.js.map +1 -1
  43. package/dist/idl_codegen/instructions/index.d.ts +0 -6
  44. package/dist/idl_codegen/instructions/index.d.ts.map +1 -1
  45. package/dist/idl_codegen/instructions/index.js +1 -7
  46. package/dist/idl_codegen/instructions/index.js.map +1 -1
  47. package/dist/idl_codegen/instructions/updateReserveConfig.d.ts +3 -4
  48. package/dist/idl_codegen/instructions/updateReserveConfig.d.ts.map +1 -1
  49. package/dist/idl_codegen/instructions/updateReserveConfig.js +3 -5
  50. package/dist/idl_codegen/instructions/updateReserveConfig.js.map +1 -1
  51. package/dist/idl_codegen/instructions/withdrawProtocolFee.d.ts +2 -2
  52. package/dist/idl_codegen/instructions/withdrawProtocolFee.d.ts.map +1 -1
  53. package/dist/idl_codegen/instructions/withdrawProtocolFee.js +6 -2
  54. package/dist/idl_codegen/instructions/withdrawProtocolFee.js.map +1 -1
  55. package/dist/idl_codegen/types/UpdateLendingMarketMode.d.ts +7 -33
  56. package/dist/idl_codegen/types/UpdateLendingMarketMode.d.ts.map +1 -1
  57. package/dist/idl_codegen/types/UpdateLendingMarketMode.js +12 -60
  58. package/dist/idl_codegen/types/UpdateLendingMarketMode.js.map +1 -1
  59. package/dist/idl_codegen/types/index.d.ts +2 -6
  60. package/dist/idl_codegen/types/index.d.ts.map +1 -1
  61. package/dist/idl_codegen/types/index.js +1 -3
  62. package/dist/idl_codegen/types/index.js.map +1 -1
  63. package/dist/utils/accountListing.d.ts +1 -1
  64. package/dist/utils/accountListing.d.ts.map +1 -1
  65. package/dist/utils/accountListing.js +2 -2
  66. package/dist/utils/accountListing.js.map +1 -1
  67. package/dist/utils/lookupTable.d.ts.map +1 -1
  68. package/dist/utils/lookupTable.js +6 -1
  69. package/dist/utils/lookupTable.js.map +1 -1
  70. package/dist/utils/managerTypes.d.ts.map +1 -1
  71. package/dist/utils/managerTypes.js +4 -10
  72. package/dist/utils/managerTypes.js.map +1 -1
  73. package/dist/utils/seeds.d.ts +0 -16
  74. package/dist/utils/seeds.d.ts.map +1 -1
  75. package/dist/utils/seeds.js +1 -23
  76. package/dist/utils/seeds.js.map +1 -1
  77. package/package.json +1 -1
  78. package/src/classes/farm_utils.ts +11 -3
  79. package/src/classes/manager.ts +401 -51
  80. package/src/classes/obligation.ts +0 -16
  81. package/src/classes/reserve.ts +783 -119
  82. package/src/classes/utils.ts +0 -12
  83. package/src/classes/vault.ts +18 -7
  84. package/src/client_kamino_manager.ts +34 -42
  85. package/src/idl.json +9 -186
  86. package/src/idl_codegen/accounts/LendingMarket.ts +9 -41
  87. package/src/idl_codegen/accounts/index.ts +0 -2
  88. package/src/idl_codegen/errors/custom.ts +0 -45
  89. package/src/idl_codegen/instructions/idlMissingTypes.ts +2 -4
  90. package/src/idl_codegen/instructions/index.ts +0 -9
  91. package/src/idl_codegen/instructions/updateReserveConfig.ts +5 -7
  92. package/src/idl_codegen/instructions/withdrawProtocolFee.ts +8 -4
  93. package/src/idl_codegen/types/UpdateLendingMarketMode.ts +13 -73
  94. package/src/idl_codegen/types/index.ts +2 -16
  95. package/src/utils/accountListing.ts +3 -2
  96. package/src/utils/lookupTable.ts +7 -1
  97. package/src/utils/managerTypes.ts +4 -10
  98. package/src/utils/seeds.ts +0 -25
  99. package/dist/classes/configItems.d.ts +0 -166
  100. package/dist/classes/configItems.d.ts.map +0 -1
  101. package/dist/classes/configItems.js +0 -202
  102. package/dist/classes/configItems.js.map +0 -1
  103. package/dist/idl_codegen/accounts/GlobalConfig.d.ts +0 -40
  104. package/dist/idl_codegen/accounts/GlobalConfig.d.ts.map +0 -1
  105. package/dist/idl_codegen/accounts/GlobalConfig.js +0 -116
  106. package/dist/idl_codegen/accounts/GlobalConfig.js.map +0 -1
  107. package/dist/idl_codegen/instructions/initGlobalConfig.d.ts +0 -10
  108. package/dist/idl_codegen/instructions/initGlobalConfig.d.ts.map +0 -1
  109. package/dist/idl_codegen/instructions/initGlobalConfig.js +0 -19
  110. package/dist/idl_codegen/instructions/initGlobalConfig.js.map +0 -1
  111. package/dist/idl_codegen/instructions/updateGlobalConfig.d.ts +0 -13
  112. package/dist/idl_codegen/instructions/updateGlobalConfig.d.ts.map +0 -1
  113. package/dist/idl_codegen/instructions/updateGlobalConfig.js +0 -61
  114. package/dist/idl_codegen/instructions/updateGlobalConfig.js.map +0 -1
  115. package/dist/idl_codegen/instructions/updateGlobalConfigAdmin.d.ts +0 -7
  116. package/dist/idl_codegen/instructions/updateGlobalConfigAdmin.d.ts.map +0 -1
  117. package/dist/idl_codegen/instructions/updateGlobalConfigAdmin.js +0 -16
  118. package/dist/idl_codegen/instructions/updateGlobalConfigAdmin.js.map +0 -1
  119. package/dist/idl_codegen/types/UpdateGlobalConfigMode.d.ts +0 -32
  120. package/dist/idl_codegen/types/UpdateGlobalConfigMode.d.ts.map +0 -1
  121. package/dist/idl_codegen/types/UpdateGlobalConfigMode.js +0 -108
  122. package/dist/idl_codegen/types/UpdateGlobalConfigMode.js.map +0 -1
  123. package/src/classes/configItems.ts +0 -295
  124. package/src/idl_codegen/accounts/GlobalConfig.ts +0 -125
  125. package/src/idl_codegen/instructions/initGlobalConfig.ts +0 -30
  126. package/src/idl_codegen/instructions/updateGlobalConfig.ts +0 -47
  127. package/src/idl_codegen/instructions/updateGlobalConfigAdmin.ts +0 -24
  128. package/src/idl_codegen/types/UpdateGlobalConfigMode.ts +0 -90
@@ -1,13 +1,48 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
5
38
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.RESERVE_CONFIG_UPDATER = exports.KaminoReserve = exports.DEFAULT_RECENT_SLOT_DURATION_MS = void 0;
39
+ exports.sortIxsByPriority = exports.modeMatches = exports.KaminoReserve = exports.DEFAULT_RECENT_SLOT_DURATION_MS = void 0;
7
40
  exports.createReserveIxs = createReserveIxs;
8
41
  exports.updateReserveConfigIx = updateReserveConfigIx;
9
42
  exports.updateEntireReserveConfigIx = updateEntireReserveConfigIx;
10
43
  exports.parseForChangesReserveConfigAndGetIxs = parseForChangesReserveConfigAndGetIxs;
44
+ exports.updateReserveConfigEncodedValue = updateReserveConfigEncodedValue;
45
+ exports.serializeBorrowRateCurve = serializeBorrowRateCurve;
11
46
  /* eslint-disable max-classes-per-file */
12
47
  const web3_js_1 = require("@solana/web3.js");
13
48
  const decimal_js_1 = __importDefault(require("decimal.js"));
@@ -16,9 +51,9 @@ const shared_1 = require("./shared");
16
51
  const accounts_1 = require("../idl_codegen/accounts");
17
52
  const types_1 = require("../idl_codegen/types");
18
53
  const utils_2 = require("./utils");
19
- const configItems_1 = require("./configItems");
20
54
  const fraction_1 = require("./fraction");
21
55
  const lib_1 = require("../lib");
56
+ const anchor = __importStar(require("@coral-xyz/anchor"));
22
57
  const spl_token_1 = require("@solana/spl-token");
23
58
  const kliquidity_sdk_1 = require("@kamino-finance/kliquidity-sdk");
24
59
  const farms_sdk_1 = require("@kamino-finance/farms-sdk");
@@ -885,115 +920,452 @@ async function createReserveIxs(connection, owner, ownerLiquiditySource, lending
885
920
  const initReserveIx = (0, lib_1.initReserve)(accounts, programId);
886
921
  return [createReserveIx, initReserveIx];
887
922
  }
888
- function updateReserveConfigIx(signer, marketAddress, reserveAddress, mode, value, programId, skipValidation = false) {
923
+ function updateReserveConfigIx(marketWithAddress, reserveAddress, modeDiscriminator, value, programId, skipValidation = false) {
924
+ value;
889
925
  const args = {
890
- mode,
891
- value,
926
+ mode: new anchor.BN(modeDiscriminator),
927
+ value: value,
892
928
  skipValidation,
893
929
  };
894
- const [globalConfig] = (0, utils_1.globalConfigPda)(programId);
895
930
  const accounts = {
896
- signer,
897
- lendingMarket: marketAddress,
931
+ lendingMarketOwner: marketWithAddress.state.lendingMarketOwner,
932
+ lendingMarket: marketWithAddress.address,
898
933
  reserve: reserveAddress,
899
- globalConfig,
900
934
  };
901
- return (0, lib_1.updateReserveConfig)(args, accounts, programId);
935
+ const ix = (0, lib_1.updateReserveConfig)(args, accounts, programId);
936
+ return ix;
902
937
  }
903
- exports.RESERVE_CONFIG_UPDATER = new configItems_1.ConfigUpdater(types_1.UpdateConfigMode.fromDecoded, types_1.ReserveConfig, (config) => ({
904
- [types_1.UpdateConfigMode.UpdateLoanToValuePct.kind]: config.loanToValuePct,
905
- [types_1.UpdateConfigMode.UpdateMaxLiquidationBonusBps.kind]: config.maxLiquidationBonusBps,
906
- [types_1.UpdateConfigMode.UpdateLiquidationThresholdPct.kind]: config.liquidationThresholdPct,
907
- [types_1.UpdateConfigMode.UpdateProtocolLiquidationFee.kind]: config.protocolLiquidationFeePct,
908
- [types_1.UpdateConfigMode.UpdateProtocolTakeRate.kind]: config.protocolTakeRatePct,
909
- [types_1.UpdateConfigMode.UpdateFeesBorrowFee.kind]: config.fees.borrowFeeSf,
910
- [types_1.UpdateConfigMode.UpdateFeesFlashLoanFee.kind]: config.fees.flashLoanFeeSf,
911
- [types_1.UpdateConfigMode.DeprecatedUpdateFeesReferralFeeBps.kind]: [], // deprecated
912
- [types_1.UpdateConfigMode.UpdateDepositLimit.kind]: config.depositLimit,
913
- [types_1.UpdateConfigMode.UpdateBorrowLimit.kind]: config.borrowLimit,
914
- [types_1.UpdateConfigMode.UpdateTokenInfoLowerHeuristic.kind]: config.tokenInfo.heuristic.lower,
915
- [types_1.UpdateConfigMode.UpdateTokenInfoUpperHeuristic.kind]: config.tokenInfo.heuristic.upper,
916
- [types_1.UpdateConfigMode.UpdateTokenInfoExpHeuristic.kind]: config.tokenInfo.heuristic.exp,
917
- [types_1.UpdateConfigMode.UpdateTokenInfoTwapDivergence.kind]: config.tokenInfo.maxTwapDivergenceBps,
918
- [types_1.UpdateConfigMode.UpdateTokenInfoScopeTwap.kind]: config.tokenInfo.scopeConfiguration.twapChain,
919
- [types_1.UpdateConfigMode.UpdateTokenInfoScopeChain.kind]: config.tokenInfo.scopeConfiguration.priceChain,
920
- [types_1.UpdateConfigMode.UpdateTokenInfoName.kind]: config.tokenInfo.name,
921
- [types_1.UpdateConfigMode.UpdateTokenInfoPriceMaxAge.kind]: config.tokenInfo.maxAgePriceSeconds,
922
- [types_1.UpdateConfigMode.UpdateTokenInfoTwapMaxAge.kind]: config.tokenInfo.maxAgeTwapSeconds,
923
- [types_1.UpdateConfigMode.UpdateScopePriceFeed.kind]: config.tokenInfo.scopeConfiguration.priceFeed,
924
- [types_1.UpdateConfigMode.UpdatePythPrice.kind]: config.tokenInfo.pythConfiguration.price,
925
- [types_1.UpdateConfigMode.UpdateSwitchboardFeed.kind]: config.tokenInfo.switchboardConfiguration.priceAggregator,
926
- [types_1.UpdateConfigMode.UpdateSwitchboardTwapFeed.kind]: config.tokenInfo.switchboardConfiguration.twapAggregator,
927
- [types_1.UpdateConfigMode.UpdateBorrowRateCurve.kind]: config.borrowRateCurve,
928
- [types_1.UpdateConfigMode.UpdateEntireReserveConfig.kind]: [], // technically `config` would be a valid thing here, but we actually do NOT want entire config update among ixs produced for field-by-field updates
929
- [types_1.UpdateConfigMode.UpdateDebtWithdrawalCap.kind]: new configItems_1.CompositeConfigItem(config.debtWithdrawalCap.configCapacity, config.debtWithdrawalCap.configIntervalLengthSeconds),
930
- [types_1.UpdateConfigMode.UpdateDepositWithdrawalCap.kind]: new configItems_1.CompositeConfigItem(config.depositWithdrawalCap.configCapacity, config.depositWithdrawalCap.configIntervalLengthSeconds),
931
- [types_1.UpdateConfigMode.DeprecatedUpdateDebtWithdrawalCapCurrentTotal.kind]: [], // deprecated
932
- [types_1.UpdateConfigMode.DeprecatedUpdateDepositWithdrawalCapCurrentTotal.kind]: [], // deprecated
933
- [types_1.UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.kind]: config.badDebtLiquidationBonusBps,
934
- [types_1.UpdateConfigMode.UpdateMinLiquidationBonusBps.kind]: config.minLiquidationBonusBps,
935
- [types_1.UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.kind]: config.deleveragingMarginCallPeriodSecs,
936
- [types_1.UpdateConfigMode.UpdateBorrowFactor.kind]: config.borrowFactorPct,
937
- [types_1.UpdateConfigMode.UpdateAssetTier.kind]: config.assetTier,
938
- [types_1.UpdateConfigMode.UpdateElevationGroup.kind]: config.elevationGroups,
939
- [types_1.UpdateConfigMode.UpdateDeleveragingThresholdDecreaseBpsPerDay.kind]: config.deleveragingThresholdDecreaseBpsPerDay,
940
- [types_1.UpdateConfigMode.DeprecatedUpdateMultiplierSideBoost.kind]: [], // deprecated
941
- [types_1.UpdateConfigMode.DeprecatedUpdateMultiplierTagBoost.kind]: [], // deprecated
942
- [types_1.UpdateConfigMode.UpdateReserveStatus.kind]: config.status,
943
- [types_1.UpdateConfigMode.UpdateFarmCollateral.kind]: [], // the farm fields live on the `Reserve` level...
944
- [types_1.UpdateConfigMode.UpdateFarmDebt.kind]: [], // ...so we are not concerned with them in the `ReserveConfig`'s field-by-field update tx
945
- [types_1.UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.kind]: config.disableUsageAsCollOutsideEmode,
946
- [types_1.UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.kind]: config.utilizationLimitBlockBorrowingAbovePct,
947
- [types_1.UpdateConfigMode.UpdateBlockPriceUsage.kind]: config.tokenInfo.blockPriceUsage,
948
- [types_1.UpdateConfigMode.UpdateBorrowLimitOutsideElevationGroup.kind]: config.borrowLimitOutsideElevationGroup,
949
- [types_1.UpdateConfigMode.UpdateBorrowLimitsInElevationGroupAgainstThisReserve.kind]: config.borrowLimitAgainstThisCollateralInElevationGroup,
950
- [types_1.UpdateConfigMode.UpdateHostFixedInterestRateBps.kind]: config.hostFixedInterestRateBps,
951
- [types_1.UpdateConfigMode.UpdateAutodeleverageEnabled.kind]: config.autodeleverageEnabled,
952
- [types_1.UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.kind]: config.deleveragingBonusIncreaseBpsPerDay,
953
- [types_1.UpdateConfigMode.UpdateProtocolOrderExecutionFee.kind]: config.protocolOrderExecutionFeePct,
954
- }));
955
- function updateEntireReserveConfigIx(signer, marketAddress, reserveAddress, reserveConfig, programId) {
938
+ const EXCLUDED_RESERVE_CONFIG_KEYS = ['reserved1', 'reserved2'];
939
+ function isExcludedReserveConfigKey(value) {
940
+ return EXCLUDED_RESERVE_CONFIG_KEYS.includes(value);
941
+ }
942
+ function handleConfigUpdate(key, reserve, reserveConfig, updateReserveIxsArgs) {
943
+ switch (key) {
944
+ case 'status':
945
+ if (reserve === undefined || reserve.config.status !== reserveConfig.status) {
946
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateReserveStatus.discriminator, reserveConfig.status));
947
+ }
948
+ break;
949
+ case 'assetTier':
950
+ if (reserve === undefined || reserve.config.assetTier !== reserveConfig.assetTier) {
951
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateAssetTier.discriminator, reserveConfig.assetTier));
952
+ }
953
+ break;
954
+ case 'hostFixedInterestRateBps':
955
+ if (reserve === undefined || reserve.config.hostFixedInterestRateBps !== reserveConfig.hostFixedInterestRateBps) {
956
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateHostFixedInterestRateBps.discriminator, reserveConfig.hostFixedInterestRateBps));
957
+ }
958
+ break;
959
+ case 'protocolTakeRatePct':
960
+ if (reserve === undefined || reserve.config.protocolTakeRatePct !== reserveConfig.protocolTakeRatePct) {
961
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateProtocolTakeRate.discriminator, reserveConfig.protocolTakeRatePct));
962
+ }
963
+ break;
964
+ case 'protocolLiquidationFeePct':
965
+ if (reserve === undefined ||
966
+ reserve.config.protocolLiquidationFeePct !== reserveConfig.protocolLiquidationFeePct) {
967
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator, reserveConfig.protocolLiquidationFeePct));
968
+ }
969
+ break;
970
+ case 'protocolOrderExecutionFeePct':
971
+ if (reserve === undefined ||
972
+ reserve.config.protocolOrderExecutionFeePct !== reserveConfig.protocolOrderExecutionFeePct) {
973
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateProtocolOrderExecutionFee.discriminator, reserveConfig.protocolOrderExecutionFeePct));
974
+ }
975
+ break;
976
+ case 'loanToValuePct':
977
+ if (reserve === undefined || reserve.config.loanToValuePct !== reserveConfig.loanToValuePct) {
978
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateLoanToValuePct.discriminator, reserveConfig.loanToValuePct));
979
+ }
980
+ break;
981
+ case 'liquidationThresholdPct':
982
+ if (reserve === undefined || reserve.config.liquidationThresholdPct !== reserveConfig.liquidationThresholdPct) {
983
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateLiquidationThresholdPct.discriminator, reserveConfig.liquidationThresholdPct));
984
+ }
985
+ break;
986
+ case 'minLiquidationBonusBps':
987
+ if (reserve === undefined || reserve.config.minLiquidationBonusBps !== reserveConfig.minLiquidationBonusBps) {
988
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator, reserveConfig.minLiquidationBonusBps));
989
+ }
990
+ break;
991
+ case 'maxLiquidationBonusBps':
992
+ if (reserve === undefined || reserve.config.maxLiquidationBonusBps !== reserveConfig.maxLiquidationBonusBps) {
993
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator, reserveConfig.maxLiquidationBonusBps));
994
+ }
995
+ break;
996
+ case 'badDebtLiquidationBonusBps':
997
+ if (reserve === undefined ||
998
+ reserve.config.badDebtLiquidationBonusBps !== reserveConfig.badDebtLiquidationBonusBps) {
999
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator, reserveConfig.badDebtLiquidationBonusBps));
1000
+ }
1001
+ break;
1002
+ case 'deleveragingMarginCallPeriodSecs':
1003
+ if (reserve === undefined ||
1004
+ !reserve.config.deleveragingMarginCallPeriodSecs.eq(reserveConfig.deleveragingMarginCallPeriodSecs)) {
1005
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator, reserveConfig.deleveragingMarginCallPeriodSecs.toNumber()));
1006
+ }
1007
+ break;
1008
+ case 'deleveragingThresholdDecreaseBpsPerDay':
1009
+ if (reserve === undefined ||
1010
+ !reserve.config.deleveragingThresholdDecreaseBpsPerDay.eq(reserveConfig.deleveragingThresholdDecreaseBpsPerDay)) {
1011
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateDeleveragingThresholdDecreaseBpsPerDay.discriminator, reserveConfig.deleveragingThresholdDecreaseBpsPerDay.toNumber()));
1012
+ }
1013
+ break;
1014
+ case 'fees':
1015
+ if (reserve === undefined || !reserve.config.fees.borrowFeeSf.eq(reserveConfig.fees.borrowFeeSf)) {
1016
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateFeesBorrowFee.discriminator, reserveConfig.fees.borrowFeeSf.toNumber()));
1017
+ }
1018
+ if (reserve === undefined || !reserve.config.fees.flashLoanFeeSf.eq(reserveConfig.fees.flashLoanFeeSf)) {
1019
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator, reserveConfig.fees.flashLoanFeeSf.toNumber()));
1020
+ }
1021
+ break;
1022
+ case 'borrowRateCurve':
1023
+ if (reserve === undefined) {
1024
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateBorrowRateCurve.discriminator, reserveConfig.borrowRateCurve));
1025
+ }
1026
+ else {
1027
+ let shouldBorrowCurveBeUpdated = false;
1028
+ for (let i = 0; i < reserveConfig.borrowRateCurve.points.length; i++) {
1029
+ if (reserve.config.borrowRateCurve.points[i].utilizationRateBps !==
1030
+ reserveConfig.borrowRateCurve.points[i].utilizationRateBps ||
1031
+ reserve.config.borrowRateCurve.points[i].borrowRateBps !==
1032
+ reserveConfig.borrowRateCurve.points[i].borrowRateBps) {
1033
+ shouldBorrowCurveBeUpdated = true;
1034
+ break;
1035
+ }
1036
+ }
1037
+ if (shouldBorrowCurveBeUpdated) {
1038
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateBorrowRateCurve.discriminator, reserveConfig.borrowRateCurve));
1039
+ break;
1040
+ }
1041
+ }
1042
+ break;
1043
+ case 'borrowFactorPct':
1044
+ if (reserve === undefined || !reserve.config.borrowFactorPct.eq(reserveConfig.borrowFactorPct)) {
1045
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateBorrowFactor.discriminator, reserveConfig.borrowFactorPct.toNumber()));
1046
+ }
1047
+ break;
1048
+ case 'depositLimit':
1049
+ if (reserve === undefined || !reserve.config.depositLimit.eq(reserveConfig.depositLimit)) {
1050
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateDepositLimit.discriminator, BigInt(reserveConfig.depositLimit.toString())));
1051
+ }
1052
+ break;
1053
+ case 'borrowLimit':
1054
+ if (reserve === undefined || !reserve.config.borrowLimit.eq(reserveConfig.borrowLimit)) {
1055
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateBorrowLimit.discriminator, BigInt(reserveConfig.borrowLimit.toString())));
1056
+ }
1057
+ break;
1058
+ case 'tokenInfo':
1059
+ const tokenInfo = reserveConfig.tokenInfo;
1060
+ if (reserve === undefined) {
1061
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateTokenInfoName.discriminator, tokenInfo.name));
1062
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateTokenInfoLowerHeuristic.discriminator, tokenInfo.heuristic.lower.toNumber()));
1063
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateTokenInfoUpperHeuristic.discriminator, tokenInfo.heuristic.upper.toNumber()));
1064
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator, tokenInfo.heuristic.exp.toNumber()));
1065
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator, tokenInfo.maxTwapDivergenceBps.toNumber()));
1066
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator, tokenInfo.maxAgePriceSeconds.toNumber()));
1067
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator, tokenInfo.maxAgeTwapSeconds.toNumber()));
1068
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator, tokenInfo.scopeConfiguration.priceChain));
1069
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator, tokenInfo.scopeConfiguration.twapChain));
1070
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateSwitchboardFeed.discriminator, tokenInfo.switchboardConfiguration.priceAggregator));
1071
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateSwitchboardTwapFeed.discriminator, tokenInfo.switchboardConfiguration.twapAggregator));
1072
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdatePythPrice.discriminator, tokenInfo.pythConfiguration.price));
1073
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateBlockPriceUsage.discriminator, tokenInfo.blockPriceUsage));
1074
+ }
1075
+ else {
1076
+ if (!(0, utils_2.sameLengthArrayEquals)(reserve.config.tokenInfo.name, tokenInfo.name)) {
1077
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateTokenInfoName.discriminator, tokenInfo.name));
1078
+ }
1079
+ if (!reserve.config.tokenInfo.heuristic.lower.eq(tokenInfo.heuristic.lower)) {
1080
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateTokenInfoLowerHeuristic.discriminator, tokenInfo.heuristic.lower.toNumber()));
1081
+ }
1082
+ if (!reserve.config.tokenInfo.heuristic.upper.eq(tokenInfo.heuristic.upper)) {
1083
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateTokenInfoUpperHeuristic.discriminator, tokenInfo.heuristic.upper.toNumber()));
1084
+ }
1085
+ if (!reserve.config.tokenInfo.heuristic.exp.eq(tokenInfo.heuristic.exp)) {
1086
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator, tokenInfo.heuristic.exp.toNumber()));
1087
+ }
1088
+ if (!reserve.config.tokenInfo.maxTwapDivergenceBps.eq(tokenInfo.maxTwapDivergenceBps)) {
1089
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator, tokenInfo.maxTwapDivergenceBps.toNumber()));
1090
+ }
1091
+ if (!reserve.config.tokenInfo.maxAgePriceSeconds.eq(tokenInfo.maxAgePriceSeconds)) {
1092
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator, tokenInfo.maxAgePriceSeconds.toNumber()));
1093
+ }
1094
+ if (!reserve.config.tokenInfo.maxAgeTwapSeconds.eq(tokenInfo.maxAgeTwapSeconds)) {
1095
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator, tokenInfo.maxAgeTwapSeconds.toNumber()));
1096
+ }
1097
+ if (!(0, utils_2.sameLengthArrayEquals)(reserve.config.tokenInfo.scopeConfiguration.priceChain, tokenInfo.scopeConfiguration.priceChain)) {
1098
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator, tokenInfo.scopeConfiguration.priceChain));
1099
+ }
1100
+ if (!(0, utils_2.sameLengthArrayEquals)(reserve.config.tokenInfo.scopeConfiguration.twapChain, tokenInfo.scopeConfiguration.twapChain)) {
1101
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator, tokenInfo.scopeConfiguration.twapChain));
1102
+ }
1103
+ if (!reserve.config.tokenInfo.switchboardConfiguration.priceAggregator.equals(tokenInfo.switchboardConfiguration.priceAggregator)) {
1104
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateSwitchboardFeed.discriminator, tokenInfo.switchboardConfiguration.priceAggregator));
1105
+ }
1106
+ if (!reserve.config.tokenInfo.switchboardConfiguration.twapAggregator.equals(tokenInfo.switchboardConfiguration.twapAggregator)) {
1107
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateSwitchboardTwapFeed.discriminator, tokenInfo.switchboardConfiguration.twapAggregator));
1108
+ }
1109
+ if (!reserve.config.tokenInfo.pythConfiguration.price.equals(tokenInfo.pythConfiguration.price)) {
1110
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdatePythPrice.discriminator, tokenInfo.pythConfiguration.price));
1111
+ }
1112
+ if (reserve.config.tokenInfo.blockPriceUsage !== tokenInfo.blockPriceUsage) {
1113
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateBlockPriceUsage.discriminator, tokenInfo.blockPriceUsage));
1114
+ }
1115
+ if (!reserve.config.tokenInfo.scopeConfiguration.priceFeed.equals(tokenInfo.scopeConfiguration.priceFeed)) {
1116
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateScopePriceFeed.discriminator, tokenInfo.scopeConfiguration.priceFeed));
1117
+ }
1118
+ }
1119
+ break;
1120
+ case 'depositWithdrawalCap':
1121
+ if (reserve === undefined ||
1122
+ !reserve.config.depositWithdrawalCap.configCapacity.eq(reserveConfig.depositWithdrawalCap.configCapacity) ||
1123
+ !reserve.config.depositWithdrawalCap.configIntervalLengthSeconds.eq(reserveConfig.depositWithdrawalCap.configIntervalLengthSeconds)) {
1124
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator, [
1125
+ reserveConfig.depositWithdrawalCap.configCapacity.toNumber(),
1126
+ reserveConfig.depositWithdrawalCap.configIntervalLengthSeconds.toNumber(),
1127
+ ]));
1128
+ }
1129
+ break;
1130
+ case 'debtWithdrawalCap':
1131
+ if (reserve === undefined ||
1132
+ !reserve.config.debtWithdrawalCap.configCapacity.eq(reserveConfig.debtWithdrawalCap.configCapacity) ||
1133
+ !reserve.config.debtWithdrawalCap.configIntervalLengthSeconds.eq(reserveConfig.debtWithdrawalCap.configIntervalLengthSeconds)) {
1134
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator, [
1135
+ reserveConfig.debtWithdrawalCap.configCapacity.toNumber(),
1136
+ reserveConfig.debtWithdrawalCap.configIntervalLengthSeconds.toNumber(),
1137
+ ]));
1138
+ }
1139
+ break;
1140
+ case 'elevationGroups':
1141
+ if (reserve === undefined ||
1142
+ !(0, utils_2.sameLengthArrayEquals)(reserve.config.elevationGroups, reserveConfig.elevationGroups)) {
1143
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateElevationGroup.discriminator, reserveConfig.elevationGroups));
1144
+ }
1145
+ break;
1146
+ case 'disableUsageAsCollOutsideEmode':
1147
+ if (reserve === undefined ||
1148
+ reserve.config.disableUsageAsCollOutsideEmode !== reserveConfig.disableUsageAsCollOutsideEmode) {
1149
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator, reserveConfig.disableUsageAsCollOutsideEmode));
1150
+ }
1151
+ break;
1152
+ case 'utilizationLimitBlockBorrowingAbovePct':
1153
+ if (reserve === undefined ||
1154
+ reserve.config.utilizationLimitBlockBorrowingAbovePct !== reserveConfig.utilizationLimitBlockBorrowingAbovePct) {
1155
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator, reserveConfig.utilizationLimitBlockBorrowingAbovePct));
1156
+ }
1157
+ break;
1158
+ case 'autodeleverageEnabled':
1159
+ if (reserve === undefined || reserve.config.autodeleverageEnabled !== reserveConfig.autodeleverageEnabled) {
1160
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator, reserveConfig.autodeleverageEnabled));
1161
+ }
1162
+ break;
1163
+ case 'borrowLimitOutsideElevationGroup':
1164
+ if (reserve === undefined ||
1165
+ !reserve.config.borrowLimitOutsideElevationGroup.eq(reserveConfig.borrowLimitOutsideElevationGroup)) {
1166
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateBorrowLimitOutsideElevationGroup.discriminator, BigInt(reserveConfig.borrowLimitOutsideElevationGroup.toString())));
1167
+ }
1168
+ break;
1169
+ case 'borrowLimitAgainstThisCollateralInElevationGroup':
1170
+ if (reserve === undefined ||
1171
+ !(0, utils_2.sameLengthArrayEquals)(reserve.config.borrowLimitAgainstThisCollateralInElevationGroup, reserveConfig.borrowLimitAgainstThisCollateralInElevationGroup)) {
1172
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateBorrowLimitsInElevationGroupAgainstThisReserve.discriminator, reserveConfig.borrowLimitAgainstThisCollateralInElevationGroup.map((borrowLimit) => borrowLimit.toNumber())));
1173
+ }
1174
+ break;
1175
+ case 'deleveragingBonusIncreaseBpsPerDay':
1176
+ if (reserve === undefined ||
1177
+ !reserve.config.deleveragingBonusIncreaseBpsPerDay.eq(reserveConfig.deleveragingBonusIncreaseBpsPerDay)) {
1178
+ updateReserveIxsArgs.push(createUpdateReserveIxsArg(types_1.UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator, reserveConfig.deleveragingBonusIncreaseBpsPerDay.toNumber()));
1179
+ }
1180
+ break;
1181
+ default:
1182
+ (0, utils_2.assertNever)(key); // Will cause compile error if any case is missing
1183
+ }
1184
+ }
1185
+ function createUpdateReserveIxsArg(discriminator, value) {
1186
+ return {
1187
+ // Note: below we add 1 to the discriminator, because UpdateConfigMode in SC starts from 1, while the idl-codegen
1188
+ // creates the TS counterparts starting from 0:
1189
+ mode: discriminator + 1,
1190
+ value: updateReserveConfigEncodedValue(discriminator, value),
1191
+ };
1192
+ }
1193
+ function updateEntireReserveConfigIx(marketWithAddress, reserveAddress, reserveConfig, programId) {
1194
+ const layout = types_1.ReserveConfig.layout();
1195
+ const data = Buffer.alloc(1000);
1196
+ const len = layout.encode(reserveConfig.toEncodable(), data);
1197
+ const value = Uint8Array.from([...data.subarray(0, len)]);
956
1198
  const args = {
957
- mode: new types_1.UpdateConfigMode.UpdateEntireReserveConfig(),
958
- value: (0, configItems_1.encodeUsingLayout)(types_1.ReserveConfig.layout(), reserveConfig),
1199
+ mode: new anchor.BN(25),
1200
+ value: value,
959
1201
  skipValidation: false,
960
1202
  };
961
- const [globalConfig] = (0, utils_1.globalConfigPda)(programId);
962
1203
  const accounts = {
963
- signer,
964
- lendingMarket: marketAddress,
1204
+ lendingMarketOwner: marketWithAddress.state.lendingMarketOwner,
1205
+ lendingMarket: marketWithAddress.address,
965
1206
  reserve: reserveAddress,
966
- globalConfig,
967
1207
  };
968
1208
  const ix = (0, lib_1.updateReserveConfig)(args, accounts, programId);
969
1209
  return ix;
970
1210
  }
971
1211
  function parseForChangesReserveConfigAndGetIxs(marketWithAddress, reserve, reserveAddress, reserveConfig, programId) {
972
- const encodedConfigUpdates = exports.RESERVE_CONFIG_UPDATER.encodeAllUpdates(reserve?.config, reserveConfig);
973
- encodedConfigUpdates.sort((left, right) => priorityOf(left.mode) - priorityOf(right.mode));
974
- return encodedConfigUpdates.map((encodedConfigUpdate) => updateReserveConfigIx(marketWithAddress.state.lendingMarketOwner, marketWithAddress.address, reserveAddress, encodedConfigUpdate.mode, encodedConfigUpdate.value, programId, shouldSkipValidation(encodedConfigUpdate.mode, reserve)));
975
- }
976
- const NON_VALIDATED_DISCRIMINATORS = [
977
- types_1.UpdateConfigMode.UpdateScopePriceFeed.discriminator,
978
- types_1.UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator,
979
- types_1.UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator,
980
- types_1.UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator,
981
- types_1.UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator,
982
- types_1.UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator,
983
- types_1.UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator,
984
- ];
985
- function shouldSkipValidation(mode, reserve) {
986
- return (NON_VALIDATED_DISCRIMINATORS.includes(mode.discriminator) &&
987
- !reserve?.liquidity.availableAmount.gten(utils_1.MIN_INITIAL_DEPOSIT));
1212
+ let updateReserveIxsArgs = [];
1213
+ for (const key in reserveConfig.toEncodable()) {
1214
+ if (isExcludedReserveConfigKey(key)) {
1215
+ continue;
1216
+ }
1217
+ handleConfigUpdate(key, reserve, reserveConfig, updateReserveIxsArgs);
1218
+ }
1219
+ const ixs = [];
1220
+ updateReserveIxsArgs = (0, exports.sortIxsByPriority)(updateReserveIxsArgs);
1221
+ updateReserveIxsArgs.forEach((updateReserveConfigArgs) => {
1222
+ let skipValidation = false;
1223
+ if ((0, exports.modeMatches)(updateReserveConfigArgs.mode) && !reserve?.liquidity.availableAmount.gten(utils_1.MIN_INITIAL_DEPOSIT)) {
1224
+ skipValidation = true;
1225
+ }
1226
+ ixs.push(updateReserveConfigIx(marketWithAddress, reserveAddress, updateReserveConfigArgs.mode, updateReserveConfigArgs.value, programId, skipValidation));
1227
+ });
1228
+ return ixs;
988
1229
  }
989
- function priorityOf(mode) {
990
- switch (mode.discriminator) {
991
- case types_1.UpdateConfigMode.UpdateScopePriceFeed.discriminator:
992
- return 0;
1230
+ function updateReserveConfigEncodedValue(discriminator, value) {
1231
+ let buffer;
1232
+ let valueArray = [];
1233
+ switch (discriminator) {
1234
+ case types_1.UpdateConfigMode.UpdateLoanToValuePct.discriminator:
1235
+ case types_1.UpdateConfigMode.UpdateLiquidationThresholdPct.discriminator:
1236
+ case types_1.UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator:
1237
+ case types_1.UpdateConfigMode.UpdateProtocolTakeRate.discriminator:
1238
+ case types_1.UpdateConfigMode.UpdateAssetTier.discriminator:
1239
+ case types_1.UpdateConfigMode.UpdateReserveStatus.discriminator:
1240
+ case types_1.UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator:
1241
+ case types_1.UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator:
1242
+ case types_1.UpdateConfigMode.UpdateBlockPriceUsage.discriminator:
1243
+ case types_1.UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator:
1244
+ buffer = Buffer.alloc(1);
1245
+ buffer.writeUIntLE(value, 0, 1);
1246
+ break;
1247
+ case types_1.UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator:
1248
+ case types_1.UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator:
1249
+ case types_1.UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator:
1250
+ buffer = Buffer.alloc(2);
1251
+ buffer.writeUInt16LE(value, 0);
1252
+ break;
1253
+ case types_1.UpdateConfigMode.UpdateFeesBorrowFee.discriminator:
1254
+ case types_1.UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator:
1255
+ case types_1.UpdateConfigMode.UpdateTokenInfoLowerHeuristic.discriminator:
1256
+ case types_1.UpdateConfigMode.UpdateTokenInfoUpperHeuristic.discriminator:
1257
+ case types_1.UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator:
1258
+ case types_1.UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator:
1259
+ case types_1.UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator:
1260
+ case types_1.UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator:
1261
+ case types_1.UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator:
1262
+ case types_1.UpdateConfigMode.UpdateBorrowFactor.discriminator:
1263
+ case types_1.UpdateConfigMode.UpdateDeleveragingThresholdDecreaseBpsPerDay.discriminator:
1264
+ case types_1.UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator:
1265
+ value = value;
1266
+ buffer = Buffer.alloc(8);
1267
+ buffer.writeBigUint64LE(BigInt(value), 0);
1268
+ break;
1269
+ case types_1.UpdateConfigMode.UpdateDepositLimit.discriminator:
1270
+ case types_1.UpdateConfigMode.UpdateBorrowLimit.discriminator:
1271
+ case types_1.UpdateConfigMode.UpdateBorrowLimitOutsideElevationGroup.discriminator:
1272
+ buffer = Buffer.alloc(8);
1273
+ // Convert value to BigInt if it's not already
1274
+ const bigIntValue = typeof value === 'bigint' ? value : BigInt(value.toString());
1275
+ // Split into two 32-bit values
1276
+ const low = Number(bigIntValue & BigInt(0xffffffff));
1277
+ const high = Number(bigIntValue >> BigInt(32));
1278
+ buffer.writeUInt32LE(low, 0);
1279
+ buffer.writeUInt32LE(high, 4);
1280
+ break;
993
1281
  case types_1.UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator:
994
- return 0;
1282
+ case types_1.UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator:
1283
+ valueArray = value;
1284
+ buffer = Buffer.alloc(8);
1285
+ for (let i = 0; i < valueArray.length; i++) {
1286
+ buffer.writeUInt16LE(valueArray[i], 2 * i);
1287
+ }
1288
+ break;
1289
+ case types_1.UpdateConfigMode.UpdateTokenInfoName.discriminator:
1290
+ valueArray = value;
1291
+ buffer = Buffer.alloc(32);
1292
+ for (let i = 0; i < valueArray.length; i++) {
1293
+ buffer.writeUIntLE(valueArray[i], i, 1);
1294
+ }
1295
+ break;
1296
+ case types_1.UpdateConfigMode.UpdateScopePriceFeed.discriminator:
1297
+ case types_1.UpdateConfigMode.UpdatePythPrice.discriminator:
1298
+ case types_1.UpdateConfigMode.UpdateSwitchboardFeed.discriminator:
1299
+ case types_1.UpdateConfigMode.UpdateSwitchboardTwapFeed.discriminator:
1300
+ case types_1.UpdateConfigMode.UpdateFarmCollateral.discriminator:
1301
+ case types_1.UpdateConfigMode.UpdateFarmDebt.discriminator:
1302
+ buffer = value.toBuffer();
1303
+ break;
1304
+ case types_1.UpdateConfigMode.UpdateBorrowRateCurve.discriminator:
1305
+ buffer = serializeBorrowRateCurve(value);
1306
+ break;
1307
+ case types_1.UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator:
1308
+ case types_1.UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator:
1309
+ valueArray = value;
1310
+ buffer = Buffer.alloc(16);
1311
+ buffer.writeBigUint64LE(BigInt(valueArray[0]), 0);
1312
+ buffer.writeBigUInt64LE(BigInt(valueArray[1]), 8);
1313
+ break;
1314
+ case types_1.UpdateConfigMode.UpdateElevationGroup.discriminator:
1315
+ valueArray = value;
1316
+ buffer = Buffer.alloc(20);
1317
+ for (let i = 0; i < valueArray.length; i++) {
1318
+ buffer.writeUIntLE(valueArray[i], i, 1);
1319
+ }
1320
+ break;
1321
+ case types_1.UpdateConfigMode.UpdateBorrowLimitsInElevationGroupAgainstThisReserve.discriminator:
1322
+ valueArray = value;
1323
+ buffer = Buffer.alloc(32 * 8);
1324
+ for (let i = 0; i < valueArray.length; i++) {
1325
+ buffer.writeBigUint64LE(BigInt(valueArray[i]), i * 8);
1326
+ }
1327
+ break;
995
1328
  default:
996
- return 1;
1329
+ buffer = Buffer.alloc(0);
997
1330
  }
1331
+ return Uint8Array.from([...buffer]);
998
1332
  }
1333
+ function serializeBorrowRateCurve(curve) {
1334
+ const buffer = Buffer.alloc(8 * curve.points.length);
1335
+ buffer.writeUInt32LE(curve.points.length, 0);
1336
+ for (let i = 0; i < curve.points.length; i++) {
1337
+ buffer.writeUInt32LE(curve.points[i].utilizationRateBps, 8 * i);
1338
+ buffer.writeUInt32LE(curve.points[i].borrowRateBps, 4 + 8 * i);
1339
+ }
1340
+ return buffer;
1341
+ }
1342
+ const modeMatches = (mode) => {
1343
+ const validModes = [
1344
+ types_1.UpdateConfigMode.UpdateScopePriceFeed.discriminator + 1,
1345
+ types_1.UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator + 1,
1346
+ types_1.UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator + 1,
1347
+ types_1.UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator + 1,
1348
+ types_1.UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator + 1,
1349
+ types_1.UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator + 1,
1350
+ types_1.UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator + 1,
1351
+ ];
1352
+ return validModes.includes(mode);
1353
+ };
1354
+ exports.modeMatches = modeMatches;
1355
+ // Sort update reserve ixs, to first have the oracle config updates first
1356
+ // In order to skip the validation for the scope config updates
1357
+ const sortIxsByPriority = (updateReserveIxsArgs) => {
1358
+ return updateReserveIxsArgs.sort((a, b) => {
1359
+ const isPriorityA = a.mode === 20 || a.mode === 16;
1360
+ const isPriorityB = b.mode === 20 || b.mode === 16;
1361
+ if (isPriorityA && !isPriorityB) {
1362
+ return -1;
1363
+ }
1364
+ if (isPriorityB && !isPriorityA) {
1365
+ return 1;
1366
+ }
1367
+ return 0;
1368
+ });
1369
+ };
1370
+ exports.sortIxsByPriority = sortIxsByPriority;
999
1371
  //# sourceMappingURL=reserve.js.map