@merkl/api 0.10.210 → 0.10.211
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.
- package/dist/database/api/seeder/resources/protocol.d.ts +15 -0
- package/dist/database/api/seeder/resources/protocol.js +15 -1
- package/dist/src/eden/index.d.ts +192 -0
- package/dist/src/entities/opportunity.js +2 -1
- package/dist/src/index.d.ts +74 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType.d.ts +2 -1
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType.js +4 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/curveNPoolProcessor.d.ts +39 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/curveNPoolProcessor.js +81 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/processorMapping.js +2 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1.js +2 -0
- package/dist/src/modules/v4/campaign/campaign.model.d.ts +2 -0
- package/dist/src/modules/v4/campaign/campaign.model.js +2 -0
- package/dist/src/modules/v4/dynamicData/dynamicData.controller.d.ts +1 -0
- package/dist/src/modules/v4/dynamicData/dynamicData.service.d.ts +1 -0
- package/dist/src/modules/v4/dynamicData/dynamicData.service.js +1 -0
- package/dist/src/modules/v4/opportunity/opportunity.service.js +3 -0
- package/dist/src/modules/v4/opportunity/subservices/getEigenLayerMetadata.service.d.ts +3 -0
- package/dist/src/modules/v4/opportunity/subservices/getEigenLayerMetadata.service.js +9 -0
- package/dist/src/modules/v4/programPayload/index.d.ts +3 -0
- package/dist/src/modules/v4/programPayload/index.js +3 -0
- package/dist/src/modules/v4/programPayload/programPayload.controller.d.ts +93 -0
- package/dist/src/modules/v4/programPayload/programPayload.controller.js +38 -0
- package/dist/src/modules/v4/programPayload/programPayload.model.d.ts +122 -0
- package/dist/src/modules/v4/programPayload/programPayload.model.js +130 -0
- package/dist/src/modules/v4/programPayload/programPayload.repository.d.ts +39 -0
- package/dist/src/modules/v4/programPayload/programPayload.repository.js +359 -0
- package/dist/src/modules/v4/programPayload/programPayload.service.d.ts +8 -0
- package/dist/src/modules/v4/programPayload/programPayload.service.js +92 -0
- package/dist/src/modules/v4/router.d.ts +74 -0
- package/dist/src/modules/v4/router.js +3 -1
- package/dist/src/utils/decodeCalls.js +5 -3
- package/dist/src/utils/encodeCalls.js +11 -13
- package/dist/src/utils/generateCardName.js +2 -0
- package/dist/tsconfig.package.tsbuildinfo +1 -1
- package/package.json +1 -1
@@ -341,6 +341,7 @@ declare const _default: {
|
|
341
341
|
readonly id: "eigenlayer";
|
342
342
|
readonly name: "EigenLayer";
|
343
343
|
readonly icon: string;
|
344
|
+
readonly tags: ["LENDING"];
|
344
345
|
readonly url: "";
|
345
346
|
};
|
346
347
|
readonly ajna: {
|
@@ -361,5 +362,19 @@ declare const _default: {
|
|
361
362
|
readonly icon: string;
|
362
363
|
readonly url: "";
|
363
364
|
};
|
365
|
+
readonly zkswap: {
|
366
|
+
readonly id: "zkswap";
|
367
|
+
readonly name: "ZKSwap";
|
368
|
+
readonly tags: ["DEX"];
|
369
|
+
readonly icon: string;
|
370
|
+
readonly url: "";
|
371
|
+
};
|
372
|
+
readonly thirdtrade: {
|
373
|
+
readonly id: "thirdtrade";
|
374
|
+
readonly name: "ThirdTrade";
|
375
|
+
readonly tags: ["DEX"];
|
376
|
+
readonly icon: string;
|
377
|
+
readonly url: "";
|
378
|
+
};
|
364
379
|
};
|
365
380
|
export default _default;
|
@@ -326,7 +326,7 @@ export default {
|
|
326
326
|
},
|
327
327
|
badger: { id: "badger", name: "Badger", icon: bucket("badger.svg"), url: "" },
|
328
328
|
ion: { id: "ion", name: "Ion", icon: bucket("ion.svg"), url: "" },
|
329
|
-
eigenlayer: { id: "eigenlayer", name: "EigenLayer", icon: bucket("eigenlayer.svg"), url: "" },
|
329
|
+
eigenlayer: { id: "eigenlayer", name: "EigenLayer", icon: bucket("eigenlayer.svg"), tags: ["LENDING"], url: "" },
|
330
330
|
ajna: { id: "ajna", name: "Ajna", icon: bucket("ajna.svg"), url: "" },
|
331
331
|
layerbank: {
|
332
332
|
id: "layerbank",
|
@@ -340,4 +340,18 @@ export default {
|
|
340
340
|
icon: bucket("subswap.svg"),
|
341
341
|
url: "",
|
342
342
|
},
|
343
|
+
zkswap: {
|
344
|
+
id: "zkswap",
|
345
|
+
name: "ZKSwap",
|
346
|
+
tags: ["DEX"],
|
347
|
+
icon: bucket("zkswap.svg"),
|
348
|
+
url: "",
|
349
|
+
},
|
350
|
+
thirdtrade: {
|
351
|
+
id: "thirdtrade",
|
352
|
+
name: "ThirdTrade",
|
353
|
+
tags: ["DEX"],
|
354
|
+
icon: bucket("thirdtrade.svg"),
|
355
|
+
url: "",
|
356
|
+
},
|
343
357
|
};
|
package/dist/src/eden/index.d.ts
CHANGED
@@ -1975,6 +1975,7 @@ declare const eden: {
|
|
1975
1975
|
cardName: string;
|
1976
1976
|
blacklistedSupply: number;
|
1977
1977
|
priceTargetToken: number;
|
1978
|
+
type: string;
|
1978
1979
|
};
|
1979
1980
|
}>>;
|
1980
1981
|
};
|
@@ -2092,6 +2093,64 @@ declare const eden: {
|
|
2092
2093
|
})[];
|
2093
2094
|
}>>;
|
2094
2095
|
}) & {};
|
2096
|
+
"program-payload": {
|
2097
|
+
index: {
|
2098
|
+
get: (options: {
|
2099
|
+
headers?: Record<string, unknown> | undefined;
|
2100
|
+
query: {
|
2101
|
+
creator: string;
|
2102
|
+
startTimestamp: number;
|
2103
|
+
endTimestamp: number;
|
2104
|
+
campaign: string;
|
2105
|
+
distributionChainId: number;
|
2106
|
+
amount: string;
|
2107
|
+
rewardToken: string;
|
2108
|
+
program: string;
|
2109
|
+
};
|
2110
|
+
fetch?: RequestInit | undefined;
|
2111
|
+
}) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
|
2112
|
+
[x: string]: any;
|
2113
|
+
200: any;
|
2114
|
+
}>>;
|
2115
|
+
};
|
2116
|
+
config: {
|
2117
|
+
get: (options: {
|
2118
|
+
headers?: Record<string, unknown> | undefined;
|
2119
|
+
query: {
|
2120
|
+
creator: string;
|
2121
|
+
startTimestamp: number;
|
2122
|
+
endTimestamp: number;
|
2123
|
+
campaign: string;
|
2124
|
+
distributionChainId: number;
|
2125
|
+
amount: string;
|
2126
|
+
rewardToken: string;
|
2127
|
+
program: string;
|
2128
|
+
};
|
2129
|
+
fetch?: RequestInit | undefined;
|
2130
|
+
}) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
|
2131
|
+
[x: string]: any;
|
2132
|
+
200: any;
|
2133
|
+
}>>;
|
2134
|
+
};
|
2135
|
+
program: {
|
2136
|
+
get: (options: {
|
2137
|
+
headers?: Record<string, unknown> | undefined;
|
2138
|
+
query: {
|
2139
|
+
creator: string;
|
2140
|
+
startTimestamp: number;
|
2141
|
+
endTimestamp: number;
|
2142
|
+
distributionChainId: number;
|
2143
|
+
amount: string;
|
2144
|
+
rewardToken: string;
|
2145
|
+
program: string;
|
2146
|
+
};
|
2147
|
+
fetch?: RequestInit | undefined;
|
2148
|
+
}) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
|
2149
|
+
[x: string]: any;
|
2150
|
+
200: any;
|
2151
|
+
}>>;
|
2152
|
+
};
|
2153
|
+
};
|
2095
2154
|
};
|
2096
2155
|
v3: {
|
2097
2156
|
app: {
|
@@ -5129,6 +5188,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
5129
5188
|
cardName: string;
|
5130
5189
|
blacklistedSupply: number;
|
5131
5190
|
priceTargetToken: number;
|
5191
|
+
type: string;
|
5132
5192
|
};
|
5133
5193
|
};
|
5134
5194
|
};
|
@@ -5284,6 +5344,79 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
5284
5344
|
};
|
5285
5345
|
};
|
5286
5346
|
};
|
5347
|
+
} & {
|
5348
|
+
v4: {
|
5349
|
+
"program-payload": {
|
5350
|
+
index: {
|
5351
|
+
get: {
|
5352
|
+
body: unknown;
|
5353
|
+
params: {};
|
5354
|
+
query: {
|
5355
|
+
creator: string;
|
5356
|
+
startTimestamp: number;
|
5357
|
+
endTimestamp: number;
|
5358
|
+
campaign: string;
|
5359
|
+
distributionChainId: number;
|
5360
|
+
amount: string;
|
5361
|
+
rewardToken: string;
|
5362
|
+
program: string;
|
5363
|
+
};
|
5364
|
+
headers: unknown;
|
5365
|
+
response: {
|
5366
|
+
[x: string]: any;
|
5367
|
+
200: any;
|
5368
|
+
};
|
5369
|
+
};
|
5370
|
+
};
|
5371
|
+
};
|
5372
|
+
} & {
|
5373
|
+
"program-payload": {
|
5374
|
+
config: {
|
5375
|
+
get: {
|
5376
|
+
body: unknown;
|
5377
|
+
params: {};
|
5378
|
+
query: {
|
5379
|
+
creator: string;
|
5380
|
+
startTimestamp: number;
|
5381
|
+
endTimestamp: number;
|
5382
|
+
campaign: string;
|
5383
|
+
distributionChainId: number;
|
5384
|
+
amount: string;
|
5385
|
+
rewardToken: string;
|
5386
|
+
program: string;
|
5387
|
+
};
|
5388
|
+
headers: unknown;
|
5389
|
+
response: {
|
5390
|
+
[x: string]: any;
|
5391
|
+
200: any;
|
5392
|
+
};
|
5393
|
+
};
|
5394
|
+
};
|
5395
|
+
};
|
5396
|
+
} & {
|
5397
|
+
"program-payload": {
|
5398
|
+
program: {
|
5399
|
+
get: {
|
5400
|
+
body: unknown;
|
5401
|
+
params: {};
|
5402
|
+
query: {
|
5403
|
+
creator: string;
|
5404
|
+
startTimestamp: number;
|
5405
|
+
endTimestamp: number;
|
5406
|
+
distributionChainId: number;
|
5407
|
+
amount: string;
|
5408
|
+
rewardToken: string;
|
5409
|
+
program: string;
|
5410
|
+
};
|
5411
|
+
headers: unknown;
|
5412
|
+
response: {
|
5413
|
+
[x: string]: any;
|
5414
|
+
200: any;
|
5415
|
+
};
|
5416
|
+
};
|
5417
|
+
};
|
5418
|
+
};
|
5419
|
+
};
|
5287
5420
|
} & {
|
5288
5421
|
v3: {
|
5289
5422
|
app: {
|
@@ -8018,6 +8151,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
8018
8151
|
cardName: string;
|
8019
8152
|
blacklistedSupply: number;
|
8020
8153
|
priceTargetToken: number;
|
8154
|
+
type: string;
|
8021
8155
|
};
|
8022
8156
|
}>>;
|
8023
8157
|
};
|
@@ -8135,6 +8269,64 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
8135
8269
|
})[];
|
8136
8270
|
}>>;
|
8137
8271
|
}) & {};
|
8272
|
+
"program-payload": {
|
8273
|
+
index: {
|
8274
|
+
get: (options: {
|
8275
|
+
headers?: Record<string, unknown> | undefined;
|
8276
|
+
query: {
|
8277
|
+
creator: string;
|
8278
|
+
startTimestamp: number;
|
8279
|
+
endTimestamp: number;
|
8280
|
+
campaign: string;
|
8281
|
+
distributionChainId: number;
|
8282
|
+
amount: string;
|
8283
|
+
rewardToken: string;
|
8284
|
+
program: string;
|
8285
|
+
};
|
8286
|
+
fetch?: RequestInit | undefined;
|
8287
|
+
}) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
|
8288
|
+
[x: string]: any;
|
8289
|
+
200: any;
|
8290
|
+
}>>;
|
8291
|
+
};
|
8292
|
+
config: {
|
8293
|
+
get: (options: {
|
8294
|
+
headers?: Record<string, unknown> | undefined;
|
8295
|
+
query: {
|
8296
|
+
creator: string;
|
8297
|
+
startTimestamp: number;
|
8298
|
+
endTimestamp: number;
|
8299
|
+
campaign: string;
|
8300
|
+
distributionChainId: number;
|
8301
|
+
amount: string;
|
8302
|
+
rewardToken: string;
|
8303
|
+
program: string;
|
8304
|
+
};
|
8305
|
+
fetch?: RequestInit | undefined;
|
8306
|
+
}) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
|
8307
|
+
[x: string]: any;
|
8308
|
+
200: any;
|
8309
|
+
}>>;
|
8310
|
+
};
|
8311
|
+
program: {
|
8312
|
+
get: (options: {
|
8313
|
+
headers?: Record<string, unknown> | undefined;
|
8314
|
+
query: {
|
8315
|
+
creator: string;
|
8316
|
+
startTimestamp: number;
|
8317
|
+
endTimestamp: number;
|
8318
|
+
distributionChainId: number;
|
8319
|
+
amount: string;
|
8320
|
+
rewardToken: string;
|
8321
|
+
program: string;
|
8322
|
+
};
|
8323
|
+
fetch?: RequestInit | undefined;
|
8324
|
+
}) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
|
8325
|
+
[x: string]: any;
|
8326
|
+
200: any;
|
8327
|
+
}>>;
|
8328
|
+
};
|
8329
|
+
};
|
8138
8330
|
};
|
8139
8331
|
v3: {
|
8140
8332
|
app: {
|
@@ -211,6 +211,7 @@ export const extractOpportunities = {
|
|
211
211
|
"koi",
|
212
212
|
"pancakeswap",
|
213
213
|
"tempest",
|
214
|
+
"cross_curve",
|
214
215
|
],
|
215
216
|
borrow: ["radiant_borrow", "aave_borrowing", "euler_borrow"],
|
216
217
|
lend: [
|
@@ -394,7 +395,7 @@ export const extractOpportunities = {
|
|
394
395
|
const opportunity = {
|
395
396
|
id: `${Campaign.EIGENLAYER}_${campaign.mainParameter}`,
|
396
397
|
platform: "EigenLayer strategy",
|
397
|
-
name: ["EigenLayer", "strategy", params.symbolUnderlyingToken].join(" "),
|
398
|
+
name: ["EigenLayer", "strategy for", params.symbolUnderlyingToken].join(" "),
|
398
399
|
chainId: !computeChainId ? chainId : computeChainId,
|
399
400
|
distributionChainId: chainId,
|
400
401
|
tvl,
|
package/dist/src/index.d.ts
CHANGED
@@ -2453,6 +2453,7 @@ declare const app: Elysia<"", false, {
|
|
2453
2453
|
cardName: string;
|
2454
2454
|
blacklistedSupply: number;
|
2455
2455
|
priceTargetToken: number;
|
2456
|
+
type: string;
|
2456
2457
|
};
|
2457
2458
|
};
|
2458
2459
|
};
|
@@ -2608,6 +2609,79 @@ declare const app: Elysia<"", false, {
|
|
2608
2609
|
};
|
2609
2610
|
};
|
2610
2611
|
};
|
2612
|
+
} & {
|
2613
|
+
v4: {
|
2614
|
+
"program-payload": {
|
2615
|
+
index: {
|
2616
|
+
get: {
|
2617
|
+
body: unknown;
|
2618
|
+
params: {};
|
2619
|
+
query: {
|
2620
|
+
creator: string;
|
2621
|
+
startTimestamp: number;
|
2622
|
+
endTimestamp: number;
|
2623
|
+
campaign: string;
|
2624
|
+
distributionChainId: number;
|
2625
|
+
amount: string;
|
2626
|
+
rewardToken: string;
|
2627
|
+
program: string;
|
2628
|
+
};
|
2629
|
+
headers: unknown;
|
2630
|
+
response: {
|
2631
|
+
[x: string]: any;
|
2632
|
+
200: any;
|
2633
|
+
};
|
2634
|
+
};
|
2635
|
+
};
|
2636
|
+
};
|
2637
|
+
} & {
|
2638
|
+
"program-payload": {
|
2639
|
+
config: {
|
2640
|
+
get: {
|
2641
|
+
body: unknown;
|
2642
|
+
params: {};
|
2643
|
+
query: {
|
2644
|
+
creator: string;
|
2645
|
+
startTimestamp: number;
|
2646
|
+
endTimestamp: number;
|
2647
|
+
campaign: string;
|
2648
|
+
distributionChainId: number;
|
2649
|
+
amount: string;
|
2650
|
+
rewardToken: string;
|
2651
|
+
program: string;
|
2652
|
+
};
|
2653
|
+
headers: unknown;
|
2654
|
+
response: {
|
2655
|
+
[x: string]: any;
|
2656
|
+
200: any;
|
2657
|
+
};
|
2658
|
+
};
|
2659
|
+
};
|
2660
|
+
};
|
2661
|
+
} & {
|
2662
|
+
"program-payload": {
|
2663
|
+
program: {
|
2664
|
+
get: {
|
2665
|
+
body: unknown;
|
2666
|
+
params: {};
|
2667
|
+
query: {
|
2668
|
+
creator: string;
|
2669
|
+
startTimestamp: number;
|
2670
|
+
endTimestamp: number;
|
2671
|
+
distributionChainId: number;
|
2672
|
+
amount: string;
|
2673
|
+
rewardToken: string;
|
2674
|
+
program: string;
|
2675
|
+
};
|
2676
|
+
headers: unknown;
|
2677
|
+
response: {
|
2678
|
+
[x: string]: any;
|
2679
|
+
200: any;
|
2680
|
+
};
|
2681
|
+
};
|
2682
|
+
};
|
2683
|
+
};
|
2684
|
+
};
|
2611
2685
|
} & {
|
2612
2686
|
v3: {
|
2613
2687
|
app: {
|
@@ -60,7 +60,8 @@ export declare enum tokenType {
|
|
60
60
|
holdstation = "holdstation",
|
61
61
|
staking = "staking",
|
62
62
|
noLinkVault = "noLinkVault",
|
63
|
-
cpmmGamma = "cpmmGamma"
|
63
|
+
cpmmGamma = "cpmmGamma",
|
64
|
+
crosscurve = "crosscurve"
|
64
65
|
}
|
65
66
|
export declare const tokenTypeToProtocol: {
|
66
67
|
[key in tokenType]: {
|
@@ -62,6 +62,7 @@ export var tokenType;
|
|
62
62
|
tokenType["staking"] = "staking";
|
63
63
|
tokenType["noLinkVault"] = "noLinkVault";
|
64
64
|
tokenType["cpmmGamma"] = "cpmmGamma";
|
65
|
+
tokenType["crosscurve"] = "crosscurve";
|
65
66
|
})(tokenType || (tokenType = {}));
|
66
67
|
export const tokenTypeToProtocol = {
|
67
68
|
[tokenType.aave_borrowing]: { protocol: "Aave" },
|
@@ -151,4 +152,7 @@ export const tokenTypeToProtocol = {
|
|
151
152
|
[tokenType.cpmmGamma]: {
|
152
153
|
protocol: "GammaSwap",
|
153
154
|
},
|
155
|
+
[tokenType.crosscurve]: {
|
156
|
+
protocol: "CrossCurve",
|
157
|
+
},
|
154
158
|
};
|
package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/curveNPoolProcessor.d.ts
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
import type { Pricer } from "../../../../../utils/pricer";
|
2
|
+
import { type Campaign, type CampaignParameters } from "@sdk";
|
3
|
+
import type { tokenType, tokenTypeStruct } from "../helpers/tokenType";
|
4
|
+
import { GenericProcessor, type dataType, type mandatoryCallKeys } from "./GenericProcessor";
|
5
|
+
type callType = {
|
6
|
+
key: keyof dataRawCurveN;
|
7
|
+
call: string;
|
8
|
+
target: keyof callKeysCurveN;
|
9
|
+
metaData?: keyof callKeysCurveN | string;
|
10
|
+
optional?: boolean;
|
11
|
+
};
|
12
|
+
type callKeysCurveN = mandatoryCallKeys & {
|
13
|
+
[key: `token${number}`]: string;
|
14
|
+
[key: `symbolToken${number}`]: string;
|
15
|
+
[key: `decimalsToken${number}`]: string;
|
16
|
+
[key: `balanceToken${number}`]: string;
|
17
|
+
[key: `${number}`]: string;
|
18
|
+
name: string;
|
19
|
+
};
|
20
|
+
type dataRawCurveN = callKeysCurveN & {
|
21
|
+
numberTokens: number;
|
22
|
+
};
|
23
|
+
type dataTypeCurveN = dataType & {
|
24
|
+
numberTokens: number;
|
25
|
+
};
|
26
|
+
export declare class CurveNPoolProcessor extends GenericProcessor<callKeysCurveN, dataRawCurveN, dataTypeCurveN> {
|
27
|
+
rounds: {
|
28
|
+
round1: callType[];
|
29
|
+
round2: callType[];
|
30
|
+
round3: callType[];
|
31
|
+
round4: callType[];
|
32
|
+
};
|
33
|
+
processingRound2(typeInfo: dataRawCurveN): void;
|
34
|
+
processingRound3(typeInfo: dataRawCurveN): void;
|
35
|
+
computeRound3(index: number, type: tokenType, typeInfo: dataRawCurveN, calls: string[]): tokenTypeStruct;
|
36
|
+
computeRound4(index: number, type: tokenType, typeInfo: dataRawCurveN, calls: string[], campaign: CampaignParameters<Campaign.ERC20> | CampaignParameters<Campaign.EULER>): tokenTypeStruct;
|
37
|
+
processingRound5(_index: number, type: tokenType, typeInfo: dataRawCurveN, _calls: string[], campaign: CampaignParameters<Campaign.ERC20> | CampaignParameters<Campaign.EULER>, pricer: Pricer): Promise<dataTypeCurveN>;
|
38
|
+
}
|
39
|
+
export {};
|
@@ -0,0 +1,81 @@
|
|
1
|
+
import { generateCardName } from "../../../../../utils/generateCardName";
|
2
|
+
import { BN2Number } from "@sdk";
|
3
|
+
import { GenericProcessor } from "./GenericProcessor";
|
4
|
+
export class CurveNPoolProcessor extends GenericProcessor {
|
5
|
+
rounds = {
|
6
|
+
round1: [{ key: "numberTokens", call: "N_COINS", target: "tokenAddress" }],
|
7
|
+
round2: [],
|
8
|
+
round3: [],
|
9
|
+
round4: [{ key: "totalSupply", call: "totalSupply", target: "tokenAddress" }],
|
10
|
+
};
|
11
|
+
// override computeRound1(): void {}
|
12
|
+
processingRound2(typeInfo) {
|
13
|
+
typeInfo.numberTokens = Number(typeInfo.numberTokens);
|
14
|
+
for (let i = 0; i < typeInfo.numberTokens; i++) {
|
15
|
+
typeInfo[`${i}`] = i.toString();
|
16
|
+
this.rounds.round2 = this.rounds.round2.concat([
|
17
|
+
{ key: `token${i}`, call: "coins", target: "tokenAddress", metaData: i.toString() },
|
18
|
+
]);
|
19
|
+
}
|
20
|
+
}
|
21
|
+
processingRound3(typeInfo) {
|
22
|
+
for (let i = 0; i < typeInfo.numberTokens; i++) {
|
23
|
+
this.rounds.round3 = this.rounds.round3.concat([
|
24
|
+
{ key: `symbolToken${i}`, call: "symbol", target: `token${i}` },
|
25
|
+
{ key: `decimalsToken${i}`, call: "decimals", target: `token${i}` },
|
26
|
+
{ key: `balanceToken${i}`, call: "balances", target: "tokenAddress", metaData: i.toString() },
|
27
|
+
]);
|
28
|
+
}
|
29
|
+
}
|
30
|
+
computeRound3(index, type, typeInfo, calls) {
|
31
|
+
for (let i = 0; i < typeInfo.numberTokens; i++) {
|
32
|
+
this.rounds.round2 = this.rounds.round2.concat([
|
33
|
+
{ key: `token${i}`, call: "coins", target: "tokenAddress", metaData: i.toString() },
|
34
|
+
]);
|
35
|
+
}
|
36
|
+
return super.computeRound3(index, type, typeInfo, calls);
|
37
|
+
}
|
38
|
+
computeRound4(index, type, typeInfo, calls, campaign) {
|
39
|
+
for (let i = 0; i < typeInfo.numberTokens; i++) {
|
40
|
+
this.rounds.round3 = this.rounds.round3.concat([
|
41
|
+
{ key: `symbolToken${i}`, call: "symbol", target: `token${i}` },
|
42
|
+
{ key: `decimalsToken${i}`, call: "decimals", target: `token${i}` },
|
43
|
+
{ key: `balanceToken${i}`, call: "balances", target: "tokenAddress", metaData: i.toString() },
|
44
|
+
]);
|
45
|
+
}
|
46
|
+
return super.computeRound4(index, type, typeInfo, calls, campaign);
|
47
|
+
}
|
48
|
+
async processingRound5(_index, type, typeInfo, _calls, campaign, pricer) {
|
49
|
+
const { whitelistedSupplyTargetToken, totalSupply, blacklistedSupply } = this.handleWhiteListBlacklistRound5(typeInfo, campaign);
|
50
|
+
let tvl = 0;
|
51
|
+
// Hardocded in case we don't find it
|
52
|
+
let hardcodedSymbol = "unknown";
|
53
|
+
if (typeInfo.name.includes("BTC"))
|
54
|
+
hardcodedSymbol = "BTC";
|
55
|
+
if (typeInfo.name.includes("ETH"))
|
56
|
+
hardcodedSymbol = "ETH";
|
57
|
+
if (typeInfo.name.includes("STABLE"))
|
58
|
+
hardcodedSymbol = "USDC";
|
59
|
+
for (let i = 0; i < typeInfo.numberTokens; i++) {
|
60
|
+
const symbol = typeInfo[`symbolToken${i}`];
|
61
|
+
const parsedSymbol = symbol.split("_")[0].slice(1);
|
62
|
+
let price = (await pricer.get({ symbol: parsedSymbol })) ?? 0;
|
63
|
+
if (price === 0) {
|
64
|
+
price = (await pricer.get({ symbol: hardcodedSymbol })) ?? 0;
|
65
|
+
}
|
66
|
+
const decimals = Number(typeInfo[`decimalsToken${i}`]);
|
67
|
+
const amount = BN2Number(typeInfo[`balanceToken${i}`], decimals);
|
68
|
+
tvl += amount * price;
|
69
|
+
}
|
70
|
+
const priceTargetToken = tvl / totalSupply;
|
71
|
+
return {
|
72
|
+
...typeInfo,
|
73
|
+
totalSupply,
|
74
|
+
tvl,
|
75
|
+
whitelistedSupplyTargetToken,
|
76
|
+
blacklistedSupply,
|
77
|
+
priceTargetToken,
|
78
|
+
cardName: generateCardName(type, typeInfo, campaign),
|
79
|
+
};
|
80
|
+
}
|
81
|
+
}
|
@@ -30,6 +30,7 @@ import { TorosProcessor } from "./TorosProcessor";
|
|
30
30
|
import { UniswapProcessor } from "./UniswapProcessor";
|
31
31
|
import { WoofiProcessor } from "./WoofiProcessor";
|
32
32
|
import { ZkSwapThreePoolProcessor } from "./ZkSwapThreePoolProcessor";
|
33
|
+
import { CurveNPoolProcessor } from "./curveNPoolProcessor";
|
33
34
|
import { CurveProcessor } from "./curveProcessor";
|
34
35
|
import { StakedCurveProcessor } from "./stakedCurveProcessor";
|
35
36
|
export const processorMapping = {
|
@@ -72,6 +73,7 @@ export const processorMapping = {
|
|
72
73
|
[tokenType.filament]: FluidProcessor,
|
73
74
|
[tokenType.enzyme]: EnzymeProcessor,
|
74
75
|
[tokenType.curve_2]: CurveProcessor,
|
76
|
+
[tokenType.crosscurve]: CurveNPoolProcessor,
|
75
77
|
[tokenType.fenix]: UniswapProcessor,
|
76
78
|
[tokenType.euler_lend]: EulerLendProcessor,
|
77
79
|
[tokenType.euler_borrow]: EulerBorrowProcessor,
|
@@ -44,6 +44,8 @@ function satisfiesNameConditions(name, type) {
|
|
44
44
|
lowerCaseName === "ezeth/wfrxeth" ||
|
45
45
|
lowerCaseName === "pufeth/wsteth" ||
|
46
46
|
lowerCaseName === "hai/lusd");
|
47
|
+
case tokenType.crosscurve:
|
48
|
+
return lowerCaseName.startsWith("crosscurve");
|
47
49
|
case tokenType.silostaking:
|
48
50
|
return lowerCaseName === "isei";
|
49
51
|
case tokenType.beefy:
|
@@ -33,6 +33,8 @@ export declare const campaignTypeToEnumMap: {
|
|
33
33
|
readonly SILO: any;
|
34
34
|
readonly JSON_AIRDROP: any;
|
35
35
|
readonly UNISWAP_V4: any;
|
36
|
+
readonly EIGENLAYER: any;
|
37
|
+
readonly ION: any;
|
36
38
|
};
|
37
39
|
export type ConvertedCampaignType<C extends CampaignType> = (typeof campaignTypeToEnumMap)[C];
|
38
40
|
export declare const CampaignUniqueDto: import("@sinclair/typebox").TObject<{
|
@@ -20,6 +20,8 @@ export const campaignTypeToEnumMap = {
|
|
20
20
|
SILO: CampaignTypeEnum.SILO,
|
21
21
|
JSON_AIRDROP: CampaignTypeEnum.JSON_AIRDROP,
|
22
22
|
UNISWAP_V4: CampaignTypeEnum.UNISWAP_V4,
|
23
|
+
EIGENLAYER: CampaignTypeEnum.EIGENLAYER,
|
24
|
+
ION: CampaignTypeEnum.ION,
|
23
25
|
};
|
24
26
|
// ─── DTOs ────────────────────────────────────────────────────────────────────
|
25
27
|
export const CampaignUniqueDto = t.Object({
|
@@ -12,6 +12,7 @@ import { getBadgerMetadata } from "./subservices/getBadgerMetadata.service";
|
|
12
12
|
import { getClammMetadata } from "./subservices/getClammMetadata.service";
|
13
13
|
import { getCompoundMetadata } from "./subservices/getCompoundMetadata.service";
|
14
14
|
import { getDolomiteMetadata } from "./subservices/getDolomiteMetadata.service";
|
15
|
+
import { getEigenLayerMetadata } from "./subservices/getEigenLayerMetadata.service";
|
15
16
|
import { getErc20Metadata } from "./subservices/getErc20Metadata.service";
|
16
17
|
import { getErc20SnapshotMetadata } from "./subservices/getErc20SnapshotMetadata.service";
|
17
18
|
import { getEulerMetadata } from "./subservices/getEulerMetadata.service";
|
@@ -64,6 +65,8 @@ export class OpportunityService {
|
|
64
65
|
return getCompoundMetadata(chainId, campaign.subType, campaignParams);
|
65
66
|
case "AJNA":
|
66
67
|
return getAjnaMetadata(chainId, campaign.subType, campaignParams);
|
68
|
+
case "EIGENLAYER":
|
69
|
+
return getEigenLayerMetadata(chainId, campaignParams);
|
67
70
|
case "EULER":
|
68
71
|
return getEulerMetadata(chainId, campaign.campaignId, campaign.subType, campaign.rewardTokenAddress, campaign.amount, campaignParams);
|
69
72
|
case "INVALID":
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { OpportunityAction } from "../../../../../database/api/.generated";
|
2
|
+
export const getEigenLayerMetadata = async (chainId, params) => {
|
3
|
+
return {
|
4
|
+
action: OpportunityAction.LEND,
|
5
|
+
name: ["EigenLayer", "strategy for", params.symbolUnderlyingToken].join(" "),
|
6
|
+
tokens: [{ chainId, address: params.underlyingToken }],
|
7
|
+
mainProtocol: "eigenlayer",
|
8
|
+
};
|
9
|
+
};
|