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

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.
@@ -36,7 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
36
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.KaminoReserve = exports.DEFAULT_RECENT_SLOT_DURATION_MS = void 0;
39
+ exports.sortIxnsByPriority = exports.modeMatches = exports.KaminoReserve = exports.DEFAULT_RECENT_SLOT_DURATION_MS = void 0;
40
40
  exports.createReserveIxs = createReserveIxs;
41
41
  exports.updateReserveConfigIx = updateReserveConfigIx;
42
42
  exports.updateEntireReserveConfigIx = updateEntireReserveConfigIx;
@@ -919,12 +919,12 @@ async function createReserveIxs(connection, owner, ownerLiquiditySource, lending
919
919
  const initReserveIx = (0, lib_1.initReserve)(accounts, programId);
920
920
  return [createReserveIx, initReserveIx];
921
921
  }
922
- function updateReserveConfigIx(marketWithAddress, reserveAddress, modeDiscriminator, value, programId) {
922
+ function updateReserveConfigIx(marketWithAddress, reserveAddress, modeDiscriminator, value, programId, skipValidation = false) {
923
923
  value;
924
924
  const args = {
925
925
  mode: new anchor.BN(modeDiscriminator),
926
926
  value: value,
927
- skipValidation: false,
927
+ skipValidation,
928
928
  };
929
929
  const accounts = {
930
930
  lendingMarketOwner: marketWithAddress.state.lendingMarketOwner,
@@ -939,195 +939,119 @@ function isExcludedReserveConfigKey(value) {
939
939
  return EXCLUDED_RESERVE_CONFIG_KEYS.includes(value);
940
940
  }
941
941
  function handleConfigUpdate(key, reserve, reserveConfig, updateReserveIxnsArgs) {
942
+ // We add 1 to the discriminator, to account for the fact that the UpdateConfigMode
943
+ // inside the SC starts incrementing from 1
942
944
  switch (key) {
943
945
  case 'status':
944
- if (reserve === undefined) {
946
+ if (reserve === undefined || reserve.config.status !== reserveConfig.status) {
945
947
  updateReserveIxnsArgs.push({
946
- mode: types_1.UpdateConfigMode.UpdateReserveStatus.discriminator,
947
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateReserveStatus.discriminator, reserveConfig.status),
948
- });
949
- }
950
- else if (reserve.config.status !== reserveConfig.status) {
951
- updateReserveIxnsArgs.push({
952
- mode: types_1.UpdateConfigMode.UpdateReserveStatus.discriminator,
948
+ mode: types_1.UpdateConfigMode.UpdateReserveStatus.discriminator + 1,
953
949
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateReserveStatus.discriminator, reserveConfig.status),
954
950
  });
955
951
  }
956
952
  break;
957
953
  case 'assetTier':
958
- if (reserve === undefined) {
954
+ if (reserve === undefined || reserve.config.assetTier !== reserveConfig.assetTier) {
959
955
  updateReserveIxnsArgs.push({
960
- mode: types_1.UpdateConfigMode.UpdateAssetTier.discriminator,
961
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateAssetTier.discriminator, reserveConfig.assetTier),
962
- });
963
- }
964
- else if (reserve.config.assetTier !== reserveConfig.assetTier) {
965
- updateReserveIxnsArgs.push({
966
- mode: types_1.UpdateConfigMode.UpdateAssetTier.discriminator,
956
+ mode: types_1.UpdateConfigMode.UpdateAssetTier.discriminator + 1,
967
957
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateAssetTier.discriminator, reserveConfig.assetTier),
968
958
  });
969
959
  }
970
960
  break;
971
961
  case 'hostFixedInterestRateBps':
972
- if (reserve === undefined) {
973
- updateReserveIxnsArgs.push({
974
- mode: types_1.UpdateConfigMode.UpdateHostFixedInterestRateBps.discriminator,
975
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateHostFixedInterestRateBps.discriminator, reserveConfig.hostFixedInterestRateBps),
976
- });
977
- }
978
- else if (reserve.config.hostFixedInterestRateBps !== reserveConfig.hostFixedInterestRateBps) {
962
+ if (reserve === undefined || reserve.config.hostFixedInterestRateBps !== reserveConfig.hostFixedInterestRateBps) {
979
963
  updateReserveIxnsArgs.push({
980
- mode: types_1.UpdateConfigMode.UpdateHostFixedInterestRateBps.discriminator,
964
+ mode: types_1.UpdateConfigMode.UpdateHostFixedInterestRateBps.discriminator + 1,
981
965
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateHostFixedInterestRateBps.discriminator, reserveConfig.hostFixedInterestRateBps),
982
966
  });
983
967
  }
984
968
  break;
985
969
  case 'protocolTakeRatePct':
986
- if (reserve === undefined) {
970
+ if (reserve === undefined || reserve.config.protocolTakeRatePct !== reserveConfig.protocolTakeRatePct) {
987
971
  updateReserveIxnsArgs.push({
988
- mode: types_1.UpdateConfigMode.UpdateProtocolTakeRate.discriminator,
989
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateProtocolTakeRate.discriminator, reserveConfig.protocolTakeRatePct),
990
- });
991
- }
992
- else if (reserve.config.protocolTakeRatePct !== reserveConfig.protocolTakeRatePct) {
993
- updateReserveIxnsArgs.push({
994
- mode: types_1.UpdateConfigMode.UpdateProtocolTakeRate.discriminator,
972
+ mode: types_1.UpdateConfigMode.UpdateProtocolTakeRate.discriminator + 1,
995
973
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateProtocolTakeRate.discriminator, reserveConfig.protocolTakeRatePct),
996
974
  });
997
975
  }
998
976
  break;
999
977
  case 'protocolLiquidationFeePct':
1000
- if (reserve === undefined) {
1001
- updateReserveIxnsArgs.push({
1002
- mode: types_1.UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator,
1003
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator, reserveConfig.protocolLiquidationFeePct),
1004
- });
1005
- }
1006
- else if (reserve.config.protocolLiquidationFeePct !== reserveConfig.protocolLiquidationFeePct) {
978
+ if (reserve === undefined ||
979
+ reserve.config.protocolLiquidationFeePct !== reserveConfig.protocolLiquidationFeePct) {
1007
980
  updateReserveIxnsArgs.push({
1008
- mode: types_1.UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator,
981
+ mode: types_1.UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator + 1,
1009
982
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateProtocolLiquidationFee.discriminator, reserveConfig.protocolLiquidationFeePct),
1010
983
  });
1011
984
  }
