@defisaver/positions-sdk 2.1.151 → 2.1.152-shifter-v2-dev-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 (55) hide show
  1. package/cjs/claiming/compV3.js +0 -1
  2. package/cjs/config/contracts.d.ts +4 -0
  3. package/cjs/config/contracts.js +4 -0
  4. package/cjs/fluid/index.d.ts +2 -0
  5. package/cjs/fluid/index.js +36 -1
  6. package/cjs/helpers/morphoMidnightHelpers/tenor.d.ts +6 -2
  7. package/cjs/helpers/morphoMidnightHelpers/tenor.js +5 -1
  8. package/cjs/maker/index.d.ts +7 -2
  9. package/cjs/maker/index.js +27 -10
  10. package/cjs/markets/index.d.ts +2 -1
  11. package/cjs/markets/index.js +4 -1
  12. package/cjs/markets/maker/index.d.ts +1 -0
  13. package/cjs/markets/maker/index.js +13 -0
  14. package/cjs/markets/morphoMidnight/index.d.ts +92 -10
  15. package/cjs/markets/morphoMidnight/index.js +519 -60
  16. package/cjs/morphoMidnight/index.js +11 -1
  17. package/cjs/portfolio/index.d.ts +5 -1
  18. package/cjs/portfolio/index.js +287 -0
  19. package/cjs/types/morphoMidnight.d.ts +57 -4
  20. package/cjs/types/morphoMidnight.js +45 -0
  21. package/cjs/types/portfolio.d.ts +26 -10
  22. package/esm/claiming/compV3.js +0 -1
  23. package/esm/config/contracts.d.ts +4 -0
  24. package/esm/config/contracts.js +4 -0
  25. package/esm/fluid/index.d.ts +2 -0
  26. package/esm/fluid/index.js +33 -0
  27. package/esm/helpers/morphoMidnightHelpers/tenor.d.ts +6 -2
  28. package/esm/helpers/morphoMidnightHelpers/tenor.js +6 -2
  29. package/esm/maker/index.d.ts +7 -2
  30. package/esm/maker/index.js +26 -11
  31. package/esm/markets/index.d.ts +2 -1
  32. package/esm/markets/index.js +2 -1
  33. package/esm/markets/maker/index.d.ts +1 -0
  34. package/esm/markets/maker/index.js +10 -0
  35. package/esm/markets/morphoMidnight/index.d.ts +92 -10
  36. package/esm/markets/morphoMidnight/index.js +473 -59
  37. package/esm/morphoMidnight/index.js +11 -1
  38. package/esm/portfolio/index.d.ts +5 -1
  39. package/esm/portfolio/index.js +289 -3
  40. package/esm/types/morphoMidnight.d.ts +57 -4
  41. package/esm/types/morphoMidnight.js +45 -0
  42. package/esm/types/portfolio.d.ts +26 -10
  43. package/package.json +1 -1
  44. package/src/claiming/compV3.ts +0 -1
  45. package/src/config/contracts.ts +4 -0
  46. package/src/fluid/index.ts +40 -0
  47. package/src/helpers/morphoMidnightHelpers/tenor.ts +6 -2
  48. package/src/maker/index.ts +56 -28
  49. package/src/markets/index.ts +3 -1
  50. package/src/markets/maker/index.ts +10 -0
  51. package/src/markets/morphoMidnight/index.ts +724 -61
  52. package/src/morphoMidnight/index.ts +8 -1
  53. package/src/portfolio/index.ts +270 -2
  54. package/src/types/morphoMidnight.ts +59 -3
  55. package/src/types/portfolio.ts +31 -12
@@ -1,21 +1,41 @@
1
1
  import { MorphoMidnightVersions, NetworkNumber, } from '../../types';
2
2
  import { ZERO_ADDRESS } from '../../constants';
3
3
  /**
4
- * Morpho Midnight core contract on Base. Every Midnight market trades against this one, whoever curates
5
- * its order book — it is part of the market struct the id is hashed from, and it is what offer tuples
6
- * encode for `Midnight.take`.
4
+ * Morpho Midnight core contract, one per chain. Every Midnight market on a chain trades against its core,
5
+ * whoever curates the order book — it is part of the market struct the id is hashed from, and it is what
6
+ * offer tuples encode for `Midnight.take`. Listed at
7
+ * https://docs.morpho.org/get-started/resources/addresses/.
7
8
  */
8
9
  export const MIDNIGHT_BASE = '0xAdedD8ab6dE832766Fedf0FaC4992E5C4D3EA18A';
10
+ export const MIDNIGHT_ETH = '0x471686c42792F93528B000beF54bC10E3aa2045f';
11
+ export const midnightCoreAddress = (network) => (network === NetworkNumber.Eth ? MIDNIGHT_ETH : MIDNIGHT_BASE);
9
12
  const USDC_BASE = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913';
10
13
  const WETH_BASE = '0x4200000000000000000000000000000000000006';
11
14
  const CBBTC_BASE = '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf';
12
15
  const CBETH_BASE = '0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22';
16
+ const USDC_ETH = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48';
17
+ const WETH_ETH = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2';
18
+ const WBTC_ETH = '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599';
19
+ const CBBTC_ETH = '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf';
20
+ const STRUSD_ETH = '0x280839980a7eD0D7717F64125fE241012E5F5815';
21
+ const WSRUSD_ETH = '0xd3fD63209FA2D55B07A0f6db36C2f43900be3094';
22
+ const USD3_ETH = '0x056B269Eb1f75477a8666ae8C7fE01b64dD55eCc';
23
+ const REUSD_ETH = '0x5086bf358635B81D8C47C66d1C8b9E567Db70c72';
24
+ const SIUSD_ETH = '0xDBDC1Ef57537E34680B898E1FEBD3D68c7389bCB';
25
+ const WSTETH_ETH = '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0';
13
26
  // Tenor's ERC-4626 collateral vaults, one per pair and shared by that pair's whole maturity ladder. Each
14
27
  // is a collateral of its markets on-chain without being an asset the app deals in — see the note above
15
28
  // the Tenor markets below, and https://www.docs.tenor.finance/technical-docs/addresses/#vaults.
16
29
  const TENOR_CBBTC_USDC_VAULT_BASE = '0xf6a70085b7f79FA76B04EbF7A2D7D87C3c5c04BC';
17
30
  const TENOR_WETH_USDC_VAULT_BASE = '0xe690a58EF52854513462745237F6A213a0d54dF1';
18
31
  const TENOR_CBETH_WETH_VAULT_BASE = '0xFa750DD0099eAdB72d401244De73ce7B89edf90F';
32
+ const TENOR_WETH_USDC_VAULT_ETH = '0x7579a75658A7A0b7d277296dFaEecF4018746091';
33
+ const TENOR_STRUSD_USDC_VAULT_ETH = '0xef6955d886fce26D87753dA45192eA50F59dc91c';
34
+ const TENOR_WSRUSD_USDC_VAULT_ETH = '0x09409fa71bCfd3f433571dbeec0C0A9C19B0d30E';
35
+ const TENOR_USD3_USDC_VAULT_ETH = '0x26C46ACb48B46cC99ccB3cf6C365BdaFa2556E80';
36
+ const TENOR_REUSD_USDC_VAULT_ETH = '0xe3891d8cA7E00Bc42157D9bb5797C88D9159AAC6';
37
+ const TENOR_SIUSD_USDC_VAULT_ETH = '0x226ecbf4755a5F81ed721E18c3fDA11f004Ea9e0';
38
+ const TENOR_WSTETH_WETH_VAULT_ETH = '0xe1Bdb88eE5DBaCE653ecD2123E8396BB5BA8adc5';
19
39
  // Sourced from the official listing at https://markets.morpho.org/fixed/base
20
40
  // BASE — USDC/cbBTC, 86% LLTV, monthly maturity ladder
