@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.
- package/dist/database/api/.generated/edge.js +6 -2
- package/dist/database/api/.generated/index.js +10 -2
- package/dist/database/api/.generated/libquery_engine-linux-arm64-openssl-3.0.x.so.node +0 -0
- package/dist/database/api/.generated/package.json +1 -1
- package/dist/database/api/.generated/schema.prisma +1 -1
- package/dist/database/engine/.generated/edge.js +6 -2
- package/dist/database/engine/.generated/index.js +10 -2
- package/dist/database/engine/.generated/libquery_engine-linux-arm64-openssl-3.0.x.so.node +0 -0
- package/dist/database/engine/.generated/package.json +1 -1
- package/dist/database/engine/.generated/schema.prisma +1 -1
- package/dist/src/eden/index.d.ts +747 -747
- package/dist/src/engine/deprecated/dynamicData/factory.js +1 -0
- package/dist/src/engine/deprecated/dynamicData/implementations/EventBased.js +29 -5
- package/dist/src/engine/deprecated/erc20SubTypeProcessors/implementations/processorMapping.d.ts +1 -3
- package/dist/src/engine/implementations/Erc20/subTypes/implementations/lendleVaults/tvl.js +1 -2
- package/dist/src/engine/implementations/JsonAirdrop/metadata.d.ts +2 -2
- package/dist/src/engine/implementations/Locker/metadata.d.ts +24 -0
- package/dist/src/engine/implementations/Locker/metadata.js +36 -0
- package/dist/src/engine/implementations/Locker/tvl.d.ts +7 -0
- package/dist/src/engine/implementations/Locker/tvl.js +21 -0
- package/dist/src/engine/implementations/MultiLog/tvl.d.ts +1 -12
- package/dist/src/engine/implementations/MultiLog/tvl.js +1 -61
- package/dist/src/engine/metadata/factory.js +1 -0
- package/dist/src/engine/tvl/logStates.d.ts +17 -0
- package/dist/src/engine/tvl/logStates.js +106 -0
- package/dist/src/index.d.ts +255 -255
- package/dist/src/index.js +2 -2
- package/dist/src/modules/v4/boost/boost.controller.d.ts +1 -1
- package/dist/src/modules/v4/bucket/bucket.service.d.ts +2 -0
- package/dist/src/modules/v4/bucket/bucket.service.js +3 -0
- package/dist/src/modules/v4/campaign/campaign.controller.d.ts +41 -41
- package/dist/src/modules/v4/campaign/campaign.controller.js +0 -1
- package/dist/src/modules/v4/campaign/campaign.repository.d.ts +36 -36
- package/dist/src/modules/v4/campaign/campaign.service.d.ts +76 -76
- package/dist/src/modules/v4/campaign/campaign.test.controller.d.ts +18 -18
- package/dist/src/modules/v4/chain/chain.controller.d.ts +11 -11
- package/dist/src/modules/v4/chain/chain.repository.d.ts +13 -13
- package/dist/src/modules/v4/chain/chain.service.d.ts +14 -14
- package/dist/src/modules/v4/computedValue/computedValue.controller.d.ts +1 -1
- package/dist/src/modules/v4/computedValue/computedValue.repository.d.ts +1 -1
- package/dist/src/modules/v4/computedValue/computedValue.service.d.ts +1 -1
- package/dist/src/modules/v4/creator/creator.controller.d.ts +5 -5
- package/dist/src/modules/v4/creator/creator.repository.d.ts +5 -5
- package/dist/src/modules/v4/creator/creator.service.d.ts +4 -4
- package/dist/src/modules/v4/enso/enso.service.d.ts +2 -2
- package/dist/src/modules/v4/explorer/explorer.controller.d.ts +3 -3
- package/dist/src/modules/v4/explorer/explorer.repository.d.ts +4 -4
- package/dist/src/modules/v4/explorer/explorer.service.d.ts +5 -5
- package/dist/src/modules/v4/interaction/interaction.controller.d.ts +2 -2
- package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +105 -105
- package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +3 -3
- package/dist/src/modules/v4/opportunity/opportunity.repository.d.ts +117 -117
- package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +122 -122
- package/dist/src/modules/v4/price/price.controller.d.ts +4 -4
- package/dist/src/modules/v4/price/price.repository.d.ts +5 -5
- package/dist/src/modules/v4/price/price.service.d.ts +4 -4
- package/dist/src/modules/v4/programPayload/programPayload.model.d.ts +18 -1
- package/dist/src/modules/v4/programPayload/programPayload.repository.d.ts +14 -7
- package/dist/src/modules/v4/programPayload/programPayload.repository.js +128 -8
- package/dist/src/modules/v4/protocol/protocol.controller.d.ts +24 -24
- 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/protocol/protocol.repository.d.ts +14 -14
- package/dist/src/modules/v4/protocol/protocol.service.d.ts +6 -6
- package/dist/src/modules/v4/reward/reward.controller.d.ts +1 -1
- package/dist/src/modules/v4/reward/reward.controller.js +0 -1
- package/dist/src/modules/v4/reward/reward.repository.d.ts +12 -12
- package/dist/src/modules/v4/reward/reward.service.d.ts +82 -82
- package/dist/src/modules/v4/router.d.ts +255 -255
- package/dist/src/modules/v4/status/status.controller.d.ts +5 -5
- package/dist/src/modules/v4/status/status.repository.d.ts +11 -11
- package/dist/src/modules/v4/status/status.service.d.ts +7 -7
- package/dist/src/modules/v4/token/token.controller.d.ts +11 -11
- package/dist/src/modules/v4/token/token.repository.d.ts +4 -4
- package/dist/src/modules/v4/token/token.service.d.ts +14 -14
- package/dist/src/modules/v4/token/token.service.js +3 -3
- package/dist/src/modules/v4/uniswap/uniswap.repository.d.ts +1 -1
- package/dist/src/modules/v4/user/user.controller.d.ts +24 -24
- package/dist/tsconfig.package.tsbuildinfo +1 -1
- 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
|
19
|
+
const id = `EventBasedProcessor_${computeMethod}_${chainId}_${campaignID}`;
|
20
|
+
let mostRecentStateSave = await engineDbClient.stateSave.findFirst({
|
20
21
|
where: {
|
21
|
-
id:
|
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
|
-
|
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;
|
package/dist/src/engine/deprecated/erc20SubTypeProcessors/implementations/processorMapping.d.ts
CHANGED
@@ -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,
|
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 {
|
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
|
+
}
|