1012
985
  break;
1013
986
  case 'loanToValuePct':
1014
- if (reserve === undefined) {
1015
- updateReserveIxnsArgs.push({
1016
- mode: types_1.UpdateConfigMode.UpdateLoanToValuePct.discriminator,
1017
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateLoanToValuePct.discriminator, reserveConfig.loanToValuePct),
1018
- });
1019
- }
1020
- else if (reserve.config.loanToValuePct !== reserveConfig.loanToValuePct) {
987
+ if (reserve === undefined || reserve.config.loanToValuePct !== reserveConfig.loanToValuePct) {
1021
988
  updateReserveIxnsArgs.push({
1022
- mode: types_1.UpdateConfigMode.UpdateLoanToValuePct.discriminator,
989
+ mode: types_1.UpdateConfigMode.UpdateLoanToValuePct.discriminator + 1,
1023
990
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateLoanToValuePct.discriminator, reserveConfig.loanToValuePct),
1024
991
  });
1025
992
  }
1026
993
  break;
1027
994
  case 'liquidationThresholdPct':
1028
- if (reserve === undefined) {
995
+ if (reserve === undefined || reserve.config.liquidationThresholdPct !== reserveConfig.liquidationThresholdPct) {
1029
996
  updateReserveIxnsArgs.push({
1030
- mode: types_1.UpdateConfigMode.UpdateLiquidationThresholdPct.discriminator,
1031
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateLiquidationThresholdPct.discriminator, reserveConfig.liquidationThresholdPct),
1032
- });
1033
- }
1034
- else if (reserve.config.liquidationThresholdPct !== reserveConfig.liquidationThresholdPct) {
1035
- updateReserveIxnsArgs.push({
1036
- mode: types_1.UpdateConfigMode.UpdateLiquidationThresholdPct.discriminator,
997
+ mode: types_1.UpdateConfigMode.UpdateLiquidationThresholdPct.discriminator + 1,
1037
998
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateLiquidationThresholdPct.discriminator, reserveConfig.liquidationThresholdPct),
1038
999
  });
1039
1000
  }
1040
1001
  break;
1041
1002
  case 'minLiquidationBonusBps':
1042
- if (reserve === undefined) {
1003
+ if (reserve === undefined || reserve.config.minLiquidationBonusBps !== reserveConfig.minLiquidationBonusBps) {
1043
1004
  updateReserveIxnsArgs.push({
1044
- mode: types_1.UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator,
1045
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator, reserveConfig.minLiquidationBonusBps),
1046
- });
1047
- }
1048
- else if (reserve.config.minLiquidationBonusBps !== reserveConfig.minLiquidationBonusBps) {
1049
- updateReserveIxnsArgs.push({
1050
- mode: types_1.UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator,
1005
+ mode: types_1.UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator + 1,
1051
1006
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateMinLiquidationBonusBps.discriminator, reserveConfig.minLiquidationBonusBps),
1052
1007
  });
1053
1008
  }
1054
1009
  break;
1055
1010
  case 'maxLiquidationBonusBps':
1056
- if (reserve === undefined) {
1011
+ if (reserve === undefined || reserve.config.maxLiquidationBonusBps !== reserveConfig.maxLiquidationBonusBps) {
1057
1012
  updateReserveIxnsArgs.push({
1058
- mode: types_1.UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator,
1059
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator, reserveConfig.maxLiquidationBonusBps),
1060
- });
1061
- }
1062
- else if (reserve.config.maxLiquidationBonusBps !== reserveConfig.maxLiquidationBonusBps) {
1063
- updateReserveIxnsArgs.push({
1064
- mode: types_1.UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator,
1013
+ mode: types_1.UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator + 1,
1065
1014
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateMaxLiquidationBonusBps.discriminator, reserveConfig.maxLiquidationBonusBps),
1066
1015
  });
1067
1016
  }
1068
1017
  break;
1069
1018
  case 'badDebtLiquidationBonusBps':
1070
- if (reserve === undefined) {
1071
- updateReserveIxnsArgs.push({
1072
- mode: types_1.UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator,
1073
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator, reserveConfig.badDebtLiquidationBonusBps),
1074
- });
1075
- }
1076
- else if (reserve.config.badDebtLiquidationBonusBps !== reserveConfig.badDebtLiquidationBonusBps) {
1019
+ if (reserve === undefined ||
1020
+ reserve.config.badDebtLiquidationBonusBps !== reserveConfig.badDebtLiquidationBonusBps) {
1077
1021
  updateReserveIxnsArgs.push({
1078
- mode: types_1.UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator,
1022
+ mode: types_1.UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator + 1,
1079
1023
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateBadDebtLiquidationBonusBps.discriminator, reserveConfig.badDebtLiquidationBonusBps),
1080
1024
  });
1081
1025
  }
1082
1026
  break;
1083
1027
  case 'deleveragingMarginCallPeriodSecs':
1084
- if (reserve === undefined) {
1085
- updateReserveIxnsArgs.push({
1086
- mode: types_1.UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator,
1087
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator, reserveConfig.deleveragingMarginCallPeriodSecs.toNumber()),
1088
- });
1089
- }
1090
- else if (!reserve.config.deleveragingMarginCallPeriodSecs.eq(reserveConfig.deleveragingMarginCallPeriodSecs)) {
1028
+ if (reserve === undefined ||
1029
+ !reserve.config.deleveragingMarginCallPeriodSecs.eq(reserveConfig.deleveragingMarginCallPeriodSecs)) {
1091
1030
  updateReserveIxnsArgs.push({
1092
- mode: types_1.UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator,
1031
+ mode: types_1.UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator + 1,
1093
1032
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator, reserveConfig.deleveragingMarginCallPeriodSecs.toNumber()),
1094
1033
  });
1095
1034
  }
1096
1035
  break;
1097
1036
  case 'deleveragingThresholdDecreaseBpsPerDay':
