@defisaver/positions-sdk 2.1.151 → 2.1.152-shifter-v2-2-dev

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 (118) hide show
  1. package/cjs/aaveV2/index.js +2 -0
  2. package/cjs/claiming/compV3.js +0 -1
  3. package/cjs/config/contracts.d.ts +4 -0
  4. package/cjs/config/contracts.js +4 -0
  5. package/cjs/fluid/index.d.ts +5 -0
  6. package/cjs/fluid/index.js +36 -1
  7. package/cjs/helpers/aaveHelpers/index.js +3 -0
  8. package/cjs/helpers/aaveV4Helpers/index.js +1 -0
  9. package/cjs/helpers/compoundHelpers/index.js +2 -0
  10. package/cjs/helpers/curveUsdHelpers/index.js +2 -0
  11. package/cjs/helpers/fluidHelpers/index.js +1 -0
  12. package/cjs/helpers/liquityV2Helpers/index.js +1 -0
  13. package/cjs/helpers/llamaLendHelpers/index.js +2 -0
  14. package/cjs/helpers/morphoBlueHelpers/index.js +2 -0
  15. package/cjs/helpers/morphoMidnightHelpers/index.js +2 -0
  16. package/cjs/helpers/morphoMidnightHelpers/tenor.d.ts +6 -2
  17. package/cjs/helpers/morphoMidnightHelpers/tenor.js +5 -1
  18. package/cjs/helpers/sparkHelpers/index.js +1 -0
  19. package/cjs/liquity/index.js +8 -1
  20. package/cjs/maker/index.d.ts +7 -2
  21. package/cjs/maker/index.js +30 -10
  22. package/cjs/markets/index.d.ts +2 -1
  23. package/cjs/markets/index.js +4 -1
  24. package/cjs/markets/maker/index.d.ts +1 -0
  25. package/cjs/markets/maker/index.js +13 -0
  26. package/cjs/markets/morphoMidnight/index.d.ts +92 -10
  27. package/cjs/markets/morphoMidnight/index.js +519 -60
  28. package/cjs/morphoMidnight/index.js +11 -1
  29. package/cjs/portfolio/index.d.ts +5 -1
  30. package/cjs/portfolio/index.js +287 -0
  31. package/cjs/types/aave.d.ts +2 -0
  32. package/cjs/types/aaveV4.d.ts +1 -0
  33. package/cjs/types/compound.d.ts +2 -0
  34. package/cjs/types/fluid.d.ts +1 -0
  35. package/cjs/types/liquity.d.ts +1 -0
  36. package/cjs/types/liquityV2.d.ts +2 -0
  37. package/cjs/types/maker.d.ts +1 -0
  38. package/cjs/types/morphoBlue.d.ts +2 -0
  39. package/cjs/types/morphoMidnight.d.ts +58 -4
  40. package/cjs/types/morphoMidnight.js +45 -0
  41. package/cjs/types/portfolio.d.ts +26 -10
  42. package/cjs/types/spark.d.ts +2 -0
  43. package/esm/aaveV2/index.js +2 -0
  44. package/esm/claiming/compV3.js +0 -1
  45. package/esm/config/contracts.d.ts +4 -0
  46. package/esm/config/contracts.js +4 -0
  47. package/esm/fluid/index.d.ts +5 -0
  48. package/esm/fluid/index.js +33 -0
  49. package/esm/helpers/aaveHelpers/index.js +3 -0
  50. package/esm/helpers/aaveV4Helpers/index.js +1 -0
  51. package/esm/helpers/compoundHelpers/index.js +2 -0
  52. package/esm/helpers/curveUsdHelpers/index.js +2 -0
  53. package/esm/helpers/fluidHelpers/index.js +1 -0
  54. package/esm/helpers/liquityV2Helpers/index.js +1 -0
  55. package/esm/helpers/llamaLendHelpers/index.js +2 -0
  56. package/esm/helpers/morphoBlueHelpers/index.js +2 -0
  57. package/esm/helpers/morphoMidnightHelpers/index.js +2 -0
  58. package/esm/helpers/morphoMidnightHelpers/tenor.d.ts +6 -2
  59. package/esm/helpers/morphoMidnightHelpers/tenor.js +6 -2
  60. package/esm/helpers/sparkHelpers/index.js +1 -0
  61. package/esm/liquity/index.js +8 -1
  62. package/esm/maker/index.d.ts +7 -2
  63. package/esm/maker/index.js +29 -11
  64. package/esm/markets/index.d.ts +2 -1
  65. package/esm/markets/index.js +2 -1
  66. package/esm/markets/maker/index.d.ts +1 -0
  67. package/esm/markets/maker/index.js +10 -0
  68. package/esm/markets/morphoMidnight/index.d.ts +92 -10
  69. package/esm/markets/morphoMidnight/index.js +473 -59
  70. package/esm/morphoMidnight/index.js +11 -1
  71. package/esm/portfolio/index.d.ts +5 -1
  72. package/esm/portfolio/index.js +289 -3
  73. package/esm/types/aave.d.ts +2 -0
  74. package/esm/types/aaveV4.d.ts +1 -0
  75. package/esm/types/compound.d.ts +2 -0
  76. package/esm/types/fluid.d.ts +1 -0
  77. package/esm/types/liquity.d.ts +1 -0
  78. package/esm/types/liquityV2.d.ts +2 -0
  79. package/esm/types/maker.d.ts +1 -0
  80. package/esm/types/morphoBlue.d.ts +2 -0
  81. package/esm/types/morphoMidnight.d.ts +58 -4
  82. package/esm/types/morphoMidnight.js +45 -0
  83. package/esm/types/portfolio.d.ts +26 -10
  84. package/esm/types/spark.d.ts +2 -0
  85. package/package.json +1 -1
  86. package/src/aaveV2/index.ts +2 -0
  87. package/src/claiming/compV3.ts +0 -1
  88. package/src/config/contracts.ts +4 -0
  89. package/src/fluid/index.ts +40 -0
  90. package/src/helpers/aaveHelpers/index.ts +3 -0
  91. package/src/helpers/aaveV4Helpers/index.ts +1 -0
  92. package/src/helpers/compoundHelpers/index.ts +2 -0
  93. package/src/helpers/curveUsdHelpers/index.ts +2 -0
  94. package/src/helpers/fluidHelpers/index.ts +1 -0
  95. package/src/helpers/liquityV2Helpers/index.ts +1 -0
  96. package/src/helpers/llamaLendHelpers/index.ts +2 -0
  97. package/src/helpers/morphoBlueHelpers/index.ts +2 -0
  98. package/src/helpers/morphoMidnightHelpers/index.ts +2 -0
  99. package/src/helpers/morphoMidnightHelpers/tenor.ts +6 -2
  100. package/src/helpers/sparkHelpers/index.ts +1 -0
  101. package/src/liquity/index.ts +8 -1
  102. package/src/maker/index.ts +59 -28
  103. package/src/markets/index.ts +3 -1
  104. package/src/markets/maker/index.ts +10 -0
  105. package/src/markets/morphoMidnight/index.ts +724 -61
  106. package/src/morphoMidnight/index.ts +8 -1
  107. package/src/portfolio/index.ts +270 -2
  108. package/src/types/aave.ts +3 -0
  109. package/src/types/aaveV4.ts +1 -0
  110. package/src/types/compound.ts +2 -0
  111. package/src/types/fluid.ts +1 -0
  112. package/src/types/liquity.ts +2 -0
  113. package/src/types/liquityV2.ts +2 -0
  114. package/src/types/maker.ts +2 -0
  115. package/src/types/morphoBlue.ts +2 -0
  116. package/src/types/morphoMidnight.ts +60 -3
  117. package/src/types/portfolio.ts +31 -12
  118. package/src/types/spark.ts +2 -0
