@merkl/api 0.20.158 → 0.20.160

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/dist/database/api/.generated/edge.js +6 -2
  2. package/dist/database/api/.generated/index.js +10 -2
  3. package/dist/database/api/.generated/libquery_engine-linux-arm64-openssl-3.0.x.so.node +0 -0
  4. package/dist/database/api/.generated/package.json +1 -1
  5. package/dist/database/api/.generated/schema.prisma +1 -1
  6. package/dist/database/engine/.generated/edge.js +6 -2
  7. package/dist/database/engine/.generated/index.js +10 -2
  8. package/dist/database/engine/.generated/libquery_engine-linux-arm64-openssl-3.0.x.so.node +0 -0
  9. package/dist/database/engine/.generated/package.json +1 -1
  10. package/dist/database/engine/.generated/schema.prisma +1 -1
  11. package/dist/src/eden/index.d.ts +747 -747
  12. package/dist/src/engine/deprecated/dynamicData/factory.js +1 -0
  13. package/dist/src/engine/deprecated/dynamicData/implementations/EventBased.js +29 -5
  14. package/dist/src/engine/deprecated/erc20SubTypeProcessors/implementations/processorMapping.d.ts +1 -3
  15. package/dist/src/engine/implementations/Erc20/subTypes/implementations/lendleVaults/tvl.js +1 -2
  16. package/dist/src/engine/implementations/JsonAirdrop/metadata.d.ts +2 -2
  17. package/dist/src/engine/implementations/Locker/metadata.d.ts +24 -0
  18. package/dist/src/engine/implementations/Locker/metadata.js +36 -0
  19. package/dist/src/engine/implementations/Locker/tvl.d.ts +7 -0
  20. package/dist/src/engine/implementations/Locker/tvl.js +21 -0
  21. package/dist/src/engine/implementations/MultiLog/tvl.d.ts +1 -12
  22. package/dist/src/engine/implementations/MultiLog/tvl.js +1 -61
  23. package/dist/src/engine/metadata/factory.js +1 -0
  24. package/dist/src/engine/tvl/logStates.d.ts +17 -0
  25. package/dist/src/engine/tvl/logStates.js +106 -0
  26. package/dist/src/index.d.ts +255 -255
  27. package/dist/src/index.js +2 -2
  28. package/dist/src/modules/v4/boost/boost.controller.d.ts +1 -1
  29. package/dist/src/modules/v4/bucket/bucket.service.d.ts +2 -0
  30. package/dist/src/modules/v4/bucket/bucket.service.js +3 -0
  31. package/dist/src/modules/v4/campaign/campaign.controller.d.ts +41 -41
  32. package/dist/src/modules/v4/campaign/campaign.controller.js +0 -1
  33. package/dist/src/modules/v4/campaign/campaign.repository.d.ts +36 -36
  34. package/dist/src/modules/v4/campaign/campaign.service.d.ts +76 -76
  35. package/dist/src/modules/v4/campaign/campaign.test.controller.d.ts +18 -18
  36. package/dist/src/modules/v4/chain/chain.controller.d.ts +11 -11
  37. package/dist/src/modules/v4/chain/chain.repository.d.ts +13 -13
  38. package/dist/src/modules/v4/chain/chain.service.d.ts +14 -14
  39. package/dist/src/modules/v4/computedValue/computedValue.controller.d.ts +1 -1
  40. package/dist/src/modules/v4/computedValue/computedValue.repository.d.ts +1 -1
  41. package/dist/src/modules/v4/computedValue/computedValue.service.d.ts +1 -1
  42. package/dist/src/modules/v4/creator/creator.controller.d.ts +5 -5
  43. package/dist/src/modules/v4/creator/creator.repository.d.ts +5 -5
  44. package/dist/src/modules/v4/creator/creator.service.d.ts +4 -4
  45. package/dist/src/modules/v4/enso/enso.service.d.ts +2 -2
  46. package/dist/src/modules/v4/explorer/explorer.controller.d.ts +3 -3
  47. package/dist/src/modules/v4/explorer/explorer.repository.d.ts +4 -4
  48. package/dist/src/modules/v4/explorer/explorer.service.d.ts +5 -5
  49. package/dist/src/modules/v4/interaction/interaction.controller.d.ts +2 -2
  50. package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +105 -105
  51. package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +3 -3
  52. package/dist/src/modules/v4/opportunity/opportunity.repository.d.ts +117 -117
  53. package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +122 -122
  54. package/dist/src/modules/v4/price/price.controller.d.ts +4 -4
  55. package/dist/src/modules/v4/price/price.repository.d.ts +5 -5
  56. package/dist/src/modules/v4/price/price.service.d.ts +4 -4
  57. package/dist/src/modules/v4/programPayload/programPayload.model.d.ts +18 -1
  58. package/dist/src/modules/v4/programPayload/programPayload.repository.d.ts +14 -7
  59. package/dist/src/modules/v4/programPayload/programPayload.repository.js +128 -8
  60. package/dist/src/modules/v4/protocol/protocol.controller.d.ts +24 -24
  61. package/dist/src/modules/v4/protocol/protocol.model.d.ts +1 -1
  62. package/dist/src/modules/v4/protocol/protocol.model.js +1 -0
  63. package/dist/src/modules/v4/protocol/protocol.repository.d.ts +14 -14
  64. package/dist/src/modules/v4/protocol/protocol.service.d.ts +6 -6
  65. package/dist/src/modules/v4/reward/reward.controller.d.ts +1 -1
  66. package/dist/src/modules/v4/reward/reward.controller.js +0 -1
  67. package/dist/src/modules/v4/reward/reward.repository.d.ts +12 -12
  68. package/dist/src/modules/v4/reward/reward.service.d.ts +82 -82
  69. package/dist/src/modules/v4/router.d.ts +255 -255
  70. package/dist/src/modules/v4/status/status.controller.d.ts +5 -5
  71. package/dist/src/modules/v4/status/status.repository.d.ts +11 -11
  72. package/dist/src/modules/v4/status/status.service.d.ts +7 -7
  73. package/dist/src/modules/v4/token/token.controller.d.ts +11 -11
  74. package/dist/src/modules/v4/token/token.repository.d.ts +4 -4
  75. package/dist/src/modules/v4/token/token.service.d.ts +14 -14
  76. package/dist/src/modules/v4/token/token.service.js +3 -3
  77. package/dist/src/modules/v4/uniswap/uniswap.repository.d.ts +1 -1
  78. package/dist/src/modules/v4/user/user.controller.d.ts +24 -24
  79. package/dist/tsconfig.package.tsbuildinfo +1 -1
  80. package/package.json +3 -3
