@merkl/api 0.10.353 → 0.10.354
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/.generated/edge.js +10 -4
- package/dist/database/api/.generated/index-browser.js +7 -1
- package/dist/database/api/.generated/index.d.ts +7 -1
- package/dist/database/api/.generated/index.js +10 -4
- package/dist/database/api/.generated/package.json +1 -1
- package/dist/database/api/.generated/schema.prisma +6 -0
- package/dist/database/api/.generated/wasm.js +7 -1
- package/dist/src/eden/index.d.ts +21 -21
- package/dist/src/index.d.ts +7 -7
- package/dist/src/jobs/breakdowns.d.ts +1 -0
- package/dist/src/jobs/breakdowns.js +55 -0
- package/dist/src/jobs/etl/pendings.d.ts +1 -0
- package/dist/src/jobs/etl/pendings.js +74 -0
- package/dist/src/jobs/etl/reward-breakdowns.d.ts +1 -0
- package/dist/src/jobs/etl/reward-breakdowns.js +82 -0
- package/dist/src/jobs/etl/rewards.d.ts +1 -0
- package/dist/src/jobs/etl/rewards.js +102 -0
- package/dist/src/jobs/rewards.d.ts +1 -0
- package/dist/src/jobs/rewards.js +74 -0
- package/dist/src/modules/v4/bucket/bucket.service.d.ts +4 -1
- package/dist/src/modules/v4/bucket/bucket.service.js +83 -2
- package/dist/src/modules/v4/campaign/campaign.controller.d.ts +2 -2
- package/dist/src/modules/v4/campaign/campaign.model.d.ts +3 -0
- package/dist/src/modules/v4/dynamicData/dynamicData.controller.d.ts +2 -2
- package/dist/src/modules/v4/dynamicData/dynamicData.model.d.ts +6 -0
- package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +3 -3
- package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +6 -0
- package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +2 -2
- package/dist/src/modules/v4/opportunity/opportunity.service.js +4 -0
- package/dist/src/modules/v4/opportunity/subservices/getHyperdriveMetadata.service.d.ts +3 -0
- package/dist/src/modules/v4/opportunity/subservices/getHyperdriveMetadata.service.js +15 -0
- package/dist/src/modules/v4/programPayload/programPayload.repository.d.ts +4 -1
- package/dist/src/modules/v4/programPayload/programPayload.repository.js +101 -16
- package/dist/src/modules/v4/programPayload/programPayload.service.d.ts +3 -3
- package/dist/src/modules/v4/programPayload/programPayload.service.js +25 -11
- package/dist/src/modules/v4/protocol/protocol.model.d.ts +1 -1
- package/dist/src/modules/v4/protocol/protocol.model.js +1 -0
- package/dist/src/modules/v4/router.d.ts +7 -7
- package/dist/tsconfig.package.tsbuildinfo +1 -1
- package/package.json +4 -2
package/dist/src/eden/index.d.ts
CHANGED
@@ -125,7 +125,7 @@ declare const eden: {
|
|
125
125
|
} & {
|
126
126
|
price?: number | null | undefined;
|
127
127
|
})[];
|
128
|
-
mainProtocol: "morpho" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | undefined;
|
128
|
+
mainProtocol: "morpho" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "hyperdrive" | undefined;
|
129
129
|
depositUrl: any;
|
130
130
|
tags: string[];
|
131
131
|
};
|
@@ -415,7 +415,7 @@ declare const eden: {
|
|
415
415
|
depositUrl?: string | undefined;
|
416
416
|
protocols?: string[] | undefined;
|
417
417
|
mainProtocol?: string | undefined;
|
418
|
-
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST";
|
418
|
+
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR";
|
419
419
|
tokens: {
|
420
420
|
chainId: number;
|
421
421
|
address: string;
|
@@ -423,7 +423,7 @@ declare const eden: {
|
|
423
423
|
status: "NONE" | "PAST" | "LIVE" | "SOON";
|
424
424
|
identifier: string;
|
425
425
|
chainId: number;
|
426
|
-
action: "INVALID" | "POOL" | "HOLD" | "DROP" | "LEND" | "BORROW";
|
426
|
+
action: "INVALID" | "POOL" | "HOLD" | "DROP" | "LEND" | "BORROW" | "LP" | "LONG" | "SHORT";
|
427
427
|
}, options: {
|
428
428
|
headers: {
|
429
429
|
authorization: string;
|
@@ -757,7 +757,7 @@ declare const eden: {
|
|
757
757
|
get: (options: {
|
758
758
|
headers?: Record<string, unknown> | undefined;
|
759
759
|
query: {
|
760
|
-
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | undefined;
|
760
|
+
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR" | undefined;
|
761
761
|
items?: number | undefined;
|
762
762
|
subType?: number | undefined;
|
763
763
|
page?: number | undefined;
|
@@ -826,7 +826,7 @@ declare const eden: {
|
|
826
826
|
get: (options: {
|
827
827
|
headers?: Record<string, unknown> | undefined;
|
828
828
|
query: {
|
829
|
-
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | undefined;
|
829
|
+
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR" | undefined;
|
830
830
|
items?: number | undefined;
|
831
831
|
subType?: number | undefined;
|
832
832
|
page?: number | undefined;
|
@@ -2269,7 +2269,7 @@ declare const eden: {
|
|
2269
2269
|
rewardTokenAddress?: string | undefined;
|
2270
2270
|
distributionChain?: {} | undefined;
|
2271
2271
|
opportunityIdentifier?: string | undefined;
|
2272
|
-
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST";
|
2272
|
+
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR";
|
2273
2273
|
params: {};
|
2274
2274
|
computeChainId: number;
|
2275
2275
|
}, options: {
|
@@ -2289,7 +2289,7 @@ declare const eden: {
|
|
2289
2289
|
authorization: string;
|
2290
2290
|
};
|
2291
2291
|
query: {
|
2292
|
-
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | undefined;
|
2292
|
+
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR" | undefined;
|
2293
2293
|
items?: number | undefined;
|
2294
2294
|
subType?: number | undefined;
|
2295
2295
|
page?: number | undefined;
|
@@ -3433,7 +3433,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
3433
3433
|
depositUrl?: string | undefined;
|
3434
3434
|
protocols?: string[] | undefined;
|
3435
3435
|
mainProtocol?: string | undefined;
|
3436
|
-
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST";
|
3436
|
+
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR";
|
3437
3437
|
tokens: {
|
3438
3438
|
chainId: number;
|
3439
3439
|
address: string;
|
@@ -3441,7 +3441,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
3441
3441
|
status: "NONE" | "PAST" | "LIVE" | "SOON";
|
3442
3442
|
identifier: string;
|
3443
3443
|
chainId: number;
|
3444
|
-
action: "INVALID" | "POOL" | "HOLD" | "DROP" | "LEND" | "BORROW";
|
3444
|
+
action: "INVALID" | "POOL" | "HOLD" | "DROP" | "LEND" | "BORROW" | "LP" | "LONG" | "SHORT";
|
3445
3445
|
};
|
3446
3446
|
params: {};
|
3447
3447
|
query: unknown;
|
@@ -3502,7 +3502,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
3502
3502
|
} & {
|
3503
3503
|
price?: number | null | undefined;
|
3504
3504
|
})[];
|
3505
|
-
mainProtocol: "morpho" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | undefined;
|
3505
|
+
mainProtocol: "morpho" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "hyperdrive" | undefined;
|
3506
3506
|
depositUrl: any;
|
3507
3507
|
tags: string[];
|
3508
3508
|
};
|
@@ -4171,7 +4171,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
4171
4171
|
body: unknown;
|
4172
4172
|
params: {};
|
4173
4173
|
query: {
|
4174
|
-
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | undefined;
|
4174
|
+
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR" | undefined;
|
4175
4175
|
items?: number | undefined;
|
4176
4176
|
subType?: number | undefined;
|
4177
4177
|
page?: number | undefined;
|
@@ -4243,7 +4243,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
4243
4243
|
body: unknown;
|
4244
4244
|
params: {};
|
4245
4245
|
query: {
|
4246
|
-
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | undefined;
|
4246
|
+
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR" | undefined;
|
4247
4247
|
items?: number | undefined;
|
4248
4248
|
subType?: number | undefined;
|
4249
4249
|
page?: number | undefined;
|
@@ -6102,7 +6102,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
6102
6102
|
rewardTokenAddress?: string | undefined;
|
6103
6103
|
distributionChain?: {} | undefined;
|
6104
6104
|
opportunityIdentifier?: string | undefined;
|
6105
|
-
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST";
|
6105
|
+
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR";
|
6106
6106
|
params: {};
|
6107
6107
|
computeChainId: number;
|
6108
6108
|
};
|
@@ -6125,7 +6125,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
6125
6125
|
body: unknown;
|
6126
6126
|
params: {};
|
6127
6127
|
query: {
|
6128
|
-
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | undefined;
|
6128
|
+
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR" | undefined;
|
6129
6129
|
items?: number | undefined;
|
6130
6130
|
subType?: number | undefined;
|
6131
6131
|
page?: number | undefined;
|
@@ -7510,7 +7510,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
7510
7510
|
} & {
|
7511
7511
|
price?: number | null | undefined;
|
7512
7512
|
})[];
|
7513
|
-
mainProtocol: "morpho" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | undefined;
|
7513
|
+
mainProtocol: "morpho" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "hyperdrive" | undefined;
|
7514
7514
|
depositUrl: any;
|
7515
7515
|
tags: string[];
|
7516
7516
|
};
|
@@ -7800,7 +7800,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
7800
7800
|
depositUrl?: string | undefined;
|
7801
7801
|
protocols?: string[] | undefined;
|
7802
7802
|
mainProtocol?: string | undefined;
|
7803
|
-
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST";
|
7803
|
+
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR";
|
7804
7804
|
tokens: {
|
7805
7805
|
chainId: number;
|
7806
7806
|
address: string;
|
@@ -7808,7 +7808,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
7808
7808
|
status: "NONE" | "PAST" | "LIVE" | "SOON";
|
7809
7809
|
identifier: string;
|
7810
7810
|
chainId: number;
|
7811
|
-
action: "INVALID" | "POOL" | "HOLD" | "DROP" | "LEND" | "BORROW";
|
7811
|
+
action: "INVALID" | "POOL" | "HOLD" | "DROP" | "LEND" | "BORROW" | "LP" | "LONG" | "SHORT";
|
7812
7812
|
}, options: {
|
7813
7813
|
headers: {
|
7814
7814
|
authorization: string;
|
@@ -8142,7 +8142,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
8142
8142
|
get: (options: {
|
8143
8143
|
headers?: Record<string, unknown> | undefined;
|
8144
8144
|
query: {
|
8145
|
-
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | undefined;
|
8145
|
+
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR" | undefined;
|
8146
8146
|
items?: number | undefined;
|
8147
8147
|
subType?: number | undefined;
|
8148
8148
|
page?: number | undefined;
|
@@ -8211,7 +8211,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
8211
8211
|
get: (options: {
|
8212
8212
|
headers?: Record<string, unknown> | undefined;
|
8213
8213
|
query: {
|
8214
|
-
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | undefined;
|
8214
|
+
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR" | undefined;
|
8215
8215
|
items?: number | undefined;
|
8216
8216
|
subType?: number | undefined;
|
8217
8217
|
page?: number | undefined;
|
@@ -9654,7 +9654,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
9654
9654
|
rewardTokenAddress?: string | undefined;
|
9655
9655
|
distributionChain?: {} | undefined;
|
9656
9656
|
opportunityIdentifier?: string | undefined;
|
9657
|
-
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST";
|
9657
|
+
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR";
|
9658
9658
|
params: {};
|
9659
9659
|
computeChainId: number;
|
9660
9660
|
}, options: {
|
@@ -9674,7 +9674,7 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
9674
9674
|
authorization: string;
|
9675
9675
|
};
|
9676
9676
|
query: {
|
9677
|
-
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | undefined;
|
9677
|
+
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR" | undefined;
|
9678
9678
|
items?: number | undefined;
|
9679
9679
|
subType?: number | undefined;
|
9680
9680
|
page?: number | undefined;
|
package/dist/src/index.d.ts
CHANGED
@@ -152,7 +152,7 @@ declare const app: Elysia<"", false, {
|
|
152
152
|
depositUrl?: string | undefined;
|
153
153
|
protocols?: string[] | undefined;
|
154
154
|
mainProtocol?: string | undefined;
|
155
|
-
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST";
|
155
|
+
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR";
|
156
156
|
tokens: {
|
157
157
|
chainId: number;
|
158
158
|
address: string;
|
@@ -160,7 +160,7 @@ declare const app: Elysia<"", false, {
|
|
160
160
|
status: "NONE" | "PAST" | "LIVE" | "SOON";
|
161
161
|
identifier: string;
|
162
162
|
chainId: number;
|
163
|
-
action: "INVALID" | "POOL" | "HOLD" | "DROP" | "LEND" | "BORROW";
|
163
|
+
action: "INVALID" | "POOL" | "HOLD" | "DROP" | "LEND" | "BORROW" | "LP" | "LONG" | "SHORT";
|
164
164
|
};
|
165
165
|
params: {};
|
166
166
|
query: unknown;
|
@@ -221,7 +221,7 @@ declare const app: Elysia<"", false, {
|
|
221
221
|
} & {
|
222
222
|
price?: number | null | undefined;
|
223
223
|
})[];
|
224
|
-
mainProtocol: "morpho" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | undefined;
|
224
|
+
mainProtocol: "morpho" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "hyperdrive" | undefined;
|
225
225
|
depositUrl: any;
|
226
226
|
tags: string[];
|
227
227
|
};
|
@@ -890,7 +890,7 @@ declare const app: Elysia<"", false, {
|
|
890
890
|
body: unknown;
|
891
891
|
params: {};
|
892
892
|
query: {
|
893
|
-
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | undefined;
|
893
|
+
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR" | undefined;
|
894
894
|
items?: number | undefined;
|
895
895
|
subType?: number | undefined;
|
896
896
|
page?: number | undefined;
|
@@ -962,7 +962,7 @@ declare const app: Elysia<"", false, {
|
|
962
962
|
body: unknown;
|
963
963
|
params: {};
|
964
964
|
query: {
|
965
|
-
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | undefined;
|
965
|
+
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR" | undefined;
|
966
966
|
items?: number | undefined;
|
967
967
|
subType?: number | undefined;
|
968
968
|
page?: number | undefined;
|
@@ -2821,7 +2821,7 @@ declare const app: Elysia<"", false, {
|
|
2821
2821
|
rewardTokenAddress?: string | undefined;
|
2822
2822
|
distributionChain?: {} | undefined;
|
2823
2823
|
opportunityIdentifier?: string | undefined;
|
2824
|
-
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST";
|
2824
|
+
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR";
|
2825
2825
|
params: {};
|
2826
2826
|
computeChainId: number;
|
2827
2827
|
};
|
@@ -2844,7 +2844,7 @@ declare const app: Elysia<"", false, {
|
|
2844
2844
|
body: unknown;
|
2845
2845
|
params: {};
|
2846
2846
|
query: {
|
2847
|
-
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | undefined;
|
2847
|
+
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR" | undefined;
|
2848
2848
|
items?: number | undefined;
|
2849
2849
|
subType?: number | undefined;
|
2850
2850
|
page?: number | undefined;
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const writeBreakdownsToAPI: (chainId: number, root: string) => Promise<void>;
|
@@ -0,0 +1,55 @@
|
|
1
|
+
import { CampaignService, TokenService } from "../modules/v4";
|
2
|
+
import { BucketService } from "../modules/v4/bucket/bucket.service";
|
3
|
+
import { RewardService } from "../modules/v4/reward";
|
4
|
+
import { log } from "../utils/logger";
|
5
|
+
import { apiDbClient } from "../utils/prisma";
|
6
|
+
import moment from "moment";
|
7
|
+
// @dev Trigger at the end of the rewards job
|
8
|
+
export const writeBreakdownsToAPI = async (chainId, root) => {
|
9
|
+
const start = moment().unix();
|
10
|
+
const environmentName = process.env.ENV === "staging" ? "staging" : "production";
|
11
|
+
const breakdownBatches = [[]];
|
12
|
+
const breakdownBatchPromises = [];
|
13
|
+
let currentBreakdownBatchIndex = 0;
|
14
|
+
const pushBreakdowns = async (index) => {
|
15
|
+
log.local(`pushing breakdown batch ${index} (${breakdownBatches[index].length} points) to API DB`);
|
16
|
+
// Upsert users in case they don't exist yet
|
17
|
+
const breakdownsToCreate = [];
|
18
|
+
for (const b of breakdownBatches[index]) {
|
19
|
+
const campaignId = CampaignService.hashId({ distributionChain: chainId, campaignId: b.campaignId });
|
20
|
+
const rewardTokenId = TokenService.hashId({ chainId, address: b.token });
|
21
|
+
const rewardId = RewardService.hashId(root, b.recipient, rewardTokenId);
|
22
|
+
breakdownsToCreate.push({
|
23
|
+
rewardId,
|
24
|
+
protocolId: b.protocolId ? b.protocolId : undefined,
|
25
|
+
campaignId,
|
26
|
+
reason: b.reason ? b.reason : "",
|
27
|
+
amount: b.amount,
|
28
|
+
claimed: b.claimed,
|
29
|
+
pending: b.pending,
|
30
|
+
auxiliaryData1: b.auxiliaryData1 ?? "",
|
31
|
+
auxiliaryData2: b.auxiliaryData2 ?? "",
|
32
|
+
});
|
33
|
+
}
|
34
|
+
return (await apiDbClient.rewardBreakdown.createMany({
|
35
|
+
data: breakdownsToCreate,
|
36
|
+
skipDuplicates: true, // To avoid revert if data already exists
|
37
|
+
})).count;
|
38
|
+
};
|
39
|
+
await BucketService.readStreamFromBucket(`breakdowns/${chainId}-${root}.gz`, `merkl-rewards-lake-${environmentName}`, `merkl-data-${environmentName}`, async (x) => {
|
40
|
+
const breakdowns = JSON.parse(x);
|
41
|
+
for (const b of breakdowns) {
|
42
|
+
breakdownBatches[currentBreakdownBatchIndex].push(b);
|
43
|
+
if (breakdownBatches[currentBreakdownBatchIndex].length >= 30_000) {
|
44
|
+
breakdownBatchPromises.push(pushBreakdowns(currentBreakdownBatchIndex));
|
45
|
+
breakdownBatches.push([]);
|
46
|
+
currentBreakdownBatchIndex++;
|
47
|
+
}
|
48
|
+
}
|
49
|
+
return;
|
50
|
+
});
|
51
|
+
// Final batch
|
52
|
+
breakdownBatchPromises.push(pushBreakdowns(currentBreakdownBatchIndex));
|
53
|
+
const breakdownsCreated = (await Promise.all(breakdownBatchPromises)).reduce((acc, x) => acc + x, 0);
|
54
|
+
log.info(`✅ Successfully created ${breakdownsCreated} breakdowns in ${moment().unix() - start}sec`);
|
55
|
+
};
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const main: () => Promise<void>;
|
@@ -0,0 +1,74 @@
|
|
1
|
+
// ─── Pendings ETL ─────────────────────────────────────────────────────────────
|
2
|
+
if (!process.env.ENV || !process.env.FILENAME)
|
3
|
+
throw new Error("[ENV]: missing variable");
|
4
|
+
import { BucketService } from "../../modules/v4/bucket/bucket.service";
|
5
|
+
import { RewardService } from "../../modules/v4/reward";
|
6
|
+
import moment from "moment";
|
7
|
+
import { log } from "../../utils/logger";
|
8
|
+
// ─── Constants ───────────────────────────────────────────────
|
9
|
+
const BATCH_SIZE = 20_000;
|
10
|
+
// ─── Global Variables ────────────────────────────────────────
|
11
|
+
const [chainIdString, root, campaignId] = process.env.FILENAME.split("_");
|
12
|
+
const chainId = Number.parseInt(chainIdString);
|
13
|
+
const pendingsToCreate = [[]];
|
14
|
+
const failedBatches = [];
|
15
|
+
// ─── Extract ─────────────────────────────────────────────────────────────────
|
16
|
+
const extract = async () => {
|
17
|
+
let count = 0;
|
18
|
+
let currentBatchIndex = 0;
|
19
|
+
await BucketService.readStreamFromBucket(`pendings/${process.env.FILENAME}.gz`, `merkl-rewards-lake-${process.env.ENV}`, `merkl-data-${process.env.ENV}`, async (x) => {
|
20
|
+
pendingsToCreate[currentBatchIndex].push(transform(JSON.parse(x)));
|
21
|
+
if (pendingsToCreate[currentBatchIndex].length >= BATCH_SIZE) {
|
22
|
+
try {
|
23
|
+
count += await load(pendingsToCreate[currentBatchIndex]);
|
24
|
+
log.info(`Successfully inserted a batch of ${count} rewards`);
|
25
|
+
}
|
26
|
+
catch (err) {
|
27
|
+
console.error(`Failed to insert a batch, adding it to the fail queue.\n${err}`);
|
28
|
+
failedBatches.push(currentBatchIndex);
|
29
|
+
}
|
30
|
+
currentBatchIndex++;
|
31
|
+
pendingsToCreate.push([]);
|
32
|
+
}
|
33
|
+
return;
|
34
|
+
});
|
35
|
+
// ─── Current Batch Not In DB Yet ─────────────────────────────────────
|
36
|
+
try {
|
37
|
+
const count = await load(pendingsToCreate[currentBatchIndex]);
|
38
|
+
if (count !== 0)
|
39
|
+
log.info(`Successfully inserted a batch of ${count} rewards`);
|
40
|
+
}
|
41
|
+
catch (err) {
|
42
|
+
console.error(`Failed to insert a batch, adding it to the fail queue.\n${err}`);
|
43
|
+
failedBatches.push(currentBatchIndex);
|
44
|
+
}
|
45
|
+
return count;
|
46
|
+
};
|
47
|
+
// ─── Transform ───────────────────────────────────────────────────────────────
|
48
|
+
const transform = (pending) => {
|
49
|
+
return pending;
|
50
|
+
};
|
51
|
+
// ─── Load ────────────────────────────────────────────────────────────────────
|
52
|
+
const load = async (pendings) => {
|
53
|
+
const { updated, created } = await RewardService.updatePendings({
|
54
|
+
distributionChainId: chainId,
|
55
|
+
rewardToken: pendings[0].rewardToken,
|
56
|
+
campaignId,
|
57
|
+
root,
|
58
|
+
data: pendings,
|
59
|
+
});
|
60
|
+
return updated + created;
|
61
|
+
};
|
62
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
63
|
+
export const main = async () => {
|
64
|
+
const start = moment().unix();
|
65
|
+
// ─── Start Rewards ETL ───────────────────────────────────────────────
|
66
|
+
const count = await extract();
|
67
|
+
log.info(`✅ Successfully created ${count} new records in ${moment().unix() - start} sec`);
|
68
|
+
if (failedBatches.length !== 0)
|
69
|
+
log.info(`${failedBatches.length}/${pendingsToCreate.length} batches failed.`);
|
70
|
+
if (failedBatches.length === 0) {
|
71
|
+
await BucketService.deleteFile(`rewards/${process.env.FILENAME}.gz`, `merkl-rewards-lake-${process.env.ENV}`, `merkl-data-${process.env.ENV}`);
|
72
|
+
}
|
73
|
+
};
|
74
|
+
main();
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const main: () => Promise<void>;
|
@@ -0,0 +1,82 @@
|
|
1
|
+
// ─── Reward Breakdowns ETL ───────────────────────────────────────────────────
|
2
|
+
if (!process.env.ENV || !process.env.CHAIN_ID || !process.env.ROOT)
|
3
|
+
throw new Error("[ENV]: missing variable");
|
4
|
+
import { BucketService } from "../../modules/v4/bucket/bucket.service";
|
5
|
+
import { log } from "../../utils/logger";
|
6
|
+
import { apiDbClient } from "../../utils/prisma";
|
7
|
+
import moment from "moment";
|
8
|
+
// ─── Constants ───────────────────────────────────────────────
|
9
|
+
const BATCH_SIZE = 30_000;
|
10
|
+
// ─── Global Variables ────────────────────────────────────────
|
11
|
+
const rewardBreakdownsToCreate = [[]];
|
12
|
+
const failedBatches = [];
|
13
|
+
// ─── Extract ─────────────────────────────────────────────────────────────────
|
14
|
+
const extract = async () => {
|
15
|
+
let currentBatchIndex = 0;
|
16
|
+
let count = 0;
|
17
|
+
await BucketService.readStreamFromBucket(`breakdowns/${process.env.CHAIN_ID}-${process.env.ROOT}.gz`, `merkl-rewards-lake-${process.env.ENV}`, `merkl-data-${process.env.ENV}`, async (x) => {
|
18
|
+
const breakdowns = JSON.parse(x);
|
19
|
+
for (const breakdown of breakdowns) {
|
20
|
+
rewardBreakdownsToCreate[currentBatchIndex].push(transform(breakdown));
|
21
|
+
if (rewardBreakdownsToCreate[currentBatchIndex].length >= BATCH_SIZE) {
|
22
|
+
try {
|
23
|
+
count += await load(rewardBreakdownsToCreate[currentBatchIndex]);
|
24
|
+
}
|
25
|
+
catch (err) {
|
26
|
+
console.error(`Failed to insert a batch, adding it to the fail queue.\n${err}`);
|
27
|
+
failedBatches.push(currentBatchIndex);
|
28
|
+
}
|
29
|
+
currentBatchIndex++;
|
30
|
+
rewardBreakdownsToCreate.push([]);
|
31
|
+
}
|
32
|
+
}
|
33
|
+
return;
|
34
|
+
});
|
35
|
+
// ─── Current Batch Not In DB Yet ─────────────────────────────────────
|
36
|
+
try {
|
37
|
+
const count = await load(rewardBreakdownsToCreate[currentBatchIndex]);
|
38
|
+
if (count !== 0)
|
39
|
+
log.info(`Successfully inserted a batch of ${count} rewards`);
|
40
|
+
}
|
41
|
+
catch (err) {
|
42
|
+
console.error(`Failed to insert a batch, adding it to the fail queue.\n${err}`);
|
43
|
+
failedBatches.push(currentBatchIndex);
|
44
|
+
}
|
45
|
+
return count;
|
46
|
+
};
|
47
|
+
// ─── Transform ───────────────────────────────────────────────────────────────
|
48
|
+
const transform = (rewardBreakdown) => {
|
49
|
+
const campaignId = Bun.hash(`${process.env.CHAIN_ID}${rewardBreakdown.campaignId}`).toString();
|
50
|
+
const rewardTokenId = Bun.hash(`${process.env.CHAIN_ID}${rewardBreakdown.token}`).toString();
|
51
|
+
const rewardId = Bun.hash(`${process.env.ROOT}${rewardBreakdown.recipient}${rewardTokenId}`).toString();
|
52
|
+
return {
|
53
|
+
rewardId,
|
54
|
+
protocolId: rewardBreakdown.protocolId ? rewardBreakdown.protocolId : undefined,
|
55
|
+
campaignId,
|
56
|
+
reason: rewardBreakdown.reason ? rewardBreakdown.reason : "",
|
57
|
+
amount: rewardBreakdown.amount,
|
58
|
+
claimed: rewardBreakdown.claimed,
|
59
|
+
pending: rewardBreakdown.pending,
|
60
|
+
auxiliaryData1: rewardBreakdown.auxiliaryData1 ?? "",
|
61
|
+
auxiliaryData2: rewardBreakdown.auxiliaryData2 ?? "",
|
62
|
+
};
|
63
|
+
};
|
64
|
+
// ─── Load ────────────────────────────────────────────────────────────────────
|
65
|
+
const load = async (rewardBreakdowns) => {
|
66
|
+
return (await apiDbClient.rewardBreakdown.createMany({
|
67
|
+
data: rewardBreakdowns,
|
68
|
+
skipDuplicates: true,
|
69
|
+
})).count;
|
70
|
+
};
|
71
|
+
// ─── Main ────────────────────────────────────────────────────────────────────
|
72
|
+
export const main = async () => {
|
73
|
+
const start = moment().unix();
|
74
|
+
const count = await extract();
|
75
|
+
log.info(`✅ Successfully created ${count} new records in ${moment().unix() - start} sec`);
|
76
|
+
if (failedBatches.length !== 0)
|
77
|
+
log.info(`${failedBatches.length}/${rewardBreakdownsToCreate.length} batches failed.`);
|
78
|
+
if (failedBatches.length === 0) {
|
79
|
+
await BucketService.deleteFile(`rewards/${process.env.CHAIN_ID}-${process.env.ROOT}.gz`, `merkl-rewards-lake-${process.env.ENV}`, `merkl-data-${process.env.ENV}`);
|
80
|
+
}
|
81
|
+
};
|
82
|
+
main();
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const main: () => Promise<void>;
|
@@ -0,0 +1,102 @@
|
|
1
|
+
// ─── Rewards ETL ─────────────────────────────────────────────────────────────
|
2
|
+
if (!process.env.ENV || !process.env.CHAIN_ID || !process.env.ROOT)
|
3
|
+
throw new Error("[ENV]: missing variable");
|
4
|
+
import { BucketService } from "../../modules/v4/bucket/bucket.service";
|
5
|
+
import { log } from "../../utils/logger";
|
6
|
+
import { apiDbClient } from "../../utils/prisma";
|
7
|
+
import moment from "moment";
|
8
|
+
// ─── Constants ───────────────────────────────────────────────
|
9
|
+
const BATCH_SIZE = 20_000;
|
10
|
+
// ─── Global Variables ────────────────────────────────────────
|
11
|
+
const rewardsToCreate = [[]];
|
12
|
+
const failedBatches = [];
|
13
|
+
// ─── Extract ─────────────────────────────────────────────────────────────────
|
14
|
+
const extract = async () => {
|
15
|
+
let count = 0;
|
16
|
+
let currentBatchIndex = 0;
|
17
|
+
await BucketService.readStreamFromBucket(`rewards/${process.env.CHAIN_ID}-${process.env.ROOT}.gz`, `merkl-rewards-lake-${process.env.ENV}`, `merkl-data-${process.env.ENV}`, async (x) => {
|
18
|
+
rewardsToCreate[currentBatchIndex].push(transform(JSON.parse(x)));
|
19
|
+
if (rewardsToCreate[currentBatchIndex].length >= BATCH_SIZE) {
|
20
|
+
try {
|
21
|
+
count += await load(rewardsToCreate[currentBatchIndex]);
|
22
|
+
log.info(`Successfully inserted a batch of ${count} rewards`);
|
23
|
+
}
|
24
|
+
catch (err) {
|
25
|
+
console.error(`Failed to insert a batch, adding it to the fail queue.\n${err}`);
|
26
|
+
failedBatches.push(currentBatchIndex);
|
27
|
+
}
|
28
|
+
currentBatchIndex++;
|
29
|
+
rewardsToCreate.push([]);
|
30
|
+
}
|
31
|
+
return;
|
32
|
+
});
|
33
|
+
// ─── Current Batch Not In DB Yet ─────────────────────────────────────
|
34
|
+
try {
|
35
|
+
const count = await load(rewardsToCreate[currentBatchIndex]);
|
36
|
+
if (count !== 0)
|
37
|
+
log.info(`Successfully inserted a batch of ${count} rewards`);
|
38
|
+
}
|
39
|
+
catch (err) {
|
40
|
+
console.error(`Failed to insert a batch, adding it to the fail queue.\n${err}`);
|
41
|
+
failedBatches.push(currentBatchIndex);
|
42
|
+
}
|
43
|
+
return count;
|
44
|
+
};
|
45
|
+
// ─── Transform ───────────────────────────────────────────────────────────────
|
46
|
+
const transform = (reward) => {
|
47
|
+
const rewardTokenId = Bun.hash(`${process.env.CHAIN_ID}${reward.rewardToken}`).toString();
|
48
|
+
const id = Bun.hash(`${process.env.ROOT}${reward.recipient}${rewardTokenId}`).toString();
|
49
|
+
return {
|
50
|
+
id,
|
51
|
+
root: reward.root,
|
52
|
+
amount: reward.amount,
|
53
|
+
pending: reward.pending,
|
54
|
+
claimed: reward.claimed,
|
55
|
+
recipient: reward.recipient,
|
56
|
+
rewardTokenId,
|
57
|
+
proofs: reward.proofs,
|
58
|
+
};
|
59
|
+
};
|
60
|
+
// ─── Load ────────────────────────────────────────────────────────────────────
|
61
|
+
const load = async (rewards) => {
|
62
|
+
// ─── Load Users ──────────────────────────────────────────────────────
|
63
|
+
await apiDbClient.user.createMany({
|
64
|
+
data: rewards.map(r => {
|
65
|
+
return {
|
66
|
+
address: r.recipient,
|
67
|
+
};
|
68
|
+
}),
|
69
|
+
skipDuplicates: true,
|
70
|
+
});
|
71
|
+
// ─── Load Rewards ────────────────────────────────────────────────────
|
72
|
+
return (await apiDbClient.reward.createMany({
|
73
|
+
data: rewards,
|
74
|
+
skipDuplicates: true,
|
75
|
+
})).count;
|
76
|
+
};
|
77
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
78
|
+
export const main = async () => {
|
79
|
+
const start = moment().unix();
|
80
|
+
// ─── Create Merkle Root If Not Exists ────────────────────────────────
|
81
|
+
await apiDbClient.merklRoot.upsert({
|
82
|
+
create: {
|
83
|
+
root: process.env.ROOT,
|
84
|
+
chainId: +process.env.CHAIN_ID,
|
85
|
+
epoch: Math.floor(start / 3_600),
|
86
|
+
timestamp: start,
|
87
|
+
},
|
88
|
+
update: {},
|
89
|
+
where: {
|
90
|
+
root: process.env.ROOT,
|
91
|
+
},
|
92
|
+
});
|
93
|
+
// ─── Start Rewards ETL ───────────────────────────────────────────────
|
94
|
+
const count = await extract();
|
95
|
+
log.info(`✅ Successfully created ${count} new records in ${moment().unix() - start} sec`);
|
96
|
+
if (failedBatches.length !== 0)
|
97
|
+
log.info(`${failedBatches.length}/${rewardsToCreate.length} batches failed.`);
|
98
|
+
if (failedBatches.length === 0) {
|
99
|
+
await BucketService.deleteFile(`rewards/${process.env.CHAIN_ID}-${process.env.ROOT}.gz`, `merkl-rewards-lake-${process.env.ENV}`, `merkl-data-${process.env.ENV}`);
|
100
|
+
}
|
101
|
+
};
|
102
|
+
main();
|