1098
- if (reserve === undefined) {
1099
- updateReserveIxnsArgs.push({
1100
- mode: types_1.UpdateConfigMode.UpdateDeleveragingThresholdDecreaseBpsPerDay.discriminator,
1101
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateDeleveragingThresholdDecreaseBpsPerDay.discriminator, reserveConfig.deleveragingThresholdDecreaseBpsPerDay.toNumber()),
1102
- });
1103
- }
1104
- else if (!reserve.config.deleveragingThresholdDecreaseBpsPerDay.eq(reserveConfig.deleveragingThresholdDecreaseBpsPerDay)) {
1037
+ if (reserve === undefined ||
1038
+ !reserve.config.deleveragingThresholdDecreaseBpsPerDay.eq(reserveConfig.deleveragingThresholdDecreaseBpsPerDay)) {
1105
1039
  updateReserveIxnsArgs.push({
1106
- mode: types_1.UpdateConfigMode.UpdateDeleveragingThresholdDecreaseBpsPerDay.discriminator,
1040
+ mode: types_1.UpdateConfigMode.UpdateDeleveragingThresholdDecreaseBpsPerDay.discriminator + 1,
1107
1041
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateDeleveragingThresholdDecreaseBpsPerDay.discriminator, reserveConfig.deleveragingThresholdDecreaseBpsPerDay.toNumber()),
1108
1042
  });
1109
1043
  }
1110
1044
  break;
1111
1045
  case 'fees':
1112
- if (reserve === undefined) {
1113
- updateReserveIxnsArgs.push({
1114
- mode: types_1.UpdateConfigMode.UpdateFeesBorrowFee.discriminator,
1115
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateFeesBorrowFee.discriminator, reserveConfig.fees.borrowFeeSf.toNumber()),
1116
- });
1117
- updateReserveIxnsArgs.push({
1118
- mode: types_1.UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator,
1119
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator, reserveConfig.fees.flashLoanFeeSf.toNumber()),
1120
- });
1121
- }
1122
- else if (!reserve.config.fees.borrowFeeSf.eq(reserveConfig.fees.borrowFeeSf)) {
1046
+ if (reserve === undefined || !reserve.config.fees.borrowFeeSf.eq(reserveConfig.fees.borrowFeeSf)) {
1123
1047
  updateReserveIxnsArgs.push({
1124
- mode: types_1.UpdateConfigMode.UpdateFeesBorrowFee.discriminator,
1048
+ mode: types_1.UpdateConfigMode.UpdateFeesBorrowFee.discriminator + 1,
1125
1049
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateFeesBorrowFee.discriminator, reserveConfig.fees.borrowFeeSf.toNumber()),
1126
1050
  });
1127
1051
  }
1128
- else if (!reserve.config.fees.flashLoanFeeSf.eq(reserveConfig.fees.flashLoanFeeSf)) {
1052
+ if (reserve === undefined || !reserve.config.fees.flashLoanFeeSf.eq(reserveConfig.fees.flashLoanFeeSf)) {
1129
1053
  updateReserveIxnsArgs.push({
1130
- mode: types_1.UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator,
1054
+ mode: types_1.UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator + 1,
1131
1055
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateFeesFlashLoanFee.discriminator, reserveConfig.fees.flashLoanFeeSf.toNumber()),
1132
1056
  });
1133
1057
  }
@@ -1135,63 +1059,50 @@ function handleConfigUpdate(key, reserve, reserveConfig, updateReserveIxnsArgs)
1135
1059
  case 'borrowRateCurve':
1136
1060
  if (reserve === undefined) {
1137
1061
  updateReserveIxnsArgs.push({
1138
- mode: UpdateConfigMode_1.UpdateBorrowRateCurve.discriminator,
1062
+ mode: UpdateConfigMode_1.UpdateBorrowRateCurve.discriminator + 1,
1139
1063
  value: updateReserveConfigEncodedValue(UpdateConfigMode_1.UpdateBorrowRateCurve.discriminator, reserveConfig.borrowRateCurve),
1140
1064
  });
1141
1065
  }
1142
1066
  else {
1067
+ let shouldBorrowCurveBeUpdated = false;
1143
1068
  for (let i = 0; i < reserveConfig.borrowRateCurve.points.length; i++) {
1144
1069
  if (reserve.config.borrowRateCurve.points[i].utilizationRateBps !==
1145
1070
  reserveConfig.borrowRateCurve.points[i].utilizationRateBps ||
1146
1071
  reserve.config.borrowRateCurve.points[i].borrowRateBps !==
1147
1072
  reserveConfig.borrowRateCurve.points[i].borrowRateBps) {
1148
- updateReserveIxnsArgs.push({
1149
- mode: UpdateConfigMode_1.UpdateBorrowRateCurve.discriminator,
1150
- value: updateReserveConfigEncodedValue(UpdateConfigMode_1.UpdateBorrowRateCurve.discriminator, reserveConfig.borrowRateCurve),
1151
- });
1073
+ shouldBorrowCurveBeUpdated = true;
1152
1074
  break;
1153
1075
  }
1154
1076
  }
1077
+ if (shouldBorrowCurveBeUpdated) {
1078
+ updateReserveIxnsArgs.push({
1079
+ mode: UpdateConfigMode_1.UpdateBorrowRateCurve.discriminator + 1,
1080
+ value: updateReserveConfigEncodedValue(UpdateConfigMode_1.UpdateBorrowRateCurve.discriminator, reserveConfig.borrowRateCurve),
1081
+ });
1082
+ break;
1083
+ }
1155
1084
  }
1156
1085
  break;
1157
1086
  case 'borrowFactorPct':
1158
- if (reserve === undefined) {
1087
+ if (reserve === undefined || !reserve.config.borrowFactorPct.eq(reserveConfig.borrowFactorPct)) {
1159
1088
  updateReserveIxnsArgs.push({
1160
- mode: types_1.UpdateConfigMode.UpdateBorrowFactor.discriminator,
1161
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateBorrowFactor.discriminator, reserveConfig.borrowFactorPct.toNumber()),
1162
- });
1163
- }
1164
- else if (!reserve.config.borrowFactorPct.eq(reserveConfig.borrowFactorPct)) {
1165
- updateReserveIxnsArgs.push({
1166
- mode: types_1.UpdateConfigMode.UpdateBorrowFactor.discriminator,
1089
+ mode: types_1.UpdateConfigMode.UpdateBorrowFactor.discriminator + 1,
1167
1090
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateBorrowFactor.discriminator, reserveConfig.borrowFactorPct.toNumber()),
1168
1091
  });
1169
1092
  }
1170
1093
  break;
1171
1094
  case 'depositLimit':
