@merkl/api 0.10.163 → 0.10.165

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.
@@ -51,7 +51,8 @@ export declare enum tokenType {
51
51
  woofi = "woofi",
52
52
  pendle = "pendle",
53
53
  maverickBoostedPosition = "maverickBoostedPosition",
54
- zkSwapThreePool = "zkSwapThreePool"
54
+ zkSwapThreePool = "zkSwapThreePool",
55
+ maha = "maha"
55
56
  }
56
57
  export declare const tokenTypeToProtocol: {
57
58
  [key in tokenType]: {
@@ -53,6 +53,7 @@ export var tokenType;
53
53
  tokenType["pendle"] = "pendle";
54
54
  tokenType["maverickBoostedPosition"] = "maverickBoostedPosition";
55
55
  tokenType["zkSwapThreePool"] = "zkSwapThreePool";
56
+ tokenType["maha"] = "maha";
56
57
  })(tokenType || (tokenType = {}));
57
58
  export const tokenTypeToProtocol = {
58
59
  [tokenType.aave_borrowing]: { protocol: "Aave" },
@@ -115,4 +116,7 @@ export const tokenTypeToProtocol = {
115
116
  [tokenType.zkSwapThreePool]: {
116
117
  protocol: "ZKSwap",
117
118
  },
119
+ [tokenType.maha]: {
120
+ protocol: "Maha",
121
+ },
118
122
  };
@@ -25,6 +25,7 @@ import { UniswapProcessor } from "./UniswapProcessor";
25
25
  import { WoofiProcessor } from "./WoofiProcessor";
26
26
  import { ZkSwapThreePoolProcessor } from "./ZkSwapThreePoolProcessor";
27
27
  import { CurveProcessor } from "./curveProcessor";
28
+ import { StakedCurveProcessor } from "./stakedCurveProcessor";
28
29
  export const processorMapping = {
29
30
  [tokenType.uniswapv2]: UniswapProcessor,
30
31
  [tokenType.balancerGauge]: BalancerGaugeProcessor,
@@ -78,4 +79,5 @@ export const processorMapping = {
78
79
  [tokenType.woofi]: WoofiProcessor,
79
80
  [tokenType.maverickBoostedPosition]: MaverickBPProcessor,
80
81
  [tokenType.zkSwapThreePool]: ZkSwapThreePoolProcessor,
82
+ [tokenType.maha]: StakedCurveProcessor,
81
83
  };
@@ -0,0 +1,54 @@
1
+ import type { Pricer } from "../../../../../utils/pricer";
2
+ import { type Campaign, type CampaignParameters } from "@sdk";
3
+ import { tokenType } from "../helpers/tokenType";
4
+ import { GenericProcessor, type dataType, type mandatoryCallKeys } from "./GenericProcessor";
5
+ type callType = {
6
+ key: keyof dataRawStakedCurve;
7
+ call: string;
8
+ target: keyof callKeysStakedCurve;
9
+ metaData?: keyof callKeysStakedCurve;
10
+ optional?: boolean;
11
+ };
12
+ type callKeysStakedCurve = mandatoryCallKeys & {
13
+ lp_price: string;
14
+ token0: string;
15
+ token1: string;
16
+ token2: string;
17
+ symbolToken0: string;
18
+ symbolToken1: string;
19
+ symbolToken2: string;
20
+ underlying: string;
21
+ amount: string;
22
+ };
23
+ type dataRawStakedCurve = callKeysStakedCurve & {
24
+ poolTokens: {
25
+ [key: string]: string;
26
+ };
27
+ toAssets: string;
28
+ symbolUnderlyingToken: string;
29
+ };
30
+ type dataTypeStakedCurve = dataType & {
31
+ lp_price: number;
32
+ token0: string;
33
+ token1: string;
34
+ token2: string;
35
+ symbolToken0: string;
36
+ symbolToken1: string;
37
+ underlying: string;
38
+ symbolToken2: string;
39
+ symbolUnderlyingToken: string;
40
+ poolTokens: {
41
+ [key: string]: string;
42
+ };
43
+ };
44
+ export declare class StakedCurveProcessor extends GenericProcessor<callKeysStakedCurve, dataRawStakedCurve, dataTypeStakedCurve> {
45
+ rounds: {
46
+ round1: callType[];
47
+ round2: callType[];
48
+ round3: callType[];
49
+ round4: callType[];
50
+ };
51
+ processingRound3(typeInfo: dataRawStakedCurve): void;
52
+ processingRound5(_index: number, type: tokenType, typeInfo: dataRawStakedCurve, _calls: string[], campaign: CampaignParameters<Campaign.ERC20> | CampaignParameters<Campaign.EULER>, pricer: Pricer): Promise<dataTypeStakedCurve>;
53
+ }
54
+ export {};
@@ -0,0 +1,77 @@
1
+ import { generateCardName } from "../../../../../utils/generateCardName";
2
+ import { BN2Number } from "@sdk";
3
+ import { BigNumber } from "ethers";
4
+ import { tokenType } from "../helpers/tokenType";
5
+ import { GenericProcessor } from "./GenericProcessor";
6
+ export class StakedCurveProcessor extends GenericProcessor {
7
+ rounds = {
8
+ round1: [{ key: "underlying", call: "underlying", target: "tokenAddress" }],
9
+ round2: [
10
+ { key: "lp_price", call: "lp_price", target: "underlying" },
11
+ { key: "symbolUnderlyingToken", call: "symbol", target: "underlying" },
12
+ { key: "token0", call: "coin0", target: "underlying" },
13
+ { key: "token1", call: "coin1", target: "underlying" },
14
+ { key: "token2", call: "coin2", target: "underlying", optional: true },
15
+ ],
16
+ round3: [
17
+ { key: "symbolToken0", call: "symbol", target: "token0" },
18
+ { key: "symbolToken1", call: "symbol", target: "token1" },
19
+ { key: "symbolToken2", call: "symbol", target: "token2", optional: true },
20
+ ],
21
+ round4: [
22
+ { key: "toAssets", call: "convertToAssets", target: "tokenAddress", metaData: "amount" },
23
+ { key: "totalSupply", call: "totalSupply", target: "tokenAddress" },
24
+ ],
25
+ };
26
+ // override computeRound1(): void {}
27
+ processingRound3(typeInfo) {
28
+ typeInfo.amount = BigNumber.from(10).pow(18).toString();
29
+ }
30
+ async processingRound5(_index, type, typeInfo, _calls, campaign, pricer) {
31
+ const { whitelistedSupplyTargetToken, totalSupply, blacklistedSupply } = this.handleWhiteListBlacklistRound5(typeInfo, campaign);
32
+ const lp_price = BN2Number(typeInfo.lp_price, 18);
33
+ let priceTargetToken = lp_price;
34
+ if (typeInfo.token2) {
35
+ typeInfo.poolTokens = {
36
+ [typeInfo.token0]: typeInfo.symbolToken0,
37
+ [typeInfo.token1]: typeInfo.symbolToken1,
38
+ [typeInfo.token2]: typeInfo.symbolToken2,
39
+ };
40
+ }
41
+ else {
42
+ typeInfo.poolTokens = {
43
+ [typeInfo.token0]: typeInfo.symbolToken0,
44
+ [typeInfo.token1]: typeInfo.symbolToken1,
45
+ };
46
+ }
47
+ if (type === tokenType.curve_2) {
48
+ const prices = [];
49
+ for (const symbol of Object.values(typeInfo.poolTokens)) {
50
+ const price = (await pricer.get({ symbol: symbol })) ?? 0;
51
+ prices.push(price);
52
+ }
53
+ let minPrice = Math.min(...prices);
54
+ if (!minPrice) {
55
+ minPrice = 1;
56
+ }
57
+ priceTargetToken = priceTargetToken * minPrice;
58
+ }
59
+ const exchangeRate = BN2Number(typeInfo.toAssets, 18);
60
+ const tvl = priceTargetToken * totalSupply * exchangeRate;
61
+ return {
62
+ ...typeInfo,
63
+ lp_price,
64
+ poolTokens: {
65
+ [typeInfo.token0]: typeInfo.symbolToken0,
66
+ [typeInfo.token1]: typeInfo.symbolToken1,
67
+ [typeInfo.token2]: typeInfo.symbolToken2,
68
+ },
69
+ totalSupply,
70
+ tvl,
71
+ whitelistedSupplyTargetToken,
72
+ blacklistedSupply,
73
+ priceTargetToken,
74
+ cardName: generateCardName(type, typeInfo, campaign),
75
+ };
76
+ }
77
+ }
@@ -88,6 +88,8 @@ function satisfiesNameConditions(name, type) {
88
88
  return lowerCaseName.includes("maverick");
89
89
  case tokenType.zkSwapThreePool:
90
90
  return lowerCaseName.includes("zf");
91
+ case tokenType.maha:
92
+ return lowerCaseName.includes("staked") && lowerCaseName.includes("maha");
91
93
  default:
92
94
  return false;
93
95
  }
@@ -175,6 +175,7 @@ export type UserRewardV3Model = typeof UserRewardV3Dto.static;
175
175
  export type RewardV3Model = typeof RewardV3Dto.static;
176
176
  export type BreakdownForCampaignsRaw = {
177
177
  amount: string;
178
+ claimed: string;
178
179
  recipient: string;
179
180
  campaignId: string;
180
181
  reason: string;
@@ -186,6 +186,7 @@ export class RewardRepository {
186
186
  SELECT
187
187
  rb."amount",
188
188
  rb."reason",
189
+ rb."claimed",
189
190
  r."recipient",
190
191
  t."address" as "rewardTokenAddress"
191
192
  FROM
@@ -265,10 +265,12 @@ export class RewardService {
265
265
  return acc;
266
266
  }, {});
267
267
  const data = await RewardRepository.getUnclaimed(x);
268
- return data.reduce((acc, { amount, campaignId }) => {
268
+ return data.reduce((acc, { amount, campaignId, claimed }) => {
269
269
  if (!acc[campaignToCampaignIds[campaignId]])
270
270
  acc[campaignToCampaignIds[campaignId]] = "0";
271
- acc[campaignToCampaignIds[campaignId]] = (BigInt(acc[campaignToCampaignIds[campaignId]]) + BigInt(amount)).toString();
271
+ acc[campaignToCampaignIds[campaignId]] = (BigInt(acc[campaignToCampaignIds[campaignId]]) +
272
+ BigInt(amount) -
273
+ BigInt(claimed)).toString();
272
274
  return acc;
273
275
  }, {});
274
276
  }
@@ -79,6 +79,7 @@ export function decodeCall(calls, index, key, type) {
79
79
  return LayerBankInterface.decodeFunctionResult("underlying", returnData)[0];
80
80
  case tokenType.euler_borrow:
81
81
  case tokenType.euler_lend:
82
+ case tokenType.maha:
82
83
  return EulerInterface.decodeFunctionResult("asset", returnData)[0];
83
84
  default:
84
85
  throw new Error(`Need tokenType for this key ${key}, or type ${type} not matched`);
@@ -111,6 +112,7 @@ export function decodeCall(calls, index, key, type) {
111
112
  case tokenType.curve:
112
113
  return CurveInterface.decodeFunctionResult("lp_price", returnData)[0];
113
114
  case tokenType.curve_2:
115
+ case tokenType.maha:
114
116
  return CurveInterface.decodeFunctionResult("get_virtual_price", returnData)[0];
115
117
  default:
116
118
  throw new Error(`Need tokenType for this key ${key}`);
@@ -12,6 +12,7 @@ export function createCall(target, key, type, metaData) {
12
12
  case tokenType.curve:
13
13
  return { allowFailure: true, callData: CurveInterface.encodeFunctionData("lp_price"), target };
14
14
  case tokenType.curve_2:
15
+ case tokenType.maha:
15
16
  return { allowFailure: true, callData: CurveInterface.encodeFunctionData("get_virtual_price"), target };
16
17
  default:
17
18
  throw new Error(`Need tokenType for this key ${key}`);
@@ -68,6 +69,7 @@ export function createCall(target, key, type, metaData) {
68
69
  case tokenType.fluid:
69
70
  return { allowFailure: true, callData: FluidInterface.encodeFunctionData("asset"), target };
70
71
  case tokenType.euler_borrow:
72
+ case tokenType.maha:
71
73
  case tokenType.euler_lend:
72
74
  return {
73
75
  allowFailure: true,
@@ -87,6 +87,8 @@ export function generateCardName(type, typeInfo, campaign, symbols = [""]) {
87
87
  return `Hold (or stake) Maverick Boosted Position ${campaign.campaignParameters.symbolTargetToken} on ${typeInfo.protocol}`;
88
88
  case tokenType.zkSwapThreePool:
89
89
  return `Hold (or stake) ${campaign.campaignParameters.symbolTargetToken} ${typeInfo.symbolToken0}-${typeInfo.symbolToken1}-${typeInfo.symbolToken2} on ${typeInfo.protocol}`;
90
+ case tokenType.maha:
91
+ return `Stake ${typeInfo.symbolToken0}/${typeInfo.symbolToken1} LP on ${typeInfo.protocol}`;
90
92
  default:
91
93
  return `Hold ${typeInfo.name} (${campaign.campaignParameters.symbolTargetToken})`;
92
94
  }