@merkl/api 0.17.33 → 0.17.35

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 (101) hide show
  1. package/dist/src/backgroundJobs/jobs/opportunityUpdater.d.ts +0 -2
  2. package/dist/src/backgroundJobs/jobs/opportunityUpdater.js +2 -54
  3. package/dist/src/eden/index.d.ts +5 -5
  4. package/dist/src/factories/metadataFactory/factory.d.ts +3 -0
  5. package/dist/src/factories/metadataFactory/factory.js +56 -0
  6. package/dist/src/factories/metadataFactory/implementations/Ajna.d.ts +15 -0
  7. package/dist/src/factories/metadataFactory/implementations/Ajna.js +52 -0
  8. package/dist/src/factories/metadataFactory/implementations/Ambiant.d.ts +15 -0
  9. package/dist/src/factories/metadataFactory/implementations/Ambiant.js +31 -0
  10. package/dist/src/factories/metadataFactory/implementations/Badger.d.ts +15 -0
  11. package/dist/src/factories/metadataFactory/implementations/Badger.js +25 -0
  12. package/dist/src/factories/metadataFactory/implementations/Clamm.d.ts +15 -0
  13. package/dist/src/factories/metadataFactory/implementations/Clamm.js +50 -0
  14. package/dist/src/factories/metadataFactory/implementations/Compound.d.ts +16 -0
  15. package/dist/src/factories/metadataFactory/implementations/Compound.js +20 -0
  16. package/dist/src/factories/metadataFactory/implementations/Default.d.ts +13 -0
  17. package/dist/src/factories/metadataFactory/implementations/Default.js +11 -0
  18. package/dist/src/factories/metadataFactory/implementations/Dolomite.d.ts +15 -0
  19. package/dist/src/factories/metadataFactory/implementations/Dolomite.js +17 -0
  20. package/dist/src/factories/metadataFactory/implementations/EigenLayer.d.ts +15 -0
  21. package/dist/src/factories/metadataFactory/implementations/EigenLayer.js +11 -0
  22. package/dist/src/factories/metadataFactory/implementations/Encompassing.d.ts +15 -0
  23. package/dist/src/factories/metadataFactory/implementations/Encompassing.js +37 -0
  24. package/dist/src/factories/metadataFactory/implementations/Erc20.d.ts +15 -0
  25. package/dist/src/factories/metadataFactory/implementations/Erc20.js +71 -0
  26. package/dist/src/factories/metadataFactory/implementations/Erc20Snapshot.d.ts +14 -0
  27. package/dist/src/factories/metadataFactory/implementations/Erc20Snapshot.js +10 -0
  28. package/dist/src/factories/metadataFactory/implementations/Euler.d.ts +15 -0
  29. package/dist/src/factories/metadataFactory/implementations/Euler.js +34 -0
  30. package/dist/src/factories/metadataFactory/implementations/EventBased.d.ts +20 -0
  31. package/dist/src/factories/metadataFactory/implementations/EventBased.js +45 -0
  32. package/dist/src/factories/metadataFactory/implementations/Hyperdrive.d.ts +15 -0
  33. package/dist/src/factories/metadataFactory/implementations/Hyperdrive.js +21 -0
  34. package/dist/src/factories/metadataFactory/implementations/Invalid.d.ts +11 -0
  35. package/dist/src/factories/metadataFactory/implementations/Invalid.js +10 -0
  36. package/dist/src/factories/metadataFactory/implementations/Ion.d.ts +16 -0
  37. package/dist/src/factories/metadataFactory/implementations/Ion.js +15 -0
  38. package/dist/src/factories/metadataFactory/implementations/JsonAirdrop.d.ts +15 -0
  39. package/dist/src/factories/metadataFactory/implementations/JsonAirdrop.js +38 -0
  40. package/dist/src/factories/metadataFactory/implementations/Morpho.d.ts +15 -0
  41. package/dist/src/factories/metadataFactory/implementations/Morpho.js +21 -0
  42. package/dist/src/factories/metadataFactory/implementations/Radiant.d.ts +15 -0
  43. package/dist/src/factories/metadataFactory/implementations/Radiant.js +11 -0
  44. package/dist/src/factories/metadataFactory/implementations/Silo.d.ts +15 -0
  45. package/dist/src/factories/metadataFactory/implementations/Silo.js +15 -0
  46. package/dist/src/factories/metadataFactory/implementations/UniswapV4Metadata.d.ts +15 -0
  47. package/dist/src/factories/metadataFactory/implementations/UniswapV4Metadata.js +28 -0
  48. package/dist/src/factories/metadataFactory/implementations/Vest.d.ts +15 -0
  49. package/dist/src/factories/metadataFactory/implementations/Vest.js +12 -0
  50. package/dist/src/index.d.ts +1 -1
  51. package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +1 -1
  52. package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +0 -11
  53. package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +4 -4
  54. package/dist/src/modules/v4/opportunity/opportunity.service.js +10 -86
  55. package/dist/src/modules/v4/router.d.ts +1 -1
  56. package/dist/src/routes/v3/opportunity.d.ts +0 -14
  57. package/dist/src/routes/v3/opportunity.js +2 -43
  58. package/dist/tsconfig.package.tsbuildinfo +1 -1
  59. package/package.json +1 -1
  60. package/dist/src/entities/opportunity.d.ts +0 -22
  61. package/dist/src/entities/opportunity.js +0 -1073
  62. package/dist/src/modules/v4/opportunity/subservices/getAjnaMetadata.service.d.ts +0 -3
  63. package/dist/src/modules/v4/opportunity/subservices/getAjnaMetadata.service.js +0 -50
  64. package/dist/src/modules/v4/opportunity/subservices/getAmbientMetadata.service.d.ts +0 -3
  65. package/dist/src/modules/v4/opportunity/subservices/getAmbientMetadata.service.js +0 -29
  66. package/dist/src/modules/v4/opportunity/subservices/getBadgerMetadata.service.d.ts +0 -3
  67. package/dist/src/modules/v4/opportunity/subservices/getBadgerMetadata.service.js +0 -23
  68. package/dist/src/modules/v4/opportunity/subservices/getClammMetadata.service.d.ts +0 -3
  69. package/dist/src/modules/v4/opportunity/subservices/getClammMetadata.service.js +0 -48
  70. package/dist/src/modules/v4/opportunity/subservices/getCompoundMetadata.service.d.ts +0 -3
  71. package/dist/src/modules/v4/opportunity/subservices/getCompoundMetadata.service.js +0 -18
  72. package/dist/src/modules/v4/opportunity/subservices/getDolomiteMetadata.service.d.ts +0 -3
  73. package/dist/src/modules/v4/opportunity/subservices/getDolomiteMetadata.service.js +0 -15
  74. package/dist/src/modules/v4/opportunity/subservices/getEigenLayerMetadata.service.d.ts +0 -3
  75. package/dist/src/modules/v4/opportunity/subservices/getEigenLayerMetadata.service.js +0 -9
  76. package/dist/src/modules/v4/opportunity/subservices/getEncompassingMetadata.service.d.ts +0 -3
  77. package/dist/src/modules/v4/opportunity/subservices/getEncompassingMetadata.service.js +0 -35
  78. package/dist/src/modules/v4/opportunity/subservices/getErc20Metadata.service.d.ts +0 -5
  79. package/dist/src/modules/v4/opportunity/subservices/getErc20Metadata.service.js +0 -69
  80. package/dist/src/modules/v4/opportunity/subservices/getErc20SnapshotMetadata.service.d.ts +0 -3
  81. package/dist/src/modules/v4/opportunity/subservices/getErc20SnapshotMetadata.service.js +0 -8
  82. package/dist/src/modules/v4/opportunity/subservices/getEulerMetadata.service.d.ts +0 -3
  83. package/dist/src/modules/v4/opportunity/subservices/getEulerMetadata.service.js +0 -34
  84. package/dist/src/modules/v4/opportunity/subservices/getEventBasedMetadata.service.ts.d.ts +0 -3
  85. package/dist/src/modules/v4/opportunity/subservices/getEventBasedMetadata.service.ts.js +0 -43
  86. package/dist/src/modules/v4/opportunity/subservices/getHyperdriveMetadata.service.d.ts +0 -3
  87. package/dist/src/modules/v4/opportunity/subservices/getHyperdriveMetadata.service.js +0 -19
  88. package/dist/src/modules/v4/opportunity/subservices/getIonMetadata.service.d.ts +0 -3
  89. package/dist/src/modules/v4/opportunity/subservices/getIonMetadata.service.js +0 -13
  90. package/dist/src/modules/v4/opportunity/subservices/getJsonAirDropMetadata.service.d.ts +0 -3
  91. package/dist/src/modules/v4/opportunity/subservices/getJsonAirDropMetadata.service.js +0 -36
  92. package/dist/src/modules/v4/opportunity/subservices/getMorphoMetadata.service.d.ts +0 -3
  93. package/dist/src/modules/v4/opportunity/subservices/getMorphoMetadata.service.js +0 -19
  94. package/dist/src/modules/v4/opportunity/subservices/getRadiantMetadata.service.d.ts +0 -3
  95. package/dist/src/modules/v4/opportunity/subservices/getRadiantMetadata.service.js +0 -9
  96. package/dist/src/modules/v4/opportunity/subservices/getSiloMetadata.service.d.ts +0 -3
  97. package/dist/src/modules/v4/opportunity/subservices/getSiloMetadata.service.js +0 -13
  98. package/dist/src/modules/v4/opportunity/subservices/getUniswapV4Metadata.service.d.ts +0 -3
  99. package/dist/src/modules/v4/opportunity/subservices/getUniswapV4Metadata.service.js +0 -26
  100. package/dist/src/modules/v4/opportunity/subservices/getVestMetadata.service.d.ts +0 -3
  101. package/dist/src/modules/v4/opportunity/subservices/getVestMetadata.service.js +0 -10