1172
- if (reserve === undefined) {
1173
- updateReserveIxnsArgs.push({
1174
- mode: types_1.UpdateConfigMode.UpdateDepositLimit.discriminator,
1175
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateDepositLimit.discriminator, BigInt(reserveConfig.depositLimit.toString())),
1176
- });
1177
- }
1178
- else if (!reserve.config.depositLimit.eq(reserveConfig.depositLimit)) {
1095
+ if (reserve === undefined || !reserve.config.depositLimit.eq(reserveConfig.depositLimit)) {
1179
1096
  updateReserveIxnsArgs.push({
1180
- mode: types_1.UpdateConfigMode.UpdateDepositLimit.discriminator,
1097
+ mode: types_1.UpdateConfigMode.UpdateDepositLimit.discriminator + 1,
1181
1098
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateDepositLimit.discriminator, BigInt(reserveConfig.depositLimit.toString())),
1182
1099
  });
1183
1100
  }
1184
1101
  break;
1185
1102
  case 'borrowLimit':
1186
- if (reserve === undefined) {
1187
- updateReserveIxnsArgs.push({
1188
- mode: types_1.UpdateConfigMode.UpdateBorrowLimit.discriminator,
1189
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateBorrowLimit.discriminator, BigInt(reserveConfig.borrowLimit.toString())),
1190
- });
1191
- }
1192
- else if (!reserve.config.borrowLimit.eq(reserveConfig.borrowLimit)) {
1103
+ if (reserve === undefined || !reserve.config.borrowLimit.eq(reserveConfig.borrowLimit)) {
1193
1104
  updateReserveIxnsArgs.push({
1194
- mode: types_1.UpdateConfigMode.UpdateBorrowLimit.discriminator,
1105
+ mode: types_1.UpdateConfigMode.UpdateBorrowLimit.discriminator + 1,
1195
1106
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateBorrowLimit.discriminator, BigInt(reserveConfig.borrowLimit.toString())),
1196
1107
  });
1197
1108
  }
@@ -1200,140 +1111,140 @@ function handleConfigUpdate(key, reserve, reserveConfig, updateReserveIxnsArgs)
1200
1111
  const tokenInfo = reserveConfig.tokenInfo;
1201
1112
  if (reserve === undefined) {
1202
1113
  updateReserveIxnsArgs.push({
1203
- mode: types_1.UpdateConfigMode.UpdateTokenInfoName.discriminator,
1114
+ mode: types_1.UpdateConfigMode.UpdateTokenInfoName.discriminator + 1,
1204
1115
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateTokenInfoName.discriminator, tokenInfo.name),
1205
1116
  });
1206
1117
  updateReserveIxnsArgs.push({
1207
- mode: types_1.UpdateConfigMode.UpdateTokenInfoLowerHeuristic.discriminator,
1118
+ mode: types_1.UpdateConfigMode.UpdateTokenInfoLowerHeuristic.discriminator + 1,
1208
1119
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateTokenInfoLowerHeuristic.discriminator, tokenInfo.heuristic.lower.toNumber()),
1209
1120
  });
1210
1121
  updateReserveIxnsArgs.push({
1211
- mode: types_1.UpdateConfigMode.UpdateTokenInfoUpperHeuristic.discriminator,
1122
+ mode: types_1.UpdateConfigMode.UpdateTokenInfoUpperHeuristic.discriminator + 1,
1212
1123
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateTokenInfoUpperHeuristic.discriminator, tokenInfo.heuristic.upper.toNumber()),
1213
1124
  });
1214
1125
  updateReserveIxnsArgs.push({
1215
- mode: types_1.UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator,
1126
+ mode: types_1.UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator + 1,
1216
1127
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator, tokenInfo.heuristic.exp.toNumber()),
1217
1128
  });
1218
1129
  updateReserveIxnsArgs.push({
1219
- mode: types_1.UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator,
1130
+ mode: types_1.UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator + 1,
1220
1131
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator, tokenInfo.maxTwapDivergenceBps.toNumber()),
1221
1132
  });
1222
1133
  updateReserveIxnsArgs.push({
1223
- mode: types_1.UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator,
1134
+ mode: types_1.UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator + 1,
1224
1135
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator, tokenInfo.maxAgePriceSeconds.toNumber()),
1225
1136
  });
1226
1137
  updateReserveIxnsArgs.push({
1227
- mode: types_1.UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator,
1138
+ mode: types_1.UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator + 1,
1228
1139
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator, tokenInfo.maxAgeTwapSeconds.toNumber()),
1229
1140
  });
1230
1141
  updateReserveIxnsArgs.push({
1231
- mode: types_1.UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator,
1142
+ mode: types_1.UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator + 1,
1232
1143
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator, tokenInfo.scopeConfiguration.priceChain),
1233
1144
  });
1234
1145
  updateReserveIxnsArgs.push({
1235
- mode: types_1.UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator,
1146
+ mode: types_1.UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator + 1,
1236
1147
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator, tokenInfo.scopeConfiguration.twapChain),
1237
1148
  });
1238
1149
  updateReserveIxnsArgs.push({
1239
- mode: types_1.UpdateConfigMode.UpdateSwitchboardFeed.discriminator,
1150
+ mode: types_1.UpdateConfigMode.UpdateSwitchboardFeed.discriminator + 1,
1240
1151
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateSwitchboardFeed.discriminator, tokenInfo.switchboardConfiguration.priceAggregator),
1241
1152
  });
1242
1153
  updateReserveIxnsArgs.push({
1243
- mode: types_1.UpdateConfigMode.UpdateSwitchboardTwapFeed.discriminator,
1154
+ mode: types_1.UpdateConfigMode.UpdateSwitchboardTwapFeed.discriminator + 1,
1244
1155
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateSwitchboardTwapFeed.discriminator, tokenInfo.switchboardConfiguration.twapAggregator),
1245
1156
  });
1246
1157
  updateReserveIxnsArgs.push({
1247
- mode: types_1.UpdateConfigMode.UpdatePythPrice.discriminator,
1158
+ mode: types_1.UpdateConfigMode.UpdatePythPrice.discriminator + 1,
1248
1159
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdatePythPrice.discriminator, tokenInfo.pythConfiguration.price),
1249
1160
  });
