@moonwell-fi/moonwell-sdk 0.10.2 → 0.10.4

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 (83) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/_cjs/actions/core/markets/getMarketSnapshots.js +8 -0
  3. package/_cjs/actions/core/markets/getMarketSnapshots.js.map +1 -1
  4. package/_cjs/actions/governance/common.js +37 -5
  5. package/_cjs/actions/governance/common.js.map +1 -1
  6. package/_cjs/actions/governance/getStakingInfo.js +6 -1
  7. package/_cjs/actions/governance/getStakingInfo.js.map +1 -1
  8. package/_cjs/actions/governance/getUserStakingInfo.js +2 -10
  9. package/_cjs/actions/governance/getUserStakingInfo.js.map +1 -1
  10. package/_cjs/actions/lunar-indexer-transformers.js +2 -0
  11. package/_cjs/actions/lunar-indexer-transformers.js.map +1 -1
  12. package/_cjs/actions/morpho/markets/common.js +3 -2
  13. package/_cjs/actions/morpho/markets/common.js.map +1 -1
  14. package/_cjs/actions/morpho/markets/getMarketSnapshots.js +6 -0
  15. package/_cjs/actions/morpho/markets/getMarketSnapshots.js.map +1 -1
  16. package/_cjs/actions/morpho/markets/lunarIndexerTransform.js +4 -0
  17. package/_cjs/actions/morpho/markets/lunarIndexerTransform.js.map +1 -1
  18. package/_cjs/actions/morpho/vaults/common.js +8 -0
  19. package/_cjs/actions/morpho/vaults/common.js.map +1 -1
  20. package/_cjs/environments/definitions/base/morpho-vaults.js +24 -0
  21. package/_cjs/environments/definitions/base/morpho-vaults.js.map +1 -1
  22. package/_cjs/environments/definitions/base/tokens.js +28 -4
  23. package/_cjs/environments/definitions/base/tokens.js.map +1 -1
  24. package/_cjs/errors/version.js +1 -1
  25. package/_esm/actions/core/markets/getMarketSnapshots.js +8 -0
  26. package/_esm/actions/core/markets/getMarketSnapshots.js.map +1 -1
  27. package/_esm/actions/governance/common.js +40 -5
  28. package/_esm/actions/governance/common.js.map +1 -1
  29. package/_esm/actions/governance/getStakingInfo.js +6 -1
  30. package/_esm/actions/governance/getStakingInfo.js.map +1 -1
  31. package/_esm/actions/governance/getUserStakingInfo.js +3 -12
  32. package/_esm/actions/governance/getUserStakingInfo.js.map +1 -1
  33. package/_esm/actions/lunar-indexer-transformers.js +2 -0
  34. package/_esm/actions/lunar-indexer-transformers.js.map +1 -1
  35. package/_esm/actions/morpho/markets/common.js +3 -2
  36. package/_esm/actions/morpho/markets/common.js.map +1 -1
  37. package/_esm/actions/morpho/markets/getMarketSnapshots.js +6 -0
  38. package/_esm/actions/morpho/markets/getMarketSnapshots.js.map +1 -1
  39. package/_esm/actions/morpho/markets/lunarIndexerTransform.js +4 -0
  40. package/_esm/actions/morpho/markets/lunarIndexerTransform.js.map +1 -1
  41. package/_esm/actions/morpho/vaults/common.js +11 -0
  42. package/_esm/actions/morpho/vaults/common.js.map +1 -1
  43. package/_esm/environments/definitions/base/morpho-vaults.js +24 -0
  44. package/_esm/environments/definitions/base/morpho-vaults.js.map +1 -1
  45. package/_esm/environments/definitions/base/tokens.js +28 -4
  46. package/_esm/environments/definitions/base/tokens.js.map +1 -1
  47. package/_esm/errors/version.js +1 -1
  48. package/_types/actions/core/markets/getMarketSnapshots.d.ts.map +1 -1
  49. package/_types/actions/governance/common.d.ts +8 -1
  50. package/_types/actions/governance/common.d.ts.map +1 -1
  51. package/_types/actions/governance/getStakingInfo.d.ts.map +1 -1
  52. package/_types/actions/governance/getUserStakingInfo.d.ts.map +1 -1
  53. package/_types/actions/lunar-indexer-transformers.d.ts.map +1 -1
  54. package/_types/actions/morpho/markets/getMarketSnapshots.d.ts +2 -0
  55. package/_types/actions/morpho/markets/getMarketSnapshots.d.ts.map +1 -1
  56. package/_types/actions/morpho/markets/lunarIndexerTransform.d.ts +2 -0
  57. package/_types/actions/morpho/markets/lunarIndexerTransform.d.ts.map +1 -1
  58. package/_types/actions/morpho/vaults/common.d.ts.map +1 -1
  59. package/_types/client/createMoonwellClient.d.ts +104 -8
  60. package/_types/client/createMoonwellClient.d.ts.map +1 -1
  61. package/_types/environments/definitions/base/morpho-vaults.d.ts +24 -0
  62. package/_types/environments/definitions/base/morpho-vaults.d.ts.map +1 -1
  63. package/_types/environments/definitions/base/tokens.d.ts +28 -4
  64. package/_types/environments/definitions/base/tokens.d.ts.map +1 -1
  65. package/_types/environments/index.d.ts +52 -4
  66. package/_types/environments/index.d.ts.map +1 -1
  67. package/_types/errors/version.d.ts +1 -1
  68. package/_types/types/market.d.ts +2 -0
  69. package/_types/types/market.d.ts.map +1 -1
  70. package/actions/core/markets/getMarketSnapshots.ts +9 -0
  71. package/actions/governance/common.ts +75 -7
  72. package/actions/governance/getStakingInfo.ts +8 -3
  73. package/actions/governance/getUserStakingInfo.ts +3 -12
  74. package/actions/lunar-indexer-transformers.ts +2 -0
  75. package/actions/morpho/markets/common.ts +3 -2
  76. package/actions/morpho/markets/getMarketSnapshots.ts +23 -0
  77. package/actions/morpho/markets/lunarIndexerTransform.ts +11 -0
  78. package/actions/morpho/vaults/common.ts +15 -0
  79. package/environments/definitions/base/morpho-vaults.ts +28 -0
  80. package/environments/definitions/base/tokens.ts +28 -4
  81. package/errors/version.ts +1 -1
  82. package/package.json +1 -1
  83. package/types/market.ts +2 -0