21
41
  export const MORPHO_MIDNIGHT_CBBTC_USDC_860_20260731 = (networkId = NetworkNumber.Base) => ({
@@ -180,19 +200,20 @@ export const MORPHO_MIDNIGHT_CBBTC_USDC_860_20270129 = (networkId = NetworkNumbe
180
200
  // = Tenor's `fixedMarketIdentifier`; they come back `listed: false`, meaning Tenor — not Morpho — serves
181
201
  // the book.
182
202
  //
183
- // Every market below is verified against `MidnightView.toMarket(marketId)` on Base: core address,
184
- // maturity, rcfThreshold, loan token, gates and collaterals all match. On-chain each market carries **two**
185
- // collaterals the pair's own token at index 0, and Tenor's ERC-4626 vault at index 1 (98% LLTV; the
186
- // `metadata.vault` of the parent tenor market, listed at
187
- // https://www.docs.tenor.finance/technical-docs/addresses/#vaults). The vault is not an asset the app
188
- // deals in, so it is split out into `hiddenCollaterals` instead of `collaterals`: everything that renders
189
- // or prices a position sees a single-collateral market, and because the vault stays the *suffix* of the
190
- // set, the SDK's positional `prices[i]` / `collateral[i]` reads stay aligned with `collaterals`.
203
+ // Every market below is verified by replaying `MidnightView.toId` over the struct these fields build:
204
+ // core address, maturity, rcfThreshold, loan token, gates and the whole ordered collateral set have to
205
+ // match or the hash does not come back as the recorded `marketId`. On-chain each market carries **two**
206
+ // collaterals the pair's own token, and Tenor's ERC-4626 vault at 98% LLTV (the `metadata.vault` of the
207
+ // parent tenor market, listed at https://www.docs.tenor.finance/technical-docs/addresses/#vaults). The
208
+ // vault is not an asset the app deals in, so it carries `hidden: true`: everything that renders or prices
209
+ // a position skips it and sees a single-collateral market.
191
210
  //
192
- // It is only split out, never dropped: the market id is the hash of the full struct, so a `Market` handed
193
- // to the core has to be `[...collaterals, ...hiddenCollaterals]` or the call addresses a market of its own
194
- // making. The take path builds no structoffer tuples carry the market's full collateral set straight
195
- // from the router's offer JSON.
211
+ // It is only flagged, never dropped or reordered: the market id is the hash of the full struct, so a
212
+ // `Market` handed to the core has to carry the complete set in the chain's own order or the call
213
+ // addresses a market of its own makingwhich does not revert, because markets are permissionless. On
214
+ // Base the vault happens to come last every time; on mainnet the order varies per market, which is why
215
+ // the flag lives on the entry rather than in a second list. The take path builds no struct — offer
216
+ // tuples carry the market's full collateral set straight from the router's offer JSON.
196
217
  export const MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20260827 = (networkId = NetworkNumber.Base) => ({
197
218
  chainIds: [NetworkNumber.Base],
198
219
  label: 'Tenor cbBTC/USDC',
@@ -206,12 +227,12 @@ export const MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20260827 = (networkId = Networ
206
227
  lltv: 0.86,
207
228
  liquidationCursor: '300000000000000000',
208
229
  oracle: '0x663BECd10daE6C4A3Dcd89F1d76c1174199639B9',
209
- }],
210
- hiddenCollaterals: [{
230
+ }, {
211
231
  token: TENOR_CBBTC_USDC_VAULT_BASE,
212
232
  lltv: 0.98,
213
233
  liquidationCursor: '300000000000000000',
214
234
  oracle: '0x4a24e4bf269cE26aAD2dF00437e7730d25FCdE26',
235
+ hidden: true,
215
236
  }],
216
237
  maturity: 1787788800, // 2026-08-27T00:00:00Z
217
238
  rcfThreshold: '3000000000',
@@ -234,12 +255,12 @@ export const MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20260924 = (networkId = Networ
234
255
  lltv: 0.86,
235
256
  liquidationCursor: '300000000000000000',
236
257
  oracle: '0x663BECd10daE6C4A3Dcd89F1d76c1174199639B9',
237
- }],
238
- hiddenCollaterals: [{
258
+ }, {
239
259
  token: TENOR_CBBTC_USDC_VAULT_BASE,
240
260
  lltv: 0.98,
241
261
  liquidationCursor: '300000000000000000',
242
262
  oracle: '0x4a24e4bf269cE26aAD2dF00437e7730d25FCdE26',
263
+ hidden: true,
243
264
  }],
244
265
  maturity: 1790208000, // 2026-09-24T00:00:00Z
245
266
  rcfThreshold: '3000000000',
@@ -262,12 +283,12 @@ export const MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20261022 = (networkId = Networ
262
283
  lltv: 0.86,
263
284
  liquidationCursor: '300000000000000000',
264
285
  oracle: '0x663BECd10daE6C4A3Dcd89F1d76c1174199639B9',
265
- }],
266
- hiddenCollaterals: [{
286
+ }, {
267
287
  token: TENOR_CBBTC_USDC_VAULT_BASE,
268
288
  lltv: 0.98,
269
289
  liquidationCursor: '300000000000000000',
270
290
  oracle: '0x4a24e4bf269cE26aAD2dF00437e7730d25FCdE26',
291
+ hidden: true,
271
292
  }],
272
293
  maturity: 1792627200, // 2026-10-22T00:00:00Z
273
294
  rcfThreshold: '3000000000',
@@ -290,12 +311,12 @@ export const MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20261119 = (networkId = Networ
290
311
  lltv: 0.86,
291
312
  liquidationCursor: '300000000000000000',
292
313
  oracle: '0x663BECd10daE6C4A3Dcd89F1d76c1174199639B9',
293
- }],
294
- hiddenCollaterals: [{
314
+ }, {
295
315
  token: TENOR_CBBTC_USDC_VAULT_BASE,
296
316
  lltv: 0.98,
297
317
  liquidationCursor: '300000000000000000',
298
318
  oracle: '0x4a24e4bf269cE26aAD2dF00437e7730d25FCdE26',
319
+ hidden: true,
299
320
  }],
300
321
  maturity: 1795046400, // 2026-11-19T00:00:00Z
301
322
  rcfThreshold: '3000000000',
@@ -318,12 +339,12 @@ export const MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20261217 = (networkId = Networ
318
339
  lltv: 0.86,
319
340
  liquidationCursor: '300000000000000000',
320
341
  oracle: '0x663BECd10daE6C4A3Dcd89F1d76c1174199639B9',
321
- }],
322
- hiddenCollaterals: [{
342
+ }, {
323
343
  token: TENOR_CBBTC_USDC_VAULT_BASE,
324
344
  lltv: 0.98,
325
345
  liquidationCursor: '300000000000000000',
326
346
  oracle: '0x4a24e4bf269cE26aAD2dF00437e7730d25FCdE26',
347
+ hidden: true,
327
348
  }],
328
349
  maturity: 1797465600, // 2026-12-17T00:00:00Z
329
350
  rcfThreshold: '3000000000',
@@ -346,12 +367,12 @@ export const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20260827 = (networkId = Network
346
367
  lltv: 0.86,
347
368
  liquidationCursor: '300000000000000000',
348
369
  oracle: '0xFEa2D58cEfCb9fcb597723c6bAE66fFE4193aFE4',
349
- }],
350
- hiddenCollaterals: [{
370
+ }, {
351
371
  token: TENOR_WETH_USDC_VAULT_BASE,
352
372
  lltv: 0.98,
353
373
  liquidationCursor: '300000000000000000',
354
374
  oracle: '0x784519B1b59A1e1498f077066bB9336672bcc3EE',
375
+ hidden: true,
355
376
  }],
356
377
  maturity: 1787788800,