@@ -177,6 +177,8 @@ const _getAaveV2AccountData = (provider, network, address, assetsData, market) =
177
177
  payload.collRatio = payload.borrowedUsd && payload.borrowedUsd !== '0'
178
178
  ? new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString()
179
179
  : '0';
180
+ // Aave v2 has no LTV-0 fallback (AaveV3View only), so its safety ratio is the plain ratio.
181
+ payload.safetyRatio = payload.ratio;
180
182
  // Calculate borrow limits per asset
181
183
  Object.values(payload.usedAssets).forEach((item) => {
182
184
  if (item.isBorrowed) {
@@ -18,7 +18,6 @@ const claiming_1 = require("../types/claiming");
18
18
  // `rewardConfig` set - such a market never accrues COMP, so there is nothing to claim.
19
19
  // Not decodable by name, since the error lives in CometRewards' ABI and we call through CompV3View.
20
20
  const NOT_SUPPORTED_ERROR_SIG = '0x9c58e3b6';
21
- // Only an actual on-chain revert counts - viem reports transport failures as ContractFunctionExecutionError too.
22
21
  const isMarketWithoutRewardsConfig = (err) => {
23
22
  var _a;
24
23
  if (!(err instanceof viem_1.BaseError))
@@ -89746,6 +89746,10 @@ export declare const MidnightView: {
89746
89746
  readonly type: "function";
89747
89747
  }];
89748
89748
  readonly networks: {
89749
+ readonly "1": {
89750
+ readonly address: "0xB64FBf011343961D9AC4A04b714414E35ebE6BE0";
89751
+ readonly createdBlock: 25938908;
89752
+ };
89749
89753
  readonly "8453": {
89750
89754
  readonly address: "0x3aa272f329E8B562A3bA56Bb6979a44D23A28839";
89751
89755
  readonly createdBlock: 48932293;
@@ -1131,6 +1131,10 @@ exports.MorphoBlueView = {
1131
1131
  exports.MidnightView = {
1132
1132
  "abi": [{ "inputs": [{ "internalType": "bytes32", "name": "_id", "type": "bytes32" }], "name": "getMarketInfo", "outputs": [{ "components": [{ "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "internalType": "uint128", "name": "totalUnits", "type": "uint128" }, { "internalType": "uint128", "name": "lossFactor", "type": "uint128" }, { "internalType": "uint128", "name": "withdrawable", "type": "uint128" }, { "internalType": "uint128", "name": "continuousFeeCredit", "type": "uint128" }, { "internalType": "uint16[7]", "name": "settlementFees", "type": "uint16[7]" }, { "internalType": "uint32", "name": "continuousFee", "type": "uint32" }, { "internalType": "uint8", "name": "tickSpacing", "type": "uint8" }, { "internalType": "uint256[]", "name": "prices", "type": "uint256[]" }], "internalType": "struct MidnightView.MarketInfo", "name": "info", "type": "tuple" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "bytes32", "name": "_id", "type": "bytes32" }, { "internalType": "address", "name": "_user", "type": "address" }], "name": "getPositionInfo", "outputs": [{ "components": [{ "internalType": "uint128", "name": "credit", "type": "uint128" }, { "internalType": "uint128", "name": "pendingFee", "type": "uint128" }, { "internalType": "uint128", "name": "debt", "type": "uint128" }, { "internalType": "uint128", "name": "collateralBitmap", "type": "uint128" }, { "internalType": "uint128[]", "name": "collateral", "type": "uint128[]" }, { "internalType": "uint256", "name": "ratio", "type": "uint256" }], "internalType": "struct MidnightView.PositionInfo", "name": "pos", "type": "tuple" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "bytes32", "name": "_id", "type": "bytes32" }, { "internalType": "address", "name": "_user", "type": "address" }], "name": "getRatio", "outputs": [{ "internalType": "uint256", "name": "ratio", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "midnight", "type": "address" }, { "internalType": "address", "name": "loanToken", "type": "address" }, { "components": [{ "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "lltv", "type": "uint256" }, { "internalType": "uint256", "name": "liquidationCursor", "type": "uint256" }, { "internalType": "address", "name": "oracle", "type": "address" }], "internalType": "struct CollateralParams[]", "name": "collateralParams", "type": "tuple[]" }, { "internalType": "uint256", "name": "maturity", "type": "uint256" }, { "internalType": "uint256", "name": "rcfThreshold", "type": "uint256" }, { "internalType": "address", "name": "enterGate", "type": "address" }, { "internalType": "address", "name": "liquidatorGate", "type": "address" }], "internalType": "struct Market", "name": "_market", "type": "tuple" }], "name": "toId", "outputs": [{ "internalType": "bytes32", "name": "id", "type": "bytes32" }], "stateMutability": "pure", "type": "function" }, { "inputs": [{ "internalType": "bytes32", "name": "_id", "type": "bytes32" }], "name": "toMarket", "outputs": [{ "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "midnight", "type": "address" }, { "internalType": "address", "name": "loanToken", "type": "address" }, { "components": [{ "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "lltv", "type": "uint256" }, { "internalType": "uint256", "name": "liquidationCursor", "type": "uint256" }, { "internalType": "address", "name": "oracle", "type": "address" }], "internalType": "struct CollateralParams[]", "name": "collateralParams", "type": "tuple[]" }, { "internalType": "uint256", "name": "maturity", "type": "uint256" }, { "internalType": "uint256", "name": "rcfThreshold", "type": "uint256" }, { "internalType": "address", "name": "enterGate", "type": "address" }, { "internalType": "address", "name": "liquidatorGate", "type": "address" }], "internalType": "struct Market", "name": "market", "type": "tuple" }], "stateMutability": "view", "type": "function" }],
1133
1133
  "networks": {
1134
+ "1": {
1135
+ "address": "0xB64FBf011343961D9AC4A04b714414E35ebE6BE0",
1136
+ "createdBlock": 25938908,
1137
+ },
1134
1138
  "8453": {
1135
1139
  "address": "0x3aa272f329E8B562A3bA56Bb6979a44D23A28839",
1136
1140
  "createdBlock": 48932293,
@@ -133,6 +133,7 @@ export declare const _getUserPositions: (provider: PublicClient, network: Networ
133
133
  merklBorrowIncentives: import("../types").IncentiveData[];
134
134
  ratio: string;
135
135
  collRatio: string;
136
+ safetyRatio: string;
136
137
  minRatio: string;
137
138
  totalInterestUsd: string;
138
139
  leveragedType?: import("../types").LeverageType;
@@ -167,6 +168,7 @@ export declare const getUserPositions: (provider: EthereumProvider, network: Net
167
168
  merklBorrowIncentives: import("../types").IncentiveData[];
168
169
  ratio: string;
169
170
  collRatio: string;
171
+ safetyRatio: string;
170
172
  minRatio: string;
171
173
  totalInterestUsd: string;
172
174
  leveragedType?: import("../types").LeverageType;
@@ -201,6 +203,7 @@ export declare const _getUserPositionsPortfolio: (provider: PublicClient, networ
201
203
  merklBorrowIncentives: import("../types").IncentiveData[];
202
204
  ratio: string;
203
205
  collRatio: string;
206
+ safetyRatio: string;
204
207
  minRatio: string;
205
208
  totalInterestUsd: string;
206
209
  leveragedType?: import("../types").LeverageType;
@@ -221,3 +224,5 @@ export declare const _getUserPositionsPortfolio: (provider: PublicClient, networ
221
224
  nftId: string;
222
225
  } | undefined;
223
226
  }[]>;
227
+ export declare const _getAllFluidMarketDataPortfolio: (provider: PublicClient, network: NetworkNumber) => Promise<Record<string, FluidMarketData>>;
228
+ export declare const getAllFluidMarketDataPortfolio: (provider: EthereumProvider, network: NetworkNumber) => Promise<Record<string, FluidMarketData>>;
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports._getUserPositionsPortfolio = exports.getUserPositions = exports._getUserPositions = exports.getAllUserEarnPositionsWithFTokens = exports._getAllUserEarnPositionsWithFTokens = exports.getFluidDepositData = exports._getFluidDepositData = exports.getFluidTokenData = exports._getFluidTokenData = exports.getAllFluidMarketDataChunked = exports._getAllFluidMarketDataChunked = exports.getFluidPositionWithMarket = exports._getFluidPositionWithMarket = exports.getFluidPosition = exports._getFluidPosition = exports.getFluidVaultIdsForUser = exports._getFluidVaultIdsForUser = exports.getFluidMarketData = exports._getFluidMarketData = exports.EMPTY_FLUID_DATA = exports.EMPTY_USED_ASSET = exports.attachFluidMerklIncentives = exports.getFluidMerklCampaigns = exports.buildFluidMerklRewardMap = exports.FluidMerklOpportunityType = void 0;
15
+ exports.getAllFluidMarketDataPortfolio = exports._getAllFluidMarketDataPortfolio = exports._getUserPositionsPortfolio = exports.getUserPositions = exports._getUserPositions = exports.getAllUserEarnPositionsWithFTokens = exports._getAllUserEarnPositionsWithFTokens = exports.getFluidDepositData = exports._getFluidDepositData = exports.getFluidTokenData = exports._getFluidTokenData = exports.getAllFluidMarketDataChunked = exports._getAllFluidMarketDataChunked = exports.getFluidPositionWithMarket = exports._getFluidPositionWithMarket = exports.getFluidPosition = exports._getFluidPosition = exports.getFluidVaultIdsForUser = exports._getFluidVaultIdsForUser = exports.getFluidMarketData = exports._getFluidMarketData = exports.EMPTY_FLUID_DATA = exports.EMPTY_USED_ASSET = exports.attachFluidMerklIncentives = exports.getFluidMerklCampaigns = exports.buildFluidMerklRewardMap = exports.FluidMerklOpportunityType = void 0;
16
16
  const decimal_js_1 = __importDefault(require("decimal.js"));
17
17
  const tokens_1 = require("@defisaver/tokens");
18
18
  const common_1 = require("../types/common");
@@ -1410,3 +1410,38 @@ const _getUserPositionsPortfolio = (provider, network, user) => __awaiter(void 0
1410
1410
  })).filter(md => md.marketData !== undefined);
1411
1411
  });
1412
1412
  exports._getUserPositionsPortfolio = _getUserPositionsPortfolio;
1413
+ const _getAllFluidMarketDataPortfolio = (provider, network) => __awaiter(void 0, void 0, void 0, function* () {
1414
+ const versions = (0, markets_1.getFluidVersionsDataForNetwork)(network);
1415
+ if (versions.length === 0)
1416
+ return {};
1417
+ const view = (0, contracts_1.FluidViewContractViem)(provider, network);
1418
+ const vaultsData = yield Promise.all(versions.map((version) => view.read.getVaultData([version.marketAddress])));
1419
+ const tokens = Array.from(new Set(vaultsData.map((vaultData) => {
1420
+ const vaultTokens = [(0, tokens_1.getAssetInfoByAddress)(vaultData.supplyToken0, network).symbol, (0, tokens_1.getAssetInfoByAddress)(vaultData.borrowToken0, network).symbol];
1421
+ if (vaultData.supplyToken1 && !(0, utils_1.compareAddresses)(constants_1.ZERO_ADDRESS, vaultData.supplyToken1))
1422
+ vaultTokens.push((0, tokens_1.getAssetInfoByAddress)(vaultData.supplyToken1, network).symbol);
1423
+ if (vaultData.borrowToken1 && !(0, utils_1.compareAddresses)(constants_1.ZERO_ADDRESS, vaultData.borrowToken1))
1424
+ vaultTokens.push((0, tokens_1.getAssetInfoByAddress)(vaultData.borrowToken1, network).symbol);
1425
+ return vaultTokens;
1426
+ }).flat()));
1427
+ // ETH and WBTC needed for other tokens prices
1428
+ if (!tokens.includes('ETH'))
1429
+ tokens.push('ETH');
1430
+ if (!tokens.includes('WBTC'))
1431
+ tokens.push('WBTC');
1432
+ const [tokenPrices, merklCampaigns] = yield Promise.all([
1433
+ getTokensPricesForPortfolio(tokens, provider, network),
1434
+ (0, merkl_1.getFluidMerklCampaigns)(network),
1435
+ ]);
1436
+ const parsedMarketsData = yield Promise.all(vaultsData.map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, tokenPrices); })));
1437
+ const marketsData = {};
1438
+ parsedMarketsData.forEach((marketData, i) => {
1439
+ if (!marketData)
1440
+ return;
1441
+ marketsData[versions[i].value] = (0, merkl_1.attachFluidMerklIncentives)(marketData, merklCampaigns);
1442
+ });
1443
+ return marketsData;
1444
+ });
1445
+ exports._getAllFluidMarketDataPortfolio = _getAllFluidMarketDataPortfolio;
1446
+ const getAllFluidMarketDataPortfolio = (provider, network) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getAllFluidMarketDataPortfolio)((0, viem_1.getViemProvider)(provider, network, { batch: { multicall: true } }), network); });
1447
+ exports.getAllFluidMarketDataPortfolio = getAllFluidMarketDataPortfolio;
@@ -140,6 +140,9 @@ const aaveAnyGetAggregatedPositionData = (_a) => {
140
140
  return new decimal_js_1.default(suppliedUsd).mul(effectiveLtv);
141
141
  });