@@ -326,6 +326,8 @@ async function fetchCoreMarketSnapshotsFromPonder(
326
326
  totalBorrowsUsd: borrowUsd,
327
327
  totalLiquidity: liquidity,
328
328
  totalLiquidityUsd: liquidityUsd,
329
+ totalReallocatableLiquidity: 0,
330
+ totalReallocatableLiquidityUsd: 0,
329
331
  baseSupplyApy: point.baseSupplyApy,
330
332
  baseBorrowApy: point.baseBorrowApy,
331
333
  collateralTokenPrice: price,
@@ -552,12 +554,17 @@ export async function fetchIsolatedMarketSnapshots(
552
554
  collateralTokenPrice > 0
553
555
  ? snapshot.totalLiquidityUsd / collateralTokenPrice
554
556
  : snapshot.totalLiquidity;
557
+ const totalReallocatableLiquidity =
558
+ collateralTokenPrice > 0
559
+ ? snapshot.totalReallocatableLiquidityUsd / collateralTokenPrice
560
+ : snapshot.totalReallocatableLiquidity;
555
561
 
556
562
  return {
557
563
  ...snapshot,
558
564
  collateralTokenPrice,
559
565
  totalSupply,
560
566
  totalLiquidity,
567
+ totalReallocatableLiquidity,
561
568
  };
562
569
  });
563
570
  }