1250
1161
  updateReserveIxnsArgs.push({
1251
- mode: types_1.UpdateConfigMode.UpdateBlockPriceUsage.discriminator,
1162
+ mode: types_1.UpdateConfigMode.UpdateBlockPriceUsage.discriminator + 1,
1252
1163
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateBlockPriceUsage.discriminator, tokenInfo.blockPriceUsage),
1253
1164
  });
1254
1165
  }
1255
1166
  else {
1256
1167
  if (!(0, utils_2.sameLengthArrayEquals)(reserve.config.tokenInfo.name, tokenInfo.name)) {
1257
1168
  updateReserveIxnsArgs.push({
1258
- mode: types_1.UpdateConfigMode.UpdateTokenInfoName.discriminator,
1169
+ mode: types_1.UpdateConfigMode.UpdateTokenInfoName.discriminator + 1,
1259
1170
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateTokenInfoName.discriminator, tokenInfo.name),
1260
1171
  });
1261
1172
  }
1262
1173
  if (!reserve.config.tokenInfo.heuristic.lower.eq(tokenInfo.heuristic.lower)) {
1263
1174
  updateReserveIxnsArgs.push({
1264
- mode: types_1.UpdateConfigMode.UpdateTokenInfoLowerHeuristic.discriminator,
1175
+ mode: types_1.UpdateConfigMode.UpdateTokenInfoLowerHeuristic.discriminator + 1,
1265
1176
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateTokenInfoLowerHeuristic.discriminator, tokenInfo.heuristic.lower.toNumber()),
1266
1177
  });
1267
1178
  }
1268
1179
  if (!reserve.config.tokenInfo.heuristic.upper.eq(tokenInfo.heuristic.upper)) {
1269
1180
  updateReserveIxnsArgs.push({
1270
- mode: types_1.UpdateConfigMode.UpdateTokenInfoUpperHeuristic.discriminator,
1181
+ mode: types_1.UpdateConfigMode.UpdateTokenInfoUpperHeuristic.discriminator + 1,
1271
1182
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateTokenInfoUpperHeuristic.discriminator, tokenInfo.heuristic.upper.toNumber()),
1272
1183
  });
1273
1184
  }
1274
1185
  if (!reserve.config.tokenInfo.heuristic.exp.eq(tokenInfo.heuristic.exp)) {
1275
1186
  updateReserveIxnsArgs.push({
1276
- mode: types_1.UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator,
1187
+ mode: types_1.UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator + 1,
1277
1188
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator, tokenInfo.heuristic.exp.toNumber()),
1278
1189
  });
1279
1190
  }
1280
1191
  if (!reserve.config.tokenInfo.maxTwapDivergenceBps.eq(tokenInfo.maxTwapDivergenceBps)) {
1281
1192
  updateReserveIxnsArgs.push({
1282
- mode: types_1.UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator,
1193
+ mode: types_1.UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator + 1,
1283
1194
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator, tokenInfo.maxTwapDivergenceBps.toNumber()),
1284
1195
  });
1285
1196
  }
1286
1197
  if (!reserve.config.tokenInfo.maxAgePriceSeconds.eq(tokenInfo.maxAgePriceSeconds)) {
1287
1198
  updateReserveIxnsArgs.push({
1288
- mode: types_1.UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator,
1199
+ mode: types_1.UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator + 1,
1289
1200
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator, tokenInfo.maxAgePriceSeconds.toNumber()),
1290
1201
  });
1291
1202
  }
1292
1203
  if (!reserve.config.tokenInfo.maxAgeTwapSeconds.eq(tokenInfo.maxAgeTwapSeconds)) {
1293
1204
  updateReserveIxnsArgs.push({
1294
- mode: types_1.UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator,
1205
+ mode: types_1.UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator + 1,
1295
1206
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator, tokenInfo.maxAgeTwapSeconds.toNumber()),
1296
1207
  });
1297
1208
  }
1298
1209
  if (!(0, utils_2.sameLengthArrayEquals)(reserve.config.tokenInfo.scopeConfiguration.priceChain, tokenInfo.scopeConfiguration.priceChain)) {
1299
1210
  updateReserveIxnsArgs.push({
1300
- mode: types_1.UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator,
1211
+ mode: types_1.UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator + 1,
1301
1212
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator, tokenInfo.scopeConfiguration.priceChain),
1302
1213
  });
1303
1214
  }
1304
1215
  if (!(0, utils_2.sameLengthArrayEquals)(reserve.config.tokenInfo.scopeConfiguration.twapChain, tokenInfo.scopeConfiguration.twapChain)) {
1305
1216
  updateReserveIxnsArgs.push({
1306
- mode: types_1.UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator,
1217
+ mode: types_1.UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator + 1,
1307
1218
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator, tokenInfo.scopeConfiguration.twapChain),
1308
1219
  });
1309
1220
  }
1310
1221
  if (!reserve.config.tokenInfo.switchboardConfiguration.priceAggregator.equals(tokenInfo.switchboardConfiguration.priceAggregator)) {
1311
1222
  updateReserveIxnsArgs.push({
1312
- mode: types_1.UpdateConfigMode.UpdateSwitchboardFeed.discriminator,
1223
+ mode: types_1.UpdateConfigMode.UpdateSwitchboardFeed.discriminator + 1,
1313
1224
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateSwitchboardFeed.discriminator, tokenInfo.switchboardConfiguration.priceAggregator),
1314
1225
  });
1315
1226
  }
1316
1227
  if (!reserve.config.tokenInfo.switchboardConfiguration.twapAggregator.equals(tokenInfo.switchboardConfiguration.twapAggregator)) {
1317
1228
  updateReserveIxnsArgs.push({
1318
- mode: types_1.UpdateConfigMode.UpdateSwitchboardTwapFeed.discriminator,
1229
+ mode: types_1.UpdateConfigMode.UpdateSwitchboardTwapFeed.discriminator + 1,
1319
1230
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateSwitchboardTwapFeed.discriminator, tokenInfo.switchboardConfiguration.twapAggregator),
1320
1231
  });
1321
1232
  }
1322
1233
  if (!reserve.config.tokenInfo.pythConfiguration.price.equals(tokenInfo.pythConfiguration.price)) {
1323
1234
  updateReserveIxnsArgs.push({
1324
- mode: types_1.UpdateConfigMode.UpdatePythPrice.discriminator,
1235
+ mode: types_1.UpdateConfigMode.UpdatePythPrice.discriminator + 1,
1325
1236
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdatePythPrice.discriminator, tokenInfo.pythConfiguration.price),
1326
1237
  });