@@ -62,5 +62,6 @@ const map = {
62
62
  [Campaign.ERC721]: new ERC721DynamicData(),
63
63
  [Campaign.ERC721FIXAPR]: new ERC721DynamicData(),
64
64
  [Campaign.MULTILOG]: new DefaultDynamicData(),
65
+ [Campaign.LOCKER]: new DefaultDynamicData(),
65
66
  };
66
67
  export const dynamicDataBuilderFactory = (campaignType) => map[campaignType];
@@ -10,15 +10,16 @@ import moment from "moment";
10
10
  * @dev important: using the most recent state save with current prices
11
11
  * it's only an estimate
12
12
  */
13
- async function computeEventBasedPoolRewardsFromMostRecentStateSave(chainId, campaignID, priceCurrency, decimalsCurrency) {
13
+ async function computeEventBasedPoolRewardsFromMostRecentStateSave(chainId, campaignID, priceCurrency, decimalsCurrency, computeMethod) {
14
14
  let stateSave;
15
15
  let blockNumber;
16
16
  let states = {};
17
17
  try {
18
18
  const currentBlock = await ChainInteractionService(chainId).getBlockNumber();
19
- const mostRecentStateSave = await engineDbClient.stateSave.findFirst({
19
+ const id = `EventBasedProcessor_${computeMethod}_${chainId}_${campaignID}`;
20
+ let mostRecentStateSave = await engineDbClient.stateSave.findFirst({
20
21
  where: {
21
- id: `EventBasedProcessor_${chainId}_${campaignID}`,
22
+ id: id,
22
23
  blockNumber: {
23
24
  lte: currentBlock,
24
25
  },
@@ -27,6 +28,20 @@ async function computeEventBasedPoolRewardsFromMostRecentStateSave(chainId, camp
27
28
  blockNumber: "desc",
28
29
  },
29
30
  });
31
+ if (!mostRecentStateSave) {
32
+ const historicalId = `EventBasedProcessor_${chainId}_${campaignID}`;
33
+ mostRecentStateSave = await engineDbClient.stateSave.findFirst({
34
+ where: {
35
+ id: historicalId,
36
+ blockNumber: {
37
+ lte: currentBlock,
38
+ },
39
+ },
40
+ orderBy: {
41
+ blockNumber: "desc",
42
+ },
43
+ });
44
+ }
30
45
  stateSave = mostRecentStateSave.state;
31
46
  blockNumber = mostRecentStateSave?.blockNumber;
32
47
  states = stateSave.states;
@@ -66,10 +81,19 @@ export class EventBasedDynamicData {
66
81
  chainId: chainId,
67
82
  symbol: symbolCurrency0,
68
83
  }));
69
- const { distributedRewards } = await computeEventBasedPoolRewardsFromMostRecentStateSave(chainId, campaign.campaignId, priceToken, decimalsCurrency0);
84
+ const { distributedRewards } = await computeEventBasedPoolRewardsFromMostRecentStateSave(chainId, campaign.campaignId, priceToken, decimalsCurrency0, campaign.campaignParameters.computeScoreParameters.computeMethod);
70
85
  const c = campaign;
71
86
  const amount = BN2Number(c.amount, c.campaignParameters.decimalsRewardToken);
72
- const multiplier = BN2Number(c.campaignParameters.topicToData[0].multipliers[0], 12 + 9);
87
+ let multiplier = 1;
88
+ try {
89
+ const topicData = c.campaignParameters.topicToData[0];
90
+ multiplier = BN2Number(topicData.multipliers[0], 12 + 9);
91
+ }
92
+ catch {
93
+ // Current legacy fix for now, can be removed on the 01/05/25
94
+ const topicData = c.campaignParameters.topicToData[0];
95
+ multiplier = BN2Number(topicData.multiplier, 12 + 9);
96
+ }
73
97
  const startTimestamp = BN2Number(c.startTimestamp, 0);
74
98
  const endTimestamp = BN2Number(c.endTimestamp, 0);
75
99
  const isLive = moment().unix() > startTimestamp && moment().unix() < endTimestamp;
@@ -1,6 +1,4 @@
1
1
  import { Erc20SubType } from "@/engine/implementations/Erc20/subTypes";
2
2
  import { GenericProcessor } from "../GenericProcessor";
3
3
  import type { callKeys, dataRaw, dataType } from "../GenericProcessor";
4
- export declare const processorMapping: {
5
- [key in Erc20SubType]: typeof GenericProcessor<callKeys, dataRaw, dataType>;
6
- };
4
+ export declare const processorMapping: Record<Erc20SubType, typeof GenericProcessor<callKeys, dataRaw, dataType>>;
@@ -33,8 +33,7 @@ export class LendleTVLBuilder {
33
33
  if (!underlyingToken.decimals || !underlyingToken.price) {
34
34
  throw new Error(`Missing decimals or price for token ${underlyingToken.address}`);
35
35
  }
36
- const totalAssets = bigIntToNumber(underlyingPerShare, 18) *
37
- bigIntToNumber(totalSupply, campaign.campaignParameters.decimalsTargetToken);
36
+ const totalAssets = bigIntToNumber(BigInt(underlyingPerShare) * BigInt(totalSupply), campaign.campaignParameters.decimalsTargetToken + underlyingToken.decimals);
38
37
  const tvl = totalAssets * underlyingToken.price;
39
38
  tvls.push({
40
39
  campaign,
@@ -10,13 +10,13 @@ export declare class JsonAirdropMetadata implements MetadataBuilder<campaignType
10
10
  chainId: number;
11
11
  address: string;
12
12
  }[];
13
- mainProtocol: "splice" | "reserve" | "morpho" | "quickswap" | "euler" | "aura" | "poolside" | "gearbox" | "filament" | "fluid" | "compound" | "ionic" | "layerbank" | "moonwell" | "fraxlend" | "fenix" | "ra" | "syncswap" | "beefy" | "aerodrome" | "velodrome" | "curve" | "toros" | "akron" | "enzyme" | "dragonswap" | "koi" | "rfx" | "woofi" | "pendle" | "zkSwapThreePool" | "maha" | "tempest" | "holdstation" | "venus" | "reactor_fusion" | "vicuna" | "curveNPool" | "satlayer" | "veda" | "cian" | "concrete" | "hourglass" | "katana" | "gamma" | "stability" | "uniswap" | "ambient" | "arthswap" | "base-swap" | "camelot" | "crust" | "horiza" | "izumi" | "kim" | "pancake-swap" | "ramses" | "retro" | "stryke" | "sushi-swap" | "swapr" | "thruster" | "voltage" | "zero" | "supswap" | "zk-swap" | "thirdtrade" | "swap-x" | "balancer" | "cross_curve" | "neptune" | "maverick" | "trader-joe" | "hanji" | "radiant" | "aave" | "ironclad" | "sturdy" | "frax" | "silo" | "dolomite" | "badger" | "ajna" | "ion" | "eigenlayer" | "vest" | "zerolend" | "lnd" | "hyperdrive" | "oku" | "kyo" | "sonex" | "lendle" | "tako-tako" | "equalizer" | "spectra" | "beraborrow" | "superlend" | "avalon" | "iguana" | "xlend" | "sake" | "sonicmarket" | "angles" | "bunni" | "beratrax" | "yei" | "gammaswap" | "uranium" | undefined;
13
+ mainProtocol: "splice" | "reserve" | "morpho" | "quickswap" | "euler" | "aura" | "poolside" | "gearbox" | "filament" | "fluid" | "compound" | "ionic" | "layerbank" | "moonwell" | "fraxlend" | "fenix" | "ra" | "syncswap" | "beefy" | "aerodrome" | "velodrome" | "curve" | "toros" | "akron" | "enzyme" | "dragonswap" | "koi" | "rfx" | "woofi" | "pendle" | "zkSwapThreePool" | "maha" | "tempest" | "holdstation" | "venus" | "reactor_fusion" | "vicuna" | "curveNPool" | "satlayer" | "veda" | "cian" | "concrete" | "hourglass" | "katana" | "gamma" | "stability" | "uniswap" | "ambient" | "arthswap" | "base-swap" | "camelot" | "crust" | "horiza" | "izumi" | "kim" | "pancake-swap" | "ramses" | "retro" | "stryke" | "sushi-swap" | "swapr" | "thruster" | "voltage" | "zero" | "supswap" | "zk-swap" | "thirdtrade" | "swap-x" | "balancer" | "cross_curve" | "neptune" | "maverick" | "trader-joe" | "hanji" | "radiant" | "aave" | "ironclad" | "sturdy" | "frax" | "silo" | "dolomite" | "badger" | "ajna" | "ion" | "eigenlayer" | "vest" | "zerolend" | "lnd" | "hyperdrive" | "oku" | "kyo" | "sonex" | "lendle" | "tako-tako" | "equalizer" | "spectra" | "beraborrow" | "superlend" | "avalon" | "iguana" | "xlend" | "sake" | "sonicmarket" | "angles" | "bunni" | "beratrax" | "yei" | "gammaswap" | "uranium" | "puffer" | undefined;
14
14
  depositUrl?: undefined;
15
15
  } | {
16
16
  action: "DROP";
17
17
  name: string;
18
18
  tokens: never[];
19
- mainProtocol: "splice" | "reserve" | "morpho" | "quickswap" | "euler" | "aura" | "poolside" | "gearbox" | "filament" | "fluid" | "compound" | "ionic" | "layerbank" | "moonwell" | "fraxlend" | "fenix" | "ra" | "syncswap" | "beefy" | "aerodrome" | "velodrome" | "curve" | "toros" | "akron" | "enzyme" | "dragonswap" | "koi" | "rfx" | "woofi" | "pendle" | "zkSwapThreePool" | "maha" | "tempest" | "holdstation" | "venus" | "reactor_fusion" | "vicuna" | "curveNPool" | "satlayer" | "veda" | "cian" | "concrete" | "hourglass" | "katana" | "gamma" | "stability" | "uniswap" | "ambient" | "arthswap" | "base-swap" | "camelot" | "crust" | "horiza" | "izumi" | "kim" | "pancake-swap" | "ramses" | "retro" | "stryke" | "sushi-swap" | "swapr" | "thruster" | "voltage" | "zero" | "supswap" | "zk-swap" | "thirdtrade" | "swap-x" | "balancer" | "cross_curve" | "neptune" | "maverick" | "trader-joe" | "hanji" | "radiant" | "aave" | "ironclad" | "sturdy" | "frax" | "silo" | "dolomite" | "badger" | "ajna" | "ion" | "eigenlayer" | "vest" | "zerolend" | "lnd" | "hyperdrive" | "oku" | "kyo" | "sonex" | "lendle" | "tako-tako" | "equalizer" | "spectra" | "beraborrow" | "superlend" | "avalon" | "iguana" | "xlend" | "sake" | "sonicmarket" | "angles" | "bunni" | "beratrax" | "yei" | "gammaswap" | "uranium" | undefined;
19
+ mainProtocol: "splice" | "reserve" | "morpho" | "quickswap" | "euler" | "aura" | "poolside" | "gearbox" | "filament" | "fluid" | "compound" | "ionic" | "layerbank" | "moonwell" | "fraxlend" | "fenix" | "ra" | "syncswap" | "beefy" | "aerodrome" | "velodrome" | "curve" | "toros" | "akron" | "enzyme" | "dragonswap" | "koi" | "rfx" | "woofi" | "pendle" | "zkSwapThreePool" | "maha" | "tempest" | "holdstation" | "venus" | "reactor_fusion" | "vicuna" | "curveNPool" | "satlayer" | "veda" | "cian" | "concrete" | "hourglass" | "katana" | "gamma" | "stability" | "uniswap" | "ambient" | "arthswap" | "base-swap" | "camelot" | "crust" | "horiza" | "izumi" | "kim" | "pancake-swap" | "ramses" | "retro" | "stryke" | "sushi-swap" | "swapr" | "thruster" | "voltage" | "zero" | "supswap" | "zk-swap" | "thirdtrade" | "swap-x" | "balancer" | "cross_curve" | "neptune" | "maverick" | "trader-joe" | "hanji" | "radiant" | "aave" | "ironclad" | "sturdy" | "frax" | "silo" | "dolomite" | "badger" | "ajna" | "ion" | "eigenlayer" | "vest" | "zerolend" | "lnd" | "hyperdrive" | "oku" | "kyo" | "sonex" | "lendle" | "tako-tako" | "equalizer" | "spectra" | "beraborrow" | "superlend" | "avalon" | "iguana" | "xlend" | "sake" | "sonicmarket" | "angles" | "bunni" | "beratrax" | "yei" | "gammaswap" | "uranium" | "puffer" | undefined;
20
20
  depositUrl: any;
21
21
  }>;
22
22
  static generateUrl(_computeChainId: ChainId, params: CampaignParameters<campaignType>["campaignParameters"]): any;
@@ -0,0 +1,24 @@
1
+ import type { MetadataBuilder } from "@/engine/metadata/interface";
2
+ import type { CampaignWithParams } from "@/modules/v4/campaign/campaign.model";
3
+ import type { CampaignParameters, Campaign as CampaignType, ChainId } from "@sdk";
4
+ type campaignType = CampaignType.LOCKER;
5
+ export declare class LockerMetadata implements MetadataBuilder<campaignType> {
6
+ build(campaign: Omit<CampaignWithParams<campaignType>, "manualOverrides">): Promise<{
7
+ action: "SWAP";
8
+ name: string;
9
+ tokens: {
10
+ chainId: number;
11
+ address: string;
12
+ }[];
13
+ mainProtocol: "puffer";
14
+ depositUrl: any;
15
+ } | {
16
+ action: string;
17
+ name: string;
18
+ tokens: never[];
19
+ mainProtocol: undefined;
20
+ depositUrl?: undefined;
21
+ }>;
22
+ static generateUrl(_computeChainId: ChainId, params: CampaignParameters<campaignType>["campaignParameters"]): any;
23
+ }
24
+ export {};
@@ -0,0 +1,36 @@
1
+ import { capitalize } from "@/utils/caseChanges";
2
+ export class LockerMetadata {
3
+ async build(campaign) {
4
+ const { params, computeChainId } = campaign;
5
+ try {
6
+ const action = "SWAP";
7
+ const mainProtocolId = "puffer";
8
+ let name = `Lock on ${capitalize(mainProtocolId)}`;
9
+ let tokens = [];
10
+ let hardcodeUrl;
11
+ if (params.lockerContract === "0x48e8dE138C246c14248C94d2D616a2F9eb4590D2") {
12
+ hardcodeUrl = "https://app.puffer.fi/stake";
13
+ name = `Lock CARROT on ${capitalize(mainProtocolId)}`;
14
+ tokens = [{ chainId: computeChainId, address: "0x8A5A5DE9db5770123Ff2145F59e9F20047f0A8EC" }];
15
+ }
16
+ return {
17
+ action,
18
+ name,
19
+ tokens,
20
+ mainProtocol: mainProtocolId,
21
+ depositUrl: hardcodeUrl ?? LockerMetadata.generateUrl(computeChainId, params),
22
+ };
23
+ }
24
+ catch {
25
+ return {
26
+ action: "INVALID",
27
+ name: "Locker Campaign",
28
+ tokens: [],
29
+ mainProtocol: undefined,
30
+ };
31
+ }
32
+ }
33
+ static generateUrl(_computeChainId, params) {
34
+ return params.url;
35
+ }
36
+ }
@@ -0,0 +1,7 @@
1
+ import type { TVLBuilder, TVLData } from "@/engine/tvl/interface";
2
+ import { type CampaignParameters, Campaign as CampaignType, type MerklChainId } from "@sdk";
3
+ type campaignType = CampaignType.LOCKER;
4
+ export declare class LockerTVLBuilder implements TVLBuilder<campaignType> {
5
+ build(computeChainId: MerklChainId, campaigns: CampaignParameters<campaignType>[]): Promise<TVLData<CampaignType.LOCKER>>;
6
+ }
7
+ export {};
@@ -0,0 +1,21 @@
1
+ import { computeLockerAmountFromMostRecentStateSave } from "@/engine/tvl/logStates";
2
+ import { TokenService } from "@/modules/v4/token/token.service";
3
+ import { Campaign as CampaignType } from "@sdk";
4
+ export class LockerTVLBuilder {
5
+ async build(computeChainId, campaigns) {
6
+ const tvls = [];
7
+ for (const campaign of campaigns) {
8
+ const lockedAmount = (await computeLockerAmountFromMostRecentStateSave(computeChainId, CampaignType.LOCKER, campaign)).lockedAmount;
9
+ let tvl = 1;
10
+ if (campaign.campaignParameters.lockerContract === "0x48e8dE138C246c14248C94d2D616a2F9eb4590D2") {
11
+ tvl = lockedAmount * (await TokenService.getPrice({ address: "0x8A5A5DE9db5770123Ff2145F59e9F20047f0A8EC" }));
12
+ tvls.push({
13
+ campaign: campaign,
14
+ tvl,
15
+ tvlBreakdown: [],
16
+ });
17
+ }
18
+ }
19
+ return tvls;
20
+ }
21
+ }
@@ -1,18 +1,7 @@
1
1
  import type { TVLBuilder, TVLData } from "@/engine/tvl/interface";
2
- import { type CampaignParameters, Campaign as CampaignType, type MerklChainId } from "@sdk";
2
+ import { type CampaignParameters, type Campaign as CampaignType, type MerklChainId } from "@sdk";
3
3
  type campaignType = CampaignType.MULTILOG;
4
- type composedType = CampaignType.ERC20LOGPROCESSOR | CampaignType.EVENT_BASED | CampaignType.ERC20REBASELOGPROCESSOR;
5
4
  export declare class MultiLogTVLBuilder implements TVLBuilder<campaignType> {
6
5
  build(_computeChainId: MerklChainId, campaigns: CampaignParameters<campaignType>[]): Promise<TVLData<CampaignType.MULTILOG>>;
7
- getIdPerCampaignType(campaignType: CampaignType, campaign: CampaignParameters<composedType>): string | undefined;
8
- /**
9
- * Compute TVL
10
- * @dev important: using the most recent state save with current prices
11
- * it's only an estimate
12
- */
13
- computeEventBasedPoolRewardsFromMostRecentStateSave(chainId: MerklChainId, campaignType: CampaignType, campaign: CampaignParameters<composedType>): Promise<{
14
- distributedRewards: number;
15
- blockNumber: number;
16
- }>;
17
6
  }
18
7
  export {};
@@ -1,7 +1,5 @@
1
- import { BucketService } from "@/modules/v4/bucket/bucket.service";
2
1
  import { DynamicDataService } from "@/modules/v4/dynamicData/dynamicData.service";
3
- import { engineDbClient } from "@db";
4
- import { BN2Number, Campaign as CampaignType, ChainInteractionService, ComposedType, } from "@sdk";
2
+ import { ComposedType } from "@sdk";
5
3
  export class MultiLogTVLBuilder {
6
4
  async build(_computeChainId, campaigns) {
7
5
  const tvls = [];
@@ -25,62 +23,4 @@ export class MultiLogTVLBuilder {
25
23
  }
26
24
  return tvls;
27
25
  }
28
- // TODO: handle multiple main composed campaigns
29
- getIdPerCampaignType(campaignType, campaign) {
30
- switch (campaignType) {
31
- case CampaignType.ERC20LOGPROCESSOR:
32
- case CampaignType.ERC20REBASELOGPROCESSOR:
33
- campaign = campaign;
34
- return `ERC20LogProcessor_${campaign.computeChainId}_${campaign.campaignParameters.targetToken}`;
35
- case CampaignType.EVENT_BASED:
36
- campaign = campaign;
37
- return `EventBasedProcessor_${campaign.computeChainId}_${campaign.campaignId}`;
38
- }
39
- }
40
- /**
41
- * Compute TVL
42
- * @dev important: using the most recent state save with current prices
43
- * it's only an estimate
44
- */
45
- // TODO: handle multiple main composed campaigns
46
- async computeEventBasedPoolRewardsFromMostRecentStateSave(chainId, campaignType, campaign) {
47
- let stateSave;
48
- let blockNumber;
49
- let states = {};
50
- try {
51
- const currentBlock = await ChainInteractionService(chainId).getBlockNumber();
52
- const mostRecentStateSave = await engineDbClient.stateSave.findFirst({
53
- where: {
54
- id: this.getIdPerCampaignType(campaignType, campaign),
55
- blockNumber: {
56
- lte: currentBlock,
57
- },
58
- },
59
- orderBy: {
60
- blockNumber: "desc",
61
- },
62
- });
63
- stateSave = mostRecentStateSave.state;
64
- blockNumber = mostRecentStateSave?.blockNumber;
65
- states = stateSave.states;
66
- // const globalState = stateSave.globalState as { tick: number; liquidity: string };
67
- }
68
- catch { }
69
- const { fileName, bucketName } = states;
70
- // Bucket service
71
- let distributedRewards = 0;
72
- if (!fileName || !bucketName) {
73
- return { distributedRewards, blockNumber: blockNumber };
74
- }
75
- try {
76
- const bucket = new BucketService("merkl-production-states", "merkl-production");
77
- const storedStates = JSON.parse(await bucket.pull(fileName));
78
- for (const [_, { value, params: _params }] of Object.entries(storedStates)) {
79
- distributedRewards += BN2Number(value.allTimeValue, 18);
80
- }
81
- distributedRewards = Math.max(distributedRewards, 1);
82
- }
83
- catch { }
84
- return { distributedRewards, blockNumber: blockNumber };
85
- }
86
26
  }
@@ -68,5 +68,6 @@ const map = {
68
68
  [Campaign.ERC721]: new Erc721Metadata(),
69
69
  [Campaign.ERC721FIXAPR]: new Erc721Metadata(),
70
70
  [Campaign.MULTILOG]: new MultiLogMetaData(),
71
+ [Campaign.LOCKER]: new DefaultMetadata(), // TODO
71
72
  };
72
73
  export const metadataBuilderFactory = (campaignType) => map[campaignType];
@@ -0,0 +1,17 @@
1
+ import { type CampaignParameters, Campaign as CampaignType, type MerklChainId } from "@sdk";
2
+ type logProcessorType = CampaignType.ERC20LOGPROCESSOR | CampaignType.EVENT_BASED | CampaignType.LOCKER | CampaignType.ERC20REBASELOGPROCESSOR;
3
+ export declare function getIdPerCampaignType(campaignType: CampaignType, campaign: CampaignParameters<logProcessorType>): string | undefined;
4
+ /**
5
+ * Compute TVL
6
+ * @dev important: using the most recent state save with current prices
7
+ * it's only an estimate
8
+ */
9
+ export declare function computeEventBasedPoolRewardsFromMostRecentStateSave(chainId: MerklChainId, campaignType: CampaignType, campaign: CampaignParameters<logProcessorType>): Promise<{
10
+ distributedRewards: number;
11
+ blockNumber: number;
12
+ }>;
13
+ export declare function computeLockerAmountFromMostRecentStateSave(chainId: MerklChainId, campaignType: CampaignType, campaign: CampaignParameters<CampaignType.LOCKER>): Promise<{
14
+ lockedAmount: number;
15
+ blockNumber: number;
16
+ }>;
17
+ export {};
@@ -0,0 +1,106 @@
1
+ import { BucketService } from "@/modules/v4/bucket/bucket.service";
2
+ import { engineDbClient } from "@db";
3
+ import { BN2Number, Campaign as CampaignType, ChainInteractionService, } from "@sdk";
4
+ // TODO: handle multiple main composed campaigns
5
+ export function getIdPerCampaignType(campaignType, campaign) {
6
+ switch (campaignType) {
7
+ case CampaignType.ERC20LOGPROCESSOR:
8
+ case CampaignType.ERC20REBASELOGPROCESSOR:
9
+ campaign = campaign;
10
+ return `ERC20LogProcessor_${campaign.computeChainId}_${campaign.campaignParameters.targetToken}`;
11
+ case CampaignType.EVENT_BASED:
12
+ campaign = campaign;
13
+ return `EventBasedProcessor_${campaign.computeChainId}_${campaign.campaignId}`;
14
+ case CampaignType.LOCKER:
15
+ campaign = campaign;
16
+ return `LOCKER_${campaign.campaignParameters.lockerContract}`;
17
+ }
18
+ }
19
+ /**
20
+ * Compute TVL
21
+ * @dev important: using the most recent state save with current prices
22
+ * it's only an estimate
23
+ */
24
+ // TODO: handle multiple main composed campaigns
25
+ export async function computeEventBasedPoolRewardsFromMostRecentStateSave(chainId, campaignType, campaign) {
26
+ let stateSave;
27
+ let blockNumber;
28
+ let states = {};
29
+ try {
30
+ const currentBlock = await ChainInteractionService(chainId).getBlockNumber();
31
+ const mostRecentStateSave = await engineDbClient.stateSave.findFirst({
32
+ where: {
33
+ id: getIdPerCampaignType(campaignType, campaign),
34
+ blockNumber: {
35
+ lte: currentBlock,
36
+ },
37
+ },
38
+ orderBy: {
39
+ blockNumber: "desc",
40
+ },
41
+ });
42
+ stateSave = mostRecentStateSave.state;
43
+ blockNumber = mostRecentStateSave?.blockNumber;
44
+ states = stateSave.states;
45
+ // const globalState = stateSave.globalState as { tick: number; liquidity: string };
46
+ }
47
+ catch { }
48
+ const { fileName, bucketName } = states;
49
+ // Bucket service
50
+ let distributedRewards = 0;
51
+ if (!fileName || !bucketName) {
52
+ return { distributedRewards, blockNumber: blockNumber };
53
+ }
54
+ try {
55
+ const bucket = new BucketService("merkl-production-states", "merkl-production");
56
+ const storedStates = JSON.parse(await bucket.pull(fileName));
57
+ for (const [_, { value, params: _params }] of Object.entries(storedStates)) {
58
+ distributedRewards += BN2Number(value.allTimeValue, 18);
59
+ }
60
+ distributedRewards = Math.max(distributedRewards, 1);
61
+ }
62
+ catch { }
63
+ return { distributedRewards, blockNumber: blockNumber };
64
+ }
65
+ export async function computeLockerAmountFromMostRecentStateSave(chainId, campaignType, campaign) {
66
+ let stateSave;
67
+ let blockNumber;
68
+ let states = {};
69
+ try {
70
+ const currentBlock = await ChainInteractionService(chainId).getBlockNumber();
71
+ const mostRecentStateSave = await engineDbClient.stateSave.findFirst({
72
+ where: {
73
+ id: getIdPerCampaignType(campaignType, campaign),
74
+ blockNumber: {
75
+ lte: currentBlock,
76
+ },
77
+ },
78
+ orderBy: {
79
+ blockNumber: "desc",
80
+ },
81
+ });
82
+ stateSave = mostRecentStateSave.state;
83
+ blockNumber = mostRecentStateSave?.blockNumber;
84
+ states = stateSave.states;
85
+ // const globalState = stateSave.globalState as { tick: number; liquidity: string };
86
+ }
87
+ catch { }
88
+ const { fileName, bucketName } = states;
89
+ // Bucket service
90
+ let lockedAmount = 0;
91
+ if (!fileName || !bucketName) {
92
+ return { lockedAmount, blockNumber: blockNumber };
93
+ }
94
+ try {
95
+ const bucket = new BucketService("merkl-production-states", "merkl-production");
96
+ const storedStates = JSON.parse(await bucket.pull(fileName));
97
+ for (const [_, { value, params: _params }] of Object.entries(storedStates)) {
98
+ for (const slot of Object.values(value.slots)) {
99
+ lockedAmount += BN2Number(slot.lockedAmount, 18);
100
+ }
101
+ }
102
+ lockedAmount = Math.max(lockedAmount, 1);
103
+ }
104
+ catch { }
105
+ return { lockedAmount, blockNumber: blockNumber };
106
+ }