@merkl/api 0.10.177 → 0.10.181
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/database/api/.generated/edge.js +6 -6
- package/dist/database/api/.generated/index-browser.js +4 -4
- package/dist/database/api/.generated/index.d.ts +2 -2
- package/dist/database/api/.generated/index.js +6 -6
- package/dist/database/api/.generated/libquery_engine-debian-openssl-1.1.x.so.node +0 -0
- package/dist/database/api/.generated/libquery_engine-linux-arm64-openssl-1.1.x.so.node +0 -0
- package/dist/database/api/.generated/libquery_engine-linux-musl-arm64-openssl-3.0.x.so.node +0 -0
- package/dist/database/api/.generated/package.json +1 -1
- package/dist/database/api/.generated/runtime/edge-esm.js +15 -15
- package/dist/database/api/.generated/runtime/edge.js +16 -16
- package/dist/database/api/.generated/runtime/library.d.ts +23 -34
- package/dist/database/api/.generated/runtime/library.js +56 -56
- package/dist/database/api/.generated/runtime/react-native.js +23 -23
- package/dist/database/api/.generated/runtime/wasm.js +15 -15
- package/dist/database/api/.generated/wasm.js +4 -4
- package/dist/database/engine/.generated/edge.js +6 -6
- package/dist/database/engine/.generated/index-browser.js +4 -4
- package/dist/database/engine/.generated/index.d.ts +2 -2
- package/dist/database/engine/.generated/index.js +6 -6
- package/dist/database/engine/.generated/libquery_engine-debian-openssl-1.1.x.so.node +0 -0
- package/dist/database/engine/.generated/libquery_engine-linux-arm64-openssl-1.1.x.so.node +0 -0
- package/dist/database/engine/.generated/libquery_engine-linux-musl-arm64-openssl-3.0.x.so.node +0 -0
- package/dist/database/engine/.generated/package.json +1 -1
- package/dist/database/engine/.generated/runtime/edge-esm.js +15 -15
- package/dist/database/engine/.generated/runtime/edge.js +16 -16
- package/dist/database/engine/.generated/runtime/library.d.ts +23 -34
- package/dist/database/engine/.generated/runtime/library.js +56 -56
- package/dist/database/engine/.generated/runtime/react-native.js +23 -23
- package/dist/database/engine/.generated/runtime/wasm.js +15 -15
- package/dist/database/engine/.generated/wasm.js +4 -4
- package/dist/src/eden/index.d.ts +348 -63
- package/dist/src/index.d.ts +140 -21
- package/dist/src/index.js +1 -1
- package/dist/src/libs/campaigns/campaignTypes/CLAMMDynamicData.js +2 -2
- package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicDataRefacto.js +3 -3
- 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/AuraProcessor.d.ts +1 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/AuraProcessor.js +12 -3
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/PendleProcessor.d.ts +1 -1
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/PendleProcessor.js +1 -3
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/StakingProcessor.d.ts +39 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/StakingProcessor.js +45 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/processorMapping.js +2 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1RefactoFinal.d.ts +2 -1
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1RefactoFinal.js +25 -1
- package/dist/src/modules/v4/bucket/bucket.service.d.ts +5 -0
- package/dist/src/modules/v4/bucket/bucket.service.js +11 -0
- package/dist/src/modules/v4/campaign/campaign.controller.d.ts +11 -13
- package/dist/src/modules/v4/campaign/campaign.controller.js +3 -3
- package/dist/src/modules/v4/campaign/campaign.repository.js +1 -1
- package/dist/src/modules/v4/chain/chain.controller.d.ts +24 -0
- package/dist/src/modules/v4/chain/chain.controller.js +8 -2
- package/dist/src/modules/v4/chain/chain.model.d.ts +4 -0
- package/dist/src/modules/v4/chain/chain.model.js +4 -0
- package/dist/src/modules/v4/chain/chain.repository.d.ts +6 -1
- package/dist/src/modules/v4/chain/chain.repository.js +3 -0
- package/dist/src/modules/v4/chain/chain.service.d.ts +6 -1
- package/dist/src/modules/v4/chain/chain.service.js +7 -0
- package/dist/src/modules/v4/enso/enso.service.d.ts +1 -1
- package/dist/src/modules/v4/interaction/interaction.controller.d.ts +1 -1
- package/dist/src/modules/v4/{position → liquidity}/implementations/AjnaPositionFetcher.d.ts +1 -1
- package/dist/src/modules/v4/{position → liquidity}/implementations/BadgerPositionFetcher.d.ts +1 -1
- package/dist/src/modules/v4/{position → liquidity}/implementations/ClammPositionFetcher.d.ts +1 -1
- package/dist/src/modules/v4/{position → liquidity}/implementations/DolomitePositionFetcher.d.ts +1 -1
- package/dist/src/modules/v4/{position → liquidity}/implementations/DolomitePositionFetcher.js +2 -2
- package/dist/src/modules/v4/{position → liquidity}/implementations/ERC20PositionFetcher.d.ts +1 -1
- package/dist/src/modules/v4/{position → liquidity}/implementations/EulerPositionFetcher.d.ts +1 -1
- package/dist/src/modules/v4/liquidity/index.d.ts +2 -0
- package/dist/src/modules/v4/liquidity/index.js +2 -0
- package/dist/src/modules/v4/{position/position.controller.d.ts → liquidity/liquidity.controller.d.ts} +3 -3
- package/dist/src/modules/v4/{position/position.controller.js → liquidity/liquidity.controller.js} +4 -4
- package/dist/src/modules/v4/{position/position.repository.d.ts → liquidity/liquidity.repository.d.ts} +1 -1
- package/dist/src/modules/v4/{position/position.repository.js → liquidity/liquidity.repository.js} +1 -1
- package/dist/src/modules/v4/liquidity/liquidity.service.d.ts +5 -0
- package/dist/src/modules/v4/{position/position.service.js → liquidity/liquidity.service.js} +2 -2
- package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +34 -0
- package/dist/src/modules/v4/opportunity/opportunity.controller.js +11 -2
- package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +8 -0
- package/dist/src/modules/v4/opportunity/opportunity.model.js +5 -0
- package/dist/src/modules/v4/opportunity/opportunity.repository.d.ts +29 -1
- package/dist/src/modules/v4/opportunity/opportunity.repository.js +6 -0
- package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +15 -1
- package/dist/src/modules/v4/opportunity/opportunity.service.js +7 -6
- package/dist/src/modules/v4/protocol/protocol.controller.d.ts +30 -1
- package/dist/src/modules/v4/protocol/protocol.controller.js +9 -2
- package/dist/src/modules/v4/protocol/protocol.model.d.ts +10 -1
- package/dist/src/modules/v4/protocol/protocol.model.js +9 -0
- package/dist/src/modules/v4/protocol/protocol.repository.d.ts +9 -1
- package/dist/src/modules/v4/protocol/protocol.repository.js +4 -1
- package/dist/src/modules/v4/protocol/protocol.service.d.ts +11 -3
- package/dist/src/modules/v4/protocol/protocol.service.js +38 -32
- package/dist/src/modules/v4/reward/subservices/converter.js +2 -2
- package/dist/src/modules/v4/router.d.ts +140 -21
- package/dist/src/modules/v4/router.js +2 -2
- package/dist/src/modules/v4/token/token.controller.d.ts +38 -4
- package/dist/src/modules/v4/token/token.controller.js +11 -3
- package/dist/src/modules/v4/token/token.model.d.ts +9 -0
- package/dist/src/modules/v4/token/token.model.js +7 -0
- package/dist/src/modules/v4/token/token.repository.d.ts +14 -1
- package/dist/src/modules/v4/token/token.repository.js +3 -0
- package/dist/src/modules/v4/token/token.service.d.ts +18 -5
- package/dist/src/modules/v4/token/token.service.js +9 -2
- package/dist/src/routes/v3/blacklist.d.ts +140 -21
- package/dist/src/routes/v3/campaigns.d.ts +140 -21
- package/dist/src/routes/v3/campaignsInfo.d.ts +140 -21
- package/dist/src/routes/v3/multiChainPositions.d.ts +140 -21
- package/dist/src/routes/v3/opportunity.d.ts +140 -21
- package/dist/src/routes/v3/positions.d.ts +140 -21
- package/dist/src/routes/v3/rewards.d.ts +140 -21
- package/dist/src/routes/v3/updates.d.ts +140 -21
- package/dist/src/routes/v3/userRewards.d.ts +140 -21
- package/dist/src/utils/decodeCalls.js +5 -1
- package/dist/src/utils/encodeCalls.js +13 -1
- package/dist/src/utils/generateCardName.js +3 -1
- package/dist/src/utils/logger.d.ts +12 -6
- package/dist/tsconfig.package.tsbuildinfo +1 -1
- package/package.json +24 -24
- package/dist/src/modules/v4/position/index.d.ts +0 -2
- package/dist/src/modules/v4/position/index.js +0 -2
- package/dist/src/modules/v4/position/position.service.d.ts +0 -5
- /package/dist/src/modules/v4/{position → liquidity}/implementations/AjnaPositionFetcher.js +0 -0
- /package/dist/src/modules/v4/{position → liquidity}/implementations/BadgerPositionFetcher.js +0 -0
- /package/dist/src/modules/v4/{position → liquidity}/implementations/ClammPositionFetcher.js +0 -0
- /package/dist/src/modules/v4/{position → liquidity}/implementations/ERC20PositionFetcher.js +0 -0
- /package/dist/src/modules/v4/{position → liquidity}/implementations/EulerPositionFetcher.js +0 -0
- /package/dist/src/modules/v4/{position/position.model.d.ts → liquidity/liquidity.model.d.ts} +0 -0
- /package/dist/src/modules/v4/{position/position.model.js → liquidity/liquidity.model.js} +0 -0
package/dist/src/index.d.ts
CHANGED
@@ -495,6 +495,40 @@ declare const app: Elysia<"", false, {
|
|
495
495
|
};
|
496
496
|
};
|
497
497
|
};
|
498
|
+
} & {
|
499
|
+
opportunities: {
|
500
|
+
":id": {
|
501
|
+
patch: {
|
502
|
+
body: {
|
503
|
+
name?: string | undefined;
|
504
|
+
tags?: string[] | undefined;
|
505
|
+
};
|
506
|
+
params: {
|
507
|
+
id: string;
|
508
|
+
};
|
509
|
+
query: unknown;
|
510
|
+
headers: {
|
511
|
+
authorization: string;
|
512
|
+
};
|
513
|
+
response: {
|
514
|
+
200: {
|
515
|
+
name: string;
|
516
|
+
type: import("../database/api/.generated").$Enums.CampaignType;
|
517
|
+
id: string;
|
518
|
+
status: import("../database/api/.generated").$Enums.Status;
|
519
|
+
tags: string[];
|
520
|
+
identifier: string;
|
521
|
+
chainId: number;
|
522
|
+
action: import("../database/api/.generated").$Enums.OpportunityAction;
|
523
|
+
mainProtocolId: string | null;
|
524
|
+
tvl: number;
|
525
|
+
apr: number;
|
526
|
+
dailyRewards: number;
|
527
|
+
};
|
528
|
+
};
|
529
|
+
};
|
530
|
+
};
|
531
|
+
};
|
498
532
|
};
|
499
533
|
} & {
|
500
534
|
v4: {
|
@@ -678,19 +712,17 @@ declare const app: Elysia<"", false, {
|
|
678
712
|
} & {
|
679
713
|
"campaigns-to-process": {
|
680
714
|
engine: {
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
200: string;
|
693
|
-
};
|
715
|
+
post: {
|
716
|
+
body: unknown;
|
717
|
+
params: {};
|
718
|
+
query: {
|
719
|
+
chainId: number;
|
720
|
+
};
|
721
|
+
headers: {
|
722
|
+
authorization: string;
|
723
|
+
};
|
724
|
+
response: {
|
725
|
+
200: string;
|
694
726
|
};
|
695
727
|
};
|
696
728
|
};
|
@@ -743,7 +775,7 @@ declare const app: Elysia<"", false, {
|
|
743
775
|
id: string;
|
744
776
|
tags: import("../database/api/.generated").$Enums.ProtocolTag[];
|
745
777
|
icon: string;
|
746
|
-
} & {})[]
|
778
|
+
} & {})[];
|
747
779
|
};
|
748
780
|
};
|
749
781
|
};
|
@@ -762,6 +794,35 @@ declare const app: Elysia<"", false, {
|
|
762
794
|
};
|
763
795
|
};
|
764
796
|
};
|
797
|
+
} & {
|
798
|
+
protocols: {
|
799
|
+
":id": {
|
800
|
+
patch: {
|
801
|
+
body: {
|
802
|
+
url?: string | undefined;
|
803
|
+
description?: string | undefined;
|
804
|
+
icon?: string | undefined;
|
805
|
+
};
|
806
|
+
params: {
|
807
|
+
id: string;
|
808
|
+
};
|
809
|
+
query: unknown;
|
810
|
+
headers: {
|
811
|
+
authorization: string;
|
812
|
+
};
|
813
|
+
response: {
|
814
|
+
200: {
|
815
|
+
name: string;
|
816
|
+
url: string;
|
817
|
+
description: string;
|
818
|
+
id: string;
|
819
|
+
tags: import("../database/api/.generated").$Enums.ProtocolTag[];
|
820
|
+
icon: string;
|
821
|
+
};
|
822
|
+
};
|
823
|
+
};
|
824
|
+
};
|
825
|
+
};
|
765
826
|
};
|
766
827
|
} & {
|
767
828
|
v4: {
|
@@ -840,7 +901,7 @@ declare const app: Elysia<"", false, {
|
|
840
901
|
};
|
841
902
|
headers: unknown;
|
842
903
|
response: {
|
843
|
-
200: {
|
904
|
+
200: ({
|
844
905
|
symbol: string;
|
845
906
|
name: string | null;
|
846
907
|
id: string;
|
@@ -848,11 +909,11 @@ declare const app: Elysia<"", false, {
|
|
848
909
|
address: string;
|
849
910
|
icon: string;
|
850
911
|
decimals: number;
|
851
|
-
displaySymbol: string;
|
852
912
|
verified: boolean;
|
853
913
|
isTest: boolean;
|
854
|
-
|
855
|
-
|
914
|
+
} & {
|
915
|
+
price?: number | null | undefined;
|
916
|
+
})[];
|
856
917
|
};
|
857
918
|
};
|
858
919
|
};
|
@@ -878,6 +939,40 @@ declare const app: Elysia<"", false, {
|
|
878
939
|
};
|
879
940
|
};
|
880
941
|
};
|
942
|
+
} & {
|
943
|
+
tokens: {
|
944
|
+
":id": {
|
945
|
+
patch: {
|
946
|
+
body: {
|
947
|
+
icon?: string | undefined;
|
948
|
+
displaySymbol?: string | undefined;
|
949
|
+
isTest?: boolean | undefined;
|
950
|
+
};
|
951
|
+
params: {
|
952
|
+
id: string;
|
953
|
+
};
|
954
|
+
query: unknown;
|
955
|
+
headers: {
|
956
|
+
authorization: string;
|
957
|
+
};
|
958
|
+
response: {
|
959
|
+
200: {
|
960
|
+
symbol: string;
|
961
|
+
name: string | null;
|
962
|
+
id: string;
|
963
|
+
chainId: number;
|
964
|
+
address: string;
|
965
|
+
icon: string;
|
966
|
+
decimals: number;
|
967
|
+
displaySymbol: string;
|
968
|
+
verified: boolean;
|
969
|
+
isTest: boolean;
|
970
|
+
price: number | null;
|
971
|
+
};
|
972
|
+
};
|
973
|
+
};
|
974
|
+
};
|
975
|
+
};
|
881
976
|
};
|
882
977
|
} & {
|
883
978
|
v4: {
|
@@ -1157,6 +1252,30 @@ declare const app: Elysia<"", false, {
|
|
1157
1252
|
};
|
1158
1253
|
};
|
1159
1254
|
};
|
1255
|
+
} & {
|
1256
|
+
chains: {
|
1257
|
+
":chainId": {
|
1258
|
+
patch: {
|
1259
|
+
body: {
|
1260
|
+
icon?: string | undefined;
|
1261
|
+
};
|
1262
|
+
params: {
|
1263
|
+
chainId: number;
|
1264
|
+
};
|
1265
|
+
query: unknown;
|
1266
|
+
headers: {
|
1267
|
+
authorization: string;
|
1268
|
+
};
|
1269
|
+
response: {
|
1270
|
+
200: {
|
1271
|
+
name: string;
|
1272
|
+
id: number;
|
1273
|
+
icon: string;
|
1274
|
+
};
|
1275
|
+
};
|
1276
|
+
};
|
1277
|
+
};
|
1278
|
+
};
|
1160
1279
|
};
|
1161
1280
|
} & {
|
1162
1281
|
v4: {
|
@@ -1857,7 +1976,7 @@ declare const app: Elysia<"", false, {
|
|
1857
1976
|
id: string;
|
1858
1977
|
tags: import("../database/api/.generated").$Enums.ProtocolTag[];
|
1859
1978
|
icon: string;
|
1860
|
-
} & {})[]
|
1979
|
+
} & {})[];
|
1861
1980
|
};
|
1862
1981
|
};
|
1863
1982
|
};
|
@@ -2248,7 +2367,7 @@ declare const app: Elysia<"", false, {
|
|
2248
2367
|
};
|
2249
2368
|
} & {
|
2250
2369
|
v4: {
|
2251
|
-
|
2370
|
+
liquidity: {
|
2252
2371
|
index: {
|
2253
2372
|
get: {
|
2254
2373
|
body: unknown;
|
@@ -2259,7 +2378,7 @@ declare const app: Elysia<"", false, {
|
|
2259
2378
|
};
|
2260
2379
|
headers: unknown;
|
2261
2380
|
response: {
|
2262
|
-
200:
|
2381
|
+
200: import("./modules/v4/liquidity").PositionT[];
|
2263
2382
|
};
|
2264
2383
|
};
|
2265
2384
|
};
|
package/dist/src/index.js
CHANGED
@@ -24,7 +24,7 @@ const app = new Elysia({
|
|
24
24
|
email: "contact@merkl.money",
|
25
25
|
name: "Angle Labs",
|
26
26
|
},
|
27
|
-
description: "API to access data related to
|
27
|
+
description: "API to access data related to Merkl campaigns, built and maintained by Angle Labs. This API is provided as is, without any warranty of any kind.",
|
28
28
|
license: {
|
29
29
|
name: "UNLICENSED",
|
30
30
|
},
|
@@ -341,7 +341,7 @@ export async function CLAMMDynamicData(chainId, campaigns) {
|
|
341
341
|
const balance0 = BN2Number(amount0, decimalsToken0);
|
342
342
|
const balance1 = BN2Number(amount1, decimalsToken1);
|
343
343
|
const totalLiquidity = BN2Number(position.liquidity);
|
344
|
-
const inRangeLiquidity = balance0 > 0 && balance1 > 0 ? BN2Number(position.liquidity) ?? 0 : 0;
|
344
|
+
const inRangeLiquidity = balance0 > 0 && balance1 > 0 ? (BN2Number(position.liquidity) ?? 0) : 0;
|
345
345
|
almTotalLiquidity += totalLiquidity;
|
346
346
|
almInRangeLiquidity += inRangeLiquidity;
|
347
347
|
almBalance0 += balance0;
|
@@ -504,7 +504,7 @@ export async function CLAMMDynamicData(chainId, campaigns) {
|
|
504
504
|
const balance0 = BN2Number(amount0, decimalsToken0);
|
505
505
|
const balance1 = BN2Number(amount1, decimalsToken1);
|
506
506
|
const totalLiquidity = BN2Number(position.liquidity);
|
507
|
-
const inRangeLiquidity = balance0 > 0 && balance1 > 0 ? BN2Number(position.liquidity) ?? 0 : 0;
|
507
|
+
const inRangeLiquidity = balance0 > 0 && balance1 > 0 ? (BN2Number(position.liquidity) ?? 0) : 0;
|
508
508
|
almTotalLiquidity += totalLiquidity;
|
509
509
|
almInRangeLiquidity += inRangeLiquidity;
|
510
510
|
almBalance0 += balance0;
|
@@ -64,7 +64,7 @@ export async function ERC20DynamicDataRefacto(chainId, campaigns) {
|
|
64
64
|
calls: [],
|
65
65
|
typeInfo: {},
|
66
66
|
};
|
67
|
-
typeStruct = getTokenTypeRound1(resultRound1, campaign.campaignParameters.targetToken, i);
|
67
|
+
typeStruct = getTokenTypeRound1(resultRound1, campaign.campaignParameters.targetToken, i, campaign);
|
68
68
|
i += 5;
|
69
69
|
tokenTypesByCampaign[campaign.campaignId] = typeStruct;
|
70
70
|
callsRounds2.push(...typeStruct.calls);
|
@@ -124,8 +124,8 @@ export async function ERC20DynamicDataRefacto(chainId, campaigns) {
|
|
124
124
|
const callsForCampaign = tokenTypesByCampaign[campaign.campaignId].calls.length;
|
125
125
|
tokenTypesByCampaign[campaign.campaignId] = await getTokenPricesInfo(i, tokenTypesByCampaign[campaign.campaignId].type, tokenTypesByCampaign[campaign.campaignId].typeInfo, result, campaign, pricer);
|
126
126
|
i += callsForCampaign;
|
127
|
-
const totalSupplyTargetToken = tokenTypesByCampaign[campaign.campaignId].typeInfo.totalSupply;
|
128
127
|
const whitelistedSupplyTargetToken = tokenTypesByCampaign[campaign.campaignId].typeInfo.whitelistedSupplyTargetToken;
|
128
|
+
const totalSupplyTargetToken = whitelistedSupplyTargetToken;
|
129
129
|
const priceTargetToken = tokenTypesByCampaign[campaign.campaignId].typeInfo.priceTargetToken;
|
130
130
|
let lastEligibilityRatio = 1;
|
131
131
|
if (!!campaign.campaignParameters.hooks?.length) {
|
@@ -141,7 +141,7 @@ export async function ERC20DynamicDataRefacto(chainId, campaigns) {
|
|
141
141
|
campaign.campaignParameters.duration /
|
142
142
|
(whitelistedSupplyTargetToken * priceTargetToken),
|
143
143
|
totalSupplyTargetToken,
|
144
|
-
tvl:
|
144
|
+
tvl: whitelistedSupplyTargetToken * priceTargetToken,
|
145
145
|
type: tokenTypesByCampaign[campaign.campaignId].type,
|
146
146
|
typeInfo: tokenTypesByCampaign[campaign.campaignId].typeInfo,
|
147
147
|
priceRewardToken: priceRewardToken,
|
@@ -57,7 +57,8 @@ export declare enum tokenType {
|
|
57
57
|
pendleYT = "pendleYT",
|
58
58
|
pancakeswap = "pancakeswap",
|
59
59
|
tempestStaking = "tempestStaking",
|
60
|
-
holdstation = "holdstation"
|
60
|
+
holdstation = "holdstation",
|
61
|
+
staking = "staking"
|
61
62
|
}
|
62
63
|
export declare const tokenTypeToProtocol: {
|
63
64
|
[key in tokenType]: {
|
@@ -59,6 +59,7 @@ export var tokenType;
|
|
59
59
|
tokenType["pancakeswap"] = "pancakeswap";
|
60
60
|
tokenType["tempestStaking"] = "tempestStaking";
|
61
61
|
tokenType["holdstation"] = "holdstation";
|
62
|
+
tokenType["staking"] = "staking";
|
62
63
|
})(tokenType || (tokenType = {}));
|
63
64
|
export const tokenTypeToProtocol = {
|
64
65
|
[tokenType.aave_borrowing]: { protocol: "Aave" },
|
@@ -139,4 +140,7 @@ export const tokenTypeToProtocol = {
|
|
139
140
|
[tokenType.holdstation]: {
|
140
141
|
protocol: "HoldStation",
|
141
142
|
},
|
143
|
+
[tokenType.staking]: {
|
144
|
+
protocol: "Staking",
|
145
|
+
},
|
142
146
|
};
|
@@ -2,6 +2,7 @@ import { decodeCall } from "../../../../../utils/decodeCalls";
|
|
2
2
|
import { createCall } from "../../../../../utils/encodeCalls";
|
3
3
|
import { generateCardName } from "../../../../../utils/generateCardName";
|
4
4
|
import { BN2Number } from "@sdk";
|
5
|
+
import { utils } from "ethers";
|
5
6
|
import { GenericProcessor, roundType } from "./GenericProcessor";
|
6
7
|
export class AuraProcessor extends GenericProcessor {
|
7
8
|
rounds = {
|
@@ -21,6 +22,7 @@ export class AuraProcessor extends GenericProcessor {
|
|
21
22
|
{ key: "poolTokensRaw", call: "getPoolTokens", target: "vault", metaData: "poolId" },
|
22
23
|
{ key: "gaugeBalance", call: "balanceOf", target: "balancerPool", metaData: "gaugeContract" },
|
23
24
|
{ key: "auraBalance", call: "balanceOf", target: "gaugeContract", metaData: "auraStaker" },
|
25
|
+
{ key: "vaultBalance", call: "balanceOf", target: "balancerPool", metaData: "vault" },
|
24
26
|
{ key: "totalSupplyGauge", call: "totalSupply", target: "gaugeContract" },
|
25
27
|
],
|
26
28
|
round4: [{ key: "totalSupply", call: "totalSupply", target: "tokenAddress" }],
|
@@ -43,8 +45,15 @@ export class AuraProcessor extends GenericProcessor {
|
|
43
45
|
}
|
44
46
|
}
|
45
47
|
async processingRound5(index, type, typeInfo, calls, campaign, pricer) {
|
46
|
-
|
47
|
-
const
|
48
|
+
let { whitelistedSupplyTargetToken, totalSupply, blacklistedSupply } = this.handleWhiteListBlacklistRound5(typeInfo, campaign);
|
49
|
+
const vaultBalance = BN2Number(typeInfo.vaultBalance, 18);
|
50
|
+
const vaultIndex = campaign.campaignParameters.blacklist
|
51
|
+
?.map(b => utils.getAddress(b))
|
52
|
+
?.indexOf(utils.getAddress(typeInfo.vault));
|
53
|
+
if (vaultIndex !== -1) {
|
54
|
+
blacklistedSupply -= BN2Number(decodeCall(calls, index + vaultIndex, "balanceOf"), campaign.campaignParameters.decimalsTargetToken); // The vault balance was already removed from the total supply
|
55
|
+
}
|
56
|
+
const totalSupplyBalancerPool = BN2Number(typeInfo.totalSupplyBalancerPool, 18) - vaultBalance;
|
48
57
|
const gaugeBalance = BN2Number(typeInfo.gaugeBalance, 18);
|
49
58
|
const auraBalance = BN2Number(typeInfo.auraBalance, 18);
|
50
59
|
const totalSupplyGauge = BN2Number(typeInfo.totalSupplyGauge, 18);
|
@@ -66,7 +75,7 @@ export class AuraProcessor extends GenericProcessor {
|
|
66
75
|
}
|
67
76
|
const percentageOfSupplyInAura = (auraBalance / totalSupplyGauge) * (gaugeBalance / totalSupplyBalancerPool);
|
68
77
|
const tvl = poolTvl * percentageOfSupplyInAura;
|
69
|
-
const priceTargetToken = tvl /
|
78
|
+
const priceTargetToken = tvl / totalSupplyBalancerPool;
|
70
79
|
return {
|
71
80
|
...typeInfo,
|
72
81
|
totalSupplyBalancerPool,
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import type { Pricer } from "../../../../../utils/pricer";
|
2
|
-
import {
|
2
|
+
import type { Campaign, CampaignParameters } from "@sdk";
|
3
3
|
import type { tokenType } from "../helpers/tokenType";
|
4
4
|
import { GenericProcessor, type dataType, type mandatoryCallKeys } from "./GenericProcessor";
|
5
5
|
type callType = {
|
@@ -1,5 +1,4 @@
|
|
1
1
|
import { generateCardName } from "../../../../../utils/generateCardName";
|
2
|
-
import { ChainId } from "@sdk";
|
3
2
|
import { GenericProcessor } from "./GenericProcessor";
|
4
3
|
export class PendleProcessor extends GenericProcessor {
|
5
4
|
rounds = {
|
@@ -14,8 +13,7 @@ export class PendleProcessor extends GenericProcessor {
|
|
14
13
|
async processingRound5(_index, type, typeInfo, _calls, campaign, pricer) {
|
15
14
|
const { whitelistedSupplyTargetToken, totalSupply, blacklistedSupply } = this.handleWhiteListBlacklistRound5(typeInfo, campaign);
|
16
15
|
const priceTargetToken = (await pricer.get({
|
17
|
-
|
18
|
-
chainId: ChainId.MAINNET,
|
16
|
+
symbol: typeInfo.tokenAddress,
|
19
17
|
})) ?? 0;
|
20
18
|
const tvl = priceTargetToken * totalSupply;
|
21
19
|
return {
|
@@ -0,0 +1,39 @@
|
|
1
|
+
import type { Pricer } from "../../../../../utils/pricer";
|
2
|
+
import type { Campaign, 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 dataRawStaking;
|
7
|
+
call: string;
|
8
|
+
target: keyof callKeysStaking;
|
9
|
+
metaData?: keyof callKeysStaking;
|
10
|
+
optional?: boolean;
|
11
|
+
};
|
12
|
+
type callKeysStaking = mandatoryCallKeys & {
|
13
|
+
stakingContract: string;
|
14
|
+
lockNFT: string;
|
15
|
+
stakingSymbol: string;
|
16
|
+
};
|
17
|
+
type dataRawStaking = callKeysStaking & {
|
18
|
+
eip712DomainName: string;
|
19
|
+
};
|
20
|
+
type dataTypeStaking = dataType & {};
|
21
|
+
export declare class StakingProcessor extends GenericProcessor<callKeysStaking, dataRawStaking, dataTypeStaking> {
|
22
|
+
rounds: {
|
23
|
+
round1: callType[];
|
24
|
+
round2: callType[];
|
25
|
+
round3: callType[];
|
26
|
+
round4: callType[];
|
27
|
+
};
|
28
|
+
processingRound1(typeInfo: dataRawStaking): void;
|
29
|
+
processingRound2(typeInfo: dataRawStaking): void;
|
30
|
+
processingRound3(typeInfo: dataRawStaking): void;
|
31
|
+
processingRound4(typeInfo: dataRawStaking): void;
|
32
|
+
processingRound5(index: number, type: tokenType, typeInfo: dataRawStaking, calls: string[], campaign: CampaignParameters<Campaign.ERC20> | CampaignParameters<Campaign.EULER>, pricer: Pricer): Promise<dataTypeStaking>;
|
33
|
+
computeRound1(type: tokenType, typeInfo: dataRawStaking): tokenTypeStruct;
|
34
|
+
computeRound2(index: number, type: tokenType, typeInfo: dataRawStaking, calls: string[]): tokenTypeStruct;
|
35
|
+
computeRound3(index: number, type: tokenType, typeInfo: dataRawStaking, calls: string[]): tokenTypeStruct;
|
36
|
+
computeRound4(index: number, type: tokenType, typeInfo: dataRawStaking, calls: string[], campaign: CampaignParameters<Campaign.ERC20>): tokenTypeStruct;
|
37
|
+
computeRound5(index: number, type: tokenType, typeInfo: dataRawStaking, calls: string[], campaign: CampaignParameters<Campaign.ERC20> | CampaignParameters<Campaign.EULER>, pricer: Pricer): Promise<tokenTypeStruct>;
|
38
|
+
}
|
39
|
+
export {};
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import { GenericProcessor } from "./GenericProcessor";
|
2
|
+
export class StakingProcessor extends GenericProcessor {
|
3
|
+
rounds = {
|
4
|
+
round1: [
|
5
|
+
{ key: "lockNFT", call: "lockNFT", target: "stakingContract", optional: true },
|
6
|
+
{ key: "eip712DomainName", call: "eip712DomainName", target: "stakingContract", optional: true },
|
7
|
+
],
|
8
|
+
round2: [{ key: "stakingSymbol", call: "symbol", target: "lockNFT", optional: true }],
|
9
|
+
round3: [],
|
10
|
+
round4: [{ key: "totalSupply", call: "totalSupply", target: "tokenAddress" }],
|
11
|
+
};
|
12
|
+
// override computeRound1(): void {}
|
13
|
+
processingRound1(typeInfo) {
|
14
|
+
if (typeInfo.stakingContract === "0x18eeD20f71BEf84B605253C89A7576E3634134C0") {
|
15
|
+
typeInfo.stakingSymbol = "CyberStaking";
|
16
|
+
}
|
17
|
+
}
|
18
|
+
processingRound2(typeInfo) {
|
19
|
+
typeInfo.stakingSymbol = typeInfo.eip712DomainName;
|
20
|
+
}
|
21
|
+
processingRound3(typeInfo) {
|
22
|
+
super.processingRound3(typeInfo);
|
23
|
+
}
|
24
|
+
processingRound4(typeInfo) {
|
25
|
+
super.processingRound4(typeInfo);
|
26
|
+
}
|
27
|
+
async processingRound5(index, type, typeInfo, calls, campaign, pricer) {
|
28
|
+
return super.processingRound5(index, type, typeInfo, calls, campaign, pricer);
|
29
|
+
}
|
30
|
+
computeRound1(type, typeInfo) {
|
31
|
+
return super.computeRound1(type, typeInfo);
|
32
|
+
}
|
33
|
+
computeRound2(index, type, typeInfo, calls) {
|
34
|
+
return super.computeRound2(index, type, typeInfo, calls);
|
35
|
+
}
|
36
|
+
computeRound3(index, type, typeInfo, calls) {
|
37
|
+
return super.computeRound3(index, type, typeInfo, calls);
|
38
|
+
}
|
39
|
+
computeRound4(index, type, typeInfo, calls, campaign) {
|
40
|
+
return super.computeRound4(index, type, typeInfo, calls, campaign);
|
41
|
+
}
|
42
|
+
async computeRound5(index, type, typeInfo, calls, campaign, pricer) {
|
43
|
+
return super.computeRound5(index, type, typeInfo, calls, campaign, pricer);
|
44
|
+
}
|
45
|
+
}
|
@@ -21,6 +21,7 @@ import { PendleYTProcessor } from "./PendleYTProcessor";
|
|
21
21
|
import { RadiantProcessor } from "./RadiantProcessor";
|
22
22
|
import { RfxProcessor } from "./RfxProcessor";
|
23
23
|
import { SpliceProcessor } from "./SpliceProcessor";
|
24
|
+
import { StakingProcessor } from "./StakingProcessor";
|
24
25
|
import { SturdySiloProcessor } from "./SturdySiloProcessor";
|
25
26
|
import { TempestVaultProcessor } from "./TempestVaultProcessor";
|
26
27
|
import { TorosProcessor } from "./TorosProcessor";
|
@@ -88,4 +89,5 @@ export const processorMapping = {
|
|
88
89
|
[tokenType.pancakeswap]: UniswapProcessor,
|
89
90
|
[tokenType.tempestStaking]: TempestVaultProcessor,
|
90
91
|
[tokenType.holdstation]: HoldStationProcessor,
|
92
|
+
[tokenType.staking]: StakingProcessor,
|
91
93
|
};
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import type { Campaign, CampaignParameters } from "@sdk";
|
1
2
|
import type { Multicall3 } from "libs/sdk/src/generated/Multicall";
|
2
3
|
import { type tokenTypeStruct } from "./helpers/tokenType";
|
3
|
-
export declare function getTokenTypeRound1(calls: Multicall3.ResultStructOutput[], targetToken: string, index: number): tokenTypeStruct;
|
4
|
+
export declare function getTokenTypeRound1(calls: Multicall3.ResultStructOutput[], targetToken: string, index: number, campaign: CampaignParameters<Campaign.ERC20> | CampaignParameters<Campaign.EULER>): tokenTypeStruct;
|
@@ -179,7 +179,27 @@ function parseForBalancer(calls, index, targetToken, name) {
|
|
179
179
|
// Not a balancer pool
|
180
180
|
}
|
181
181
|
}
|
182
|
-
|
182
|
+
function parseForStaking(campaign, calls, index, targetToken) {
|
183
|
+
try {
|
184
|
+
const whitelist = campaign.campaignParameters.whitelist;
|
185
|
+
console.log("whitelist", whitelist, whitelist.length);
|
186
|
+
if (whitelist.length === 1) {
|
187
|
+
const forwarders = campaign.campaignParameters.forwarders;
|
188
|
+
console.log("forwarders", forwarders);
|
189
|
+
if (forwarders.length === 1) {
|
190
|
+
if (forwarders[0].sender === whitelist[0]) {
|
191
|
+
const name = decodeCall(calls, index + 2, "name");
|
192
|
+
return generateResult(tokenType.staking, name, targetToken, { stakingContract: whitelist[0] });
|
193
|
+
}
|
194
|
+
}
|
195
|
+
}
|
196
|
+
}
|
197
|
+
catch (e) {
|
198
|
+
// No factory on this token
|
199
|
+
// console.log(e);
|
200
|
+
}
|
201
|
+
}
|
202
|
+
export function getTokenTypeRound1(calls, targetToken, index, campaign) {
|
183
203
|
const returnValueOfCalls = calls.map(call => call.returnData);
|
184
204
|
let result = parseForFactory(returnValueOfCalls, index, targetToken);
|
185
205
|
if (result)
|
@@ -188,6 +208,10 @@ export function getTokenTypeRound1(calls, targetToken, index) {
|
|
188
208
|
if (result)
|
189
209
|
return result;
|
190
210
|
result = parseForMetamorpho(returnValueOfCalls, index, targetToken);
|
211
|
+
if (result)
|
212
|
+
return result;
|
213
|
+
console.log("parsing for staking");
|
214
|
+
result = parseForStaking(campaign, returnValueOfCalls, index, targetToken);
|
191
215
|
if (result)
|
192
216
|
return result;
|
193
217
|
let name;
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { Storage } from "@google-cloud/storage";
|
2
|
+
export class BucketService {
|
3
|
+
static storage = new Storage({ projectId: "angle-production-1" });
|
4
|
+
static async upload(bucketName, filename, data, isPublic) {
|
5
|
+
const file = await BucketService.storage.bucket(bucketName).file(filename);
|
6
|
+
await file.save(data);
|
7
|
+
if (isPublic)
|
8
|
+
await file.makePublic();
|
9
|
+
return `https://storage.googleapis.com/${bucketName}/${filename}`;
|
10
|
+
}
|
11
|
+
}
|
@@ -192,19 +192,17 @@ export declare const CampaignController: Elysia<"/campaigns", false, {
|
|
192
192
|
} & {
|
193
193
|
"campaigns-to-process": {
|
194
194
|
engine: {
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
200: string;
|
207
|
-
};
|
195
|
+
post: {
|
196
|
+
body: unknown;
|
197
|
+
params: {};
|
198
|
+
query: {
|
199
|
+
chainId: number;
|
200
|
+
};
|
201
|
+
headers: {
|
202
|
+
authorization: string;
|
203
|
+
};
|
204
|
+
response: {
|
205
|
+
200: string;
|
208
206
|
};
|
209
207
|
};
|
210
208
|
};
|
@@ -26,15 +26,15 @@ export const CampaignController = new Elysia({ prefix: "/campaigns", detail: { t
|
|
26
26
|
throwOnUnsupportedChainId(query.chainId);
|
27
27
|
},
|
28
28
|
})
|
29
|
-
// ─── Get Count
|
29
|
+
// ─── Get Count Of CampaignsToProcess ─────────
|
30
30
|
.get("/count", async ({ query }) => (await CampaignService.findCampaignsToProcess(query.chainId)).length, {
|
31
31
|
query: ChainUniqueDto,
|
32
32
|
beforeHandle: ({ query }) => {
|
33
33
|
throwOnUnsupportedChainId(query.chainId);
|
34
34
|
},
|
35
35
|
})
|
36
|
-
// ───
|
37
|
-
.post("/engine
|
36
|
+
// ─── Marks A Campaignid As Processing ────────
|
37
|
+
.post("/engine", async ({ query }) => await CampaignService.pickCampaignToProcess(query.chainId), {
|
38
38
|
query: ChainUniqueDto,
|
39
39
|
beforeHandle: async ({ query, headers }) => {
|
40
40
|
await EngineGuard({ headers });
|
@@ -80,7 +80,7 @@ export class CampaignRepository {
|
|
80
80
|
where: { id: opportunityId },
|
81
81
|
create: {
|
82
82
|
id: opportunityId,
|
83
|
-
Chain: { connect: { id: campaign.
|
83
|
+
Chain: { connect: { id: campaign.computeChainId } },
|
84
84
|
type: campaignType,
|
85
85
|
identifier: campaign.opportunityIdentifier, // mainParameter
|
86
86
|
name: metadata.name,
|