357
378
  rcfThreshold: '3000000000',
@@ -374,12 +395,12 @@ export const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20260924 = (networkId = Network
374
395
  lltv: 0.86,
375
396
  liquidationCursor: '300000000000000000',
376
397
  oracle: '0xFEa2D58cEfCb9fcb597723c6bAE66fFE4193aFE4',
377
- }],
378
- hiddenCollaterals: [{
398
+ }, {
379
399
  token: TENOR_WETH_USDC_VAULT_BASE,
380
400
  lltv: 0.98,
381
401
  liquidationCursor: '300000000000000000',
382
402
  oracle: '0x784519B1b59A1e1498f077066bB9336672bcc3EE',
403
+ hidden: true,
383
404
  }],
384
405
  maturity: 1790208000,
385
406
  rcfThreshold: '3000000000',
@@ -402,12 +423,12 @@ export const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261022 = (networkId = Network
402
423
  lltv: 0.86,
403
424
  liquidationCursor: '300000000000000000',
404
425
  oracle: '0xFEa2D58cEfCb9fcb597723c6bAE66fFE4193aFE4',
405
- }],
406
- hiddenCollaterals: [{
426
+ }, {
407
427
  token: TENOR_WETH_USDC_VAULT_BASE,
408
428
  lltv: 0.98,
409
429
  liquidationCursor: '300000000000000000',
410
430
  oracle: '0x784519B1b59A1e1498f077066bB9336672bcc3EE',
431
+ hidden: true,
411
432
  }],
412
433
  maturity: 1792627200,
413
434
  rcfThreshold: '3000000000',
@@ -430,12 +451,12 @@ export const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261119 = (networkId = Network
430
451
  lltv: 0.86,
431
452
  liquidationCursor: '300000000000000000',
432
453
  oracle: '0xFEa2D58cEfCb9fcb597723c6bAE66fFE4193aFE4',
433
- }],
434
- hiddenCollaterals: [{
454
+ }, {
435
455
  token: TENOR_WETH_USDC_VAULT_BASE,
436
456
  lltv: 0.98,
437
457
  liquidationCursor: '300000000000000000',
438
458
  oracle: '0x784519B1b59A1e1498f077066bB9336672bcc3EE',
459
+ hidden: true,
439
460
  }],
440
461
  maturity: 1795046400,
441
462
  rcfThreshold: '3000000000',
@@ -458,12 +479,12 @@ export const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261217 = (networkId = Network
458
479
  lltv: 0.86,
459
480
  liquidationCursor: '300000000000000000',
460
481
  oracle: '0xFEa2D58cEfCb9fcb597723c6bAE66fFE4193aFE4',
461
- }],
462
- hiddenCollaterals: [{
482
+ }, {
463
483
  token: TENOR_WETH_USDC_VAULT_BASE,
464
484
  lltv: 0.98,
465
485
  liquidationCursor: '300000000000000000',
466
486
  oracle: '0x784519B1b59A1e1498f077066bB9336672bcc3EE',
487
+ hidden: true,
467
488
  }],
468
489
  maturity: 1797465600,
469
490
  rcfThreshold: '3000000000',
@@ -486,12 +507,12 @@ export const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20260827 = (networkId = Networ
486
507
  lltv: 0.945,
487
508
  liquidationCursor: '300000000000000000',
488
509
  oracle: '0xB03855Ad5AFD6B8db8091DD5551CAC4ed621d9E6',
489
- }],
490
- hiddenCollaterals: [{
510
+ }, {
491
511
  token: TENOR_CBETH_WETH_VAULT_BASE,
492
512
  lltv: 0.98,
493
513
  liquidationCursor: '300000000000000000',
494
514
  oracle: '0xa02f629871be35d6db0F88C944cF955554Ec87c0',
515
+ hidden: true,
495
516
  }],
496
517
  maturity: 1787788800,
497
518
  rcfThreshold: '4000000000000000000',
@@ -514,12 +535,12 @@ export const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20260924 = (networkId = Networ
514
535
  lltv: 0.945,
515
536
  liquidationCursor: '300000000000000000',
516
537
  oracle: '0xB03855Ad5AFD6B8db8091DD5551CAC4ed621d9E6',
517
- }],
518
- hiddenCollaterals: [{
538
+ }, {
519
539
  token: TENOR_CBETH_WETH_VAULT_BASE,
520
540
  lltv: 0.98,
521
541
  liquidationCursor: '300000000000000000',
522
542
  oracle: '0xa02f629871be35d6db0F88C944cF955554Ec87c0',
543
+ hidden: true,
523
544
  }],
524
545
  maturity: 1790208000,
525
546
  rcfThreshold: '4000000000000000000',
@@ -542,12 +563,12 @@ export const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261022 = (networkId = Networ
542
563
  lltv: 0.945,
543
564
  liquidationCursor: '300000000000000000',
544
565
  oracle: '0xB03855Ad5AFD6B8db8091DD5551CAC4ed621d9E6',
545
- }],
546
- hiddenCollaterals: [{
566
+ }, {
547
567
  token: TENOR_CBETH_WETH_VAULT_BASE,
548
568
  lltv: 0.98,
549
569
  liquidationCursor: '300000000000000000',
550
570
  oracle: '0xa02f629871be35d6db0F88C944cF955554Ec87c0',
571
+ hidden: true,
551
572
  }],
552
573
  maturity: 1792627200,
553
574
  rcfThreshold: '4000000000000000000',
@@ -570,12 +591,12 @@ export const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261119 = (networkId = Networ
570
591
  lltv: 0.945,
571
592
  liquidationCursor: '300000000000000000',
572
593
  oracle: '0xB03855Ad5AFD6B8db8091DD5551CAC4ed621d9E6',
573
- }],
574
- hiddenCollaterals: [{
594
+ }, {
575
595
  token: TENOR_CBETH_WETH_VAULT_BASE,
576
596
  lltv: 0.98,
577
597
  liquidationCursor: '300000000000000000',
578
598
  oracle: '0xa02f629871be35d6db0F88C944cF955554Ec87c0',
599
+ hidden: true,
579
600
  }],
580
601
  maturity: 1795046400,
581
602
  rcfThreshold: '4000000000000000000',
@@ -598,12 +619,12 @@ export const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261217 = (networkId = Networ
598
619
  lltv: 0.945,
599
620
  liquidationCursor: '300000000000000000',
600
621
  oracle: '0xB03855Ad5AFD6B8db8091DD5551CAC4ed621d9E6',
601
- }],
602
- hiddenCollaterals: [{
622
+ }, {
603
623
  token: TENOR_CBETH_WETH_VAULT_BASE,
604
624
  lltv: 0.98,
605
625
  liquidationCursor: '300000000000000000',
606
626
  oracle: '0xa02f629871be35d6db0F88C944cF955554Ec87c0',
627
+ hidden: true,
607
628
  }],
608
629
  maturity: 1797465600,
609
630
  rcfThreshold: '4000000000000000000',
@@ -628,12 +649,12 @@ const createTenorWethUsdcRollingMarket = (value, url, maturity, marketId) => ({
628
649
  lltv: 0.86,
629
650
  liquidationCursor: '300000000000000000',
630
651
  oracle: '0xFEa2D58cEfCb9fcb597723c6bAE66fFE4193aFE4',
631
- }],
632
- hiddenCollaterals: [{
652
+ }, {
633
653
  token: TENOR_WETH_USDC_VAULT_BASE,
634
654
  lltv: 0.98,
635
655
  liquidationCursor: '300000000000000000',
636
656
  oracle: '0x784519B1b59A1e1498f077066bB9336672bcc3EE',
657
+ hidden: true,
637
658
  }],
638
659
  maturity,
639
660
  rcfThreshold: '3000000000',