1327
1238
  }
1328
1239
  if (reserve.config.tokenInfo.blockPriceUsage !== tokenInfo.blockPriceUsage) {
1329
1240
  updateReserveIxnsArgs.push({
1330
- mode: types_1.UpdateConfigMode.UpdateBlockPriceUsage.discriminator,
1241
+ mode: types_1.UpdateConfigMode.UpdateBlockPriceUsage.discriminator + 1,
1331
1242
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateBlockPriceUsage.discriminator, tokenInfo.blockPriceUsage),
1332
1243
  });
1333
1244
  }
1334
1245
  if (!reserve.config.tokenInfo.scopeConfiguration.priceFeed.equals(tokenInfo.scopeConfiguration.priceFeed)) {
1335
1246
  updateReserveIxnsArgs.push({
1336
- mode: types_1.UpdateConfigMode.UpdateScopePriceFeed.discriminator,
1247
+ mode: types_1.UpdateConfigMode.UpdateScopePriceFeed.discriminator + 1,
1337
1248
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateScopePriceFeed.discriminator, tokenInfo.scopeConfiguration.priceFeed),
1338
1249
  });
1339
1250
  }
@@ -1342,21 +1253,17 @@ function handleConfigUpdate(key, reserve, reserveConfig, updateReserveIxnsArgs)
1342
1253
  case 'depositWithdrawalCap':
1343
1254
  if (reserve === undefined) {
1344
1255
  updateReserveIxnsArgs.push({
1345
- mode: types_1.UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator,
1256
+ mode: types_1.UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator + 1,
1346
1257
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator, [
1347
1258
  reserveConfig.depositWithdrawalCap.configCapacity.toNumber(),
1348
1259
  reserveConfig.depositWithdrawalCap.configIntervalLengthSeconds.toNumber(),
1349
1260
  ]),
1350
1261
  });
1351
- updateReserveIxnsArgs.push({
1352
- mode: types_1.UpdateConfigMode.UpdateDepositWithdrawalCapCurrentTotal.discriminator,
1353
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator, reserveConfig.depositWithdrawalCap.currentTotal.toNumber()),
1354
- });
1355
1262
  }
1356
1263
  else if (!reserve.config.depositWithdrawalCap.configCapacity.eq(reserveConfig.depositWithdrawalCap.configCapacity) ||
1357
1264
  !reserve.config.depositWithdrawalCap.configIntervalLengthSeconds.eq(reserveConfig.depositWithdrawalCap.configIntervalLengthSeconds)) {
1358
1265
  updateReserveIxnsArgs.push({
1359
- mode: types_1.UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator,
1266
+ mode: types_1.UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator + 1,
1360
1267
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator, [
1361
1268
  reserveConfig.depositWithdrawalCap.configCapacity.toNumber(),
1362
1269
  reserveConfig.depositWithdrawalCap.configIntervalLengthSeconds.toNumber(),
@@ -1365,7 +1272,7 @@ function handleConfigUpdate(key, reserve, reserveConfig, updateReserveIxnsArgs)
1365
1272
  }
1366
1273
  else if (!reserve.config.depositWithdrawalCap.currentTotal.eq(reserveConfig.depositWithdrawalCap.currentTotal)) {
1367
1274
  updateReserveIxnsArgs.push({
1368
- mode: types_1.UpdateConfigMode.UpdateDepositWithdrawalCapCurrentTotal.discriminator,
1275
+ mode: types_1.UpdateConfigMode.UpdateDepositWithdrawalCapCurrentTotal.discriminator + 1,
1369
1276
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateDepositWithdrawalCap.discriminator, reserveConfig.depositWithdrawalCap.currentTotal.toNumber()),
1370
1277
  });
1371
1278
  }
@@ -1373,21 +1280,17 @@ function handleConfigUpdate(key, reserve, reserveConfig, updateReserveIxnsArgs)
1373
1280
  case 'debtWithdrawalCap':
1374
1281
  if (reserve === undefined) {
1375
1282
  updateReserveIxnsArgs.push({
1376
- mode: types_1.UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator,
1283
+ mode: types_1.UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator + 1,
1377
1284
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator, [
1378
1285
  reserveConfig.debtWithdrawalCap.configCapacity.toNumber(),
1379
1286
  reserveConfig.debtWithdrawalCap.configIntervalLengthSeconds.toNumber(),
1380
1287
  ]),
1381
1288
  });
1382
- updateReserveIxnsArgs.push({
1383
- mode: types_1.UpdateConfigMode.UpdateDebtWithdrawalCapCurrentTotal.discriminator,
1384
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator, reserveConfig.debtWithdrawalCap.currentTotal.toNumber()),
1385
- });
1386
1289
  }
