@defisaver/positions-sdk 2.1.151-midnight-dev → 2.1.151-midnight-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.
@@ -30,6 +30,7 @@ const WSRUSD_ETH = '0xd3fD63209FA2D55B07A0f6db36C2f43900be3094' as const;
30
30
  const USD3_ETH = '0x056B269Eb1f75477a8666ae8C7fE01b64dD55eCc' as const;
31
31
  const REUSD_ETH = '0x5086bf358635B81D8C47C66d1C8b9E567Db70c72' as const;
32
32
  const SIUSD_ETH = '0xDBDC1Ef57537E34680B898E1FEBD3D68c7389bCB' as const;
33
+ const WSTETH_ETH = '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0' as const;
33
34
 
34
35
  // Tenor's ERC-4626 collateral vaults, one per pair and shared by that pair's whole maturity ladder. Each
35
36
  // is a collateral of its markets on-chain without being an asset the app deals in — see the note above
@@ -44,6 +45,7 @@ const TENOR_WSRUSD_USDC_VAULT_ETH = '0x09409fa71bCfd3f433571dbeec0C0A9C19B0d30E'
44
45
  const TENOR_USD3_USDC_VAULT_ETH = '0x26C46ACb48B46cC99ccB3cf6C365BdaFa2556E80' as const;
45
46
  const TENOR_REUSD_USDC_VAULT_ETH = '0xe3891d8cA7E00Bc42157D9bb5797C88D9159AAC6' as const;
46
47
  const TENOR_SIUSD_USDC_VAULT_ETH = '0x226ecbf4755a5F81ed721E18c3fDA11f004Ea9e0' as const;
48
+ const TENOR_WSTETH_WETH_VAULT_ETH = '0xe1Bdb88eE5DBaCE653ecD2123E8396BB5BA8adc5' as const;
47
49
 
48
50
 
49
51
  // Sourced from the official listing at https://markets.morpho.org/fixed/base
@@ -958,101 +960,196 @@ export const MORPHO_MIDNIGHT_CBBTC_USDC_860_20270326_ETH = () => createCbBTCUsdc
958
960
  '0xb00767d2cc7d5d9e27501a14e7912a089e34da675a2eb9e030072233db2c4c3b',
959
961
  );
960
962
 
961
- // ETHEREUM — Tenor-curated
963
+ // ETHEREUM — Tenor-curated, one rolling ladder per pair
962
964
 