@@ -790,6 +797,8 @@ async function fetchIsolatedMarketSnapshotsFromBlueApi(
790
797
  totalSupplyUsd: Number(supplyAssetsUsd.y),
791
798
  totalLiquidity,
792
799
  totalLiquidityUsd: Number(liquidityAssetsUsd.y),
800
+ totalReallocatableLiquidity: 0,
801
+ totalReallocatableLiquidityUsd: 0,
793
802
  baseSupplyApy: supplyApy.y,
794
803
  baseBorrowApy: borrowApy.y,
795
804
  loanTokenPrice,
@@ -54,8 +54,68 @@ type MerklReward = {
54
54
  pending: string;
55
55
  };
56
56
 
57
+ type MerklCampaign = {
58
+ campaignId: string;
59
+ apr: number;
60
+ startTimestamp: number;
61
+ endTimestamp: number;
62
+ params: {
63
+ targetToken: string;
64
+ };
65
+ };
66
+
67
+ type CampaignIdsCache = {
68
+ ids: string[];
69
+ fetchedAt: number;
70
+ };
71
+
72
+ const MOONWELL_MERKL_CREATOR = "0x8b621804a7637b781e2BbD58e256a591F2dF7d51";
73
+ const CAMPAIGN_IDS_CACHE_TTL_MS = 4 * 60 * 60 * 1000; // 4 hours
57
74
  const MAX_BREAKDOWN_PAGES = 10;
58
75
 
76
+ let campaignIdsCache: CampaignIdsCache | null = null;
77
+
78
+ /** Resets the in-memory campaign IDs cache. Intended for use in tests only. */
79
+ export function resetMerklCampaignIdsCache(): void {
80
+ campaignIdsCache = null;
81
+ }
82
+
83
+ /**
84
+ * Fetches all Moonwell Merkl campaign IDs from the API.
85
+ * Results are cached in memory for 4 hours since campaigns only change monthly.
86
+ */
87
+ export async function getMerklCampaignIds(): Promise<string[]> {
88
+ const now = Date.now();
89
+ if (
90
+ campaignIdsCache !== null &&
91
+ now - campaignIdsCache.fetchedAt < CAMPAIGN_IDS_CACHE_TTL_MS
92
+ ) {
93
+ return campaignIdsCache.ids;
94
+ }
95
+
96
+ try {
97
+ const response = await fetch(
98
+ `https://api.merkl.xyz/v4/campaigns?creatorAddress=${MOONWELL_MERKL_CREATOR}&excludeSubCampaigns=true&items=100`,
99
+ { headers: MOONWELL_FETCH_JSON_HEADERS },
100
+ );
101
+
102
+ if (!response.ok) {
103
+ console.warn(
104
+ `Merkl API request failed: ${response.status} ${response.statusText}`,
105
+ );
106
+ return campaignIdsCache?.ids ?? [];
107
+ }
108
+
109
+ const data = (await response.json()) as MerklCampaign[];
110
+ const ids = data.map((c) => c.campaignId);
111
+ campaignIdsCache = { ids, fetchedAt: now };
112
+ return ids;
113
+ } catch (error) {
114
+ console.error("Error in getMerklCampaignIds:", error);
115
+ return campaignIdsCache?.ids ?? [];
116
+ }
117
+ }
118
+
59
119
  export async function getMerklRewardsData(
60
120
  campaignId: string[],
61
121
  chainId: number,
@@ -152,13 +212,15 @@ export async function getMerklRewardsData(
152
212
  }
153
213
  }
154
214
 
155
- export async function getMerklStakingApr(campaignId: string): Promise<number> {
215
+ export async function getMerklStakingApr(
216
+ contractAddress: string,
217
+ ): Promise<number> {
218
+ const now = Math.floor(Date.now() / 1000);
219
+
156
220
  try {
157
221
  const response = await fetch(
158
- `https://api.merkl.xyz/v4/campaigns?campaignId=${campaignId}`,
159
- {
160
- headers: MOONWELL_FETCH_JSON_HEADERS,
161
- },
222
+ `https://api.merkl.xyz/v4/campaigns?creatorAddress=${MOONWELL_MERKL_CREATOR}&excludeSubCampaigns=true&items=100`,
223
+ { headers: MOONWELL_FETCH_JSON_HEADERS },
162
224
  );
163
225
 
164
226
  if (!response.ok) {
@@ -168,9 +230,15 @@ export async function getMerklStakingApr(campaignId: string): Promise<number> {
168
230
  return 0;
169
231
  }
170
232
 
171
- const data = (await response.json()) as { apr: number }[];
233
+ const data = (await response.json()) as MerklCampaign[];
172
234
 
173
- return data.reduce((acc, curr) => acc + Number(curr.apr), 0);
235
+ return data
236
+ .filter((c) => c.startTimestamp <= now && c.endTimestamp >= now)
237
+ .filter(
238
+ (c) =>
239
+ c.params.targetToken.toLowerCase() === contractAddress.toLowerCase(),
240
+ )
241
+ .reduce((acc, c) => acc + Number(c.apr), 0);
174
242
  } catch (error) {
175
243
  console.error("Error in getMerklStakingApr:", error);
176
244
  return 0;
@@ -87,9 +87,14 @@ export async function getStakingInfo<
87
87
  )
88
88
  .filter((val) => val !== undefined);
89
89
 
90
- const baseStakingApr = await getMerklStakingApr(
91
- "0xd6481eec8f9bd0d7c3d8ea71ea46df738497264effa46fa0b796c0e65c6c7427",
92
- ); // merkl campaign id
90
+ const baseEnv = envsWithStaking.find((env) => env.chainId === base.id);
91
+ const stakingTokenKey = baseEnv?.config.contracts.stakingToken;
92
+ const baseStkToken =
93
+ baseEnv != null && stakingTokenKey != null
94
+ ? baseEnv.config.tokens[stakingTokenKey]
95
+ : undefined;
96
+ const baseStakingApr =
97
+ baseStkToken != null ? await getMerklStakingApr(baseStkToken.address) : 0;
93
98
 
94
99
  const result = envsWithStaking.flatMap((curr, index) => {
95
100
  const token =
@@ -9,7 +9,7 @@ import {
9
9
  publicEnvironments,
10
10
  } from "../../environments/index.js";
11
11
  import type { UserStakingInfo } from "../../types/staking.js";
12
- import { getMerklRewardsData } from "./common.js";
12
+ import { getMerklCampaignIds, getMerklRewardsData } from "./common.js";
13
13
 
14
14
  export type GetUserStakingInfoParameters<
15
15
  environments,
@@ -55,18 +55,9 @@ export async function getUserStakingInfo<
55
55
  }),
56
56
  );
57
57
 
58
- // merkl rewards by campaignId
58
+ const campaignIds = await getMerklCampaignIds();
59
59
  const merklRewards = await getMerklRewardsData(
60
- [
61
- "0xcd60ff26dc0b43f14c995c494bc5650087eaae68b279bdbe85e0e8eaa11fd513",
62
- "0xf2c5b7dd2d3416d3853bcf1e93c1cfdb7b5b5fda079d36408df02f731f7d1499",
63
- "0x0761f42dda11caa8ef9d8f46a12fc13f073bd11153ff16ac0177c59a536f68ee",
64
- "0x78a35e1cb13a476120a0d7efa669deda6578d46f8ecc708621291df87e90252b",
65
- "0xf9e12deb62df71ffe6527b8f9000f93d3f783b3a58f7ec3f2be52cb9156608f3",
66
- "0xc21b035371d3e8af5b81024a6fe9b713cb047d8c6dbaa4663a5aac9e76663c50",
67
- "0x0c3ec6a807049edd368e2493b6ab1f71557384c248013f5eee9cb375eead5faa",
68
- "0xd6481eec8f9bd0d7c3d8ea71ea46df738497264effa46fa0b796c0e65c6c7427",
69
- ],
60
+ campaignIds,
70
61
  base.id,
71
62
  userAddress,
72
63
  );
@@ -40,6 +40,8 @@ export function transformMarketSnapshot(
40
40
  totalBorrowsUsd: Number(lunar.totalBorrowsUSD),
41
41
  totalLiquidity: Number(lunar.totalLiquidity),
42
42
  totalLiquidityUsd: Number(lunar.totalLiquidityUSD),
43
+ totalReallocatableLiquidity: 0,
44
+ totalReallocatableLiquidityUsd: 0,
43
45
  baseSupplyApy: Number(lunar.baseSupplyApy),
44
46
  baseBorrowApy: Number(lunar.baseBorrowApy),
45
47
  timestamp: Number(lunar.timestamp) * 1000, // Convert unix timestamp to milliseconds
@@ -718,12 +718,13 @@ async function getMorphoMarketRewards(
718
718
 
719
719
  if (result) {
720
720
  const markets = result.markets.items.map((item) => {
721
+ const loanAssetDecimals = item.loanAsset.decimals;
721
722
  const mapping: GetMorphoMarketsRewardsReturnType = {
722
723
  chainId: item.morphoBlue.chain.id,
723
724
  marketId: item.uniqueKey,
724
725
  reallocatableLiquidityAssets: new Amount(
725
726
  BigInt(item.reallocatableLiquidityAssets),
726
- item.loanAsset.decimals,
727
+ loanAssetDecimals,
727
728
  ),
728
729
  // Note: The Morpho GraphQL API may return null for collateralAssets and
729
730
  // collateralAssetsUsd for markets with no collateral deposited or during data sync.
@@ -738,7 +739,7 @@ async function getMorphoMarketRewards(
738
739
  collateralAssetsUsd: item.state.collateralAssetsUsd ?? null,
739
740
  publicAllocatorSharedLiquidity: item.publicAllocatorSharedLiquidity.map(
740
741
  (item) => ({
741
- assets: Number(item.assets),
742
+ assets: Number(item.assets) / 10 ** loanAssetDecimals,
742
743
  vault: {
743
744
  address: item.vault.address,
744
745
  name: item.vault.name,
@@ -16,9 +16,11 @@ export type MarketSnapshot = {
16
16
  totalSupplyAssets: Amount;
17
17
  totalBorrowAssets: Amount;
18
18
  totalLiquidity: Amount;
19
+ totalReallocatableLiquidity: Amount;
19
20
  totalSupplyAssetsUsd: number;
20
21
  totalBorrowAssetsUsd: number;
21
22
  totalLiquidityUsd: number;
23
+ totalReallocatableLiquidityUsd: number;
22
24
  loanTokenPrice: number;
23
25
  collateralTokenPrice: number;
24
26
  supplyApy: number;
@@ -105,9 +107,16 @@ export async function getMarketSnapshots<
105
107
  BigInt(Math.round(s.totalLiquidity * 10 ** loanToken.decimals)),
106
108
  loanToken.decimals,
107
109
  ),
110
+ totalReallocatableLiquidity: new Amount(
111
+ BigInt(
112
+ Math.round(s.totalReallocatableLiquidity * 10 ** loanToken.decimals),
113
+ ),
114
+ loanToken.decimals,
115
+ ),
108
116
  totalSupplyAssetsUsd: s.totalSupplyUsd,
109
117
  totalBorrowAssetsUsd: s.totalBorrowsUsd,
110
118
  totalLiquidityUsd: s.totalLiquidityUsd,
119
+ totalReallocatableLiquidityUsd: s.totalReallocatableLiquidityUsd,
111
120
  loanTokenPrice: s.loanTokenPrice,
112
121
  collateralTokenPrice: s.collateralTokenPrice,
113
122
  supplyApy: s.baseSupplyApy,
@@ -181,15 +190,29 @@ export async function getMarketSnapshots<
181
190
  loanToken.decimals,
182
191
  );
183
192
 
193
+ const totalReallocatableLiquidity = new Amount(
194
+ BigInt(
195
+ Math.floor(
196
+ Number.parseFloat(snapshot.totalReallocatableLiquidity ?? "0") *
197
+ 10 ** loanToken.decimals,
198
+ ),
199
+ ),
200
+ loanToken.decimals,
201
+ );
202
+
184
203
  return {
185
204
  timestamp: snapshot.timestamp,
186
205
  blockNumber: BigInt(snapshot.blockNumber),
187
206
  totalSupplyAssets,
188
207
  totalBorrowAssets,
189
208
  totalLiquidity,
209
+ totalReallocatableLiquidity,
190
210
  totalSupplyAssetsUsd: Number.parseFloat(snapshot.totalSupplyAssetsUsd),
191
211
  totalBorrowAssetsUsd: Number.parseFloat(snapshot.totalBorrowAssetsUsd),
192
212
  totalLiquidityUsd: Number.parseFloat(snapshot.totalLiquidityUsd),
213
+ totalReallocatableLiquidityUsd: Number.parseFloat(
214
+ snapshot.totalReallocatableLiquidityUsd ?? "0",
215
+ ),
193
216
  loanTokenPrice: Number.parseFloat(snapshot.loanTokenPrice),
194
217
  collateralTokenPrice: Number.parseFloat(snapshot.collateralTokenPrice),
195
218
  supplyApy: Number.parseFloat(snapshot.supplyApy),
@@ -82,6 +82,8 @@ export type LunarIndexerMarketSnapshot = {
82
82
  totalSupplyAssetsUsd: string;
83
83
  totalBorrowAssetsUsd: string;
84
84
  totalLiquidityUsd: string;
85
+ totalReallocatableLiquidity?: string;
86
+ totalReallocatableLiquidityUsd?: string;
85
87
  loanTokenPrice: string;
86
88
  collateralTokenPrice: string;
87
89
  supplyApy: string;
@@ -125,6 +127,13 @@ export function transformIsolatedMarketSnapshotFromIndexer(
125
127
  ? totalLiquidityUsd / collateralTokenPrice
126
128
  : Number.parseFloat(snapshot.totalLiquidity);
127
129
 
130
+ const totalReallocatableLiquidity = Number.parseFloat(
131
+ snapshot.totalReallocatableLiquidity ?? "0",
132
+ );
133
+ const totalReallocatableLiquidityUsd = Number.parseFloat(
134
+ snapshot.totalReallocatableLiquidityUsd ?? "0",
135
+ );
136
+
128
137
  return {
129
138
  chainId: snapshot.chainId,
130
139
  marketId: snapshot.marketId.toLowerCase(),
@@ -135,6 +144,8 @@ export function transformIsolatedMarketSnapshotFromIndexer(
135
144
  totalBorrowsUsd: Number.parseFloat(snapshot.totalBorrowAssetsUsd),
136
145
  totalLiquidity,
137
146
  totalLiquidityUsd,
147
+ totalReallocatableLiquidity,
148
+ totalReallocatableLiquidityUsd,
138
149
  baseSupplyApy: Number.parseFloat(snapshot.supplyApy),
139
150
  baseBorrowApy: Number.parseFloat(snapshot.borrowApy),
140
151
  loanTokenPrice,
@@ -847,6 +847,21 @@ async function getMorphoVaultsDataFromOnChain(params: {
847
847
  },
848
848
  );
849
849
 
850
+ // For V2 vaults, normalize allocations to reflect deployed asset distribution
851
+ // V2 vaults may have idle capital not deployed to adapters, which causes
852
+ // raw allocations to sum to less than 100% of total vault assets
853
+ if (vaultConfig.version === 2) {
854
+ const totalAllocation = markets.reduce(
855
+ (sum, m) => sum + m.allocation,
856
+ 0,
857
+ );
858
+ if (totalAllocation > 0) {
859
+ for (const market of markets) {
860
+ market.allocation = market.allocation / totalAllocation;
861
+ }
862
+ }
863
+ }
864
+
850
865
  // Only calculate baseApy from markets for v1 vaults
851
866
  // v2 vaults already have baseApy from Morpho API
852
867
  if (vaultConfig.version !== 2) {
@@ -9,24 +9,52 @@ export const vaults = createVaultConfig({
9
9
  vaultToken: "mwETH",
10
10
  campaignId:
11
11
  "0x1df9a935f6b928b4809c4fda483f16839140864b2b412cc5fea85fd5d9d00e57",
12
+ version: 2,
13
+ },
14
+ mwETHv1: {
15
+ underlyingToken: "ETH",
16
+ vaultToken: "mwETHv1",
17
+ campaignId:
18
+ "0x1df9a935f6b928b4809c4fda483f16839140864b2b412cc5fea85fd5d9d00e57",
12
19
  },
13
20
  mwUSDC: {
14
21
  underlyingToken: "USDC",
15
22
  vaultToken: "mwUSDC",
16
23
  campaignId:
17
24
  "0xec43a3d75ae25c5255eb06b3aac6b79ccb2cdb6b99740ea13553661b0f06b756",
25
+ version: 2,
26
+ },
27
+ mwUSDCv1: {
28
+ underlyingToken: "USDC",
29
+ vaultToken: "mwUSDCv1",
30
+ campaignId:
31
+ "0xec43a3d75ae25c5255eb06b3aac6b79ccb2cdb6b99740ea13553661b0f06b756",
18
32
  },
19
33
  mwEURC: {
20
34
  underlyingToken: "EURC",
21
35
  vaultToken: "mwEURC",
22
36
  campaignId:
23
37
  "0x03430078e052d58b6e80fa8e373c38a75736f1d24768b9c92a2e44bc4ce62b1d",
38
+ version: 2,
39
+ },
40
+ mwEURCv1: {
41
+ underlyingToken: "EURC",
42
+ vaultToken: "mwEURCv1",
43
+ campaignId:
44
+ "0x03430078e052d58b6e80fa8e373c38a75736f1d24768b9c92a2e44bc4ce62b1d",
24
45
  },
25
46
  mwcbBTC: {
26
47
  underlyingToken: "cbBTC",
27
48
  vaultToken: "mwcbBTC",
28
49
  campaignId:
29
50
  "0xb230a09331c22280ae3e02a65caad21a553274912352d8f93c7a92c0f9bb3da4",
51
+ version: 2,
52
+ },
53
+ mwcbBTCv1: {
54
+ underlyingToken: "cbBTC",
55
+ vaultToken: "mwcbBTCv1",
56
+ campaignId:
57
+ "0xb230a09331c22280ae3e02a65caad21a553274912352d8f93c7a92c0f9bb3da4",
30
58
  },
31
59
  meUSDC: {
32
60
  underlyingToken: "USDC",
@@ -141,29 +141,53 @@ export const tokens = createTokenConfig({
141
141
  symbol: "mEURC",
142
142
  },
143
143
  mwETH: {
144
- address: "0xa0E430870c4604CcfC7B38Ca7845B1FF653D0ff1",
144
+ address: "0x89BeDBB1C4837444Da215A377275Ff96A84D6f53",
145
145
  decimals: 18,
146
146
  name: "Moonwell Flagship ETH",
147
147
  symbol: "mwETH",
148
148
  },
149
+ mwETHv1: {
150
+ address: "0xa0E430870c4604CcfC7B38Ca7845B1FF653D0ff1",
151
+ decimals: 18,
152
+ name: "Moonwell Flagship ETH V1",
153
+ symbol: "mwETHv1",
154
+ },
149
155
  mwUSDC: {
150
- address: "0xc1256Ae5FF1cf2719D4937adb3bbCCab2E00A2Ca",
156
+ address: "0x48a90E85be5C56b0A669985A12ee7C449fC79965",
151
157
  decimals: 18,
152
158
  name: "Moonwell Flagship USDC",
153
159
  symbol: "mwUSDC",
154
160
  },
161
+ mwUSDCv1: {
162
+ address: "0xc1256Ae5FF1cf2719D4937adb3bbCCab2E00A2Ca",
163
+ decimals: 18,
164
+ name: "Moonwell Flagship USDC V1",
165
+ symbol: "mwUSDCv1",
166
+ },
155
167
  mwEURC: {
156
- address: "0xf24608E0CCb972b0b0f4A6446a0BBf58c701a026",
168
+ address: "0x5083b1387Ec3d4Ee6467B83890D98f1AF93F7c48",
157
169
  decimals: 18,
158
170
  name: "Moonwell Flagship EURC",
159
171
  symbol: "mwEURC",
160
172
  },
173
+ mwEURCv1: {
174
+ address: "0xf24608E0CCb972b0b0f4A6446a0BBf58c701a026",
175
+ decimals: 18,
176
+ name: "Moonwell Flagship EURC V1",
177
+ symbol: "mwEURCv1",
178
+ },
161
179
  mwcbBTC: {
162
- address: "0x543257eF2161176D7C8cD90BA65C2d4CaEF5a796",
180
+ address: "0xdbA76Bc542bb07538e046B40F2e8a215B409F7A8",
163
181
  decimals: 18,
164
182
  name: "Moonwell Frontier cbBTC",
165
183
  symbol: "mwcbBTC",
166
184
  },
185
+ mwcbBTCv1: {
186
+ address: "0x543257eF2161176D7C8cD90BA65C2d4CaEF5a796",
187
+ decimals: 18,
188
+ name: "Moonwell Frontier cbBTC V1",
189
+ symbol: "mwcbBTCv1",
190
+ },
167
191
  WELL: {
168
192
  address: "0xA88594D404727625A9437C3f886C7643872296AE",
169
193
  decimals: 18,
package/errors/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '0.10.2'
1
+ export const version = '0.10.4'
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@moonwell-fi/moonwell-sdk",
3
3
  "description": "TypeScript Interface for Moonwell",
4
- "version": "0.10.2",
4
+ "version": "0.10.4",
5
5
  "main": "./_cjs/index.js",
6
6
  "module": "./_esm/index.js",
7
7
  "types": "./_types/index.d.ts",
package/types/market.ts CHANGED
@@ -51,6 +51,8 @@ export type MarketSnapshot = {
51
51
  totalBorrowsUsd: number;
52
52
  totalLiquidity: number;
53
53
  totalLiquidityUsd: number;
54
+ totalReallocatableLiquidity: number;
55
+ totalReallocatableLiquidityUsd: number;
54
56
  baseSupplyApy: number;
55
57
  baseBorrowApy: number;
56
58
  loanTokenPrice: number;