1387
1290
  else if (!reserve.config.debtWithdrawalCap.configCapacity.eq(reserveConfig.debtWithdrawalCap.configCapacity) ||
1388
1291
  !reserve.config.debtWithdrawalCap.configIntervalLengthSeconds.eq(reserveConfig.debtWithdrawalCap.configIntervalLengthSeconds)) {
1389
1292
  updateReserveIxnsArgs.push({
1390
- mode: types_1.UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator,
1293
+ mode: types_1.UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator + 1,
1391
1294
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator, [
1392
1295
  reserveConfig.debtWithdrawalCap.configCapacity.toNumber(),
1393
1296
  reserveConfig.debtWithdrawalCap.configIntervalLengthSeconds.toNumber(),
@@ -1396,116 +1299,69 @@ function handleConfigUpdate(key, reserve, reserveConfig, updateReserveIxnsArgs)
1396
1299
  }
1397
1300
  else if (!reserve.config.debtWithdrawalCap.currentTotal.eq(reserveConfig.debtWithdrawalCap.currentTotal)) {
1398
1301
  updateReserveIxnsArgs.push({
1399
- mode: types_1.UpdateConfigMode.UpdateDebtWithdrawalCapCurrentTotal.discriminator,
1302
+ mode: types_1.UpdateConfigMode.UpdateDebtWithdrawalCapCurrentTotal.discriminator + 1,
1400
1303
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateDebtWithdrawalCap.discriminator, reserveConfig.debtWithdrawalCap.currentTotal.toNumber()),
1401
1304
  });
1402
1305
  }
1403
1306
  break;
1404
1307
  case 'elevationGroups':
1405
- if (reserve === undefined) {
1308
+ if (reserve === undefined ||
1309
+ !(0, utils_2.sameLengthArrayEquals)(reserve.config.elevationGroups, reserveConfig.elevationGroups)) {
1406
1310
  updateReserveIxnsArgs.push({
1407
- mode: types_1.UpdateConfigMode.UpdateElevationGroup.discriminator,
1311
+ mode: types_1.UpdateConfigMode.UpdateElevationGroup.discriminator + 1,
1408
1312
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateElevationGroup.discriminator, reserveConfig.elevationGroups),
1409
1313
  });
1410
1314
  }
1411
- else {
1412
- for (let i = 0; i < reserveConfig.elevationGroups.length; i++) {
1413
- if (reserve.config.elevationGroups[i] !== reserveConfig.elevationGroups[i]) {
1414
- updateReserveIxnsArgs.push({
1415
- mode: types_1.UpdateConfigMode.UpdateElevationGroup.discriminator,
1416
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateElevationGroup.discriminator, reserveConfig.elevationGroups),
1417
- });
1418
- break;
1419
- }
1420
- }
1421
- }
1422
1315
  break;
1423
1316
  case 'disableUsageAsCollOutsideEmode':
1424
- if (reserve === undefined) {
1317
+ if (reserve === undefined ||
1318
+ reserve.config.disableUsageAsCollOutsideEmode !== reserveConfig.disableUsageAsCollOutsideEmode) {
1425
1319
  updateReserveIxnsArgs.push({
1426
- mode: types_1.UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator,
1427
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator, reserveConfig.disableUsageAsCollOutsideEmode),
1428
- });
1429
- }
1430
- else if (reserve.config.disableUsageAsCollOutsideEmode !== reserveConfig.disableUsageAsCollOutsideEmode) {
1431
- updateReserveIxnsArgs.push({
1432
- mode: types_1.UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator,
1320
+ mode: types_1.UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator + 1,
1433
1321
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateDisableUsageAsCollateralOutsideEmode.discriminator, reserveConfig.disableUsageAsCollOutsideEmode),
1434
1322
  });
1435
1323
  }
1436
1324
  break;
1437
1325
  case 'utilizationLimitBlockBorrowingAbovePct':
1438
- if (reserve === undefined) {
1326
+ if (reserve === undefined ||
1327
+ reserve.config.utilizationLimitBlockBorrowingAbovePct !== reserveConfig.utilizationLimitBlockBorrowingAbovePct) {
1439
1328
  updateReserveIxnsArgs.push({
1440
- mode: types_1.UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator,
1441
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator, reserveConfig.utilizationLimitBlockBorrowingAbovePct),
1442
- });
1443
- }
1444
- else if (reserve.config.utilizationLimitBlockBorrowingAbovePct !== reserveConfig.utilizationLimitBlockBorrowingAbovePct) {
1445
- updateReserveIxnsArgs.push({
1446
- mode: types_1.UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator,
1329
+ mode: types_1.UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator + 1,
1447
1330
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateBlockBorrowingAboveUtilizationPct.discriminator, reserveConfig.utilizationLimitBlockBorrowingAbovePct),
1448
1331
  });
1449
1332
  }
1450
1333
  break;
1451
1334
  case 'autodeleverageEnabled':
1452
- if (reserve === undefined) {
1335
+ if (reserve === undefined || reserve.config.autodeleverageEnabled !== reserveConfig.autodeleverageEnabled) {
1453
1336
  updateReserveIxnsArgs.push({
1454
- mode: types_1.UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator,
1455
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator, reserveConfig.autodeleverageEnabled),
1456
- });
1457
- }
1458
- else if (reserve.config.autodeleverageEnabled !== reserveConfig.autodeleverageEnabled) {
1459
- updateReserveIxnsArgs.push({
1460
- mode: types_1.UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator,
1337
+ mode: types_1.UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator + 1,
1461
1338
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator, reserveConfig.autodeleverageEnabled),
1462
1339
  });
1463
1340
  }
1464
1341
  break;
1465
1342
  case 'borrowLimitOutsideElevationGroup':
1466
- if (reserve === undefined) {
1343
+ if (reserve === undefined ||
1344
+ !reserve.config.borrowLimitOutsideElevationGroup.eq(reserveConfig.borrowLimitOutsideElevationGroup)) {
1467
1345
  updateReserveIxnsArgs.push({
1468
- mode: types_1.UpdateConfigMode.UpdateBorrowLimitOutsideElevationGroup.discriminator,
1346
+ mode: types_1.UpdateConfigMode.UpdateBorrowLimitOutsideElevationGroup.discriminator + 1,
1469
1347
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateBorrowLimitOutsideElevationGroup.discriminator, reserveConfig.borrowLimitOutsideElevationGroup.toNumber()),
1470
1348
  });
1471
1349
  }
1472
- else if (!reserve.config.borrowLimitOutsideElevationGroup.eq(reserveConfig.borrowLimitOutsideElevationGroup)) {
1473
- updateReserveIxnsArgs.push({
1474
- mode: types_1.UpdateConfigMode.UpdateBorrowLimitOutsideElevationGroup.discriminator,
1475
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateBorrowLimitOutsideElevationGroup.discriminator, BigInt(reserveConfig.borrowLimitOutsideElevationGroup.toString())),
1476
- });
1477
- }
1478
1350
  break;
1479
1351
  case 'borrowLimitAgainstThisCollateralInElevationGroup':
1480
- if (reserve === undefined) {
1352
+ if (reserve === undefined ||
1353
+ !(0, utils_2.sameLengthArrayEquals)(reserve.config.borrowLimitAgainstThisCollateralInElevationGroup, reserveConfig.borrowLimitAgainstThisCollateralInElevationGroup)) {
1481
1354
  updateReserveIxnsArgs.push({
1482
- mode: types_1.UpdateConfigMode.UpdateBorrowLimitsInElevationGroupAgainstThisReserve.discriminator,
1355
+ mode: types_1.UpdateConfigMode.UpdateBorrowLimitsInElevationGroupAgainstThisReserve.discriminator + 1,
1483
1356
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateBorrowLimitsInElevationGroupAgainstThisReserve.discriminator, reserveConfig.borrowLimitAgainstThisCollateralInElevationGroup.map((borrowLimit) => borrowLimit.toNumber())),
1484
1357
  });
1485
1358
  }