@@ -656,12 +677,12 @@ const createTenorCbEthWethRollingMarket = (value, url, maturity, marketId) => ({
656
677
  lltv: 0.945,
657
678
  liquidationCursor: '300000000000000000',
658
679
  oracle: '0xB03855Ad5AFD6B8db8091DD5551CAC4ed621d9E6',
659
- }],
660
- hiddenCollaterals: [{
680
+ }, {
661
681
  token: TENOR_CBETH_WETH_VAULT_BASE,
662
682
  lltv: 0.98,
663
683
  liquidationCursor: '300000000000000000',
664
684
  oracle: '0xa02f629871be35d6db0F88C944cF955554Ec87c0',
685
+ hidden: true,
665
686
  }],
666
687
  maturity,
667
688
  rcfThreshold: '4000000000000000000',
@@ -681,7 +702,352 @@ export const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261030 = () => createTenorCb
681
702
  export const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261127 = () => createTenorCbEthWethRollingMarket(MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20261127_Base, 'tenor-cbeth-weth-20261127', 1795791600, '0xbb9ee13ffe52f4d52311775b1bd4fa309e402fd01ddfa165023c42dd6e5c051d');
682
703
  export const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261225 = () => createTenorCbEthWethRollingMarket(MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20261225_Base, 'tenor-cbeth-weth-20261225', 1798210800, '0x80530386795c88ba8c1ea6d686ae6168525c819ce4e0ea6017cb59afe34fb6d2');
683
704
  export const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20270129 = () => createTenorCbEthWethRollingMarket(MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20270129_Base, 'tenor-cbeth-weth-20270129', 1801234800, '0x3cfda244eeec7e5cda2a07ef23e2a5e3fe6ba17882417cafbf3f3c432377ff1d');