@@ -1,1073 +0,0 @@
1
- import { getHyperdriveMetadata } from "../modules/v4/opportunity/subservices/getHyperdriveMetadata.service";
2
- import { AjnaSubCampaignType, BN2Number, Campaign, ChainId, CompFork, CompoundSubCampaignType, DolomiteSubCampaignType, EAprBreakdownType, EulerSubCampaignType, MorphoSubCampaignType, almName, ammName, } from "@sdk";
3
- import { activeCampaign, getApr, getCampaignsFor, getDailyRewards, getRewardTokenIcons, getRewardTokens, getStatus, getTags, inactiveCampaign, removeTestTokens, } from "./campaign";
4
- /**
5
- * @deprecated
6
- */
7
- export const extractOpportunities = {
8
- [Campaign.CLAMM]: ({ chainId, amm, mainParameter, tvl, campaignParameters: params, poolBalanceToken0, poolBalanceToken1, computeChainId, }, campaigns, prices) => {
9
- const { active, all } = campaigns;
10
- const pair = `${params.symbolToken0}-${params.symbolToken1}`;
11
- const tvlDetails = active.reduce((res, campaign) => {
12
- for (const forwarder of campaign?.forwarders ?? []) {
13
- const key = `${almName(forwarder.type)} ${forwarder.almAddress}`;
14
- if (!res[key])
15
- res[key] = {
16
- value: forwarder.almTVL,
17
- address: forwarder.almAddress,
18
- type: EAprBreakdownType.FORWARDER,
19
- label: forwarder.label.split(" ")[0],
20
- };
21
- }
22
- return res;
23
- }, {});
24
- // @Hugo wip: new way to structure aprBreakdowns
25
- const aprBreakdownByType = sumAprBreakdownsByType(campaigns.active);
26
- const campaignApr = getCampaignsApr(active);
27
- const aprBreakdown2 = [...aprBreakdownByType, ...campaignApr];
28
- const aprBreakdown = active.reduce((res, campaign) => {
29
- if (!campaign.aprs)
30
- return res;
31
- for (const key of Object.keys(campaign?.aprs)) {
32
- const forwarder = campaign.forwarders?.find(f => f.label.toLocaleLowerCase() === key.toLocaleLowerCase());
33
- if (!res[key])
34
- res[key] = { value: 0, address: null, type: EAprBreakdownType.DETAILS, label: "" };
35
- res[key].value += campaign.aprs[key];
36
- res[key].address = forwarder?.almAddress ?? res[key].address; // should put token address
37
- res[key].type =
38
- (forwarder ? EAprBreakdownType.FORWARDER : EAprBreakdownType.DETAILS) ?? EAprBreakdownType.DETAILS;
39
- }
40
- return res;
41
- }, {});
42
- const holdings = [
43
- { symbol: params.symbolToken0, amount: poolBalanceToken0 ?? 0 },
44
- { symbol: params.symbolToken1, amount: poolBalanceToken1 ?? 0 },
45
- ];
46
- let platform = ammName(amm ?? params.amm);
47
- let subCampaignTag = "";
48
- // @dev Migration to V4 done
49
- if (platform === "BaseSwap" && computeChainId === ChainId.MODE)
50
- platform = "SwapMode";
51
- if (platform === "BaseSwap" && computeChainId === ChainId.ARBITRUM)
52
- platform = "Arbidex";
53
- if (platform === "BaseSwap" && computeChainId === ChainId.OPTIMISM)
54
- platform = "SuperSwap";
55
- const restrictedToForwarders = params.whitelist.flatMap(addr => {
56
- const forwarders = campaigns.all.map(({ forwarders }) => forwarders?.find(({ almAddress, sender, owner }) => [almAddress, sender, owner].some(a => a?.toLowerCase() === addr?.toLowerCase())));
57
- // @dev Dropping in V4
58
- const forwarderExtraName = {
59
- [`34443-Steer-${"0xACb9a8676FC6ADa472611A62354BF47502969287".toLowerCase()}`]: "FLS",
60
- [`34443-Steer-${"0xc07df1D13188c081f770944ece48e469B326B2A5".toLowerCase()}`]: "EES v2",
61
- [`34443-Steer-${"0xC40D4D88aFC7B03C65391cBfB6F399f464F6aB03".toLowerCase()}`]: "CRS v2",
62
- [`34443-Steer-${"0xAC8C89516bC4b60621c5326446e33680357bB3D2".toLowerCase()}`]: "CRS v2",
63
- [`34443-Steer-${"0x23c17a512d486D6F46DB63A8Dd5144B352497762".toLowerCase()}`]: "CRS v2",
64
- };
65
- return forwarders
66
- .filter(f => f !== undefined)
67
- .map(({ type }) => `${almName(type)} ${forwarderExtraName[`${computeChainId}-${almName(type)}-${addr.toLowerCase()}`] ?? addr.slice(0, 7)}`);
68
- });
69
- if (restrictedToForwarders?.length === 1) {
70
- subCampaignTag = `on ${restrictedToForwarders[0]}`;
71
- }
72
- // @dev Migration to V4 done
73
- if (platform === "Izumi") {
74
- if (chainId === ChainId.ROOTSTOCK)
75
- platform = "WoodSwap";
76
- else
77
- platform = "iZUMi";
78
- }
79
- const opportunity = {
80
- id: `${Campaign.CLAMM}_${mainParameter}`,
81
- platform: platform,
82
- name: [platform, pair, params.poolFee && `${params.poolFee} %`, subCampaignTag]
83
- .join(" ")
84
- .replace("AlgebraV1_2", ""),
85
- chainId: !computeChainId ? chainId : computeChainId,
86
- distributionChainId: chainId,
87
- action: "pool",
88
- status: getStatus(all),
89
- tvlBreakdown: {
90
- tokens: holdings,
91
- details: tvlDetails,
92
- },
93
- aprBreakdown,
94
- aprBreakdown2,
95
- tvl: !!tvl ? tvl : holdings.reduce((prev, curr) => (prices[curr?.symbol] ?? 0) * curr?.amount + prev, 0),
96
- apr: getApr(active),
97
- tags: getTags(campaigns.all),
98
- dailyrewards: getDailyRewards(active, prices),
99
- tokenIcons: [params.symbolToken0, params.symbolToken1],
100
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
101
- dailyRewardTokens: getRewardTokens(campaigns.active),
102
- campaigns: { ...campaigns, type: Campaign.CLAMM, ids: campaigns.all.map(c => c.campaignId) },
103
- };
104
- return opportunity;
105
- },
106
- [Campaign.AMBIENTPROCESSOR]: ({ chainId, mainParameter, tvl, campaignParameters: params, poolBalanceToken0, poolBalanceToken1, computeChainId }, campaigns, prices) => {
107
- const { active, all } = campaigns;
108
- const pair = `${params.symbolBaseToken}-${params.symbolQuoteToken}`;
109
- const holdings = [
110
- { symbol: params.symbolBaseToken, amount: poolBalanceToken0 ?? 0 },
111
- { symbol: params.symbolQuoteToken, amount: poolBalanceToken1 ?? 0 },
112
- ];
113
- const platform = "Ambient";
114
- const opportunity = {
115
- id: `${Campaign.AMBIENTPROCESSOR}_${mainParameter}`,
116
- platform: platform,
117
- name: [platform, pair].join(" "),
118
- chainId: !computeChainId ? chainId : computeChainId,
119
- distributionChainId: chainId,
120
- action: "pool",
121
- tvlBreakdown: {
122
- tokens: holdings,
123
- },
124
- apr: getApr(active),
125
- status: getStatus(all),
126
- tags: getTags(campaigns.all),
127
- tvl: !!tvl ? tvl : holdings.reduce((prev, curr) => (prices[curr?.symbol] ?? 0) * curr?.amount + prev, 0),
128
- dailyrewards: getDailyRewards(active, prices),
129
- tokenIcons: [params.baseToken, params.quoteToken],
130
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
131
- dailyRewardTokens: getRewardTokens(campaigns.active),
132
- campaigns: {
133
- ...campaigns,
134
- type: Campaign.AMBIENTPROCESSOR,
135
- ids: campaigns.all.map(c => c.campaignId),
136
- },
137
- };
138
- return opportunity;
139
- },
140
- [Campaign.SILO]: ({ chainId, tvl, mainParameter, campaignSubType, campaignParameters: params, computeChainId }, campaigns, prices) => {
141
- const { active, all } = campaigns;
142
- let suffix = ["Deposit", "Protected Deposit", "Debt"][campaignSubType];
143
- if (all?.[0]?.campaignParameters?.forwarders.length === 1 &&
144
- all?.[0]?.campaignParameters?.forwarders[0].siloAssetSymbol) {
145
- suffix += ` (${all?.[0].campaignParameters.forwarders[0].siloAssetSymbol} Market)`;
146
- }
147
- const aprBreakdown = active.reduce((res, campaign) => {
148
- res[`Campaign ${campaign.campaignId.slice(0, 8)}`] = {
149
- value: campaign.apr ?? 0,
150
- address: campaign.campaignId,
151
- type: EAprBreakdownType.CAMPAIGN,
152
- };
153
- return res;
154
- }, {});
155
- // @Hugo WIP todo for aprBreakdown2
156
- const aprBreakdown2 = getCampaignsApr(active);
157
- const opportunity = {
158
- id: `${Campaign.SILO}_${mainParameter}`,
159
- platform: "Silo",
160
- name: ["Silo", params.symbolTargetToken, suffix].join(" "),
161
- chainId: !computeChainId ? chainId : computeChainId,
162
- distributionChainId: chainId,
163
- tvl,
164
- action: campaignSubType <= 1 ? "lend" : "borrow",
165
- subtype: campaignSubType,
166
- status: getStatus(all),
167
- tags: getTags(campaigns.all),
168
- dailyrewards: getDailyRewards(active, prices),
169
- tokenIcons: [params.symbolTargetToken],
170
- campaigns: { ...campaigns, type: Campaign.SILO, ids: campaigns.all.map(c => c.campaignId) },
171
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
172
- dailyRewardTokens: getRewardTokens(campaigns.active),
173
- apr: getApr(active),
174
- aprBreakdown,
175
- aprBreakdown2,
176
- };
177
- return opportunity;
178
- },
179
- [Campaign.RADIANT]: (campaign, campaigns, prices) => {
180
- const { chainId, tvl, campaignSubType, campaignParameters: params, computeChainId } = campaign;
181
- const { active, all } = campaigns;
182
- let icons = [params.symbolTargetToken];
183
- if (params.symbolTargetToken?.startsWith("r"))
184
- icons = [params.symbolTargetToken.slice("r".length)];
185
- if (params.symbolTargetToken?.startsWith("variableDebt"))
186
- icons = [params.symbolTargetToken.slice("variableDebt".length)];
187
- const aprBreakdown = active.reduce((res, campaign) => {
188
- res[`Campaign ${campaign.campaignId.slice(0, 8)}`] = {
189
- value: campaign.apr ?? 0,
190
- address: campaign.campaignId,
191
- type: EAprBreakdownType.DETAILS,
192
- };
193
- return res;
194
- }, {});
195
- // @Hugo WIP todo for aprBreakdown2
196
- const aprBreakdown2 = getCampaignsApr(active);
197
- const opportunity = {
198
- id: `${Campaign.RADIANT}_${campaign.mainParameter}`,
199
- platform: "Radiant",
200
- name: ["Radiant", params.symbolTargetToken].join(" "),
201
- chainId: !computeChainId ? chainId : computeChainId,
202
- distributionChainId: chainId,
203
- tvl,
204
- action: campaignSubType <= 1 ? "lend" : "borrow",
205
- subtype: campaignSubType,
206
- status: getStatus(all),
207
- tags: getTags(campaigns.all),
208
- dailyrewards: getDailyRewards(active, prices),
209
- tokenIcons: icons,
210
- campaigns: { ...campaigns, type: Campaign.RADIANT, ids: campaigns.all.map(c => c.campaignId) },
211
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
212
- dailyRewardTokens: getRewardTokens(campaigns.active),
213
- apr: getApr(active),
214
- aprBreakdown,
215
- aprBreakdown2,
216
- };
217
- return opportunity;
218
- },
219
- [Campaign.DOLOMITE]: (campaign, campaigns, prices) => {
220
- const { chainId, tvl, campaignSubType, campaignParameters: params, computeChainId } = campaign;
221
- const { active, all } = campaigns;
222
- const aprBreakdown = active.reduce((res, campaign) => {
223
- res[`Campaign ${campaign.campaignId.slice(0, 8)}`] = {
224
- value: campaign.apr ?? 0,
225
- address: campaign.campaignId,
226
- type: EAprBreakdownType.DETAILS,
227
- };
228
- return res;
229
- }, {});
230
- // @Hugo WIP todo for aprBreakdown2
231
- const aprBreakdown2 = getCampaignsApr(active);
232
- const opportunity = {
233
- id: `${Campaign.DOLOMITE}_${campaign.mainParameter}`,
234
- platform: "Dolomite",
235
- name: ["Dolomite", params.symbolTargetToken, " - ", DolomiteSubCampaignType[campaign.campaignSubType]].join(" "),
236
- chainId: !computeChainId ? chainId : computeChainId,
237
- distributionChainId: chainId,
238
- tvl,
239
- action: campaignSubType <= 1 ? "lend" : "borrow",
240
- subtype: campaignSubType,
241
- status: getStatus(all),
242
- tags: getTags(campaigns.all),
243
- dailyrewards: getDailyRewards(active, prices),
244
- tokenIcons: [params.symbolTargetToken],
245
- campaigns: { ...campaigns, type: Campaign.DOLOMITE, ids: campaigns.all.map(c => c.campaignId) },
246
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
247
- dailyRewardTokens: getRewardTokens(campaigns.active),
248
- apr: getApr(active),
249
- aprBreakdown,
250
- aprBreakdown2,
251
- };
252
- return opportunity;
253
- },
254
- [Campaign.ERC20]: (campaign, campaigns, prices) => {
255
- const { chainId, tvl, campaignParameters: params, typeInfo, computeChainId, mainParameter } = campaign;
256
- const { active, all } = campaigns;
257
- const opportunity = {
258
- id: `${Campaign.ERC20}_${mainParameter}`,
259
- platform: params.symbolTargetToken,
260
- name: typeInfo?.cardName,
261
- chainId: !computeChainId ? chainId : computeChainId,
262
- distributionChainId: chainId,
263
- tvl,
264
- action: typeInfo.action ? typeInfo.action.toLowerCase() : "hold",
265
- apr: getApr(active),
266
- status: getStatus(all),
267
- tags: getTags(campaigns.all),
268
- dailyrewards: getDailyRewards(active, prices),
269
- tokenIcons: typeInfo.icons,
270
- campaigns: { ...campaigns, type: Campaign.ERC20, ids: campaigns.all.map(c => c.campaignId) },
271
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
272
- dailyRewardTokens: getRewardTokens(campaigns.active),
273
- };
274
- return opportunity;
275
- },
276
- [Campaign.ERC20_SNAPSHOT]: ({ chainId, tvl, mainParameter, campaignParameters: params }, campaigns) => {
277
- const opportunity = {
278
- id: `${Campaign.ERC20_SNAPSHOT}_${mainParameter}`,
279
- name: ["Airdrop for", params.symbolTargetToken, "holders"].join(" "),
280
- chainId,
281
- tvl,
282
- action: "drop",
283
- tags: getTags(campaigns.all),
284
- status: getStatus(campaigns.all),
285
- tokenIcons: [params.symbolTargetToken],
286
- campaigns: { ...campaigns, type: Campaign.ERC20_SNAPSHOT, ids: campaigns.all.map(c => c.campaignId) },
287
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
288
- dailyRewardTokens: getRewardTokens(campaigns.active),
289
- };
290
- return opportunity;
291
- },
292
- [Campaign.JSON_AIRDROP]: ({ chainId, creator, mainParameter, campaignParameters: params }, campaigns) => {
293
- const ACI = "0xdeadD8aB03075b7FBA81864202a2f59EE25B312b".toLowerCase();
294
- const aaveDAO = "0x5300A1a15135EA4dc7aD5a167152C01EFc9b192A".toLowerCase();
295
- const aciPrefix = creator.toLowerCase() === ACI && "Aave Merit Rewards -";
296
- const aavePrefix = creator.toLowerCase() === aaveDAO && "Aave - aAMPL distribution -";
297
- const prefix = aavePrefix ? aavePrefix : aciPrefix ? aciPrefix : "Airdrop in";
298
- const opportunity = {
299
- id: `${Campaign.JSON_AIRDROP}_${mainParameter}`,
300
- name: [prefix, params.symbolRewardToken].join(" "),
301
- chainId,
302
- action: "drop",
303
- status: getStatus(campaigns.all),
304
- tags: getTags(campaigns.all),
305
- tokenIcons: [params.symbolRewardToken],
306
- campaigns: { ...campaigns, type: Campaign.JSON_AIRDROP, ids: campaigns.all.map(c => c.campaignId) },
307
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
308
- dailyRewardTokens: getRewardTokens(campaigns.active),
309
- };
310
- return opportunity;
311
- },
312
- [Campaign.MORPHO]: ({ chainId, tvl, mainParameter, campaignSubType, campaignParameters: params, computeChainId }, campaigns, prices) => {
313
- const { active, all } = campaigns;
314
- const suffix = ["Meta", "Supply", "Borrow", "Collateral"][campaignSubType];
315
- const opportunity = {
316
- id: `${Campaign.MORPHO}_${mainParameter}`,
317
- platform: "Morpho",
318
- name: campaignSubType === MorphoSubCampaignType.META
319
- ? ["MetaMorpho", params.nameTargetToken].join(" ")
320
- : campaignSubType === MorphoSubCampaignType.BORROWING_BLUE ||
321
- campaignSubType === MorphoSubCampaignType.SUPPLY_BLUE
322
- ? [
323
- "Morpho - ",
324
- suffix,
325
- `${params.symbolLoanToken} on ${params.symbolLoanToken}/${params.symbolBorrowToken}`,
326
- `${BN2Number(params.LLTV, 16)}%`,
327
- ].join(" ")
328
- : [
329
- "Morpho - ",
330
- suffix,
331
- `${params.symbolBorrowToken} on ${params.symbolLoanToken}/${params.symbolBorrowToken}`,
332
- `${BN2Number(params.LLTV, 16)}%`,
333
- ].join(" "),
334
- chainId: !computeChainId ? chainId : computeChainId,
335
- distributionChainId: chainId,
336
- tvl,
337
- action: campaignSubType !== 2 ? "lend" : "borrow",
338
- subtype: campaignSubType,
339
- status: getStatus(all),
340
- tags: getTags(campaigns.all),
341
- dailyrewards: getDailyRewards(active, prices),
342
- tokenIcons: [params.symbolTargetToken],
343
- campaigns: { ...campaigns, type: Campaign.MORPHO, ids: campaigns.all.map(c => c.campaignId) },
344
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
345
- dailyRewardTokens: getRewardTokens(campaigns.active),
346
- apr: getApr(active),
347
- };
348
- return opportunity;
349
- },
350
- [Campaign.BADGER]: (campaign, campaigns, prices) => {
351
- const { chainId, tvl, campaignParameters: params, computeChainId } = campaign;
352
- const { active, all } = campaigns;
353
- const aprBreakdown = active.reduce((res, campaign) => {
354
- res[`Campaign ${campaign.campaignId.slice(0, 8)}`] = {
355
- value: campaign.apr ?? 0,
356
- address: campaign.campaignId,
357
- type: EAprBreakdownType.DETAILS,
358
- };
359
- return res;
360
- }, {});
361
- // @Hugo WIP todo for aprBreakdown2
362
- const aprBreakdown2 = getCampaignsApr(active);
363
- const opportunity = {
364
- id: `${Campaign.BADGER}_${campaign.mainParameter}`,
365
- platform: "Badger",
366
- name: ["Badger", "Borrow", params.symbolTargetToken].join(" "),
367
- chainId: !computeChainId ? chainId : computeChainId,
368
- distributionChainId: chainId,
369
- tvl,
370
- action: "borrow",
371
- subtype: 0,
372
- status: getStatus(all),
373
- tags: getTags(campaigns.all),
374
- dailyrewards: getDailyRewards(active, prices),
375
- tokenIcons: [params.symbolTargetToken],
376
- campaigns: { ...campaigns, type: Campaign.BADGER, ids: campaigns.all.map(c => c.campaignId) },
377
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
378
- dailyRewardTokens: getRewardTokens(campaigns.active),
379
- apr: getApr(active),
380
- aprBreakdown,
381
- aprBreakdown2,
382
- };
383
- return opportunity;
384
- },
385
- [Campaign.EIGENLAYER]: (campaign, campaigns, prices) => {
386
- const { chainId, tvl, campaignParameters: params, computeChainId } = campaign;
387
- const { active, all } = campaigns;
388
- const aprBreakdown = active.reduce((res, campaign) => {
389
- res[`Campaign ${campaign.campaignId.slice(0, 8)}`] = {
390
- value: campaign.apr ?? 0,
391
- address: campaign.campaignId,
392
- type: EAprBreakdownType.DETAILS,
393
- };
394
- return res;
395
- }, {});
396
- // @Hugo WIP todo for aprBreakdown2
397
- const aprBreakdown2 = getCampaignsApr(active);
398
- const opportunity = {
399
- id: `${Campaign.EIGENLAYER}_${campaign.mainParameter}`,
400
- platform: "EigenLayer strategy",
401
- name: ["EigenLayer", "strategy for", params.symbolUnderlyingToken].join(" "),
402
- chainId: !computeChainId ? chainId : computeChainId,
403
- distributionChainId: chainId,
404
- tvl,
405
- action: "lend",
406
- subtype: 0,
407
- status: getStatus(all),
408
- tags: getTags(campaigns.all),
409
- dailyrewards: getDailyRewards(active, prices),
410
- tokenIcons: [params.symbolUnderlyingToken],
411
- campaigns: { ...campaigns, type: Campaign.EIGENLAYER, ids: campaigns.all.map(c => c.campaignId) },
412
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
413
- dailyRewardTokens: getRewardTokens(campaigns.active),
414
- apr: getApr(active),
415
- aprBreakdown,
416
- aprBreakdown2,
417
- };
418
- return opportunity;
419
- },
420
- [Campaign.VEST]: (campaign, campaigns, prices) => {
421
- const { chainId, tvl, campaignParameters: params, computeChainId } = campaign;
422
- const { active, all } = campaigns;
423
- const aprBreakdown = active.reduce((res, campaign) => {
424
- res[`Campaign ${campaign.campaignId.slice(0, 8)}`] = {
425
- value: campaign.apr ?? 0,
426
- address: campaign.campaignId,
427
- type: EAprBreakdownType.DETAILS,
428
- };
429
- return res;
430
- }, {});
431
- // @Hugo WIP todo for aprBreakdown2
432
- const aprBreakdown2 = getCampaignsApr(active);
433
- const opportunity = {
434
- id: `${Campaign.VEST}_${campaign.mainParameter}`,
435
- platform: "Vest supply",
436
- name: ["Supply USDC.e on Vest"].join(" "),
437
- chainId: !computeChainId ? chainId : computeChainId,
438
- distributionChainId: chainId,
439
- tvl,
440
- action: "lend",
441
- subtype: 0,
442
- status: getStatus(all),
443
- tags: getTags(campaigns.all),
444
- dailyrewards: getDailyRewards(active, prices),
445
- tokenIcons: ["0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4"],
446
- campaigns: { ...campaigns, type: Campaign.VEST, ids: campaigns.all.map(c => c.campaignId) },
447
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
448
- dailyRewardTokens: getRewardTokens(campaigns.active),
449
- apr: getApr(active),
450
- aprBreakdown,
451
- aprBreakdown2,
452
- };
453
- return opportunity;
454
- },
455
- [Campaign.AJNA]: (campaign, campaigns, prices) => {
456
- const { chainId, tvl, campaignSubType, campaignParameters: params, computeChainId } = campaign;
457
- const { active, all } = campaigns;
458
- const aprBreakdown = active.reduce((res, campaign) => {
459
- res[`Campaign ${campaign.campaignId.slice(0, 8)}`] = {
460
- value: campaign.apr ?? 0,
461
- address: campaign.campaignId,
462
- type: EAprBreakdownType.DETAILS,
463
- };
464
- return res;
465
- }, {});
466
- // @Hugo WIP todo for aprBreakdown2
467
- const aprBreakdown2 = getCampaignsApr(active);
468
- const opportunity = {
469
- id: `${Campaign.AJNA}_${campaign.mainParameter}`,
470
- platform: "Ajna",
471
- name: [
472
- "AJNA",
473
- params.subCampaignType === AjnaSubCampaignType.lend
474
- ? `Supply ${params.symbolQuoteToken} on `
475
- : `Borrow ${params.symbolQuoteToken} on`,
476
- params.symbolCollateralToken,
477
- " / ",
478
- params.symbolQuoteToken,
479
- ].join(" "),
480
- chainId: !computeChainId ? chainId : computeChainId,
481
- distributionChainId: chainId,
482
- tvl,
483
- action: campaignSubType === AjnaSubCampaignType.lend ? "lend" : "borrow",
484
- subtype: campaignSubType,
485
- status: getStatus(all),
486
- tags: getTags(campaigns.all),
487
- dailyrewards: getDailyRewards(active, prices),
488
- tokenIcons: [params.symbolQuoteToken, params.symbolCollateralToken],
489
- campaigns: { ...campaigns, type: Campaign.AJNA, ids: campaigns.all.map(c => c.campaignId) },
490
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
491
- dailyRewardTokens: getRewardTokens(campaigns.active),
492
- apr: getApr(active),
493
- aprBreakdown,
494
- aprBreakdown2,
495
- };
496
- return opportunity;
497
- },
498
- [Campaign.EULER]: (campaign, campaigns, prices) => {
499
- const { chainId, tvl, campaignSubType, campaignParameters: params, computeChainId } = campaign;
500
- const { active, all } = campaigns;
501
- const aprBreakdown = active.reduce((res, campaign) => {
502
- res[`Campaign ${campaign.campaignId.slice(0, 8)}`] = {
503
- value: campaign.apr ?? 0,
504
- address: campaign.campaignId,
505
- type: EAprBreakdownType.DETAILS,
506
- };
507
- return res;
508
- }, {});
509
- // @Hugo WIP todo for aprBreakdown2
510
- const aprBreakdown2 = getCampaignsApr(active);
511
- const opportunity = {
512
- id: `${Campaign.EULER}_${campaign.mainParameter}`,
513
- platform: "Euler",
514
- name: campaign.typeInfo.cardName,
515
- chainId: computeChainId ?? chainId,
516
- distributionChainId: chainId,
517
- tvl,
518
- action: campaignSubType === EulerSubCampaignType.LEND ? "lend" : "borrow",
519
- subtype: campaignSubType,
520
- status: getStatus(all),
521
- tags: getTags(campaigns.all),
522
- dailyrewards: getDailyRewards(active, prices),
523
- tokenIcons: [params.symbolAsset],
524
- campaigns: { ...campaigns, type: Campaign.EULER, ids: campaigns.all.map(c => c.campaignId) },
525
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
526
- dailyRewardTokens: getRewardTokens(campaigns.active),
527
- apr: getApr(active),
528
- aprBreakdown,
529
- aprBreakdown2,
530
- };
531
- return opportunity;
532
- },
533
- [Campaign.COMPOUND]: (campaign, campaigns, prices) => {
534
- const { chainId, tvl, campaignSubType, campaignParameters: params, computeChainId } = campaign;
535
- const { active, all } = campaigns;
536
- const aprBreakdown = active.reduce((res, campaign) => {
537
- res[`Campaign ${campaign.campaignId.slice(0, 8)}`] = {
538
- value: campaign.apr ?? 0,
539
- address: campaign.campaignId,
540
- type: EAprBreakdownType.DETAILS,
541
- };
542
- return res;
543
- }, {});
544
- // @Hugo WIP todo for aprBreakdown2
545
- const aprBreakdown2 = getCampaignsApr(active);
546
- const opportunity = {
547
- id: `${Campaign.COMPOUND}_${campaign.mainParameter}`,
548
- platform: CompFork[campaign.campaignParameters.compFork],
549
- name: [
550
- params.subCampaignType === CompoundSubCampaignType.supply
551
- ? `Supply ${params.symbolUnderlyingToken} on`
552
- : `Borrow ${params.symbolUnderlyingToken} on`,
553
- CompFork[params.compFork],
554
- ].join(" "),
555
- chainId: !computeChainId ? chainId : computeChainId,
556
- distributionChainId: chainId,
557
- tvl,
558
- action: campaignSubType === CompoundSubCampaignType.supply ? "lend" : "borrow",
559
- subtype: campaignSubType,
560
- status: getStatus(all),
561
- tags: getTags(campaigns.all),
562
- dailyrewards: getDailyRewards(active, prices),
563
- tokenIcons: [params.symbolUnderlyingToken],
564
- campaigns: { ...campaigns, type: Campaign.COMPOUND, ids: campaigns.all.map(c => c.campaignId) },
565
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
566
- dailyRewardTokens: getRewardTokens(campaigns.active),
567
- apr: getApr(active),
568
- aprBreakdown,
569
- aprBreakdown2,
570
- };
571
- return opportunity;
572
- },
573
- [Campaign.ERC20LOGPROCESSOR]: (campaign, campaigns, prices) => {
574
- const { chainId, tvl, campaignParameters: params, typeInfo, computeChainId, mainParameter } = campaign;
575
- const { active, all } = campaigns;
576
- /**
577
- * @deprecated
578
- */
579
- const map = {
580
- actions: {
581
- pool: [
582
- "uniswapv2",
583
- "velodrome",
584
- "aerodrome",
585
- "balancerGauge",
586
- "balancerPool",
587
- "curve",
588
- "aura",
589
- "akron",
590
- "beefy",
591
- "dragonswap",
592
- "poolside",
593
- "koi",
594
- "pancakeswap",
595
- "tempest",
596
- "cross_curve",
597
- "zkswap",
598
- "maverickBoostedPosition",
599
- "zkSwapThreePool",
600
- "syncswap",
601
- "rfx",
602
- ],
603
- borrow: ["radiant_borrow", "aave_borrowing", "euler_borrow", "zerolend_borrowing", "vicuna_borrowing"],
604
- lend: [
605
- "gearbox",
606
- "compound",
607
- "radiant_lend",
608
- "aave_lending",
609
- "vicuna_lending",
610
- "sturdy_aggregator",
611
- "sturdy_silo",
612
- "fraxlend",
613
- "moonwell",
614
- "ionic",
615
- "fluid",
616
- "silostaking",
617
- "euler_lend",
618
- "layerbank",
619
- "zerolend_lending",
620
- "venus",
621
- "reactor_fusion",
622
- "woofi",
623
- ],
624
- },
625
- icons: {
626
- pool: () => {
627
- if (["balancerGauge", "balancerPool"].includes(campaign.type ?? ""))
628
- return Object.values(typeInfo.poolTokens ?? {})
629
- .map(tkn => tkn?.symbol)
630
- .filter(tkn => tkn);
631
- if (["curve"].includes(campaign.type ?? ""))
632
- return Object.values(typeInfo.poolTokens ?? {}).filter(tkn => tkn);
633
- if (["rfx"].includes(campaign.type ?? "")) {
634
- return [typeInfo.symbolShortToken, typeInfo.symbolLongToken];
635
- }
636
- if (["maverickBoostedPosition"].includes(campaign.type ?? "")) {
637
- return [typeInfo.symbolTokenA, typeInfo.symbolTokenB];
638
- }
639
- return [typeInfo.symbolToken0, typeInfo.symbolToken1];
640
- },
641
- lend: () => (campaign.type === "compound" ? [typeInfo.symbolBaseToken] : [typeInfo.symbolUnderlyingToken]),
642
- borrow: () => [typeInfo.symbolUnderlyingToken],
643
- hold: () => {
644
- if (["toros", "enzyme"].includes(campaign.type))
645
- return [typeInfo.symbolUnderlyingToken];
646
- return [campaign.campaignParameters.symbolTargetToken];
647
- },
648
- },
649
- };
650
- const action = Object.entries(map.actions).find(([_action, _types]) => _types.includes(campaign.type ?? ""))?.[0] ?? "hold";
651
- const icons = map.icons[action]();
652
- const opportunity = {
653
- id: `${Campaign.ERC20}_${mainParameter}`,
654
- platform: params.symbolTargetToken,
655
- name: typeInfo?.cardName,
656
- chainId: !computeChainId ? chainId : computeChainId,
657
- distributionChainId: chainId,
658
- tvl,
659
- action,
660
- apr: getApr(active),
661
- status: getStatus(all),
662
- tags: getTags(campaigns.all),
663
- dailyrewards: getDailyRewards(active, prices),
664
- tokenIcons: icons,
665
- campaigns: { ...campaigns, type: Campaign.ERC20, ids: campaigns.all.map(c => c.campaignId) },
666
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
667
- dailyRewardTokens: getRewardTokens(campaigns.active),
668
- };
669
- return opportunity;
670
- },
671
- [Campaign.ERC20REBASELOGPROCESSOR]: (campaign, campaigns, prices) => {
672
- const { chainId, tvl, campaignParameters: params, typeInfo, computeChainId, mainParameter } = campaign;
673
- const { active, all } = campaigns;
674
- /**
675
- * @deprecated
676
- */
677
- const map = {
678
- actions: {
679
- pool: [
680
- "uniswapv2",
681
- "velodrome",
682
- "aerodrome",
683
- "balancerGauge",
684
- "balancerPool",
685
- "curve",
686
- "aura",
687
- "akron",
688
- "beefy",
689
- "dragonswap",
690
- "poolside",
691
- "koi",
692
- "pancakeswap",
693
- "tempest",
694
- "cross_curve",
695
- "zkswap",
696
- "maverickBoostedPosition",
697
- "zkSwapThreePool",
698
- "syncswap",
699
- "rfx",
700
- ],
701
- borrow: [
702
- "radiant_borrow",
703
- "aave_borrowing",
704
- "euler_borrow",
705
- "zerolend_borrowing",
706
- "takotako_borrowing",
707
- "lendle_borrowing",
708
- "vicuna_borrowing",
709
- ],
710
- lend: [
711
- "gearbox",
712
- "compound",
713
- "radiant_lend",
714
- "aave_lending",
715
- "vicuna_lending",
716
- "sturdy_aggregator",
717
- "sturdy_silo",
718
- "fraxlend",
719
- "moonwell",
720
- "ionic",
721
- "fluid",
722
- "silostaking",
723
- "euler_lend",
724
- "layerbank",
725
- "zerolend_lending",
726
- "venus",
727
- "reactor_fusion",
728
- "woofi",
729
- "takotako_lending",
730
- "lendle_lending",
731
- ],
732
- },
733
- icons: {
734
- pool: () => {
735
- if (["balancerGauge", "balancerPool"].includes(campaign.type ?? ""))
736
- return Object.values(typeInfo.poolTokens ?? {})
737
- .map(tkn => tkn?.symbol)
738
- .filter(tkn => tkn);
739
- if (["curve"].includes(campaign.type ?? ""))
740
- return Object.values(typeInfo.poolTokens ?? {}).filter(tkn => tkn);
741
- if (["rfx"].includes(campaign.type ?? "")) {
742
- return [typeInfo.symbolShortToken, typeInfo.symbolLongToken];
743
- }
744
- if (["maverickBoostedPosition"].includes(campaign.type ?? "")) {
745
- return [typeInfo.symbolTokenA, typeInfo.symbolTokenB];
746
- }
747
- return [typeInfo.symbolToken0, typeInfo.symbolToken1];
748
- },
749
- lend: () => (campaign.type === "compound" ? [typeInfo.symbolBaseToken] : [typeInfo.symbolUnderlyingToken]),
750
- borrow: () => [typeInfo.symbolUnderlyingToken],
751
- hold: () => {
752
- if (["toros", "enzyme"].includes(campaign.type))
753
- return [typeInfo.symbolUnderlyingToken];
754
- return [campaign.campaignParameters.symbolTargetToken];
755
- },
756
- },
757
- };
758
- const action = Object.entries(map.actions).find(([_action, _types]) => _types.includes(campaign.type ?? ""))?.[0] ?? "hold";
759
- const icons = map.icons[action]();
760
- const opportunity = {
761
- id: `${Campaign.ERC20}_${mainParameter}`,
762
- platform: params.symbolTargetToken,
763
- name: typeInfo?.cardName,
764
- chainId: !computeChainId ? chainId : computeChainId,
765
- distributionChainId: chainId,
766
- tvl,
767
- action,
768
- apr: getApr(active),
769
- status: getStatus(all),
770
- tags: getTags(campaigns.all),
771
- dailyrewards: getDailyRewards(active, prices),
772
- tokenIcons: icons,
773
- campaigns: { ...campaigns, type: Campaign.ERC20, ids: campaigns.all.map(c => c.campaignId) },
774
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
775
- dailyRewardTokens: getRewardTokens(campaigns.active),
776
- };
777
- return opportunity;
778
- },
779
- [Campaign.ERC20_FIX_APR]: (campaign, campaigns, prices) => {
780
- const { chainId, tvl, campaignParameters: params, typeInfo, computeChainId, mainParameter } = campaign;
781
- const { active, all } = campaigns;
782
- /**
783
- * @deprecated
784
- */
785
- const map = {
786
- actions: {
787
- pool: [
788
- "uniswapv2",
789
- "velodrome",
790
- "aerodrome",
791
- "balancerGauge",
792
- "balancerPool",
793
- "curve",
794
- "aura",
795
- "akron",
796
- "beefy",
797
- "dragonswap",
798
- "poolside",
799
- "koi",
800
- "pancakeswap",
801
- "tempest",
802
- "cross_curve",
803
- "zkswap",
804
- "maverickBoostedPosition",
805
- "zkSwapThreePool",
806
- "syncswap",
807
- "rfx",
808
- ],
809
- borrow: ["radiant_borrow", "aave_borrowing", "euler_borrow", "zerolend_borrowing"],
810
- lend: [
811
- "gearbox",
812
- "compound",
813
- "radiant_lend",
814
- "aave_lending",
815
- "sturdy_aggregator",
816
- "sturdy_silo",
817
- "fraxlend",
818
- "moonwell",
819
- "ionic",
820
- "fluid",
821
- "silostaking",
822
- "euler_lend",
823
- "layerbank",
824
- "zerolend_lending",
825
- "venus",
826
- "reactor_fusion",
827
- "woofi",
828
- ],
829
- },
830
- icons: {
831
- pool: () => {
832
- if (["balancerGauge", "balancerPool"].includes(campaign.type ?? ""))
833
- return Object.values(typeInfo.poolTokens ?? {})
834
- .map(tkn => tkn?.symbol)
835
- .filter(tkn => tkn);
836
- if (["curve"].includes(campaign.type ?? ""))
837
- return Object.values(typeInfo.poolTokens ?? {}).filter(tkn => tkn);
838
- if (["rfx"].includes(campaign.type ?? "")) {
839
- return [typeInfo.symbolShortToken, typeInfo.symbolLongToken];
840
- }
841
- if (["maverickBoostedPosition"].includes(campaign.type ?? "")) {
842
- return [typeInfo.symbolTokenA, typeInfo.symbolTokenB];
843
- }
844
- return [typeInfo.symbolToken0, typeInfo.symbolToken1];
845
- },
846
- lend: () => (campaign.type === "compound" ? [typeInfo.symbolBaseToken] : [typeInfo.symbolUnderlyingToken]),
847
- borrow: () => [typeInfo.symbolUnderlyingToken],
848
- hold: () => {
849
- if (["toros", "enzyme"].includes(campaign.type))
850
- return [typeInfo.symbolUnderlyingToken];
851
- return [campaign.campaignParameters.symbolTargetToken];
852
- },
853
- },
854
- };
855
- const action = Object.entries(map.actions).find(([_action, _types]) => _types.includes(campaign.type ?? ""))?.[0] ?? "hold";
856
- const icons = map.icons[action]();
857
- const opportunity = {
858
- id: `${Campaign.ERC20}_${mainParameter}`,
859
- platform: params.symbolTargetToken,
860
- name: typeInfo?.cardName,
861
- chainId: !computeChainId ? chainId : computeChainId,
862
- distributionChainId: chainId,
863
- tvl,
864
- action,
865
- apr: getApr(active),
866
- status: getStatus(all),
867
- tags: getTags(campaigns.all),
868
- dailyrewards: getDailyRewards(active, prices),
869
- tokenIcons: icons,
870
- campaigns: { ...campaigns, type: Campaign.ERC20, ids: campaigns.all.map(c => c.campaignId) },
871
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
872
- dailyRewardTokens: getRewardTokens(campaigns.active),
873
- };
874
- return opportunity;
875
- },
876
- [Campaign.HYPERDRIVELOGFIXPROCESSOR]: (campaign, campaigns, prices) => {
877
- const { chainId, tvl, campaignSubType, campaignParameters: params, computeChainId } = campaign;
878
- const { active, all } = campaigns;
879
- const metadata = getHyperdriveMetadata(chainId, campaign.campaignSubType, campaign.campaignParameters);
880
- const aprBreakdown = active.reduce((res, campaign) => {
881
- res[`Campaign ${campaign.campaignId.slice(0, 8)}`] = {
882
- value: campaign.apr ?? 0,
883
- address: campaign.campaignId,
884
- type: EAprBreakdownType.DETAILS,
885
- };
886
- return res;
887
- }, {});
888
- const aprBreakdown2 = getCampaignsApr(active);
889
- const opportunity = {
890
- id: `${Campaign.HYPERDRIVELOGFIXPROCESSOR}_${campaign.mainParameter}`,
891
- platform: "Hyperdrive",
892
- name: metadata.name,
893
- chainId: !computeChainId ? chainId : computeChainId,
894
- distributionChainId: chainId,
895
- tvl,
896
- action: metadata.action?.toLowerCase(),
897
- subtype: campaignSubType,
898
- status: getStatus(all),
899
- tags: getTags(campaigns.all),
900
- dailyrewards: getDailyRewards(active, prices),
901
- tokenIcons: ["HYPERDRIVE"],
902
- campaigns: { ...campaigns, type: Campaign.HYPERDRIVELOGFIXPROCESSOR, ids: campaigns.all.map(c => c.campaignId) },
903
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
904
- dailyRewardTokens: getRewardTokens(campaigns.active),
905
- apr: getApr(active),
906
- aprBreakdown,
907
- aprBreakdown2,
908
- };
909
- return opportunity;
910
- },
911
- [Campaign.HYPERDRIVELOGPROCESSOR]: (campaign, campaigns, prices) => {
912
- const { chainId, tvl, campaignSubType, campaignParameters: params, computeChainId } = campaign;
913
- const { active, all } = campaigns;
914
- const metadata = getHyperdriveMetadata(chainId, campaign.campaignSubType, campaign.campaignParameters);
915
- const aprBreakdown = active.reduce((res, campaign) => {
916
- res[`Campaign ${campaign.campaignId.slice(0, 8)}`] = {
917
- value: campaign.apr ?? 0,
918
- address: campaign.campaignId,
919
- type: EAprBreakdownType.DETAILS,
920
- };
921
- return res;
922
- }, {});
923
- const aprBreakdown2 = getCampaignsApr(active);
924
- const opportunity = {
925
- id: `${Campaign.HYPERDRIVELOGPROCESSOR}_${campaign.mainParameter}`,
926
- platform: "Hyperdrive",
927
- name: metadata.name,
928
- chainId: !computeChainId ? chainId : computeChainId,
929
- distributionChainId: chainId,
930
- tvl,
931
- action: metadata.action?.toLowerCase(),
932
- subtype: campaignSubType,
933
- status: getStatus(all),
934
- tags: getTags(campaigns.all),
935
- dailyrewards: getDailyRewards(active, prices),
936
- tokenIcons: ["HYPERDRIVE"],
937
- campaigns: { ...campaigns, type: Campaign.HYPERDRIVELOGPROCESSOR, ids: campaigns.all.map(c => c.campaignId) },
938
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
939
- dailyRewardTokens: getRewardTokens(campaigns.active),
940
- apr: getApr(active),
941
- aprBreakdown,
942
- aprBreakdown2,
943
- };
944
- return opportunity;
945
- },
946
- [Campaign.UNISWAP_V4]: ({ chainId, mainParameter, tvl, campaignParameters: params, poolBalanceToken0, poolBalanceToken1, computeChainId }, campaigns, prices) => {
947
- const { active, all } = campaigns;
948
- const pair = `${params.symbolCurrency0}-${params.symbolCurrency1}`;
949
- // const tvlDetails = active.reduce(
950
- // (res, campaign) => {
951
- // for (const forwarder of campaign?.forwarders ?? []) {
952
- // const key = `${almName(forwarder.type)} ${forwarder.almAddress}`;
953
- // if (!res[key])
954
- // res[key] = {
955
- // value: forwarder.almTVL,
956
- // address: forwarder.almAddress,
957
- // type: EAprBreakdownType.FORWARDER,
958
- // label: forwarder.label.split(" ")[0],
959
- // };
960
- // }
961
- // return res;
962
- // },
963
- // {} as { [key: string]: tvlBreakdown }
964
- // );
965
- // // @Hugo wip: new way to structure aprBreakdowns
966
- // const aprBreakdownByType = sumAprBreakdownsByType(campaigns.active);
967
- // const campaignApr = getCampaignsApr<Campaign.CLAMM>(active);
968
- // const aprBreakdown2 = [...aprBreakdownByType, ...campaignApr];
969
- const aprBreakdown = active.reduce((res, campaign) => {
970
- if (!campaign.aprs)
971
- return res;
972
- return res;
973
- }, {});
974
- const holdings = [
975
- { symbol: params.symbolCurrency0, amount: poolBalanceToken0 ?? 0 },
976
- { symbol: params.symbolCurrency1, amount: poolBalanceToken1 ?? 0 },
977
- ];
978
- const platform = "UniswapV4";
979
- const opportunity = {
980
- id: `${Campaign.UNISWAP_V4}_${mainParameter}`,
981
- platform,
982
- name: [platform, pair, params.lpFee && `${params.lpFee / 10_000} %`].join(" "),
983
- chainId: computeChainId ?? chainId,
984
- distributionChainId: chainId,
985
- action: "pool",
986
- status: getStatus(all),
987
- tvlBreakdown: {
988
- tokens: holdings,
989
- details: {},
990
- },
991
- aprBreakdown,
992
- aprBreakdown2: {},
993
- tvl: !!tvl ? tvl : holdings.reduce((prev, curr) => (prices[curr?.symbol] ?? 0) * curr?.amount + prev, 0),
994
- apr: getApr(active),
995
- tags: getTags(campaigns.all),
996
- dailyrewards: getDailyRewards(active, prices),
997
- tokenIcons: [params.symbolCurrency0, params.symbolCurrency1],
998
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
999
- dailyRewardTokens: getRewardTokens(campaigns.active),
1000
- campaigns: { ...campaigns, type: Campaign.UNISWAP_V4, ids: campaigns.all.map(c => c.campaignId) },
1001
- };
1002
- return opportunity;
1003
- },
1004
- [Campaign.ENCOMPASSING]: ({ chainId, mainParameter, campaignParameters: params, tvl, apr, opportunityName }, campaigns) => {
1005
- const opportunity = {
1006
- id: `${Campaign.ENCOMPASSING}_${mainParameter}`,
1007
- name: opportunityName ?? ["Distribution of", params.symbolRewardToken].join(" "),
1008
- chainId,
1009
- action: "drop",
1010
- status: getStatus(campaigns.all),
1011
- tags: getTags(campaigns.all),
1012
- tokenIcons: [params.symbolRewardToken],
1013
- campaigns: { ...campaigns, type: Campaign.ENCOMPASSING, ids: campaigns.all.map(c => c.campaignId) },
1014
- rewardTokenIcons: getRewardTokenIcons(campaigns.active),
1015
- dailyRewardTokens: getRewardTokens(campaigns.active),
1016
- tvl,
1017
- apr,
1018
- };
1019
- return opportunity;
1020
- },
1021
- };
1022
- /**
1023
- * @returns the opportunities map with their corresponding campaign's data added
1024
- */
1025
- export async function fillCampaigns(opportunities, onlyCampaignIds, showTest) {
1026
- const [includedChainIds, includedTypes] = Object.values(opportunities).reduce(([chains, types], { chainId, campaigns: oppCampaigns }) => [
1027
- chains.add(chainId),
1028
- types.add(Number.parseInt(oppCampaigns?.type ?? "0")),
1029
- ], [new Set(), new Set()]);
1030
- const campaigns = await getCampaignsFor(Array.from(includedChainIds), {
1031
- onlyLive: false,
1032
- types: Array.from(includedTypes),
1033
- });
1034
- for (const [id, opportunity] of Object.entries(opportunities)) {
1035
- const matchingCampaigns = Object.entries(campaigns?.[opportunity.chainId] ?? {}).find(([_id]) => _id?.toLowerCase() === id?.toLowerCase());
1036
- const opportunityCampaigns = Object.values(matchingCampaigns?.[1] ?? {}).filter(campaign => {
1037
- if (!showTest)
1038
- return removeTestTokens(campaign);
1039
- return true;
1040
- });
1041
- opportunities[id].campaigns.ids = opportunityCampaigns?.map(({ campaignId }) => campaignId).filter(c => c);
1042
- opportunities[id].campaigns.active = opportunityCampaigns?.filter(activeCampaign) ?? [];
1043
- opportunities[id].campaigns.inactive = opportunityCampaigns?.filter(inactiveCampaign) ?? [];
1044
- }
1045
- return opportunities;
1046
- }
1047
- function sumAprBreakdownsByType(campaigns) {
1048
- const map = new Map();
1049
- let specificAprTypes = [];
1050
- campaigns.forEach(campaign => {
1051
- campaign.aprBreakdowns?.forEach(breakdown => {
1052
- if (breakdown.type === EAprBreakdownType.FORWARDER)
1053
- return;
1054
- const existing = map.get(breakdown.type);
1055
- if (existing)
1056
- existing.value += breakdown.value;
1057
- else {
1058
- map.set(breakdown.type, breakdown);
1059
- }
1060
- });
1061
- specificAprTypes = campaign.aprBreakdowns?.filter(breakdown => breakdown.type === EAprBreakdownType.FORWARDER);
1062
- });
1063
- // Convert the map to an array of AprBreakdown
1064
- return Array.from(map.values()).concat(specificAprTypes);
1065
- }
1066
- function getCampaignsApr(active) {
1067
- return active.map(campaign => ({
1068
- value: campaign.apr ?? 0,
1069
- address: campaign.campaignId,
1070
- type: EAprBreakdownType.CAMPAIGN,
1071
- label: `Campaign ${campaign.campaignId.slice(0, 8)}`,
1072
- }));
1073
- }