1486
- else {
1487
- for (let i = 0; i < reserveConfig.borrowLimitAgainstThisCollateralInElevationGroup.length; i++) {
1488
- if (reserve.config.borrowLimitAgainstThisCollateralInElevationGroup[i] !==
1489
- reserveConfig.borrowLimitAgainstThisCollateralInElevationGroup[i]) {
1490
- updateReserveIxnsArgs.push({
1491
- mode: types_1.UpdateConfigMode.UpdateBorrowLimitsInElevationGroupAgainstThisReserve.discriminator,
1492
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateBorrowLimitsInElevationGroupAgainstThisReserve.discriminator, reserveConfig.borrowLimitAgainstThisCollateralInElevationGroup.map((borrowLimit) => borrowLimit.toNumber())),
1493
- });
1494
- }
1495
- }
1496
- }
1497
1359
  break;
1498
1360
  case 'deleveragingBonusIncreaseBpsPerDay':
1499
- if (reserve === undefined) {
1500
- updateReserveIxnsArgs.push({
1501
- mode: types_1.UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator,
1502
- value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator, reserveConfig.deleveragingBonusIncreaseBpsPerDay.toNumber()),
1503
- });
1504
- }
1505
- else if (reserve.config.deleveragingBonusIncreaseBpsPerDay.toNumber() !==
1506
- reserveConfig.deleveragingBonusIncreaseBpsPerDay.toNumber()) {
1361
+ if (reserve === undefined ||
1362
+ !reserve.config.deleveragingBonusIncreaseBpsPerDay.eq(reserveConfig.deleveragingBonusIncreaseBpsPerDay)) {
1507
1363
  updateReserveIxnsArgs.push({
1508
- mode: types_1.UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator,
1364
+ mode: types_1.UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator + 1,
1509
1365
  value: updateReserveConfigEncodedValue(types_1.UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator, reserveConfig.deleveragingBonusIncreaseBpsPerDay.toNumber()),
1510
1366
  });
1511
1367
  }
@@ -1533,7 +1389,7 @@ function updateEntireReserveConfigIx(marketWithAddress, reserveAddress, reserveC
1533
1389
  return ix;
1534
1390
  }
1535
1391
  function parseForChangesReserveConfigAndGetIxs(marketWithAddress, reserve, reserveAddress, reserveConfig, programId) {
1536
- const updateReserveIxnsArgs = [];
1392
+ let updateReserveIxnsArgs = [];
1537
1393
  for (const key in reserveConfig.toEncodable()) {
1538
1394
  if (isExcludedReserveConfigKey(key)) {
1539
1395
  continue;
@@ -1541,8 +1397,13 @@ function parseForChangesReserveConfigAndGetIxs(marketWithAddress, reserve, reser
1541
1397
  handleConfigUpdate(key, reserve, reserveConfig, updateReserveIxnsArgs);
1542
1398
  }
1543
1399
  const ixns = [];
1400
+ updateReserveIxnsArgs = (0, exports.sortIxnsByPriority)(updateReserveIxnsArgs);
1544
1401
  updateReserveIxnsArgs.forEach((updateReserveConfigArgs) => {
1545
- ixns.push(updateReserveConfigIx(marketWithAddress, reserveAddress, updateReserveConfigArgs.mode + 1, updateReserveConfigArgs.value, programId));
1402
+ let skipValidation = false;
1403
+ if ((0, exports.modeMatches)(updateReserveConfigArgs.mode)) {
1404
+ skipValidation = true;
1405
+ }
1406
+ ixns.push(updateReserveConfigIx(marketWithAddress, reserveAddress, updateReserveConfigArgs.mode, updateReserveConfigArgs.value, programId, skipValidation));
1546
1407
  });
1547
1408
  return ixns;
1548
1409
  }
@@ -1652,12 +1513,41 @@ function updateReserveConfigEncodedValue(discriminator, value) {
1652
1513
  return Uint8Array.from([...buffer]);
1653
1514
  }
1654
1515
  function serializeBorrowRateCurve(curve) {
1655
- const buffer = Buffer.alloc(4 + 8 * curve.points.length);
1516
+ const buffer = Buffer.alloc(8 * curve.points.length);
1656
1517
  buffer.writeUInt32LE(curve.points.length, 0);
1657
1518
  for (let i = 0; i < curve.points.length; i++) {
1658
- buffer.writeUInt32LE(curve.points[i].utilizationRateBps, 4 + 8 * i);
1659
- buffer.writeUInt32LE(curve.points[i].borrowRateBps, 8 + 8 * i);
1519
+ buffer.writeUInt32LE(curve.points[i].utilizationRateBps, 8 * i);
1520
+ buffer.writeUInt32LE(curve.points[i].borrowRateBps, 4 + 8 * i);
1660
1521
  }
1661
1522
  return buffer;
1662
1523
  }
1524
+ const modeMatches = (mode) => {
1525
+ const validModes = [
1526
+ types_1.UpdateConfigMode.UpdateScopePriceFeed.discriminator + 1,
1527
+ types_1.UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator + 1,
1528
+ types_1.UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator + 1,
1529
+ types_1.UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator + 1,
1530
+ types_1.UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator + 1,
1531
+ types_1.UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator + 1,
1532
+ types_1.UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator + 1,
1533
+ ];
1534
+ return validModes.includes(mode);
1535
+ };
1536
+ exports.modeMatches = modeMatches;
1537
+ // Sort update reserve ixns, to first have the oracle config updates first
1538
+ // In order to skip the validation for the scope config updates
1539
+ const sortIxnsByPriority = (updateReserveIxnsArgs) => {
1540
+ return updateReserveIxnsArgs.sort((a, b) => {
1541
+ const isPriorityA = a.mode === 20 || a.mode === 16;
1542
+ const isPriorityB = b.mode === 20 || b.mode === 16;
1543
+ if (isPriorityA && !isPriorityB) {
1544
+ return -1;
1545
+ }
1546
+ if (isPriorityB && !isPriorityA) {
1547
+ return 1;
1548
+ }
1549
+ return 0;
1550
+ });
1551
+ };
1552
+ exports.sortIxnsByPriority = sortIxnsByPriority;
1663
1553
  //# sourceMappingURL=reserve.js.map