142
142
  payload.safetyRatioWithLtvZeroFallback = +payload.suppliedUsd ? new decimal_js_1.default(payload.borrowLimitWithLtvZeroFallbackUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
143
+ // Normalised safety ratio (100 = liquidation on every protocol): the automation ratio above, falling back
144
+ // to the regular ratio when the fallback carries its '0' placeholder.
145
+ payload.safetyRatio = +payload.safetyRatioWithLtvZeroFallback ? payload.safetyRatioWithLtvZeroFallback : payload.ratio;
143
146
  payload.liqRatio = new decimal_js_1.default(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
144
147
  payload.liqPercent = new decimal_js_1.default(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
145
148
  const { leveragedType, leveragedAsset } = (0, moneymarket_1.isLeveragedPos)(usedAssets);
@@ -209,6 +209,7 @@ const aaveV4GetAggregatedPositionData = ({ usedAssets, assetsData, network, useU
209
209
  payload.ratio = +payload.suppliedUsd ? new decimal_js_1.default(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
210
210
  payload.minRatio = '100';
211
211
  payload.collRatio = +payload.suppliedUsd ? new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
212
+ payload.safetyRatio = payload.ratio;
212
213
  payload.liqRatio = new decimal_js_1.default(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
213
214
  payload.liqPercent = new decimal_js_1.default(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
214
215
  const { leveragedType, leveragedAsset } = (0, exports.isLeveragedPosAaveV4)(usedAssets);
@@ -102,6 +102,7 @@ const getCompoundV2AggregatedData = (_a) => {
102
102
  payload.collRatio = payload.borrowedUsd && payload.borrowedUsd !== '0'
103
103
  ? new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString()
104
104
  : '0';
105
+ payload.safetyRatio = payload.ratio;
105
106
  // Calculate borrow limits per asset
106
107
  Object.values(usedAssets).forEach((item) => {
107
108
  if (item.isBorrowed) {
@@ -144,6 +145,7 @@ const getCompoundV3AggregatedData = (_a) => {
144
145
  payload.incentiveUsd = incentiveUsd;
145
146
  payload.totalInterestUsd = totalInterestUsd;
146
147
  payload.minRatio = '100';
148
+ payload.safetyRatio = payload.ratio;
147
149
  payload.liqRatio = new decimal_js_1.default(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
148
150
  payload.liqPercent = new decimal_js_1.default(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
149
151
  payload.minDebt = assetsData[selectedMarket.baseAsset].minDebt;
@@ -34,6 +34,8 @@ const getCrvUsdAggregatedData = (_a) => {
34
34
  : '0';
35
35
  // this is all approximation
36
36
  payload.minAllowedRatio = (0, utils_1.mapRange)(numOfBands, 4, 50, 115, 140); // collateral ratio
37
+ // Collateral ratio rebased so 100 sits on the band-derived minimum (normalised safety ratio, same scale as the other protocols).
38
+ payload.safetyRatio = loanExists && payload.minAllowedRatio ? new decimal_js_1.default(payload.ratio).div(payload.minAllowedRatio).mul(100).toString() : '0';
37
39
  payload.collFactor = new decimal_js_1.default(1).div(payload.minAllowedRatio).mul(100).toString(); // collateral factor = 1 / collateral ratio
38
40
  // only take in consideration collAsset
39
41
  payload.borrowLimitUsd = ((_b = usedAssets === null || usedAssets === void 0 ? void 0 : usedAssets[selectedMarket.collAsset]) === null || _b === void 0 ? void 0 : _b.isSupplied)
@@ -85,6 +85,7 @@ const getFluidAggregatedData = ({ usedAssets, assetsData, marketData, }, supplyS
85
85
  payload.ratio = +payload.suppliedUsd ? new decimal_js_1.default(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
86
86
  payload.collRatio = +payload.suppliedUsd ? new decimal_js_1.default(payload.suppliedUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
87
87
  payload.minRatio = marketData.minRatio;
88
+ payload.safetyRatio = payload.ratio;
88
89
  const { leveragedType, leveragedAsset } = (0, moneymarket_1.isLeveragedPos)(usedAssets);
89
90
  payload.leveragedType = leveragedType;
90
91
  payload.liquidationPrice = '';
@@ -48,6 +48,7 @@ const getLiquityV2AggregatedPositionData = ({ usedAssets, assetsData, minCollRat
48
48
  payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
49
49
  payload.ratio = (+payload.suppliedUsd && +payload.borrowedUsd) ? new decimal_js_1.default(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
50
50
  payload.collRatio = (+payload.suppliedUsd && +payload.borrowedUsd) ? new decimal_js_1.default(payload.suppliedUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
51
+ payload.safetyRatio = payload.ratio;
51
52
  const { netApy, incentiveUsd, totalInterestUsd } = (0, exports.calculateNetApyLiquityV2)(usedAssets, assetsData, interestRate);
52
53
  payload.netApy = netApy;
53
54
  payload.incentiveUsd = incentiveUsd;
@@ -42,6 +42,8 @@ const getLlamaLendAggregatedData = (_a) => {
42
42
  : '0';
43
43
  // this is all approximation
44
44
  payload.minAllowedRatio = (0, utils_1.mapRange)(numOfBands, 4, 50, 115, 140); // collateral ratio
45
+ // Collateral ratio rebased so 100 sits on the band-derived minimum (normalised safety ratio, same scale as the other protocols).
46
+ payload.safetyRatio = loanExists && payload.minAllowedRatio ? new decimal_js_1.default(payload.ratio).div(payload.minAllowedRatio).mul(100).toString() : '0';
45
47
  payload.collFactor = new decimal_js_1.default(1).div(payload.minAllowedRatio).mul(100).toString(); // collateral factor = 1 / collateral ratio
46
48
  // only take in consideration collAsset
47
49
  payload.borrowLimitUsd = ((_b = usedAssets === null || usedAssets === void 0 ? void 0 : usedAssets[collAsset]) === null || _b === void 0 ? void 0 : _b.isSupplied)
@@ -46,6 +46,8 @@ const getMorphoBlueAggregatedPositionData = ({ usedAssets, assetsData, marketInf
46
46
  payload.ltv = new decimal_js_1.default(((_c = usedAssets[loanToken]) === null || _c === void 0 ? void 0 : _c.borrowed) || 0).div(oracle).div(((_d = usedAssets[collateralToken]) === null || _d === void 0 ? void 0 : _d.supplied) || 1).toString(); // default to 1 because can't div 0
47
47
  payload.ratio = new decimal_js_1.default(((_e = usedAssets[collateralToken]) === null || _e === void 0 ? void 0 : _e.supplied) || 0).mul(oracle).div(((_f = usedAssets[loanToken]) === null || _f === void 0 ? void 0 : _f.borrowed) || 1).mul(100)
48
48
  .toString();
49
+ // Borrow limit over debt, so 100 sits on the market's LLTV however low it is (`ratio` is the raw collateral ratio).
50
+ payload.safetyRatio = +payload.borrowedUsd > 0 ? new decimal_js_1.default(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
49
51
  const { leveragedType, leveragedAsset } = (0, moneymarket_1.isLeveragedPos)(usedAssets);
50
52
  payload.leveragedType = leveragedType;
51
53
  payload.liquidationPrice = '';
@@ -77,6 +77,8 @@ const getMorphoMidnightAggregatedPositionData = ({ usedAssets, assetsData, marke
77
77
  payload.ltv = new decimal_js_1.default(payload.suppliedCollateralUsd).eq(0) ? '0' : new decimal_js_1.default(payload.borrowedUsd).div(payload.suppliedCollateralUsd).toString();
78
78
  payload.ratio = new decimal_js_1.default(payload.borrowedUsd).eq(0) ? '0' : new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString();
79
79
  payload.healthRatio = new decimal_js_1.default(payload.borrowedUsd).eq(0) ? 'Infinity' : new decimal_js_1.default(payload.liquidationLimitUsd).div(payload.borrowedUsd).toDP(4).toString();
80
+ // Borrow limit over debt, so 100 sits on the market's LLTV however low it is (`ratio` is the raw collateral ratio).
81
+ payload.safetyRatio = +payload.borrowedUsd > 0 ? new decimal_js_1.default(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
80
82
  const { leveragedType, leveragedAsset } = (0, moneymarket_1.isLeveragedPos)(usedAssets);
81
83
  payload.leveragedType = leveragedType;
82
84
  payload.liquidationPrice = '';
@@ -41,11 +41,15 @@ interface TenorOfferFill {
41
41
  /**
42
42
  * Tenor's offer JSON is flat (market fields live on the offer). Morpho's is nested, and that nested
43
43
  * shape is what the app encodes for `Midnight.take`. Map Tenor into that shape so recipes stay on one encoder.
44
+ *
45
+ * The core address is the one field Tenor's offer does not carry, so it is derived from the offer's own
46
+ * `chain_id` rather than the caller's network — an offer names the chain it was made on, and taking it
47
+ * against another chain's core would address a market that does not exist.
44
48
  */
45
49
  export declare const tenorOfferToApiOffer: (offer: TenorOffer) => {
46
50
  market: {
47
51
  chain_id: string | number;
48
- midnight: "0xAdedD8ab6dE832766Fedf0FaC4992E5C4D3EA18A";
52
+ midnight: "0xAdedD8ab6dE832766Fedf0FaC4992E5C4D3EA18A" | "0x471686c42792F93528B000beF54bC10E3aa2045f";
49
53
  loan_token: string;
50
54
  collaterals: TenorOfferCollateral[];
51
55
  maturity: string | number;
@@ -73,7 +77,7 @@ export declare const tenorOfferFillToApiFill: (fill: TenorOfferFill) => {
73
77
  offer: {
74
78
  market: {
75
79
  chain_id: string | number;
76
- midnight: "0xAdedD8ab6dE832766Fedf0FaC4992E5C4D3EA18A";
80
+ midnight: "0xAdedD8ab6dE832766Fedf0FaC4992E5C4D3EA18A" | "0x471686c42792F93528B000beF54bC10E3aa2045f";
77
81
  loan_token: string;
78
82
  collaterals: TenorOfferCollateral[];
79
83
  maturity: string | number;
@@ -34,11 +34,15 @@ const tenorFillPrice = (assets, units) => (new decimal_js_1.default(units).lte(0
34
34
  /**
35
35
  * Tenor's offer JSON is flat (market fields live on the offer). Morpho's is nested, and that nested
36
36
  * shape is what the app encodes for `Midnight.take`. Map Tenor into that shape so recipes stay on one encoder.
37
+ *
38
+ * The core address is the one field Tenor's offer does not carry, so it is derived from the offer's own
39
+ * `chain_id` rather than the caller's network — an offer names the chain it was made on, and taking it
40
+ * against another chain's core would address a market that does not exist.
37
41
  */
38
42
  const tenorOfferToApiOffer = (offer) => ({
39
43
  market: {
40
44
  chain_id: offer.chain_id,
41
- midnight: morphoMidnight_1.MIDNIGHT_BASE,
45
+ midnight: (0, morphoMidnight_1.midnightCoreAddress)(Number(offer.chain_id)),
42
46
  loan_token: offer.loan_token_address,
43
47
  collaterals: offer.collaterals || [],
44
48
  maturity: offer.maturity,
@@ -81,6 +81,7 @@ const sparkGetAggregatedPositionData = (_a) => {
81
81
  payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
82
82
  payload.ratio = +payload.suppliedUsd ? new decimal_js_1.default(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
83
83
  payload.collRatio = +payload.suppliedUsd ? new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
84
+ payload.safetyRatio = payload.ratio;
84
85
  const { netApy, incentiveUsd, totalInterestUsd } = (0, staking_1.calculateNetApy)({ usedAssets, assetsData });
85
86
  payload.netApy = netApy;
86
87
  payload.incentiveUsd = incentiveUsd;
@@ -77,6 +77,11 @@ const _getLiquityTroveInfo = (provider, network, address) => __awaiter(void 0, v
77
77
  _getDebtInFront(viewContract, address),
78
78
  ]);
79
79
  const recoveryMode = troveInfo[6];
80
+ const minCollateralRatio = recoveryMode ? exports.LIQUITY_RECOVERY_MODE_RATIO : exports.LIQUITY_NORMAL_MODE_RATIO;
81
+ const collateral = (0, tokens_1.assetAmountInEth)(troveInfo[1].toString());
82
+ const debtInAsset = (0, tokens_1.assetAmountInEth)(troveInfo[2].toString());
83
+ const collRatio = +debtInAsset ? new decimal_js_1.default(collateral).mul((0, tokens_1.assetAmountInEth)(assetPrice.toString())).div(debtInAsset).mul(100)
84
+ .toString() : '0';
80
85
  const payload = {
81
86
  troveStatus: types_1.LIQUITY_TROVE_STATUS_ENUM[+(troveInfo[0].toString())],
82
87
  collateral: (0, tokens_1.assetAmountInEth)(troveInfo[1].toString()),
@@ -89,7 +94,9 @@ const _getLiquityTroveInfo = (provider, network, address) => __awaiter(void 0, v
89
94
  totalETH: totalETH.toString(),
90
95
  totalLUSD: totalLUSD.toString(),
91
96
  debtInFront: debtInFront.toString(),
92
- minCollateralRatio: recoveryMode ? exports.LIQUITY_RECOVERY_MODE_RATIO : exports.LIQUITY_NORMAL_MODE_RATIO,
97
+ minCollateralRatio,
98
+ // Collateral ratio rebased so 100 sits on the trove's minimum collateral ratio (normalised safety ratio).
99
+ safetyRatio: +minCollateralRatio > 0 ? new decimal_js_1.default(collRatio).div(minCollateralRatio).mul(100).toString() : '0',
93
100
  priceForRecovery: new decimal_js_1.default(recoveryMode ? exports.LIQUITY_RECOVERY_MODE_RATIO : exports.LIQUITY_NORMAL_MODE_RATIO).mul(totalLUSD).div(totalETH).div(100)
94
101
  .toString(),
95
102
  exposure: (0, moneymarket_1.getExposure)((0, tokens_1.assetAmountInEth)(troveInfo[2].toString()), new decimal_js_1.default((0, tokens_1.assetAmountInEth)(troveInfo[1].toString())).mul(assetPrice).toString()),
@@ -1,9 +1,14 @@
1
1
  import { Client, PublicClient } from 'viem';
2
2
  import { Blockish, EthAddress, EthereumProvider, NetworkNumber, PositionBalances } from '../types/common';
3
- import { CdpData, CdpInfo } from '../types';
3
+ import { CdpData, CdpInfo, IlkInfo } from '../types';
4
4
  export declare const _getMakerAccountBalances: (provider: PublicClient, network: NetworkNumber, block: Blockish, addressMapping: boolean, cdpId: string, _managerAddress?: EthAddress) => Promise<PositionBalances>;
5
5
  export declare const getMakerAccountBalances: (provider: EthereumProvider, network: NetworkNumber, block: Blockish, addressMapping: boolean, cdpId: string, _managerAddress?: EthAddress) => Promise<PositionBalances>;
6
6
  export declare const _getUserCdps: (provider: Client, network: NetworkNumber, userAddress: EthAddress) => Promise<CdpInfo[]>;
7
7
  export declare const getUserCdps: (provider: EthereumProvider, network: NetworkNumber, userAddress: EthAddress) => Promise<CdpInfo[]>;
8
- export declare const _getMakerCdpData: (provider: Client, network: NetworkNumber, cdp: CdpInfo) => Promise<CdpData>;
8
+ export declare const _getMakerIlksData: (provider: Client, network: NetworkNumber, ilkLabels: string[]) => Promise<Record<string, IlkInfo>>;
9
+ export declare const getMakerIlksData: (provider: EthereumProvider, network: NetworkNumber, ilkLabels: string[]) => Promise<Record<string, IlkInfo>>;
10
+ /**
11
+ * @param ilkInfo optional precomputed ilk data (from `_getMakerIlksData`); when provided the per-ilk reads are skipped
12
+ */
13
+ export declare const _getMakerCdpData: (provider: Client, network: NetworkNumber, cdp: CdpInfo, ilkInfo?: IlkInfo) => Promise<CdpData>;
9
14
  export declare const getMakerCdpData: (provider: EthereumProvider, network: NetworkNumber, cdp: CdpInfo) => Promise<CdpData>;
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.getMakerCdpData = exports._getMakerCdpData = exports.getUserCdps = exports._getUserCdps = exports.getMakerAccountBalances = exports._getMakerAccountBalances = void 0;
15
+ exports.getMakerCdpData = exports._getMakerCdpData = exports.getMakerIlksData = exports._getMakerIlksData = exports.getUserCdps = exports._getUserCdps = exports.getMakerAccountBalances = exports._getMakerAccountBalances = void 0;
16
16
  const decimal_js_1 = __importDefault(require("decimal.js"));
17
17
  const tokens_1 = require("@defisaver/tokens");
18
18
  const contracts_1 = require("../contracts");
@@ -90,22 +90,39 @@ const _getUserCdps = (provider, network, userAddress) => __awaiter(void 0, void
90
90
  exports._getUserCdps = _getUserCdps;
91
91
  const getUserCdps = (provider, network, userAddress) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getUserCdps)((0, viem_1.getViemProvider)(provider, network), network, userAddress); });
92
92
  exports.getUserCdps = getUserCdps;
93
- const _getMakerCdpData = (provider, network, cdp) => __awaiter(void 0, void 0, void 0, function* () {
93
+ const _getMakerIlksData = (provider, network, ilkLabels) => __awaiter(void 0, void 0, void 0, function* () {
94
94
  const vatContract = (0, contracts_1.McdVatContractViem)(provider, network);
95
95
  const spotterContract = (0, contracts_1.McdSpotterContractViem)(provider, network);
96
96
  const dogContract = (0, contracts_1.McdDogContractViem)(provider, network);
97
97
  const jugContract = (0, contracts_1.McdJugContractViem)(provider, network);
98
- const [[ink, art], coll, par, [_, mat], [artGlobal, rate, spot, line], [duty], futureRate, chop,] = yield Promise.all([
98
+ const par = yield spotterContract.read.par();
99
+ const ilksInfo = yield Promise.all(ilkLabels.map((ilkLabel) => __awaiter(void 0, void 0, void 0, function* () {
100
+ const ilk = (0, tokens_1.stringToBytes)(ilkLabel);
101
+ const [[_, mat], [artGlobal, rate, spot, line], [duty], futureRate, chop,] = yield Promise.all([
102
+ spotterContract.read.ilks([ilk]),
103
+ vatContract.read.ilks([ilk]),
104
+ jugContract.read.ilks([ilk]),
105
+ jugContract.read.drip([ilk]),
106
+ dogContract.read.chop([ilk]),
107
+ ]);
108
+ return (0, makerHelpers_1.parseCollateralInfo)(ilk, par.toString(), mat.toString(), artGlobal.toString(), rate.toString(), spot.toString(), line.toString(), duty.toString(), futureRate.toString(), chop.toString());
109
+ })));
110
+ return Object.fromEntries(ilksInfo.map((ilkInfo) => [ilkInfo.ilkLabel, ilkInfo]));
111
+ });
112
+ exports._getMakerIlksData = _getMakerIlksData;
113
+ const getMakerIlksData = (provider, network, ilkLabels) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getMakerIlksData)((0, viem_1.getViemProvider)(provider, network, { batch: { multicall: true } }), network, ilkLabels); });
114
+ exports.getMakerIlksData = getMakerIlksData;
115
+ /**
116
+ * @param ilkInfo optional precomputed ilk data (from `_getMakerIlksData`); when provided the per-ilk reads are skipped
117
+ */
118
+ const _getMakerCdpData = (provider, network, cdp, ilkInfo) => __awaiter(void 0, void 0, void 0, function* () {
119
+ const vatContract = (0, contracts_1.McdVatContractViem)(provider, network);
120
+ const [[ink, art], coll, fetchedIlkInfo,] = yield Promise.all([
99
121
  vatContract.read.urns([cdp.ilk, cdp.urn]),
100
122
  vatContract.read.gem([cdp.ilk, cdp.urn]),
101
- spotterContract.read.par(),
102
- spotterContract.read.ilks([cdp.ilk]),
103
- vatContract.read.ilks([cdp.ilk]),
104
- jugContract.read.ilks([cdp.ilk]),
105
- jugContract.read.drip([cdp.ilk]),
106
- dogContract.read.chop([cdp.ilk]),
123
+ ilkInfo || (0, exports._getMakerIlksData)(provider, network, [cdp.ilkLabel]).then((ilks) => ilks[cdp.ilkLabel]),
107
124
  ]);
108
- const collInfo = (0, makerHelpers_1.parseCollateralInfo)(cdp.ilk, par.toString(), mat.toString(), artGlobal.toString(), rate.toString(), spot.toString(), line.toString(), duty.toString(), futureRate.toString(), chop.toString());
125
+ const collInfo = fetchedIlkInfo;
109
126
  const collateral = (0, tokens_1.assetAmountInEth)(ink.toString(), `MCD-${cdp.asset}`);
110
127
  const collateralUsd = new decimal_js_1.default(collateral).mul(collInfo.assetPrice).toString();
111
128
  const debt = new decimal_js_1.default(art).times(collInfo.currentRate).div(1e27).floor()
@@ -117,6 +134,8 @@ const _getMakerCdpData = (provider, network, cdp) => __awaiter(void 0, void 0, v
117
134
  .toString();
118
135
  if (new decimal_js_1.default(debt).eq(0))
119
136
  ratio = '0';
137
+ // Collateral ratio rebased so 100 sits on the ilk's liquidation ratio (normalised safety ratio).
138
+ const safetyRatio = +collInfo.liqPercent > 0 ? new decimal_js_1.default(ratio).div(collInfo.liqPercent).mul(100).toString() : '0';
120
139
  const debtTooLow = new decimal_js_1.default(debt).gt(0) && new decimal_js_1.default((0, tokens_1.assetAmountInEth)(debt, 'DAI')).lt(collInfo.minDebt);
121
140
  return {
122
141
  owner: cdp.owner,
@@ -136,6 +155,7 @@ const _getMakerCdpData = (provider, network, cdp) => __awaiter(void 0, void 0, v
136
155
  debtAssetMarketPrice: '1',
137
156
  liquidationPrice,
138
157
  ratio,
158
+ safetyRatio,
139
159
  liqRatio: collInfo.liqRatio.toString(),
140
160
  liqPercent: parseFloat(collInfo.liqPercent.toString()),
141
161
  assetPrice: collInfo.assetPrice,
@@ -3,8 +3,9 @@ export { CompoundMarkets, compoundV2CollateralAssets, v3ETHCollAssets, v3USDbCCo
3
3
  export { SparkMarkets } from './spark';
4
4
  export { CrvUsdMarkets } from './curveUsd';
5
5
  export { MorphoBlueMarkets, findMorphoBlueMarket } from './morphoBlue';
6
- export { MorphoMidnightMarkets, findMorphoMidnightMarket, isTenorMidnightMarket, morphoMidnightMarketCollateralParams, } from './morphoMidnight';
6
+ export { MorphoMidnightMarkets, findMorphoMidnightMarket, isTenorMidnightMarket, morphoMidnightMarketCollateralParams, morphoMidnightVisibleCollaterals, } from './morphoMidnight';
7
7
  export { LlamaLendMarkets } from './llamaLend';
8
8
  export { LiquityV2Markets, findLiquityV2MarketByAddress } from './liquityV2';
9
9
  export { FluidMarkets, getFluidVersionsDataForNetwork, getFluidMarketInfoById, getFTokenAddress, getFluidMarketInfoByAddress, } from './fluid';
10
10
  export { AaveV4Spokes, findAaveV4SpokeByAddress } from './aaveV4';
11
+ export { MakerActiveIlks } from './maker';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.findAaveV4SpokeByAddress = exports.AaveV4Spokes = exports.getFluidMarketInfoByAddress = exports.getFTokenAddress = exports.getFluidMarketInfoById = exports.getFluidVersionsDataForNetwork = exports.FluidMarkets = exports.findLiquityV2MarketByAddress = exports.LiquityV2Markets = exports.LlamaLendMarkets = exports.morphoMidnightMarketCollateralParams = exports.isTenorMidnightMarket = exports.findMorphoMidnightMarket = exports.MorphoMidnightMarkets = exports.findMorphoBlueMarket = exports.MorphoBlueMarkets = exports.CrvUsdMarkets = exports.SparkMarkets = exports.v3USDTCollAssets = exports.v3USDCeCollAssets = exports.v3USDCCollAssets = exports.v3USDbCCollAssets = exports.v3ETHCollAssets = exports.compoundV2CollateralAssets = exports.CompoundMarkets = exports.getAaveV3MarketByMarketAddress = exports.aaveV3AssetsDefaultMarket = exports.aaveV2AssetsDefaultMarket = exports.aaveV1AssetsDefaultMarket = exports.AaveMarkets = void 0;
3
+ exports.MakerActiveIlks = exports.findAaveV4SpokeByAddress = exports.AaveV4Spokes = exports.getFluidMarketInfoByAddress = exports.getFTokenAddress = exports.getFluidMarketInfoById = exports.getFluidVersionsDataForNetwork = exports.FluidMarkets = exports.findLiquityV2MarketByAddress = exports.LiquityV2Markets = exports.LlamaLendMarkets = exports.morphoMidnightVisibleCollaterals = exports.morphoMidnightMarketCollateralParams = exports.isTenorMidnightMarket = exports.findMorphoMidnightMarket = exports.MorphoMidnightMarkets = exports.findMorphoBlueMarket = exports.MorphoBlueMarkets = exports.CrvUsdMarkets = exports.SparkMarkets = exports.v3USDTCollAssets = exports.v3USDCeCollAssets = exports.v3USDCCollAssets = exports.v3USDbCCollAssets = exports.v3ETHCollAssets = exports.compoundV2CollateralAssets = exports.CompoundMarkets = exports.getAaveV3MarketByMarketAddress = exports.aaveV3AssetsDefaultMarket = exports.aaveV2AssetsDefaultMarket = exports.aaveV1AssetsDefaultMarket = exports.AaveMarkets = void 0;
4
4
  var aave_1 = require("./aave");
5
5
  Object.defineProperty(exports, "AaveMarkets", { enumerable: true, get: function () { return aave_1.AaveMarkets; } });
6
6
  Object.defineProperty(exports, "aaveV1AssetsDefaultMarket", { enumerable: true, get: function () { return aave_1.aaveV1AssetsDefaultMarket; } });
@@ -27,6 +27,7 @@ Object.defineProperty(exports, "MorphoMidnightMarkets", { enumerable: true, get:
27
27
  Object.defineProperty(exports, "findMorphoMidnightMarket", { enumerable: true, get: function () { return morphoMidnight_1.findMorphoMidnightMarket; } });
28
28
  Object.defineProperty(exports, "isTenorMidnightMarket", { enumerable: true, get: function () { return morphoMidnight_1.isTenorMidnightMarket; } });
29
29
  Object.defineProperty(exports, "morphoMidnightMarketCollateralParams", { enumerable: true, get: function () { return morphoMidnight_1.morphoMidnightMarketCollateralParams; } });
30
+ Object.defineProperty(exports, "morphoMidnightVisibleCollaterals", { enumerable: true, get: function () { return morphoMidnight_1.morphoMidnightVisibleCollaterals; } });
30
31
  var llamaLend_1 = require("./llamaLend");
31
32
  Object.defineProperty(exports, "LlamaLendMarkets", { enumerable: true, get: function () { return llamaLend_1.LlamaLendMarkets; } });
32
33
  var liquityV2_1 = require("./liquityV2");
@@ -41,3 +42,5 @@ Object.defineProperty(exports, "getFluidMarketInfoByAddress", { enumerable: true
41
42
  var aaveV4_1 = require("./aaveV4");
42
43
  Object.defineProperty(exports, "AaveV4Spokes", { enumerable: true, get: function () { return aaveV4_1.AaveV4Spokes; } });
43
44
  Object.defineProperty(exports, "findAaveV4SpokeByAddress", { enumerable: true, get: function () { return aaveV4_1.findAaveV4SpokeByAddress; } });
45
+ var maker_1 = require("./maker");
46
+ Object.defineProperty(exports, "MakerActiveIlks", { enumerable: true, get: function () { return maker_1.MakerActiveIlks; } });
@@ -0,0 +1 @@
1
+ export declare const MakerActiveIlks: string[];
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MakerActiveIlks = void 0;
4
+ exports.MakerActiveIlks = [
5
+ 'ETH-A',
6
+ 'ETH-B',
7
+ 'ETH-C',
8
+ 'WSTETH-A',
9
+ 'WSTETH-B',
10
+ 'WBTC-A',
11
+ 'WBTC-B',
12
+ 'WBTC-C',
13
+ ];
@@ -1,10 +1,13 @@
1
1
  import { MorphoMidnightCollateralParams, MorphoMidnightMarketData, NetworkNumber } from '../../types';
2
2
  /**
3
- * Morpho Midnight core contract on Base. Every Midnight market trades against this one, whoever curates
4
- * its order book — it is part of the market struct the id is hashed from, and it is what offer tuples
5
- * encode for `Midnight.take`.
3
+ * Morpho Midnight core contract, one per chain. Every Midnight market on a chain trades against its core,
4
+ * whoever curates the order book — it is part of the market struct the id is hashed from, and it is what
5
+ * offer tuples encode for `Midnight.take`. Listed at
6
+ * https://docs.morpho.org/get-started/resources/addresses/.
6
7
  */
7
8
  export declare const MIDNIGHT_BASE: "0xAdedD8ab6dE832766Fedf0FaC4992E5C4D3EA18A";
9
+ export declare const MIDNIGHT_ETH: "0x471686c42792F93528B000beF54bC10E3aa2045f";
10
+ export declare const midnightCoreAddress: (network: NetworkNumber) => "0xAdedD8ab6dE832766Fedf0FaC4992E5C4D3EA18A" | "0x471686c42792F93528B000beF54bC10E3aa2045f";
8
11
  export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20260731: (networkId?: NetworkNumber) => MorphoMidnightMarketData;
9
12
  export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20260828: (networkId?: NetworkNumber) => MorphoMidnightMarketData;
10
13
  export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20260925: (networkId?: NetworkNumber) => MorphoMidnightMarketData;
@@ -37,6 +40,48 @@ export declare const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261030: () => Morpho
37
40
  export declare const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261127: () => MorphoMidnightMarketData;
38
41
  export declare const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261225: () => MorphoMidnightMarketData;
39
42
  export declare const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20270129: () => MorphoMidnightMarketData;
43
+ export declare const MORPHO_MIDNIGHT_WBTC_USDC_860_20260925_ETH: () => MorphoMidnightMarketData;
44
+ export declare const MORPHO_MIDNIGHT_WBTC_USDC_860_20261030_ETH: () => MorphoMidnightMarketData;
45
+ export declare const MORPHO_MIDNIGHT_WBTC_USDC_860_20261127_ETH: () => MorphoMidnightMarketData;
46
+ export declare const MORPHO_MIDNIGHT_WBTC_USDC_860_20261225_ETH: () => MorphoMidnightMarketData;
47
+ export declare const MORPHO_MIDNIGHT_WBTC_USDC_860_20270129_ETH: () => MorphoMidnightMarketData;
48
+ export declare const MORPHO_MIDNIGHT_WBTC_USDC_860_20270226_ETH: () => MorphoMidnightMarketData;
49
+ export declare const MORPHO_MIDNIGHT_WBTC_USDC_860_20270326_ETH: () => MorphoMidnightMarketData;
50
+ export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20260925_ETH: () => MorphoMidnightMarketData;
51
+ export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20261030_ETH: () => MorphoMidnightMarketData;
52
+ export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20261127_ETH: () => MorphoMidnightMarketData;
53
+ export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20261225_ETH: () => MorphoMidnightMarketData;
54
+ export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20270129_ETH: () => MorphoMidnightMarketData;
55
+ export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20270226_ETH: () => MorphoMidnightMarketData;
56
+ export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20270326_ETH: () => MorphoMidnightMarketData;
57
+ export declare const MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20260925_ETH: () => MorphoMidnightMarketData;
58
+ export declare const MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20261030_ETH: () => MorphoMidnightMarketData;
59
+ export declare const MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20261127_ETH: () => MorphoMidnightMarketData;
60
+ export declare const MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20261225_ETH: () => MorphoMidnightMarketData;
61
+ export declare const MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20260925_ETH: () => MorphoMidnightMarketData;
62
+ export declare const MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20261030_ETH: () => MorphoMidnightMarketData;
63
+ export declare const MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20261127_ETH: () => MorphoMidnightMarketData;
64
+ export declare const MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20261225_ETH: () => MorphoMidnightMarketData;
65
+ export declare const MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20260925_ETH: () => MorphoMidnightMarketData;
66
+ export declare const MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20261030_ETH: () => MorphoMidnightMarketData;
67
+ export declare const MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20261127_ETH: () => MorphoMidnightMarketData;
68
+ export declare const MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20261225_ETH: () => MorphoMidnightMarketData;
69
+ export declare const MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20260925_ETH: () => MorphoMidnightMarketData;
70
+ export declare const MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20261030_ETH: () => MorphoMidnightMarketData;
71
+ export declare const MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20261127_ETH: () => MorphoMidnightMarketData;
72
+ export declare const MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20261225_ETH: () => MorphoMidnightMarketData;
73
+ export declare const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20260925_ETH: () => MorphoMidnightMarketData;
74
+ export declare const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261030_ETH: () => MorphoMidnightMarketData;
75
+ export declare const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261127_ETH: () => MorphoMidnightMarketData;
76
+ export declare const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261225_ETH: () => MorphoMidnightMarketData;
77
+ export declare const MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20260925_ETH: () => MorphoMidnightMarketData;
78
+ export declare const MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20261030_ETH: () => MorphoMidnightMarketData;
79
+ export declare const MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20261127_ETH: () => MorphoMidnightMarketData;
80
+ export declare const MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20261225_ETH: () => MorphoMidnightMarketData;
81
+ export declare const MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20260925_ETH: () => MorphoMidnightMarketData;
82
+ export declare const MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20261030_ETH: () => MorphoMidnightMarketData;
83
+ export declare const MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20261127_ETH: () => MorphoMidnightMarketData;
84
+ export declare const MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20261225_ETH: () => MorphoMidnightMarketData;
40
85
  export declare const MorphoMidnightMarkets: (networkId: NetworkNumber) => {
41
86
  readonly morphomidnightcbbtcusdc_860_20260731_base: MorphoMidnightMarketData;
42
87
  readonly morphomidnightcbbtcusdc_860_20260828_base: MorphoMidnightMarketData;
@@ -70,13 +115,50 @@ export declare const MorphoMidnightMarkets: (networkId: NetworkNumber) => {
70
115
  readonly morphomidnighttenorcbethweth_20261127_base: MorphoMidnightMarketData;
71
116
  readonly morphomidnighttenorcbethweth_20261225_base: MorphoMidnightMarketData;
72
117
  readonly morphomidnighttenorcbethweth_20270129_base: MorphoMidnightMarketData;
118
+ readonly morphomidnightwbtcusdc_860_20260925_eth: MorphoMidnightMarketData;
119
+ readonly morphomidnightwbtcusdc_860_20261030_eth: MorphoMidnightMarketData;
120
+ readonly morphomidnightwbtcusdc_860_20261127_eth: MorphoMidnightMarketData;
121
+ readonly morphomidnightwbtcusdc_860_20261225_eth: MorphoMidnightMarketData;
122
+ readonly morphomidnightwbtcusdc_860_20270129_eth: MorphoMidnightMarketData;
123
+ readonly morphomidnightwbtcusdc_860_20270226_eth: MorphoMidnightMarketData;
124
+ readonly morphomidnightwbtcusdc_860_20270326_eth: MorphoMidnightMarketData;
125
+ readonly morphomidnightcbbtcusdc_860_20260925_eth: MorphoMidnightMarketData;
126
+ readonly morphomidnightcbbtcusdc_860_20261030_eth: MorphoMidnightMarketData;
127
+ readonly morphomidnightcbbtcusdc_860_20261127_eth: MorphoMidnightMarketData;
128
+ readonly morphomidnightcbbtcusdc_860_20261225_eth: MorphoMidnightMarketData;
129
+ readonly morphomidnightcbbtcusdc_860_20270129_eth: MorphoMidnightMarketData;
130
+ readonly morphomidnightcbbtcusdc_860_20270226_eth: MorphoMidnightMarketData;
131
+ readonly morphomidnightcbbtcusdc_860_20270326_eth: MorphoMidnightMarketData;
132
+ readonly morphomidnighttenorreusdusdc_20260925_eth: MorphoMidnightMarketData;
133
+ readonly morphomidnighttenorreusdusdc_20261030_eth: MorphoMidnightMarketData;
134
+ readonly morphomidnighttenorreusdusdc_20261127_eth: MorphoMidnightMarketData;
135
+ readonly morphomidnighttenorreusdusdc_20261225_eth: MorphoMidnightMarketData;
136
+ readonly morphomidnighttenorsiusdusdc_20260925_eth: MorphoMidnightMarketData;
137
+ readonly morphomidnighttenorsiusdusdc_20261030_eth: MorphoMidnightMarketData;
138
+ readonly morphomidnighttenorsiusdusdc_20261127_eth: MorphoMidnightMarketData;
139
+ readonly morphomidnighttenorsiusdusdc_20261225_eth: MorphoMidnightMarketData;
140
+ readonly morphomidnighttenorstrusdusdc_20260925_eth: MorphoMidnightMarketData;
141
+ readonly morphomidnighttenorstrusdusdc_20261030_eth: MorphoMidnightMarketData;
142
+ readonly morphomidnighttenorstrusdusdc_20261127_eth: MorphoMidnightMarketData;
143
+ readonly morphomidnighttenorstrusdusdc_20261225_eth: MorphoMidnightMarketData;
144
+ readonly morphomidnighttenorusd3usdc_20260925_eth: MorphoMidnightMarketData;
145
+ readonly morphomidnighttenorusd3usdc_20261030_eth: MorphoMidnightMarketData;
146
+ readonly morphomidnighttenorusd3usdc_20261127_eth: MorphoMidnightMarketData;
147
+ readonly morphomidnighttenorusd3usdc_20261225_eth: MorphoMidnightMarketData;
148
+ readonly morphomidnighttenorwethusdc_20260925_eth: MorphoMidnightMarketData;
149
+ readonly morphomidnighttenorwethusdc_20261030_eth: MorphoMidnightMarketData;
150
+ readonly morphomidnighttenorwethusdc_20261127_eth: MorphoMidnightMarketData;
151
+ readonly morphomidnighttenorwethusdc_20261225_eth: MorphoMidnightMarketData;
152
+ readonly morphomidnighttenorwsrusdusdc_20260925_eth: MorphoMidnightMarketData;
153
+ readonly morphomidnighttenorwsrusdusdc_20261030_eth: MorphoMidnightMarketData;
154
+ readonly morphomidnighttenorwsrusdusdc_20261127_eth: MorphoMidnightMarketData;
155
+ readonly morphomidnighttenorwsrusdusdc_20261225_eth: MorphoMidnightMarketData;
156
+ readonly morphomidnighttenorwstethweth_20260925_eth: MorphoMidnightMarketData;
157
+ readonly morphomidnighttenorwstethweth_20261030_eth: MorphoMidnightMarketData;
158
+ readonly morphomidnighttenorwstethweth_20261127_eth: MorphoMidnightMarketData;
159
+ readonly morphomidnighttenorwstethweth_20261225_eth: MorphoMidnightMarketData;
73
160
  };
74
161
  export declare const isTenorMidnightMarket: (market: Pick<MorphoMidnightMarketData, "curator"> | string) => boolean;
75
162
  export declare const findMorphoMidnightMarket: (marketId: string, network?: NetworkNumber) => MorphoMidnightMarketData | undefined;
76
- /**
77
- * The market's collateral set as the chain knows it: the listed collaterals followed by the curator's
78
- * hidden ones. This — not `collaterals` — is what a `Market` struct takes, since the market id is the hash
79
- * of that struct. Anything assembling one for a contract call goes through here so it can't quietly build
80
- * a market of its own instead.
81
- */
82
- export declare const morphoMidnightMarketCollateralParams: (market: Pick<MorphoMidnightMarketData, "collaterals" | "hiddenCollaterals">) => MorphoMidnightCollateralParams[];
163
+ export declare const morphoMidnightMarketCollateralParams: (market: Pick<MorphoMidnightMarketData, "collaterals">) => MorphoMidnightCollateralParams[];
164
+ export declare const morphoMidnightVisibleCollaterals: (market: Pick<MorphoMidnightMarketData, "collaterals">) => MorphoMidnightCollateralParams[];