963
- export const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20260925_ETH = (): MorphoMidnightMarketData => ({
965
+ const createTenorReUSDUsdcEthMarket = (
966
+ value: MorphoMidnightVersions,
967
+ url: string,
968
+ maturity: number,
969
+ marketId: string,
970
+ ): MorphoMidnightMarketData => ({
964
971
  chainIds: [NetworkNumber.Eth],
965
- label: 'Tenor WETH/USDC',
966
- shortLabel: 'Tenor WETH/USDC',
967
- url: 'tenor-weth-usdc-20260925',
968
- value: MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20260925_Eth,
972
+ label: 'Tenor reUSD/USDC',
973
+ shortLabel: 'Tenor reUSD/USDC',
974
+ url,
975
+ value,
969
976
  midnight: MIDNIGHT_ETH,
970
977
  loanToken: USDC_ETH,
971
978
  collaterals: [{
972
- token: TENOR_WETH_USDC_VAULT_ETH,
973
- lltv: 0.98,
979
+ token: REUSD_ETH,
980
+ lltv: 0.915,
974
981
  liquidationCursor: '300000000000000000',
975
- oracle: '0x5c4fd2864C21F0b81730B4EC74030130aA2193Ca',
976
- hidden: true,
982
+ oracle: '0xA66a4F03Fd8031973f8C7718904ce32385f54E70',
977
983
  }, {
978
- token: WETH_ETH,
979
- lltv: 0.86,
984
+ token: TENOR_REUSD_USDC_VAULT_ETH,
985
+ lltv: 0.98,
980
986
  liquidationCursor: '300000000000000000',
981
- oracle: '0x0F948CBa8231Db7898ef36A4212581Ad7b1B4580',
987
+ oracle: '0xE5f7f5A74E6f4dA2F68b1aa017F204a1883eC0df',
988
+ hidden: true,
982
989
  }],
983
- maturity: 1790348400, // 2026-09-25T15:00:00Z
984
- rcfThreshold: '300000000000',
990
+ maturity,
991
+ rcfThreshold: '500000000000',
985
992
  enterGate: ZERO_ADDRESS,
986
993
  liquidatorGate: ZERO_ADDRESS,
987
- marketId: '0x6a463fa464b97f7ba86516be7de82761bfa411522701ede713a269c2c385c70a',
994
+ marketId,
988
995
  protocolName: 'morpho-midnight',
989
996
  curator: 'Tenor',
990
997
  });
991
998
 
992
- export const MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20260925_ETH = (): MorphoMidnightMarketData => ({
999
+ export const MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20260925_ETH = () => createTenorReUSDUsdcEthMarket(
1000
+ MorphoMidnightVersions.MorphoMidnightTenorReUSDUSDC_20260925_Eth,
1001
+ 'tenor-reusd-usdc-20260925',
1002
+ 1790348400, // 2026-09-25T15:00:00Z
1003
+ '0xdba251b941d135577e1b423301b2eb6a76dfe11479c843185d20bee9208e7393',
1004
+ );
1005
+ export const MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20261030_ETH = () => createTenorReUSDUsdcEthMarket(
1006
+ MorphoMidnightVersions.MorphoMidnightTenorReUSDUSDC_20261030_Eth,
1007
+ 'tenor-reusd-usdc-20261030',
1008
+ 1793372400, // 2026-10-30T15:00:00Z
1009
+ '0x0fdbbc14a6275905b3fc7372e7ce2828eafced9f2c3e442990682055839092c3',
1010
+ );
1011
+ export const MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20261127_ETH = () => createTenorReUSDUsdcEthMarket(
1012
+ MorphoMidnightVersions.MorphoMidnightTenorReUSDUSDC_20261127_Eth,
1013
+ 'tenor-reusd-usdc-20261127',
1014
+ 1795791600, // 2026-11-27T15:00:00Z
1015
+ '0x1cf59f7382f72aee174e251ffaed5b8ada9e052da326fc3f32626bb52e126db6',
1016
+ );
1017
+ export const MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20261225_ETH = () => createTenorReUSDUsdcEthMarket(
1018
+ MorphoMidnightVersions.MorphoMidnightTenorReUSDUSDC_20261225_Eth,
1019
+ 'tenor-reusd-usdc-20261225',
1020
+ 1798210800, // 2026-12-25T15:00:00Z
1021
+ '0xc78981202d07dae20266843ca668a20057beaafe3291b326529558227a03c9ad',
1022
+ );
1023
+
1024
+ const createTenorSiUSDUsdcEthMarket = (
1025
+ value: MorphoMidnightVersions,
1026
+ url: string,
1027
+ maturity: number,
1028
+ marketId: string,
1029
+ ): MorphoMidnightMarketData => ({
993
1030
  chainIds: [NetworkNumber.Eth],
994
- label: 'Tenor strUSD/USDC',
995
- shortLabel: 'Tenor strUSD/USDC',
996
- url: 'tenor-strusd-usdc-20260925',
997
- value: MorphoMidnightVersions.MorphoMidnightTenorStrUSDUSDC_20260925_Eth,
1031
+ label: 'Tenor siUSD/USDC',
1032
+ shortLabel: 'Tenor siUSD/USDC',
1033
+ url,
1034
+ value,
998
1035
  midnight: MIDNIGHT_ETH,
999
1036
  loanToken: USDC_ETH,
1000
1037
  collaterals: [{
1001
- token: STRUSD_ETH,
1002
- lltv: 0.86,
1003
- liquidationCursor: '300000000000000000',
1004
- oracle: '0x1506c98cE61aC63c8438B710C054a51c5dD9A6A4',
1005
- }, {
1006
- token: TENOR_STRUSD_USDC_VAULT_ETH,
1038
+ token: TENOR_SIUSD_USDC_VAULT_ETH,
1007
1039
  lltv: 0.98,
1008
1040
  liquidationCursor: '300000000000000000',
1009
- oracle: '0x361904890a43d4af2D1b8cF642A6C5e661Da5641',
1041
+ oracle: '0xE872d1d33b13B52aE7cD9A0CDD4102468350e5fa',
1010
1042
  hidden: true,
1043
+ }, {
1044
+ token: SIUSD_ETH,
1045
+ lltv: 0.915,
1046
+ liquidationCursor: '300000000000000000',
1047
+ oracle: '0xd2cC46b9B2D761502eF933320ecf0268EC0dfa6d',
1011
1048
  }],
1012
- maturity: 1790348400, // 2026-09-25T15:00:00Z
1013
- rcfThreshold: '300000000000',
1049
+ maturity,
1050
+ rcfThreshold: '500000000000',
1014
1051
  enterGate: ZERO_ADDRESS,
1015
1052
  liquidatorGate: ZERO_ADDRESS,
1016
- marketId: '0xa46399e45fe90b7d3c0488c4c73e9b361f758c4481734832a43d764ccdde0c64',
1053
+ marketId,
1017
1054
  protocolName: 'morpho-midnight',
1018
1055
  curator: 'Tenor',
1019
1056
  });
1020
1057
 
1021
- export const MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20260925_ETH = (): MorphoMidnightMarketData => ({
1058
+ export const MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20260925_ETH = () => createTenorSiUSDUsdcEthMarket(
1059
+ MorphoMidnightVersions.MorphoMidnightTenorSiUSDUSDC_20260925_Eth,
1060
+ 'tenor-siusd-usdc-20260925',
1061
+ 1790348400, // 2026-09-25T15:00:00Z
1062
+ '0x48d95ace842493ce2c1c474c0cb60ac208e9d8a714258e278af9c8ae01a88fa5',
1063
+ );
1064
+ export const MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20261030_ETH = () => createTenorSiUSDUsdcEthMarket(
1065
+ MorphoMidnightVersions.MorphoMidnightTenorSiUSDUSDC_20261030_Eth,
1066
+ 'tenor-siusd-usdc-20261030',
1067
+ 1793372400, // 2026-10-30T15:00:00Z
1068
+ '0x64985d39a1bae43d2741e7900cd42a2456dbacaee10e73f937abb1c9885d79da',
1069
+ );
1070
+ export const MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20261127_ETH = () => createTenorSiUSDUsdcEthMarket(
1071
+ MorphoMidnightVersions.MorphoMidnightTenorSiUSDUSDC_20261127_Eth,
1072
+ 'tenor-siusd-usdc-20261127',
1073
+ 1795791600, // 2026-11-27T15:00:00Z
1074
+ '0xed33721166c3f28bc834ce34135cf19b407056275eedf5faf662ccc7a821b7eb',
1075
+ );
1076
+ export const MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20261225_ETH = () => createTenorSiUSDUsdcEthMarket(
1077
+ MorphoMidnightVersions.MorphoMidnightTenorSiUSDUSDC_20261225_Eth,
1078
+ 'tenor-siusd-usdc-20261225',
1079
+ 1798210800, // 2026-12-25T15:00:00Z
1080
+ '0xe47e71bd0faf8383881b81b7d781ab93bf7bd4d4dc44c9c40add360841e5b26d',
1081
+ );
1082
+
1083
+ const createTenorStrUSDUsdcEthMarket = (
1084
+ value: MorphoMidnightVersions,
1085
+ url: string,
1086
+ maturity: number,
1087
+ marketId: string,
1088
+ ): MorphoMidnightMarketData => ({
1022
1089
  chainIds: [NetworkNumber.Eth],
1023
- label: 'Tenor wsrUSD/USDC',
1024
- shortLabel: 'Tenor wsrUSD/USDC',
1025
- url: 'tenor-wsrusd-usdc-20260925',
1026
- value: MorphoMidnightVersions.MorphoMidnightTenorWsrUSDUSDC_20260925_Eth,
1090
+ label: 'Tenor strUSD/USDC',
1091
+ shortLabel: 'Tenor strUSD/USDC',
1092
+ url,
1093
+ value,
1027
1094
  midnight: MIDNIGHT_ETH,
1028
1095
  loanToken: USDC_ETH,
1029
1096
  collaterals: [{
1030
- token: TENOR_WSRUSD_USDC_VAULT_ETH,
1031
- lltv: 0.98,
1097
+ token: STRUSD_ETH,
1098
+ lltv: 0.86,
1032
1099
  liquidationCursor: '300000000000000000',
1033
- oracle: '0x7C997e4dddF1D4B7C0D5f290B92d0909ba227c14',
1034
- hidden: true,
1100
+ oracle: '0x1506c98cE61aC63c8438B710C054a51c5dD9A6A4',
1035
1101
  }, {
1036
- token: WSRUSD_ETH,
1037
- lltv: 0.945,
1102
+ token: TENOR_STRUSD_USDC_VAULT_ETH,
1103
+ lltv: 0.98,
1038
1104
  liquidationCursor: '300000000000000000',
1039
- oracle: '0x938D2eDb20425cF80F008E7ec314Eb456940Da15',
1105
+ oracle: '0x361904890a43d4af2D1b8cF642A6C5e661Da5641',
1106
+ hidden: true,
1040
1107
  }],
1041
- maturity: 1790348400, // 2026-09-25T15:00:00Z
1042
- rcfThreshold: '700000000000',
1108
+ maturity,
1109
+ rcfThreshold: '300000000000',
1043
1110
  enterGate: ZERO_ADDRESS,
1044
1111
  liquidatorGate: ZERO_ADDRESS,
1045
- marketId: '0xc028a0b50ba0c606fbf83e5620018f23019b1fb5d1d15b4a5a0d17cc72edcfeb',
1112
+ marketId,
1046
1113
  protocolName: 'morpho-midnight',
1047
1114
  curator: 'Tenor',
1048
1115
  });
1049
1116
 
1050
- export const MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20260925_ETH = (): MorphoMidnightMarketData => ({
1117
+ export const MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20260925_ETH = () => createTenorStrUSDUsdcEthMarket(
1118
+ MorphoMidnightVersions.MorphoMidnightTenorStrUSDUSDC_20260925_Eth,
1119
+ 'tenor-strusd-usdc-20260925',
1120
+ 1790348400, // 2026-09-25T15:00:00Z
1121
+ '0xa46399e45fe90b7d3c0488c4c73e9b361f758c4481734832a43d764ccdde0c64',
1122
+ );
1123
+ export const MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20261030_ETH = () => createTenorStrUSDUsdcEthMarket(
1124
+ MorphoMidnightVersions.MorphoMidnightTenorStrUSDUSDC_20261030_Eth,
1125
+ 'tenor-strusd-usdc-20261030',
1126
+ 1793372400, // 2026-10-30T15:00:00Z
1127
+ '0xe473f755d4bd358a676d9385036d8a9e28b64aac250d0959d56d935bed80d675',
1128
+ );
1129
+ export const MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20261127_ETH = () => createTenorStrUSDUsdcEthMarket(
1130
+ MorphoMidnightVersions.MorphoMidnightTenorStrUSDUSDC_20261127_Eth,
1131
+ 'tenor-strusd-usdc-20261127',
1132
+ 1795791600, // 2026-11-27T15:00:00Z
1133
+ '0x41d4f364feb13ead0b892b252eeb3636969de96a5be843400c86835aa98b1d67',
1134
+ );
1135
+ export const MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20261225_ETH = () => createTenorStrUSDUsdcEthMarket(
1136
+ MorphoMidnightVersions.MorphoMidnightTenorStrUSDUSDC_20261225_Eth,
1137
+ 'tenor-strusd-usdc-20261225',
1138
+ 1798210800, // 2026-12-25T15:00:00Z
1139
+ '0x91e872193d98f3452424b5dd05e15ac291ed38236af5ff9ff02371bb8efbedb7',
1140
+ );
1141
+
1142
+ const createTenorUSD3UsdcEthMarket = (
1143
+ value: MorphoMidnightVersions,
1144
+ url: string,
1145
+ maturity: number,
1146
+ marketId: string,
1147
+ ): MorphoMidnightMarketData => ({
1051
1148
  chainIds: [NetworkNumber.Eth],
1052
1149
  label: 'Tenor USD3/USDC',
1053
1150
  shortLabel: 'Tenor USD3/USDC',
1054
- url: 'tenor-usd3-usdc-20260925',
1055
- value: MorphoMidnightVersions.MorphoMidnightTenorUSD3USDC_20260925_Eth,
1151
+ url,
1152
+ value,
1056
1153
  midnight: MIDNIGHT_ETH,
1057
1154
  loanToken: USDC_ETH,
1058
1155
  collaterals: [{
@@ -1067,74 +1164,229 @@ export const MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20260925_ETH = (): MorphoMidnig
1067
1164
  oracle: '0x2C198EC459e0a035078565dEdc3c206604b57d4D',
1068
1165
  hidden: true,
1069
1166
  }],
1070
- maturity: 1790348400, // 2026-09-25T15:00:00Z
1167
+ maturity,
1071
1168
  rcfThreshold: '500000000000',
1072
1169
  enterGate: ZERO_ADDRESS,
1073
1170
  liquidatorGate: ZERO_ADDRESS,
1074
- marketId: '0x1edea0a3875af341ea885fc7eac7e02bfce90c534a1602dbd40fefccfe4c24d4',
1171
+ marketId,
1075
1172
  protocolName: 'morpho-midnight',
1076
1173
  curator: 'Tenor',
1077
1174
  });
1078
1175
 
1079
- export const MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20260925_ETH = (): MorphoMidnightMarketData => ({
1176
+ export const MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20260925_ETH = () => createTenorUSD3UsdcEthMarket(
1177
+ MorphoMidnightVersions.MorphoMidnightTenorUSD3USDC_20260925_Eth,
1178
+ 'tenor-usd3-usdc-20260925',
1179
+ 1790348400, // 2026-09-25T15:00:00Z
1180
+ '0x1edea0a3875af341ea885fc7eac7e02bfce90c534a1602dbd40fefccfe4c24d4',
1181
+ );
1182
+ export const MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20261030_ETH = () => createTenorUSD3UsdcEthMarket(
1183
+ MorphoMidnightVersions.MorphoMidnightTenorUSD3USDC_20261030_Eth,
1184
+ 'tenor-usd3-usdc-20261030',
1185
+ 1793372400, // 2026-10-30T15:00:00Z
1186
+ '0x11c6795118a68a7bf5d8995240614454291a698ac387aa6c0e23db46ec5112ed',
1187
+ );
1188
+ export const MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20261127_ETH = () => createTenorUSD3UsdcEthMarket(
1189
+ MorphoMidnightVersions.MorphoMidnightTenorUSD3USDC_20261127_Eth,
1190
+ 'tenor-usd3-usdc-20261127',
1191
+ 1795791600, // 2026-11-27T15:00:00Z
1192
+ '0x72ee2771278a1d78e7970a60dc1723c95e16a4384893b044cdbd707347f1abf6',
1193
+ );
1194
+ export const MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20261225_ETH = () => createTenorUSD3UsdcEthMarket(
1195
+ MorphoMidnightVersions.MorphoMidnightTenorUSD3USDC_20261225_Eth,
1196
+ 'tenor-usd3-usdc-20261225',
1197
+ 1798210800, // 2026-12-25T15:00:00Z
1198
+ '0x2a6b8c5d4fc953e0f747590267d7b4018f35246ba0fdbf8adbc269a2491bdde1',
1199
+ );
1200
+
1201
+ const createTenorWETHUsdcEthMarket = (
1202
+ value: MorphoMidnightVersions,
1203
+ url: string,
1204
+ maturity: number,
1205
+ marketId: string,
1206
+ ): MorphoMidnightMarketData => ({
1080
1207
  chainIds: [NetworkNumber.Eth],
1081
- label: 'Tenor reUSD/USDC',
1082
- shortLabel: 'Tenor reUSD/USDC',
1083
- url: 'tenor-reusd-usdc-20260925',
1084
- value: MorphoMidnightVersions.MorphoMidnightTenorReUSDUSDC_20260925_Eth,
1208
+ label: 'Tenor WETH/USDC',
1209
+ shortLabel: 'Tenor WETH/USDC',
1210
+ url,
1211
+ value,
1085
1212
  midnight: MIDNIGHT_ETH,
1086
1213
  loanToken: USDC_ETH,
1087
1214
  collaterals: [{
1088
- token: REUSD_ETH,
1089
- lltv: 0.915,
1090
- liquidationCursor: '300000000000000000',
1091
- oracle: '0xA66a4F03Fd8031973f8C7718904ce32385f54E70',
1092
- }, {
1093
- token: TENOR_REUSD_USDC_VAULT_ETH,
1215
+ token: TENOR_WETH_USDC_VAULT_ETH,
1094
1216
  lltv: 0.98,
1095
1217
  liquidationCursor: '300000000000000000',
1096
- oracle: '0xE5f7f5A74E6f4dA2F68b1aa017F204a1883eC0df',
1218
+ oracle: '0x5c4fd2864C21F0b81730B4EC74030130aA2193Ca',
1097
1219
  hidden: true,
1220
+ }, {
1221
+ token: WETH_ETH,
1222
+ lltv: 0.86,
1223
+ liquidationCursor: '300000000000000000',
1224
+ oracle: '0x0F948CBa8231Db7898ef36A4212581Ad7b1B4580',
1098
1225
  }],
1099
- maturity: 1790348400, // 2026-09-25T15:00:00Z
1100
- rcfThreshold: '500000000000',
1226
+ maturity,
1227
+ rcfThreshold: '300000000000',
1101
1228
  enterGate: ZERO_ADDRESS,
1102
1229
  liquidatorGate: ZERO_ADDRESS,
1103
- marketId: '0xdba251b941d135577e1b423301b2eb6a76dfe11479c843185d20bee9208e7393',
1230
+ marketId,
1104
1231
  protocolName: 'morpho-midnight',
1105
1232
  curator: 'Tenor',
1106
1233
  });
1107
1234
 
1108
- export const MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20260925_ETH = (): MorphoMidnightMarketData => ({
1235
+ export const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20260925_ETH = () => createTenorWETHUsdcEthMarket(
1236
+ MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20260925_Eth,
1237
+ 'tenor-weth-usdc-20260925',
1238
+ 1790348400, // 2026-09-25T15:00:00Z
1239
+ '0x6a463fa464b97f7ba86516be7de82761bfa411522701ede713a269c2c385c70a',
1240
+ );
1241
+ export const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261030_ETH = () => createTenorWETHUsdcEthMarket(
1242
+ MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261030_Eth,
1243
+ 'tenor-weth-usdc-20261030',
1244
+ 1793372400, // 2026-10-30T15:00:00Z
1245
+ '0xbd6a19559ca14acff13ac124ac0302c0ce6c41ff6a34841242752601e8b0e42c',
1246
+ );
1247
+ export const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261127_ETH = () => createTenorWETHUsdcEthMarket(
1248
+ MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261127_Eth,
1249
+ 'tenor-weth-usdc-20261127',
1250
+ 1795791600, // 2026-11-27T15:00:00Z
1251
+ '0x348fb368e0f88eb63e739c6753bb0fbf306fb269a8dc0585542a6e4be5c63d6c',
1252
+ );
1253
+ export const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261225_ETH = () => createTenorWETHUsdcEthMarket(
1254
+ MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261225_Eth,
1255
+ 'tenor-weth-usdc-20261225',
1256
+ 1798210800, // 2026-12-25T15:00:00Z
1257
+ '0xbe554be39e1df0ac1e8287d78ec8de26f0ea6197c6797bdeaed5350f45ae5b9f',
1258
+ );
1259
+
1260
+ const createTenorWsrUSDUsdcEthMarket = (
1261
+ value: MorphoMidnightVersions,
1262
+ url: string,
1263
+ maturity: number,
1264
+ marketId: string,
1265
+ ): MorphoMidnightMarketData => ({
1109
1266
  chainIds: [NetworkNumber.Eth],
1110
- label: 'Tenor siUSD/USDC',
1111
- shortLabel: 'Tenor siUSD/USDC',
1112
- url: 'tenor-siusd-usdc-20260925',
1113
- value: MorphoMidnightVersions.MorphoMidnightTenorSiUSDUSDC_20260925_Eth,
1267
+ label: 'Tenor wsrUSD/USDC',
1268
+ shortLabel: 'Tenor wsrUSD/USDC',
1269
+ url,
1270
+ value,
1114
1271
  midnight: MIDNIGHT_ETH,
1115
1272
  loanToken: USDC_ETH,
1116
1273
  collaterals: [{
1117
- token: TENOR_SIUSD_USDC_VAULT_ETH,
1274
+ token: TENOR_WSRUSD_USDC_VAULT_ETH,
1118
1275
  lltv: 0.98,
1119
1276
  liquidationCursor: '300000000000000000',
1120
- oracle: '0xE872d1d33b13B52aE7cD9A0CDD4102468350e5fa',
1277
+ oracle: '0x7C997e4dddF1D4B7C0D5f290B92d0909ba227c14',
1121
1278
  hidden: true,
1122
1279
  }, {
1123
- token: SIUSD_ETH,
1124
- lltv: 0.915,
1280
+ token: WSRUSD_ETH,
1281
+ lltv: 0.945,
1125
1282
  liquidationCursor: '300000000000000000',
1126
- oracle: '0xd2cC46b9B2D761502eF933320ecf0268EC0dfa6d',
1283
+ oracle: '0x938D2eDb20425cF80F008E7ec314Eb456940Da15',
1127
1284
  }],
1128
- maturity: 1790348400, // 2026-09-25T15:00:00Z
1129
- rcfThreshold: '500000000000',
1285
+ maturity,
1286
+ rcfThreshold: '700000000000',
1130
1287
  enterGate: ZERO_ADDRESS,
1131
1288
  liquidatorGate: ZERO_ADDRESS,
1132
- marketId: '0x48d95ace842493ce2c1c474c0cb60ac208e9d8a714258e278af9c8ae01a88fa5',
1289
+ marketId,
1133
1290
  protocolName: 'morpho-midnight',
1134
1291
  curator: 'Tenor',
1135
1292
  });
1136
1293
 
1137
- export const MorphoMidnightMarkets = (networkId: NetworkNumber) => ({
1294
+ export const MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20260925_ETH = () => createTenorWsrUSDUsdcEthMarket(
1295
+ MorphoMidnightVersions.MorphoMidnightTenorWsrUSDUSDC_20260925_Eth,
1296
+ 'tenor-wsrusd-usdc-20260925',
1297
+ 1790348400, // 2026-09-25T15:00:00Z
1298
+ '0xc028a0b50ba0c606fbf83e5620018f23019b1fb5d1d15b4a5a0d17cc72edcfeb',
1299
+ );
1300
+ export const MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20261030_ETH = () => createTenorWsrUSDUsdcEthMarket(
1301
+ MorphoMidnightVersions.MorphoMidnightTenorWsrUSDUSDC_20261030_Eth,
1302
+ 'tenor-wsrusd-usdc-20261030',
1303
+ 1793372400, // 2026-10-30T15:00:00Z
1304
+ '0xc6079abce78d158671adedd6778c55edb786f4e4bc7097a59e7fb56e9ddda1b9',
1305
+ );
1306
+ export const MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20261127_ETH = () => createTenorWsrUSDUsdcEthMarket(
1307
+ MorphoMidnightVersions.MorphoMidnightTenorWsrUSDUSDC_20261127_Eth,
1308
+ 'tenor-wsrusd-usdc-20261127',
1309
+ 1795791600, // 2026-11-27T15:00:00Z
1310
+ '0x8d4dafdceb706a31e06fba2946e5e12ac9656f98ba430eeb695b553333d78640',
1311
+ );
1312
+ export const MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20261225_ETH = () => createTenorWsrUSDUsdcEthMarket(
1313
+ MorphoMidnightVersions.MorphoMidnightTenorWsrUSDUSDC_20261225_Eth,
1314
+ 'tenor-wsrusd-usdc-20261225',
1315
+ 1798210800, // 2026-12-25T15:00:00Z
1316
+ '0x02763ffcac291ea4b16ed0b3e3e524ee9aa07248a6e4ea6613e3724b54cce116',
1317
+ );
1318
+
1319
+ const createTenorWstETHWethEthMarket = (
1320
+ value: MorphoMidnightVersions,
1321
+ url: string,
1322
+ maturity: number,
1323
+ marketId: string,
1324
+ ): MorphoMidnightMarketData => ({
1325
+ chainIds: [NetworkNumber.Eth],
1326
+ label: 'Tenor wstETH/WETH',
1327
+ shortLabel: 'Tenor wstETH/WETH',
1328
+ url,
1329
+ value,
1330
+ midnight: MIDNIGHT_ETH,
1331
+ loanToken: WETH_ETH,
1332
+ collaterals: [{
1333
+ token: WSTETH_ETH,
1334
+ lltv: 0.965,
1335
+ liquidationCursor: '300000000000000000',
1336
+ oracle: '0xbD60A6770b27E084E8617335ddE769241B0e71D8',
1337
+ }, {
1338
+ token: TENOR_WSTETH_WETH_VAULT_ETH,
1339
+ lltv: 0.98,
1340
+ liquidationCursor: '300000000000000000',
1341
+ oracle: '0x4eA702113EFAE91B906fC9eC1415dd7a9B860c89',
1342
+ hidden: true,
1343
+ }],
1344
+ maturity,
1345
+ rcfThreshold: '600000000000000000000',
1346
+ enterGate: ZERO_ADDRESS,
1347
+ liquidatorGate: ZERO_ADDRESS,
1348
+ marketId,
1349
+ protocolName: 'morpho-midnight',
1350
+ curator: 'Tenor',
1351
+ });
1352
+
1353
+ export const MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20260925_ETH = () => createTenorWstETHWethEthMarket(
1354
+ MorphoMidnightVersions.MorphoMidnightTenorWstETHWETH_20260925_Eth,
1355
+ 'tenor-wsteth-weth-20260925',
1356
+ 1790348400, // 2026-09-25T15:00:00Z
1357
+ '0x9ac6a639ace1c291b68b212eb1a95fd080332793f7bfc7dbed58b92bc518ca70',
1358
+ );
1359
+ export const MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20261030_ETH = () => createTenorWstETHWethEthMarket(
1360
+ MorphoMidnightVersions.MorphoMidnightTenorWstETHWETH_20261030_Eth,
1361
+ 'tenor-wsteth-weth-20261030',
1362
+ 1793372400, // 2026-10-30T15:00:00Z
1363
+ '0xf032c0184869e9b856b20cdcc298a1ebbec2cd4ee86e6189ff94852fa368a1b3',
1364
+ );
1365
+ export const MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20261127_ETH = () => createTenorWstETHWethEthMarket(
1366
+ MorphoMidnightVersions.MorphoMidnightTenorWstETHWETH_20261127_Eth,
1367
+ 'tenor-wsteth-weth-20261127',
1368
+ 1795791600, // 2026-11-27T15:00:00Z
1369
+ '0x0cc2301b2247d109d5a05d7a95012077cbdf9908f9f72f315de601c1f7b438f9',
1370
+ );
1371
+ export const MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20261225_ETH = () => createTenorWstETHWethEthMarket(
1372
+ MorphoMidnightVersions.MorphoMidnightTenorWstETHWETH_20261225_Eth,
1373
+ 'tenor-wsteth-weth-20261225',
1374
+ 1798210800, // 2026-12-25T15:00:00Z
1375
+ '0x646f7959780a1555f7696aad335a197fe45710f73f0bcf70f26712923249af4b',
1376
+ );
1377
+
1378
+ /**
1379
+ * Collaterals we deliberately do not list. Their markets are defined and verified above — they are real
1380
+ * markets — but withheld from the map below, so nothing in the app offers, prices or routes to them.
1381
+ */
1382
+ const EXCLUDED_COLLATERALS: string[] = [STRUSD_ETH, WSRUSD_ETH, REUSD_ETH, SIUSD_ETH, USD3_ETH];
1383
+
1384
+ const isExcludedMarket = (market: MorphoMidnightMarketData): boolean => market.collaterals.some(
1385
+ (collateral) => !collateral.hidden
1386
+ && EXCLUDED_COLLATERALS.some((token) => token.toLowerCase() === collateral.token.toLowerCase()),
1387
+ );
1388
+
1389
+ const allMorphoMidnightMarkets = (networkId: NetworkNumber) => ({
1138
1390
  // BASE — Morpho-curated
1139
1391
  [MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20260731_Base]: MORPHO_MIDNIGHT_CBBTC_USDC_860_20260731(networkId),
1140
1392
  [MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20260828_Base]: MORPHO_MIDNIGHT_CBBTC_USDC_860_20260828(networkId),
@@ -1185,19 +1437,44 @@ export const MorphoMidnightMarkets = (networkId: NetworkNumber) => ({
1185
1437
  [MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20270226_Eth]: MORPHO_MIDNIGHT_CBBTC_USDC_860_20270226_ETH(),
1186
1438
  [MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20270326_Eth]: MORPHO_MIDNIGHT_CBBTC_USDC_860_20270326_ETH(),
1187
1439
  // ETHEREUM — Tenor-curated
1188
- [MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20260925_Eth]: MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20260925_ETH(),
1440
+ [MorphoMidnightVersions.MorphoMidnightTenorReUSDUSDC_20260925_Eth]: MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20260925_ETH(),
1441
+ [MorphoMidnightVersions.MorphoMidnightTenorReUSDUSDC_20261030_Eth]: MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20261030_ETH(),
1442
+ [MorphoMidnightVersions.MorphoMidnightTenorReUSDUSDC_20261127_Eth]: MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20261127_ETH(),
1443
+ [MorphoMidnightVersions.MorphoMidnightTenorReUSDUSDC_20261225_Eth]: MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20261225_ETH(),
1444
+ [MorphoMidnightVersions.MorphoMidnightTenorSiUSDUSDC_20260925_Eth]: MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20260925_ETH(),
1445
+ [MorphoMidnightVersions.MorphoMidnightTenorSiUSDUSDC_20261030_Eth]: MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20261030_ETH(),
1446
+ [MorphoMidnightVersions.MorphoMidnightTenorSiUSDUSDC_20261127_Eth]: MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20261127_ETH(),
1447
+ [MorphoMidnightVersions.MorphoMidnightTenorSiUSDUSDC_20261225_Eth]: MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20261225_ETH(),
1448
+ [MorphoMidnightVersions.MorphoMidnightTenorStrUSDUSDC_20260925_Eth]: MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20260925_ETH(),
1449
+ [MorphoMidnightVersions.MorphoMidnightTenorStrUSDUSDC_20261030_Eth]: MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20261030_ETH(),
1450
+ [MorphoMidnightVersions.MorphoMidnightTenorStrUSDUSDC_20261127_Eth]: MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20261127_ETH(),
1451
+ [MorphoMidnightVersions.MorphoMidnightTenorStrUSDUSDC_20261225_Eth]: MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20261225_ETH(),
1189
1452
  [MorphoMidnightVersions.MorphoMidnightTenorUSD3USDC_20260925_Eth]: MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20260925_ETH(),
1190
- // ── Pending `@defisaver/tokens` ────────────────────────────────────────────────────────────────
1191
- // Collateralised by stablecoins the app does not carry yet, so `getAssetInfoByAddress` hands back the
1192
- // `?` proto and the market renders an unnamed collateral at a NaN price. The definitions below are
1193
- // verified against the chain and complete — this map is the only place they are withheld from, so
1194
- // uncommenting these four lines is the whole re-enable once the assets ship.
1195
- // [MorphoMidnightVersions.MorphoMidnightTenorStrUSDUSDC_20260925_Eth]: MORPHO_MIDNIGHT_TENOR_STRUSD_USDC_860_20260925_ETH(),
1196
- // [MorphoMidnightVersions.MorphoMidnightTenorWsrUSDUSDC_20260925_Eth]: MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20260925_ETH(),
1197
- // [MorphoMidnightVersions.MorphoMidnightTenorReUSDUSDC_20260925_Eth]: MORPHO_MIDNIGHT_TENOR_REUSD_USDC_915_20260925_ETH(),
1198
- // [MorphoMidnightVersions.MorphoMidnightTenorSiUSDUSDC_20260925_Eth]: MORPHO_MIDNIGHT_TENOR_SIUSD_USDC_915_20260925_ETH(),
1453
+ [MorphoMidnightVersions.MorphoMidnightTenorUSD3USDC_20261030_Eth]: MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20261030_ETH(),
1454
+ [MorphoMidnightVersions.MorphoMidnightTenorUSD3USDC_20261127_Eth]: MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20261127_ETH(),
1455
+ [MorphoMidnightVersions.MorphoMidnightTenorUSD3USDC_20261225_Eth]: MORPHO_MIDNIGHT_TENOR_USD3_USDC_915_20261225_ETH(),
1456
+ [MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20260925_Eth]: MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20260925_ETH(),
1457
+ [MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261030_Eth]: MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261030_ETH(),
1458
+ [MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261127_Eth]: MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261127_ETH(),
1459
+ [MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261225_Eth]: MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261225_ETH(),
1460
+ [MorphoMidnightVersions.MorphoMidnightTenorWsrUSDUSDC_20260925_Eth]: MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20260925_ETH(),
1461
+ [MorphoMidnightVersions.MorphoMidnightTenorWsrUSDUSDC_20261030_Eth]: MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20261030_ETH(),
1462
+ [MorphoMidnightVersions.MorphoMidnightTenorWsrUSDUSDC_20261127_Eth]: MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20261127_ETH(),
1463
+ [MorphoMidnightVersions.MorphoMidnightTenorWsrUSDUSDC_20261225_Eth]: MORPHO_MIDNIGHT_TENOR_WSRUSD_USDC_945_20261225_ETH(),
1464
+ [MorphoMidnightVersions.MorphoMidnightTenorWstETHWETH_20260925_Eth]: MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20260925_ETH(),
1465
+ [MorphoMidnightVersions.MorphoMidnightTenorWstETHWETH_20261030_Eth]: MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20261030_ETH(),
1466
+ [MorphoMidnightVersions.MorphoMidnightTenorWstETHWETH_20261127_Eth]: MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20261127_ETH(),
1467
+ [MorphoMidnightVersions.MorphoMidnightTenorWstETHWETH_20261225_Eth]: MORPHO_MIDNIGHT_TENOR_WSTETH_WETH_965_20261225_ETH(),
1199
1468
  }) as const;
1200
1469
 
1470
+ export const MorphoMidnightMarkets = (networkId: NetworkNumber) => {
1471
+ const all = allMorphoMidnightMarkets(networkId);
1472
+ if (!EXCLUDED_COLLATERALS.length) return all;
1473
+ return Object.fromEntries(
1474
+ Object.entries(all).filter(([, market]) => !isExcludedMarket(market)),
1475
+ ) as typeof all;
1476
+ };
1477
+
1201
1478
  const TENOR_MARKET_IDS = new Set(
1202
1479
  Object.values(MorphoMidnightMarkets(NetworkNumber.Base))
1203
1480
  .filter((market) => market.curator === 'Tenor')
@@ -56,12 +56,34 @@ export enum MorphoMidnightVersions {
56
56
  MorphoMidnightCbBTCUSDC_860_20270226_Eth = 'morphomidnightcbbtcusdc_860_20270226_eth',
57
57
  MorphoMidnightCbBTCUSDC_860_20270326_Eth = 'morphomidnightcbbtcusdc_860_20270326_eth',
58
58
  // Tenor-hosted Midnight markets (same core, different order book)
59
- MorphoMidnightTenorWETHUSDC_20260925_Eth = 'morphomidnighttenorwethusdc_20260925_eth',
60
- MorphoMidnightTenorStrUSDUSDC_20260925_Eth = 'morphomidnighttenorstrusdusdc_20260925_eth',
61
- MorphoMidnightTenorWsrUSDUSDC_20260925_Eth = 'morphomidnighttenorwsrusdusdc_20260925_eth',
62
- MorphoMidnightTenorUSD3USDC_20260925_Eth = 'morphomidnighttenorusd3usdc_20260925_eth',
63
59
  MorphoMidnightTenorReUSDUSDC_20260925_Eth = 'morphomidnighttenorreusdusdc_20260925_eth',
60
+ MorphoMidnightTenorReUSDUSDC_20261030_Eth = 'morphomidnighttenorreusdusdc_20261030_eth',
61
+ MorphoMidnightTenorReUSDUSDC_20261127_Eth = 'morphomidnighttenorreusdusdc_20261127_eth',
62
+ MorphoMidnightTenorReUSDUSDC_20261225_Eth = 'morphomidnighttenorreusdusdc_20261225_eth',
64
63
  MorphoMidnightTenorSiUSDUSDC_20260925_Eth = 'morphomidnighttenorsiusdusdc_20260925_eth',
64
+ MorphoMidnightTenorSiUSDUSDC_20261030_Eth = 'morphomidnighttenorsiusdusdc_20261030_eth',
65
+ MorphoMidnightTenorSiUSDUSDC_20261127_Eth = 'morphomidnighttenorsiusdusdc_20261127_eth',
66
+ MorphoMidnightTenorSiUSDUSDC_20261225_Eth = 'morphomidnighttenorsiusdusdc_20261225_eth',
67
+ MorphoMidnightTenorStrUSDUSDC_20260925_Eth = 'morphomidnighttenorstrusdusdc_20260925_eth',
68
+ MorphoMidnightTenorStrUSDUSDC_20261030_Eth = 'morphomidnighttenorstrusdusdc_20261030_eth',
69
+ MorphoMidnightTenorStrUSDUSDC_20261127_Eth = 'morphomidnighttenorstrusdusdc_20261127_eth',
70
+ MorphoMidnightTenorStrUSDUSDC_20261225_Eth = 'morphomidnighttenorstrusdusdc_20261225_eth',
71
+ MorphoMidnightTenorUSD3USDC_20260925_Eth = 'morphomidnighttenorusd3usdc_20260925_eth',
72
+ MorphoMidnightTenorUSD3USDC_20261030_Eth = 'morphomidnighttenorusd3usdc_20261030_eth',
73
+ MorphoMidnightTenorUSD3USDC_20261127_Eth = 'morphomidnighttenorusd3usdc_20261127_eth',
74
+ MorphoMidnightTenorUSD3USDC_20261225_Eth = 'morphomidnighttenorusd3usdc_20261225_eth',
75
+ MorphoMidnightTenorWETHUSDC_20260925_Eth = 'morphomidnighttenorwethusdc_20260925_eth',
76
+ MorphoMidnightTenorWETHUSDC_20261030_Eth = 'morphomidnighttenorwethusdc_20261030_eth',
77
+ MorphoMidnightTenorWETHUSDC_20261127_Eth = 'morphomidnighttenorwethusdc_20261127_eth',
78
+ MorphoMidnightTenorWETHUSDC_20261225_Eth = 'morphomidnighttenorwethusdc_20261225_eth',
79
+ MorphoMidnightTenorWsrUSDUSDC_20260925_Eth = 'morphomidnighttenorwsrusdusdc_20260925_eth',
80
+ MorphoMidnightTenorWsrUSDUSDC_20261030_Eth = 'morphomidnighttenorwsrusdusdc_20261030_eth',
81
+ MorphoMidnightTenorWsrUSDUSDC_20261127_Eth = 'morphomidnighttenorwsrusdusdc_20261127_eth',
82
+ MorphoMidnightTenorWsrUSDUSDC_20261225_Eth = 'morphomidnighttenorwsrusdusdc_20261225_eth',
83
+ MorphoMidnightTenorWstETHWETH_20260925_Eth = 'morphomidnighttenorwstethweth_20260925_eth',
84
+ MorphoMidnightTenorWstETHWETH_20261030_Eth = 'morphomidnighttenorwstethweth_20261030_eth',
85
+ MorphoMidnightTenorWstETHWETH_20261127_Eth = 'morphomidnighttenorwstethweth_20261127_eth',
86
+ MorphoMidnightTenorWstETHWETH_20261225_Eth = 'morphomidnighttenorwstethweth_20261225_eth',
65
87
  }
66
88
 
67
89
  export type MorphoMidnightCurator = 'Morpho' | 'Tenor';