684
- export const MorphoMidnightMarkets = (networkId) => ({
705
+ // ── ETHEREUM ─────────────────────────────────────────────────────────────────────────────────────
706
+ const createWBTCUsdcEthMarket = (value, url, maturity, marketId) => ({
707
+ chainIds: [NetworkNumber.Eth],
708
+ label: 'Morpho Midnight WBTC/USDC',
709
+ shortLabel: 'WBTC/USDC',
710
+ url,
711
+ value,
712
+ midnight: MIDNIGHT_ETH,
713
+ loanToken: USDC_ETH,
714
+ collaterals: [{
715
+ token: WBTC_ETH,
716
+ lltv: 0.86,
717
+ liquidationCursor: '300000000000000000',
718
+ oracle: '0xDddd770BADd886dF3864029e4B377B5F6a2B6b83',
719
+ }, {
720
+ token: USDC_ETH,
721
+ lltv: 0.98,
722
+ liquidationCursor: '300000000000000000',
723
+ oracle: '0x8d1A84515B54C58bAc3b18315B6b1f17dA5cf6ca',
724
+ hidden: true,
725
+ }],
726
+ maturity,
727
+ rcfThreshold: '300000000000',
728
+ enterGate: ZERO_ADDRESS,
729
+ liquidatorGate: ZERO_ADDRESS,
730
+ marketId,
731
+ protocolName: 'morpho-midnight',
732
+ curator: 'Morpho',
733
+ });
734
+ const createCbBTCUsdcEthMarket = (value, url, maturity, marketId) => ({
735
+ chainIds: [NetworkNumber.Eth],
736
+ label: 'Morpho Midnight cbBTC/USDC',
737
+ shortLabel: 'cbBTC/USDC',
738
+ url,
739
+ value,
740
+ midnight: MIDNIGHT_ETH,
741
+ loanToken: USDC_ETH,
742
+ collaterals: [{
743
+ token: USDC_ETH,
744
+ lltv: 0.98,
745
+ liquidationCursor: '300000000000000000',
746
+ oracle: '0x8d1A84515B54C58bAc3b18315B6b1f17dA5cf6ca',
747
+ hidden: true,
748
+ }, {
749
+ token: CBBTC_ETH,
750
+ lltv: 0.86,
751
+ liquidationCursor: '300000000000000000',
752
+ oracle: '0xA6D6950c9F177F1De7f7757FB33539e3Ec60182a',
753
+ }],
754
+ maturity,
755
+ rcfThreshold: '300000000000',
756
+ enterGate: ZERO_ADDRESS,
757
+ liquidatorGate: ZERO_ADDRESS,
758
+ marketId,
759
+ protocolName: 'morpho-midnight',
760
+ curator: 'Morpho',
761
+ });
762
+ export const MORPHO_MIDNIGHT_WBTC_USDC_860_20260925_ETH = () => createWBTCUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightWBTCUSDC_860_20260925_Eth, 'wbtc-usdc-20260925', 1790348400, // 2026-09-25T15:00:00Z
763
+ '0x6dae37424723dd8cef0da2db84fd2819f7dfa4e3a98e602ccc3c65ee1fac61c2');
764
+ export const MORPHO_MIDNIGHT_WBTC_USDC_860_20261030_ETH = () => createWBTCUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightWBTCUSDC_860_20261030_Eth, 'wbtc-usdc-20261030', 1793372400, // 2026-10-30T15:00:00Z
765
+ '0xe5e6fbd5d81875dbfb0c94866cb0d300e1c7b9aacc0a458e63dccbcc0ce278c8');
766
+ export const MORPHO_MIDNIGHT_WBTC_USDC_860_20261127_ETH = () => createWBTCUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightWBTCUSDC_860_20261127_Eth, 'wbtc-usdc-20261127', 1795791600, // 2026-11-27T15:00:00Z
767
+ '0xe0efc89dc1f747ba502f6a4100b6b1db9ebd0d57569fd5a54771d3a026b6a27b');
768
+ export const MORPHO_MIDNIGHT_WBTC_USDC_860_20261225_ETH = () => createWBTCUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightWBTCUSDC_860_20261225_Eth, 'wbtc-usdc-20261225', 1798210800, // 2026-12-25T15:00:00Z
769
+ '0x3323abf2d2a3ec804f46552db920d900bb9c7ffd3f48143ab879a918fd6c0977');
770
+ export const MORPHO_MIDNIGHT_WBTC_USDC_860_20270129_ETH = () => createWBTCUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightWBTCUSDC_860_20270129_Eth, 'wbtc-usdc-20270129', 1801234800, // 2027-01-29T15:00:00Z
771
+ '0xf8052f557ce70d39cf9da1bd6e37e44a49f51757afb5dc881f675490ca6b3e9f');
772
+ export const MORPHO_MIDNIGHT_WBTC_USDC_860_20270226_ETH = () => createWBTCUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightWBTCUSDC_860_20270226_Eth, 'wbtc-usdc-20270226', 1803654000, // 2027-02-26T15:00:00Z
773
+ '0x7e399db474781e92b22b5a647d811959f65997b1e2bb68deaade674d8afbbdbd');
774
+ export const MORPHO_MIDNIGHT_WBTC_USDC_860_20270326_ETH = () => createWBTCUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightWBTCUSDC_860_20270326_Eth, 'wbtc-usdc-20270326', 1806073200, // 2027-03-26T15:00:00Z
775
+ '0x54a722a6dbaa237cfe088afd295417091bfb792fe3fac96999af41635977b2b0');
776
+ export const MORPHO_MIDNIGHT_CBBTC_USDC_860_20260925_ETH = () => createCbBTCUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20260925_Eth, 'cbbtc-usdc-20260925', 1790348400, // 2026-09-25T15:00:00Z
777
+ '0x2a9ae59053a64e409e819d3b76750948e06065b3164278915eb80cb1b7474b65');
778
+ export const MORPHO_MIDNIGHT_CBBTC_USDC_860_20261030_ETH = () => createCbBTCUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20261030_Eth, 'cbbtc-usdc-20261030', 1793372400, // 2026-10-30T15:00:00Z
779
+ '0xeea94e3f7185bb8cfcdf41aca2c9776788e86d6c14de345b911b04f75cd49959');
780
+ export const MORPHO_MIDNIGHT_CBBTC_USDC_860_20261127_ETH = () => createCbBTCUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20261127_Eth, 'cbbtc-usdc-20261127', 1795791600, // 2026-11-27T15:00:00Z
781
+ '0xa6454499939a47927d3d27d65dce18486cc2aabbf75f8f5f8482e93567f4a183');
782
+ export const MORPHO_MIDNIGHT_CBBTC_USDC_860_20261225_ETH = () => createCbBTCUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20261225_Eth, 'cbbtc-usdc-20261225', 1798210800, // 2026-12-25T15:00:00Z
783
+ '0xcf447db8cff164867b02edbf7ee7af06d241d4f3a44b34d6e3a3ea872ddea5d6');
784
+ export const MORPHO_MIDNIGHT_CBBTC_USDC_860_20270129_ETH = () => createCbBTCUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20270129_Eth, 'cbbtc-usdc-20270129', 1801234800, // 2027-01-29T15:00:00Z
785
+ '0x9ea83106928cf45829a89c02cea7c73cb3a066d2429d7ca2fcdc0015dc191df1');
786
+ export const MORPHO_MIDNIGHT_CBBTC_USDC_860_20270226_ETH = () => createCbBTCUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20270226_Eth, 'cbbtc-usdc-20270226', 1803654000, // 2027-02-26T15:00:00Z
787
+ '0xf9c1a9849863863a87600beb24394985a04ad3256b0c750baee0841f35f7f0e2');
788
+ export const MORPHO_MIDNIGHT_CBBTC_USDC_860_20270326_ETH = () => createCbBTCUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20270326_Eth, 'cbbtc-usdc-20270326', 1806073200, // 2027-03-26T15:00:00Z
789
+ '0xb00767d2cc7d5d9e27501a14e7912a089e34da675a2eb9e030072233db2c4c3b');
790
+ // ETHEREUM — Tenor-curated, one rolling ladder per pair
791
+ const createTenorReUSDUsdcEthMarket = (value, url, maturity, marketId) => ({
792
+ chainIds: [NetworkNumber.Eth],
793
+ label: 'Tenor reUSD/USDC',
794
+ shortLabel: 'Tenor reUSD/USDC',
795
+ url,
796
+ value,
797
+ midnight: MIDNIGHT_ETH,
798
+ loanToken: USDC_ETH,
799
+ collaterals: [{
800
+ token: REUSD_ETH,
801
+ lltv: 0.915,
802
+ liquidationCursor: '300000000000000000',
803
+ oracle: '0xA66a4F03Fd8031973f8C7718904ce32385f54E70',
804
+ }, {
805
+ token: TENOR_REUSD_USDC_VAULT_ETH,
806
+ lltv: 0.98,
807
+ liquidationCursor: '300000000000000000',
808
+ oracle: '0xE5f7f5A74E6f4dA2F68b1aa017F204a1883eC0df',
809
+ hidden: true,
810
+ }],
811
+ maturity,
812
+ rcfThreshold: '500000000000',
813
+ enterGate: ZERO_ADDRESS,
814
+ liquidatorGate: ZERO_ADDRESS,
815
+ marketId,
816
+ protocolName: 'morpho-midnight',
817
+ curator: 'Tenor',
818
+ });
819
+ export const MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20260925_ETH = () => createTenorReUSDUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorReUSDUSDC_20260925_Eth, 'tenor-reusd-usdc-20260925', 1790348400, // 2026-09-25T15:00:00Z
820
+ '0xdba251b941d135577e1b423301b2eb6a76dfe11479c843185d20bee9208e7393');
821
+ export const MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20261030_ETH = () => createTenorReUSDUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorReUSDUSDC_20261030_Eth, 'tenor-reusd-usdc-20261030', 1793372400, // 2026-10-30T15:00:00Z
822
+ '0x0fdbbc14a6275905b3fc7372e7ce2828eafced9f2c3e442990682055839092c3');
823
+ export const MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20261127_ETH = () => createTenorReUSDUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorReUSDUSDC_20261127_Eth, 'tenor-reusd-usdc-20261127', 1795791600, // 2026-11-27T15:00:00Z
824
+ '0x1cf59f7382f72aee174e251ffaed5b8ada9e052da326fc3f32626bb52e126db6');
825
+ export const MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20261225_ETH = () => createTenorReUSDUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorReUSDUSDC_20261225_Eth, 'tenor-reusd-usdc-20261225', 1798210800, // 2026-12-25T15:00:00Z
826
+ '0xc78981202d07dae20266843ca668a20057beaafe3291b326529558227a03c9ad');
827
+ const createTenorSiUSDUsdcEthMarket = (value, url, maturity, marketId) => ({
828
+ chainIds: [NetworkNumber.Eth],
829
+ label: 'Tenor siUSD/USDC',
830
+ shortLabel: 'Tenor siUSD/USDC',
831
+ url,
832
+ value,
833
+ midnight: MIDNIGHT_ETH,
834
+ loanToken: USDC_ETH,
835
+ collaterals: [{
836
+ token: TENOR_SIUSD_USDC_VAULT_ETH,
837
+ lltv: 0.98,
838
+ liquidationCursor: '300000000000000000',
839
+ oracle: '0xE872d1d33b13B52aE7cD9A0CDD4102468350e5fa',
840
+ hidden: true,
841
+ }, {
842
+ token: SIUSD_ETH,
843
+ lltv: 0.915,
844
+ liquidationCursor: '300000000000000000',
845
+ oracle: '0xd2cC46b9B2D761502eF933320ecf0268EC0dfa6d',
846
+ }],
847
+ maturity,
848
+ rcfThreshold: '500000000000',
849
+ enterGate: ZERO_ADDRESS,
850
+ liquidatorGate: ZERO_ADDRESS,
851
+ marketId,
852
+ protocolName: 'morpho-midnight',
853
+ curator: 'Tenor',
854
+ });
855
+ export const MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20260925_ETH = () => createTenorSiUSDUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorSiUSDUSDC_20260925_Eth, 'tenor-siusd-usdc-20260925', 1790348400, // 2026-09-25T15:00:00Z
856
+ '0x48d95ace842493ce2c1c474c0cb60ac208e9d8a714258e278af9c8ae01a88fa5');
857
+ export const MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20261030_ETH = () => createTenorSiUSDUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorSiUSDUSDC_20261030_Eth, 'tenor-siusd-usdc-20261030', 1793372400, // 2026-10-30T15:00:00Z
858
+ '0x64985d39a1bae43d2741e7900cd42a2456dbacaee10e73f937abb1c9885d79da');
859
+ export const MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20261127_ETH = () => createTenorSiUSDUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorSiUSDUSDC_20261127_Eth, 'tenor-siusd-usdc-20261127', 1795791600, // 2026-11-27T15:00:00Z
860
+ '0xed33721166c3f28bc834ce34135cf19b407056275eedf5faf662ccc7a821b7eb');
861
+ export const MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20261225_ETH = () => createTenorSiUSDUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorSiUSDUSDC_20261225_Eth, 'tenor-siusd-usdc-20261225', 1798210800, // 2026-12-25T15:00:00Z
862
+ '0xe47e71bd0faf8383881b81b7d781ab93bf7bd4d4dc44c9c40add360841e5b26d');
863
+ const createTenorStrUSDUsdcEthMarket = (value, url, maturity, marketId) => ({
864
+ chainIds: [NetworkNumber.Eth],
865
+ label: 'Tenor strUSD/USDC',
866
+ shortLabel: 'Tenor strUSD/USDC',
867
+ url,
868
+ value,
869
+ midnight: MIDNIGHT_ETH,
870
+ loanToken: USDC_ETH,
871
+ collaterals: [{
872
+ token: STRUSD_ETH,
873
+ lltv: 0.86,
874
+ liquidationCursor: '300000000000000000',
875
+ oracle: '0x1506c98cE61aC63c8438B710C054a51c5dD9A6A4',
876
+ }, {
877
+ token: TENOR_STRUSD_USDC_VAULT_ETH,
878
+ lltv: 0.98,
879
+ liquidationCursor: '300000000000000000',
880
+ oracle: '0x361904890a43d4af2D1b8cF642A6C5e661Da5641',
881
+ hidden: true,
882
+ }],
883
+ maturity,
884
+ rcfThreshold: '300000000000',
885
+ enterGate: ZERO_ADDRESS,
886
+ liquidatorGate: ZERO_ADDRESS,
887
+ marketId,
888
+ protocolName: 'morpho-midnight',
889
+ curator: 'Tenor',
890
+ });
891
+ export const MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20260925_ETH = () => createTenorStrUSDUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorStrUSDUSDC_20260925_Eth, 'tenor-strusd-usdc-20260925', 1790348400, // 2026-09-25T15:00:00Z
892
+ '0xa46399e45fe90b7d3c0488c4c73e9b361f758c4481734832a43d764ccdde0c64');
893
+ export const MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20261030_ETH = () => createTenorStrUSDUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorStrUSDUSDC_20261030_Eth, 'tenor-strusd-usdc-20261030', 1793372400, // 2026-10-30T15:00:00Z
894
+ '0xe473f755d4bd358a676d9385036d8a9e28b64aac250d0959d56d935bed80d675');
895
+ export const MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20261127_ETH = () => createTenorStrUSDUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorStrUSDUSDC_20261127_Eth, 'tenor-strusd-usdc-20261127', 1795791600, // 2026-11-27T15:00:00Z
896
+ '0x41d4f364feb13ead0b892b252eeb3636969de96a5be843400c86835aa98b1d67');
897
+ export const MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20261225_ETH = () => createTenorStrUSDUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorStrUSDUSDC_20261225_Eth, 'tenor-strusd-usdc-20261225', 1798210800, // 2026-12-25T15:00:00Z
898
+ '0x91e872193d98f3452424b5dd05e15ac291ed38236af5ff9ff02371bb8efbedb7');
899
+ const createTenorUSD3UsdcEthMarket = (value, url, maturity, marketId) => ({
900
+ chainIds: [NetworkNumber.Eth],
901
+ label: 'Tenor USD3/USDC',
902
+ shortLabel: 'Tenor USD3/USDC',
903
+ url,
904
+ value,
905
+ midnight: MIDNIGHT_ETH,
906
+ loanToken: USDC_ETH,
907
+ collaterals: [{
908
+ token: USD3_ETH,
909
+ lltv: 0.915,
910
+ liquidationCursor: '300000000000000000',
911
+ oracle: '0x68b4c2B2b2e245AB54a3bD55DfD5A9d84f029C06',
912
+ }, {
913
+ token: TENOR_USD3_USDC_VAULT_ETH,
914
+ lltv: 0.98,
915
+ liquidationCursor: '300000000000000000',
916
+ oracle: '0x2C198EC459e0a035078565dEdc3c206604b57d4D',
917
+ hidden: true,
918
+ }],
919
+ maturity,
920
+ rcfThreshold: '500000000000',
921
+ enterGate: ZERO_ADDRESS,
922
+ liquidatorGate: ZERO_ADDRESS,
923
+ marketId,
924
+ protocolName: 'morpho-midnight',
925
+ curator: 'Tenor',
926
+ });
927
+ export const MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20260925_ETH = () => createTenorUSD3UsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorUSD3USDC_20260925_Eth, 'tenor-usd3-usdc-20260925', 1790348400, // 2026-09-25T15:00:00Z
928
+ '0x1edea0a3875af341ea885fc7eac7e02bfce90c534a1602dbd40fefccfe4c24d4');
929
+ export const MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20261030_ETH = () => createTenorUSD3UsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorUSD3USDC_20261030_Eth, 'tenor-usd3-usdc-20261030', 1793372400, // 2026-10-30T15:00:00Z
930
+ '0x11c6795118a68a7bf5d8995240614454291a698ac387aa6c0e23db46ec5112ed');
931
+ export const MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20261127_ETH = () => createTenorUSD3UsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorUSD3USDC_20261127_Eth, 'tenor-usd3-usdc-20261127', 1795791600, // 2026-11-27T15:00:00Z
932
+ '0x72ee2771278a1d78e7970a60dc1723c95e16a4384893b044cdbd707347f1abf6');
933
+ export const MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20261225_ETH = () => createTenorUSD3UsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorUSD3USDC_20261225_Eth, 'tenor-usd3-usdc-20261225', 1798210800, // 2026-12-25T15:00:00Z
934
+ '0x2a6b8c5d4fc953e0f747590267d7b4018f35246ba0fdbf8adbc269a2491bdde1');
935
+ const createTenorWETHUsdcEthMarket = (value, url, maturity, marketId) => ({
936
+ chainIds: [NetworkNumber.Eth],
937
+ label: 'Tenor WETH/USDC',
938
+ shortLabel: 'Tenor WETH/USDC',
939
+ url,
940
+ value,
941
+ midnight: MIDNIGHT_ETH,
942
+ loanToken: USDC_ETH,
943
+ collaterals: [{
944
+ token: TENOR_WETH_USDC_VAULT_ETH,
945
+ lltv: 0.98,
946
+ liquidationCursor: '300000000000000000',
947
+ oracle: '0x5c4fd2864C21F0b81730B4EC74030130aA2193Ca',
948
+ hidden: true,
949
+ }, {
950
+ token: WETH_ETH,
951
+ lltv: 0.86,
952
+ liquidationCursor: '300000000000000000',
953
+ oracle: '0x0F948CBa8231Db7898ef36A4212581Ad7b1B4580',
954
+ }],
955
+ maturity,
956
+ rcfThreshold: '300000000000',
957
+ enterGate: ZERO_ADDRESS,
958
+ liquidatorGate: ZERO_ADDRESS,
959
+ marketId,
960
+ protocolName: 'morpho-midnight',
961
+ curator: 'Tenor',
962
+ });
963
+ export const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20260925_ETH = () => createTenorWETHUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20260925_Eth, 'tenor-weth-usdc-20260925', 1790348400, // 2026-09-25T15:00:00Z
964
+ '0x6a463fa464b97f7ba86516be7de82761bfa411522701ede713a269c2c385c70a');
965
+ export const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261030_ETH = () => createTenorWETHUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261030_Eth, 'tenor-weth-usdc-20261030', 1793372400, // 2026-10-30T15:00:00Z
966
+ '0xbd6a19559ca14acff13ac124ac0302c0ce6c41ff6a34841242752601e8b0e42c');
967
+ export const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261127_ETH = () => createTenorWETHUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261127_Eth, 'tenor-weth-usdc-20261127', 1795791600, // 2026-11-27T15:00:00Z
968
+ '0x348fb368e0f88eb63e739c6753bb0fbf306fb269a8dc0585542a6e4be5c63d6c');
969
+ export const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261225_ETH = () => createTenorWETHUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261225_Eth, 'tenor-weth-usdc-20261225', 1798210800, // 2026-12-25T15:00:00Z
970
+ '0xbe554be39e1df0ac1e8287d78ec8de26f0ea6197c6797bdeaed5350f45ae5b9f');
971
+ const createTenorWsrUSDUsdcEthMarket = (value, url, maturity, marketId) => ({
972
+ chainIds: [NetworkNumber.Eth],
973
+ label: 'Tenor wsrUSD/USDC',
974
+ shortLabel: 'Tenor wsrUSD/USDC',
975
+ url,
976
+ value,
977
+ midnight: MIDNIGHT_ETH,
978
+ loanToken: USDC_ETH,
979
+ collaterals: [{
980
+ token: TENOR_WSRUSD_USDC_VAULT_ETH,
981
+ lltv: 0.98,
982
+ liquidationCursor: '300000000000000000',
983
+ oracle: '0x7C997e4dddF1D4B7C0D5f290B92d0909ba227c14',
984
+ hidden: true,
985
+ }, {
986
+ token: WSRUSD_ETH,
987
+ lltv: 0.945,
988
+ liquidationCursor: '300000000000000000',
989
+ oracle: '0x938D2eDb20425cF80F008E7ec314Eb456940Da15',
990
+ }],
991
+ maturity,
992
+ rcfThreshold: '700000000000',
993
+ enterGate: ZERO_ADDRESS,
994
+ liquidatorGate: ZERO_ADDRESS,
995
+ marketId,
996
+ protocolName: 'morpho-midnight',
997
+ curator: 'Tenor',
998
+ });
999
+ export const MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20260925_ETH = () => createTenorWsrUSDUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorWsrUSDUSDC_20260925_Eth, 'tenor-wsrusd-usdc-20260925', 1790348400, // 2026-09-25T15:00:00Z
1000
+ '0xc028a0b50ba0c606fbf83e5620018f23019b1fb5d1d15b4a5a0d17cc72edcfeb');
1001
+ export const MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20261030_ETH = () => createTenorWsrUSDUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorWsrUSDUSDC_20261030_Eth, 'tenor-wsrusd-usdc-20261030', 1793372400, // 2026-10-30T15:00:00Z
1002
+ '0xc6079abce78d158671adedd6778c55edb786f4e4bc7097a59e7fb56e9ddda1b9');
1003
+ export const MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20261127_ETH = () => createTenorWsrUSDUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorWsrUSDUSDC_20261127_Eth, 'tenor-wsrusd-usdc-20261127', 1795791600, // 2026-11-27T15:00:00Z
1004
+ '0x8d4dafdceb706a31e06fba2946e5e12ac9656f98ba430eeb695b553333d78640');
1005
+ export const MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20261225_ETH = () => createTenorWsrUSDUsdcEthMarket(MorphoMidnightVersions.MorphoMidnightTenorWsrUSDUSDC_20261225_Eth, 'tenor-wsrusd-usdc-20261225', 1798210800, // 2026-12-25T15:00:00Z
1006
+ '0x02763ffcac291ea4b16ed0b3e3e524ee9aa07248a6e4ea6613e3724b54cce116');
1007
+ const createTenorWstETHWethEthMarket = (value, url, maturity, marketId) => ({
1008
+ chainIds: [NetworkNumber.Eth],
1009
+ label: 'Tenor wstETH/WETH',
1010
+ shortLabel: 'Tenor wstETH/WETH',
1011
+ url,
1012
+ value,
1013
+ midnight: MIDNIGHT_ETH,
1014
+ loanToken: WETH_ETH,
1015
+ collaterals: [{
1016
+ token: WSTETH_ETH,
1017
+ lltv: 0.965,
1018
+ liquidationCursor: '300000000000000000',
1019
+ oracle: '0xbD60A6770b27E084E8617335ddE769241B0e71D8',
1020
+ }, {
1021
+ token: TENOR_WSTETH_WETH_VAULT_ETH,
1022
+ lltv: 0.98,
1023
+ liquidationCursor: '300000000000000000',
1024
+ oracle: '0x4eA702113EFAE91B906fC9eC1415dd7a9B860c89',
1025
+ hidden: true,
1026
+ }],
1027
+ maturity,
1028
+ rcfThreshold: '600000000000000000000',
1029
+ enterGate: ZERO_ADDRESS,
1030
+ liquidatorGate: ZERO_ADDRESS,
1031
+ marketId,
1032
+ protocolName: 'morpho-midnight',
1033
+ curator: 'Tenor',
1034
+ });
1035
+ export const MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20260925_ETH = () => createTenorWstETHWethEthMarket(MorphoMidnightVersions.MorphoMidnightTenorWstETHWETH_20260925_Eth, 'tenor-wsteth-weth-20260925', 1790348400, // 2026-09-25T15:00:00Z
1036
+ '0x9ac6a639ace1c291b68b212eb1a95fd080332793f7bfc7dbed58b92bc518ca70');
1037
+ export const MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20261030_ETH = () => createTenorWstETHWethEthMarket(MorphoMidnightVersions.MorphoMidnightTenorWstETHWETH_20261030_Eth, 'tenor-wsteth-weth-20261030', 1793372400, // 2026-10-30T15:00:00Z
1038
+ '0xf032c0184869e9b856b20cdcc298a1ebbec2cd4ee86e6189ff94852fa368a1b3');
1039
+ export const MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20261127_ETH = () => createTenorWstETHWethEthMarket(MorphoMidnightVersions.MorphoMidnightTenorWstETHWETH_20261127_Eth, 'tenor-wsteth-weth-20261127', 1795791600, // 2026-11-27T15:00:00Z
1040
+ '0x0cc2301b2247d109d5a05d7a95012077cbdf9908f9f72f315de601c1f7b438f9');
1041
+ export const MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20261225_ETH = () => createTenorWstETHWethEthMarket(MorphoMidnightVersions.MorphoMidnightTenorWstETHWETH_20261225_Eth, 'tenor-wsteth-weth-20261225', 1798210800, // 2026-12-25T15:00:00Z
1042
+ '0x646f7959780a1555f7696aad335a197fe45710f73f0bcf70f26712923249af4b');
1043
+ /**
1044
+ * Collaterals we deliberately do not list. Their markets are defined and verified above — they are real
1045
+ * markets — but withheld from the map below, so nothing in the app offers, prices or routes to them.
1046
+ */
1047
+ const EXCLUDED_COLLATERALS = [STRUSD_ETH, WSRUSD_ETH, REUSD_ETH, SIUSD_ETH, USD3_ETH];
1048
+ const isExcludedMarket = (market) => market.collaterals.some((collateral) => !collateral.hidden
1049
+ && EXCLUDED_COLLATERALS.some((token) => token.toLowerCase() === collateral.token.toLowerCase()));
1050
+ const allMorphoMidnightMarkets = (networkId) => ({
685
1051
  // BASE — Morpho-curated
686
1052
  [MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20260731_Base]: MORPHO_MIDNIGHT_CBBTC_USDC_860_20260731(networkId),
687
1053
  [MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20260828_Base]: MORPHO_MIDNIGHT_CBBTC_USDC_860_20260828(networkId),
@@ -716,19 +1082,67 @@ export const MorphoMidnightMarkets = (networkId) => ({
716
1082
  [MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20261127_Base]: MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261127(),
717
1083
  [MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20261225_Base]: MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261225(),
718
1084
  [MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20270129_Base]: MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20270129(),
1085
+ // ETHEREUM — Morpho-curated
1086
+ [MorphoMidnightVersions.MorphoMidnightWBTCUSDC_860_20260925_Eth]: MORPHO_MIDNIGHT_WBTC_USDC_860_20260925_ETH(),
1087
+ [MorphoMidnightVersions.MorphoMidnightWBTCUSDC_860_20261030_Eth]: MORPHO_MIDNIGHT_WBTC_USDC_860_20261030_ETH(),
1088
+ [MorphoMidnightVersions.MorphoMidnightWBTCUSDC_860_20261127_Eth]: MORPHO_MIDNIGHT_WBTC_USDC_860_20261127_ETH(),
1089
+ [MorphoMidnightVersions.MorphoMidnightWBTCUSDC_860_20261225_Eth]: MORPHO_MIDNIGHT_WBTC_USDC_860_20261225_ETH(),
1090
+ [MorphoMidnightVersions.MorphoMidnightWBTCUSDC_860_20270129_Eth]: MORPHO_MIDNIGHT_WBTC_USDC_860_20270129_ETH(),
1091
+ [MorphoMidnightVersions.MorphoMidnightWBTCUSDC_860_20270226_Eth]: MORPHO_MIDNIGHT_WBTC_USDC_860_20270226_ETH(),
1092
+ [MorphoMidnightVersions.MorphoMidnightWBTCUSDC_860_20270326_Eth]: MORPHO_MIDNIGHT_WBTC_USDC_860_20270326_ETH(),
1093
+ [MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20260925_Eth]: MORPHO_MIDNIGHT_CBBTC_USDC_860_20260925_ETH(),
1094
+ [MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20261030_Eth]: MORPHO_MIDNIGHT_CBBTC_USDC_860_20261030_ETH(),
1095
+ [MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20261127_Eth]: MORPHO_MIDNIGHT_CBBTC_USDC_860_20261127_ETH(),
1096
+ [MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20261225_Eth]: MORPHO_MIDNIGHT_CBBTC_USDC_860_20261225_ETH(),
1097
+ [MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20270129_Eth]: MORPHO_MIDNIGHT_CBBTC_USDC_860_20270129_ETH(),
1098
+ [MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20270226_Eth]: MORPHO_MIDNIGHT_CBBTC_USDC_860_20270226_ETH(),
1099
+ [MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20270326_Eth]: MORPHO_MIDNIGHT_CBBTC_USDC_860_20270326_ETH(),
1100
+ // ETHEREUM — Tenor-curated
1101
+ [MorphoMidnightVersions.MorphoMidnightTenorReUSDUSDC_20260925_Eth]: MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20260925_ETH(),
1102
+ [MorphoMidnightVersions.MorphoMidnightTenorReUSDUSDC_20261030_Eth]: MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20261030_ETH(),
1103
+ [MorphoMidnightVersions.MorphoMidnightTenorReUSDUSDC_20261127_Eth]: MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20261127_ETH(),
1104
+ [MorphoMidnightVersions.MorphoMidnightTenorReUSDUSDC_20261225_Eth]: MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20261225_ETH(),
1105
+ [MorphoMidnightVersions.MorphoMidnightTenorSiUSDUSDC_20260925_Eth]: MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20260925_ETH(),
1106
+ [MorphoMidnightVersions.MorphoMidnightTenorSiUSDUSDC_20261030_Eth]: MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20261030_ETH(),
1107
+ [MorphoMidnightVersions.MorphoMidnightTenorSiUSDUSDC_20261127_Eth]: MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20261127_ETH(),
1108
+ [MorphoMidnightVersions.MorphoMidnightTenorSiUSDUSDC_20261225_Eth]: MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20261225_ETH(),
1109
+ [MorphoMidnightVersions.MorphoMidnightTenorStrUSDUSDC_20260925_Eth]: MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20260925_ETH(),
1110
+ [MorphoMidnightVersions.MorphoMidnightTenorStrUSDUSDC_20261030_Eth]: MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20261030_ETH(),
1111
+ [MorphoMidnightVersions.MorphoMidnightTenorStrUSDUSDC_20261127_Eth]: MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20261127_ETH(),
1112
+ [MorphoMidnightVersions.MorphoMidnightTenorStrUSDUSDC_20261225_Eth]: MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20261225_ETH(),
1113
+ [MorphoMidnightVersions.MorphoMidnightTenorUSD3USDC_20260925_Eth]: MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20260925_ETH(),
1114
+ [MorphoMidnightVersions.MorphoMidnightTenorUSD3USDC_20261030_Eth]: MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20261030_ETH(),
1115
+ [MorphoMidnightVersions.MorphoMidnightTenorUSD3USDC_20261127_Eth]: MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20261127_ETH(),
1116
+ [MorphoMidnightVersions.MorphoMidnightTenorUSD3USDC_20261225_Eth]: MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20261225_ETH(),
1117
+ [MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20260925_Eth]: MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20260925_ETH(),
1118
+ [MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261030_Eth]: MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261030_ETH(),
1119
+ [MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261127_Eth]: MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261127_ETH(),
1120
+ [MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261225_Eth]: MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261225_ETH(),
1121
+ [MorphoMidnightVersions.MorphoMidnightTenorWsrUSDUSDC_20260925_Eth]: MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20260925_ETH(),
1122
+ [MorphoMidnightVersions.MorphoMidnightTenorWsrUSDUSDC_20261030_Eth]: MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20261030_ETH(),
1123
+ [MorphoMidnightVersions.MorphoMidnightTenorWsrUSDUSDC_20261127_Eth]: MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20261127_ETH(),
1124
+ [MorphoMidnightVersions.MorphoMidnightTenorWsrUSDUSDC_20261225_Eth]: MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20261225_ETH(),
1125
+ [MorphoMidnightVersions.MorphoMidnightTenorWstETHWETH_20260925_Eth]: MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20260925_ETH(),
1126
+ [MorphoMidnightVersions.MorphoMidnightTenorWstETHWETH_20261030_Eth]: MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20261030_ETH(),
1127
+ [MorphoMidnightVersions.MorphoMidnightTenorWstETHWETH_20261127_Eth]: MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20261127_ETH(),
1128
+ [MorphoMidnightVersions.MorphoMidnightTenorWstETHWETH_20261225_Eth]: MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20261225_ETH(),
719
1129
  });
720
- // Which markets Tenor's router quotes, by id, for the quote helpers that only receive one.
1130
+ export const MorphoMidnightMarkets = (networkId) => {
1131
+ const all = allMorphoMidnightMarkets(networkId);
1132
+ if (!EXCLUDED_COLLATERALS.length)
1133
+ return all;
1134
+ return Object.fromEntries(Object.entries(all).filter(([, market]) => !isExcludedMarket(market)));
1135
+ };
721
1136
  const TENOR_MARKET_IDS = new Set(Object.values(MorphoMidnightMarkets(NetworkNumber.Base))
722
1137
  .filter((market) => market.curator === 'Tenor')
723
1138
  .map((market) => market.marketId.toLowerCase()));
724
1139
  export const isTenorMidnightMarket = (market) => (typeof market === 'string'
725
1140
  ? TENOR_MARKET_IDS.has(market.toLowerCase())
726
1141
  : market.curator === 'Tenor');
727
- export const findMorphoMidnightMarket = (marketId, network = NetworkNumber.Base) => Object.values(MorphoMidnightMarkets(network)).find((market) => market.marketId.toLowerCase() === marketId.toLowerCase());
728
- /**
729
- * The market's collateral set as the chain knows it: the listed collaterals followed by the curator's
730
- * hidden ones. This not `collaterals` is what a `Market` struct takes, since the market id is the hash
731
- * of that struct. Anything assembling one for a contract call goes through here so it can't quietly build
732
- * a market of its own instead.
733
- */
734
- export const morphoMidnightMarketCollateralParams = (market) => [...market.collaterals, ...(market.hiddenCollaterals || [])];
1142
+ export const findMorphoMidnightMarket = (marketId, network) => (Object.values(MorphoMidnightMarkets(network !== null && network !== void 0 ? network : NetworkNumber.Base))
1143
+ .find((market) => market.marketId.toLowerCase() === marketId.toLowerCase()
1144
+ && (network === undefined || market.chainIds.includes(network))));
1145
+ export const morphoMidnightMarketCollateralParams = (market) => market.collaterals.map(({ token, lltv, liquidationCursor, oracle, }) => ({
1146
+ token, lltv, liquidationCursor, oracle,
1147
+ }));
1148
+ export const morphoMidnightVisibleCollaterals = (market) => market.collaterals.filter((collateral) => !collateral.hidden);