@merkl/api 0.10.168 → 0.10.170

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 (97) hide show
  1. package/dist/database/api/.generated/edge.js +6 -3
  2. package/dist/database/api/.generated/index-browser.js +3 -0
  3. package/dist/database/api/.generated/index.d.ts +113 -0
  4. package/dist/database/api/.generated/index.js +6 -3
  5. package/dist/database/api/.generated/package.json +1 -1
  6. package/dist/database/api/.generated/schema.prisma +17 -15
  7. package/dist/database/api/.generated/wasm.js +3 -0
  8. package/dist/src/cache/declaration.d.ts +0 -30
  9. package/dist/src/cache/declaration.js +0 -30
  10. package/dist/src/eden/index.d.ts +167 -15
  11. package/dist/src/index.d.ts +59 -5
  12. package/dist/src/libs/campaigns/campaignTypes/CLAMMDynamicData.js +2 -2
  13. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/factoryFinder.js +2 -0
  14. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType.d.ts +3 -1
  15. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType.js +8 -0
  16. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/PendleYTProcessor.d.ts +29 -0
  17. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/PendleYTProcessor.js +31 -0
  18. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/processorMapping.js +3 -0
  19. package/dist/src/libs/positions/clamm/index.d.ts +1 -2
  20. package/dist/src/libs/positions/clamm/index.js +322 -330
  21. package/dist/src/libs/positions/clamm/thegraph/fetchAlmPositions.d.ts +1 -1
  22. package/dist/src/libs/positions/clamm/thegraph/fetchAlmPositions.js +1 -1
  23. package/dist/src/libs/positions/clamm/thegraph/fetchAmmPositions.d.ts +1 -1
  24. package/dist/src/libs/positions/clamm/thegraph/fetchAmmPositions.js +2 -2
  25. package/dist/src/libs/positions/clamm/thegraph/fetchFarmedPositions.d.ts +1 -2
  26. package/dist/src/libs/positions/clamm/thegraph/fetchFarmedPositions.js +1 -4
  27. package/dist/src/libs/positions/euler/index.js +2 -3
  28. package/dist/src/libs/positions/index.js +1 -1
  29. package/dist/src/modules/v4/campaign/campaign.controller.d.ts +6 -2
  30. package/dist/src/modules/v4/campaign/campaign.model.d.ts +1 -0
  31. package/dist/src/modules/v4/campaign/campaign.model.js +1 -0
  32. package/dist/src/modules/v4/campaign/campaign.repository.d.ts +2 -0
  33. package/dist/src/modules/v4/campaign/campaign.repository.js +2 -1
  34. package/dist/src/modules/v4/campaign/campaign.service.d.ts +10 -5
  35. package/dist/src/modules/v4/campaign/campaign.service.js +10 -2
  36. package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +20 -3
  37. package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +2 -1
  38. package/dist/src/modules/v4/opportunity/opportunity.model.js +1 -0
  39. package/dist/src/modules/v4/opportunity/opportunity.repository.d.ts +83 -5
  40. package/dist/src/modules/v4/opportunity/opportunity.repository.js +31 -0
  41. package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +162 -8
  42. package/dist/src/modules/v4/opportunity/opportunity.service.js +11 -0
  43. package/dist/src/modules/v4/position/implementations/AjnaPositionFetcher.d.ts +6 -0
  44. package/dist/src/modules/v4/position/implementations/AjnaPositionFetcher.js +90 -0
  45. package/dist/src/modules/v4/position/implementations/BadgerPositionFetcher.d.ts +6 -0
  46. package/dist/src/modules/v4/position/implementations/BadgerPositionFetcher.js +69 -0
  47. package/dist/src/modules/v4/position/implementations/ClammPositionFetcher.d.ts +6 -0
  48. package/dist/src/modules/v4/position/implementations/ClammPositionFetcher.js +71 -0
  49. package/dist/src/modules/v4/position/implementations/DolomitePositionFetcher.d.ts +6 -0
  50. package/dist/src/modules/v4/position/implementations/DolomitePositionFetcher.js +45 -0
  51. package/dist/src/modules/v4/position/implementations/ERC20PositionFetcher.d.ts +6 -0
  52. package/dist/src/modules/v4/position/implementations/ERC20PositionFetcher.js +47 -0
  53. package/dist/src/modules/v4/position/implementations/EulerPositionFetcher.d.ts +6 -0
  54. package/dist/src/modules/v4/position/implementations/EulerPositionFetcher.js +40 -0
  55. package/dist/src/modules/v4/position/index.d.ts +2 -0
  56. package/dist/src/modules/v4/position/index.js +2 -0
  57. package/dist/src/modules/v4/position/position.controller.d.ts +39 -0
  58. package/dist/src/modules/v4/position/position.controller.js +16 -0
  59. package/dist/src/modules/v4/position/position.model.d.ts +25 -0
  60. package/dist/src/modules/v4/position/position.model.js +5 -0
  61. package/dist/src/modules/v4/position/position.repository.d.ts +14 -0
  62. package/dist/src/modules/v4/position/position.repository.js +6 -0
  63. package/dist/src/modules/v4/position/position.service.d.ts +5 -0
  64. package/dist/src/modules/v4/position/position.service.js +34 -0
  65. package/dist/src/modules/v4/price/price.controller.js +1 -1
  66. package/dist/src/modules/v4/price/price.service.d.ts +1 -1
  67. package/dist/src/modules/v4/price/price.service.js +3 -3
  68. package/dist/src/modules/v4/reward/reward.repository.d.ts +4 -0
  69. package/dist/src/modules/v4/reward/reward.service.d.ts +27 -0
  70. package/dist/src/modules/v4/reward/reward.service.js +5 -2
  71. package/dist/src/modules/v4/router.d.ts +59 -5
  72. package/dist/src/modules/v4/router.js +3 -1
  73. package/dist/src/modules/v4/token/token.controller.d.ts +6 -0
  74. package/dist/src/modules/v4/token/token.service.d.ts +12 -0
  75. package/dist/src/modules/v4/user/user.controller.d.ts +8 -0
  76. package/dist/src/routes/v1/prices.js +2 -4
  77. package/dist/src/routes/v3/blacklist.d.ts +59 -5
  78. package/dist/src/routes/v3/campaigns.d.ts +60 -6
  79. package/dist/src/routes/v3/campaignsInfo.d.ts +59 -5
  80. package/dist/src/routes/v3/multiChainPositions.d.ts +59 -5
  81. package/dist/src/routes/v3/opportunity.d.ts +59 -5
  82. package/dist/src/routes/v3/positions.d.ts +59 -5
  83. package/dist/src/routes/v3/recipients.d.ts +6 -2
  84. package/dist/src/routes/v3/recipients.js +14 -8
  85. package/dist/src/routes/v3/rewards.d.ts +59 -5
  86. package/dist/src/routes/v3/updates.d.ts +59 -5
  87. package/dist/src/routes/v3/userRewards.d.ts +59 -5
  88. package/dist/src/utils/decodeCalls.js +4 -1
  89. package/dist/src/utils/encodeCalls.js +4 -1
  90. package/dist/src/utils/generateCardName.js +2 -0
  91. package/dist/src/utils/prices/services/erc4626Service.js +10 -4
  92. package/dist/tsconfig.package.tsbuildinfo +1 -1
  93. package/package.json +1 -1
  94. package/dist/src/libs/reports/campaignReport.d.ts +0 -9
  95. package/dist/src/libs/reports/campaignReport.js +0 -37
  96. package/dist/src/libs/reports/mainParameterRewards.d.ts +0 -3
  97. package/dist/src/libs/reports/mainParameterRewards.js +0 -48
@@ -128,7 +128,9 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
128
128
  address: string;
129
129
  icon: string;
130
130
  decimals: number;
131
+ displaySymbol: string;
131
132
  verified: boolean;
133
+ isTest: boolean;
132
134
  price: number | null;
133
135
  };
134
136
  amount: bigint;
@@ -143,7 +145,9 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
143
145
  address: string;
144
146
  icon: string;
145
147
  decimals: number;
148
+ displaySymbol: string;
146
149
  verified: boolean;
150
+ isTest: boolean;
147
151
  price: number | null;
148
152
  }[];
149
153
  chain: {
@@ -227,7 +231,9 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
227
231
  address: string;
228
232
  icon: string;
229
233
  decimals: number;
234
+ displaySymbol: string;
230
235
  verified: boolean;
236
+ isTest: boolean;
231
237
  price: number | null;
232
238
  };
233
239
  amount: bigint;
@@ -242,7 +248,9 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
242
248
  address: string;
243
249
  icon: string;
244
250
  decimals: number;
251
+ displaySymbol: string;
245
252
  verified: boolean;
253
+ isTest: boolean;
246
254
  price: number | null;
247
255
  }[];
248
256
  chain: {
@@ -268,7 +276,7 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
268
276
  tvl: number;
269
277
  apr: number;
270
278
  dailyRewards: number;
271
- campaigns: ({
279
+ campaigns: {
272
280
  params: any;
273
281
  chain: {
274
282
  name: string;
@@ -283,7 +291,9 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
283
291
  address: string;
284
292
  icon: string;
285
293
  decimals: number;
294
+ displaySymbol: string;
286
295
  verified: boolean;
296
+ isTest: boolean;
287
297
  price: number | null;
288
298
  };
289
299
  distributionChain: {
@@ -311,7 +321,7 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
311
321
  amount: string;
312
322
  opportunityId: string;
313
323
  creatorAddress: string;
314
- } | null)[];
324
+ }[];
315
325
  } | null | undefined;
316
326
  };
317
327
  };
@@ -336,6 +346,7 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
336
346
  action?: string | undefined;
337
347
  mainProtocolId?: string | undefined;
338
348
  order?: undefined;
349
+ test?: boolean | undefined;
339
350
  minimumTvl?: number | undefined;
340
351
  };
341
352
  headers: unknown;
@@ -381,7 +392,9 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
381
392
  address: string;
382
393
  icon: string;
383
394
  decimals: number;
395
+ displaySymbol: string;
384
396
  verified: boolean;
397
+ isTest: boolean;
385
398
  price: number | null;
386
399
  };
387
400
  amount: bigint;
@@ -396,7 +409,9 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
396
409
  address: string;
397
410
  icon: string;
398
411
  decimals: number;
412
+ displaySymbol: string;
399
413
  verified: boolean;
414
+ isTest: boolean;
400
415
  price: number | null;
401
416
  }[];
402
417
  chain: {
@@ -445,6 +460,7 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
445
460
  action?: string | undefined;
446
461
  mainProtocolId?: string | undefined;
447
462
  order?: undefined;
463
+ test?: boolean | undefined;
448
464
  minimumTvl?: number | undefined;
449
465
  };
450
466
  headers: unknown;
@@ -475,12 +491,13 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
475
491
  action?: string | undefined;
476
492
  mainProtocolId?: string | undefined;
477
493
  order?: undefined;
494
+ test?: boolean | undefined;
478
495
  minimumTvl?: number | undefined;
479
496
  };
480
497
  headers: unknown;
481
498
  response: {
482
499
  200: {
483
- sum: File;
500
+ sum: number | null;
484
501
  };
485
502
  };
486
503
  };
@@ -550,10 +567,11 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
550
567
  campaignId?: string | undefined;
551
568
  opportunityId?: string | undefined;
552
569
  tokenSymbol?: string | undefined;
570
+ test?: boolean | undefined;
553
571
  };
554
572
  headers: unknown;
555
573
  response: {
556
- 200: ({
574
+ 200: {
557
575
  params: any;
558
576
  chain: {
559
577
  name: string;
@@ -568,7 +586,9 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
568
586
  address: string;
569
587
  icon: string;
570
588
  decimals: number;
589
+ displaySymbol: string;
571
590
  verified: boolean;
591
+ isTest: boolean;
572
592
  price: number | null;
573
593
  };
574
594
  distributionChain: {
@@ -596,7 +616,7 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
596
616
  amount: string;
597
617
  opportunityId: string;
598
618
  creatorAddress: string;
599
- } | null)[];
619
+ }[];
600
620
  };
601
621
  };
602
622
  };
@@ -618,6 +638,7 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
618
638
  campaignId?: string | undefined;
619
639
  opportunityId?: string | undefined;
620
640
  tokenSymbol?: string | undefined;
641
+ test?: boolean | undefined;
621
642
  };
622
643
  headers: unknown;
623
644
  response: {
@@ -771,7 +792,9 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
771
792
  address: string;
772
793
  icon: string;
773
794
  decimals: number;
795
+ displaySymbol: string;
774
796
  verified: boolean;
797
+ isTest: boolean;
775
798
  price?: number | null | undefined;
776
799
  } | undefined;
777
800
  };
@@ -800,7 +823,9 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
800
823
  address: string;
801
824
  icon: string;
802
825
  decimals: number;
826
+ displaySymbol: string;
803
827
  verified: boolean;
828
+ isTest: boolean;
804
829
  } & {
805
830
  price?: number | null | undefined;
806
831
  } & {
@@ -833,7 +858,9 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
833
858
  address: string;
834
859
  icon: string;
835
860
  decimals: number;
861
+ displaySymbol: string;
836
862
  verified: boolean;
863
+ isTest: boolean;
837
864
  } & {
838
865
  price?: number | null | undefined;
839
866
  })[];
@@ -1496,7 +1523,9 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
1496
1523
  address: string;
1497
1524
  icon: string;
1498
1525
  decimals: number;
1526
+ displaySymbol: string;
1499
1527
  verified: boolean;
1528
+ isTest: boolean;
1500
1529
  price: number | null;
1501
1530
  };
1502
1531
  breakdowns: {
@@ -1515,7 +1544,9 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
1515
1544
  address: string;
1516
1545
  icon: string;
1517
1546
  decimals: number;
1547
+ displaySymbol: string;
1518
1548
  verified: boolean;
1549
+ isTest: boolean;
1519
1550
  price: number | null;
1520
1551
  }[];
1521
1552
  Protocols: {
@@ -1606,7 +1637,9 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
1606
1637
  address: string;
1607
1638
  icon: string;
1608
1639
  decimals: number;
1640
+ displaySymbol: string;
1609
1641
  verified: boolean;
1642
+ isTest: boolean;
1610
1643
  price: number | null;
1611
1644
  };
1612
1645
  breakdowns: {
@@ -1625,7 +1658,9 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
1625
1658
  address: string;
1626
1659
  icon: string;
1627
1660
  decimals: number;
1661
+ displaySymbol: string;
1628
1662
  verified: boolean;
1663
+ isTest: boolean;
1629
1664
  price: number | null;
1630
1665
  }[];
1631
1666
  Protocols: {
@@ -2221,6 +2256,25 @@ declare const _default: (app: App) => import("elysia").default<"", false, {
2221
2256
  };
2222
2257
  };
2223
2258
  };
2259
+ } & {
2260
+ v4: {
2261
+ positions: {
2262
+ index: {
2263
+ get: {
2264
+ body: unknown;
2265
+ params: {};
2266
+ query: {
2267
+ chainId: number;
2268
+ address: string;
2269
+ };
2270
+ headers: unknown;
2271
+ response: {
2272
+ 200: any[];
2273
+ };
2274
+ };
2275
+ };
2276
+ };
2277
+ };
2224
2278
  } & {
2225
2279
  index: {
2226
2280
  get: {
@@ -1,8 +1,10 @@
1
- import { AaveInterface, AuraInterface, AuraOperatorInterface, BalancerGaugeInterface, BalancerPoolInterface, BalancerVaultInterface, BeefyInterface, CompoundInterface, CurveInterface, ERC20Interface, EnzymeInterface, EulerInterface, FactoryInterface, FluidInterface, FraxlendInterface, GearboxVaultInterface, IonicInterface, LayerBankInterface, MaverickBPLensInterface, MetamorphoInterface, MoonwellInterface, OneInchStakingInterface, PendleInterface, RadiantInterface, RfxInterface, SturdyInterface, SymetricAmbientStrategyInterface, TorosInterface, UniswapV2PoolInterface, ZFStableLPINterface, ZFStableSwapThreePoolInterface, } from "@sdk";
1
+ import { AaveInterface, AuraInterface, AuraOperatorInterface, BalancerGaugeInterface, BalancerPoolInterface, BalancerVaultInterface, BeefyInterface, CompoundInterface, CurveInterface, ERC20Interface, EnzymeInterface, EulerInterface, FactoryInterface, FluidInterface, FraxlendInterface, GearboxVaultInterface, IonicInterface, LayerBankInterface, MaverickBPLensInterface, MetamorphoInterface, MoonwellInterface, OneInchStakingInterface, PendleInterface, PendleYTInterface, RadiantInterface, RfxInterface, SturdyInterface, SymetricAmbientStrategyInterface, TorosInterface, UniswapV2PoolInterface, ZFStableLPINterface, ZFStableSwapThreePoolInterface, } from "@sdk";
2
2
  import { tokenType } from "../libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType";
3
3
  export function decodeCall(calls, index, key, type) {
4
4
  const returnData = calls[index];
5
5
  switch (key) {
6
+ case "SY":
7
+ return PendleYTInterface.decodeFunctionResult("SY", returnData)[0];
6
8
  case "symbol":
7
9
  return ERC20Interface.decodeFunctionResult("symbol", returnData)[0];
8
10
  case "decimals":
@@ -44,6 +46,7 @@ export function decodeCall(calls, index, key, type) {
44
46
  case "underlying":
45
47
  switch (type) {
46
48
  case tokenType.pendle:
49
+ case tokenType.pendleYT:
47
50
  return PendleInterface.decodeFunctionResult("yieldToken", returnData)[0];
48
51
  case tokenType.gearbox:
49
52
  return GearboxVaultInterface.decodeFunctionResult("underlyingToken", returnData)[0];
@@ -1,8 +1,10 @@
1
1
  import { tokenType } from "../libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType";
2
- import { AaveInterface, AuraInterface, AuraOperatorInterface, BalancerGaugeInterface, BalancerPoolInterface, BalancerVaultInterface, BeefyInterface, CompoundInterface, CurveInterface, ERC20Interface, EnzymeInterface, EulerInterface, FactoryInterface, FluidInterface, FraxlendInterface, GearboxVaultInterface, IonicInterface, LayerBankInterface, MaverickBPLensInterface, MetamorphoInterface, MoonwellInterface, OneInchStakingInterface, PendleInterface, RadiantInterface, RfxDatastoreInterface, SturdyInterface, SymetricAmbientStrategyInterface, TorosInterface, UniswapV2PoolInterface, ZFStableLPINterface, ZFStableSwapThreePoolInterface, } from "@sdk";
2
+ import { AaveInterface, AuraInterface, AuraOperatorInterface, BalancerGaugeInterface, BalancerPoolInterface, BalancerVaultInterface, BeefyInterface, CompoundInterface, CurveInterface, ERC20Interface, EnzymeInterface, EulerInterface, FactoryInterface, FluidInterface, FraxlendInterface, GearboxVaultInterface, IonicInterface, LayerBankInterface, MaverickBPLensInterface, MetamorphoInterface, MoonwellInterface, OneInchStakingInterface, PendleInterface, PendleYTInterface, RadiantInterface, RfxDatastoreInterface, SturdyInterface, SymetricAmbientStrategyInterface, TorosInterface, UniswapV2PoolInterface, ZFStableLPINterface, ZFStableSwapThreePoolInterface, } from "@sdk";
3
3
  import { fluidInterface } from "src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1";
4
4
  export function createCall(target, key, type, metaData) {
5
5
  switch (key) {
6
+ case "SY":
7
+ return { allowFailure: true, callData: PendleYTInterface.encodeFunctionData("SY"), target };
6
8
  case "collateralContract":
7
9
  return { allowFailure: true, callData: SturdyInterface.encodeFunctionData("collateralContract"), target };
8
10
  case "pricePerShare":
@@ -63,6 +65,7 @@ export function createCall(target, key, type, metaData) {
63
65
  case "underlying":
64
66
  switch (type) {
65
67
  case tokenType.pendle:
68
+ case tokenType.pendleYT:
66
69
  return { allowFailure: true, callData: PendleInterface.encodeFunctionData("yieldToken"), target };
67
70
  case tokenType.metamorpho:
68
71
  return { allowFailure: true, callData: MetamorphoInterface.encodeFunctionData("asset"), target };
@@ -14,6 +14,8 @@ export function generateCardName(type, typeInfo, campaign, symbols = [""]) {
14
14
  case tokenType.ra:
15
15
  case tokenType.syncswap:
16
16
  return `${typeInfo.protocol} ${typeInfo.symbolToken0}/${typeInfo.symbolToken1}`;
17
+ case tokenType.pendleYT:
18
+ return `Hold YT of ${typeInfo.symbolUnderlyingToken} on ${typeInfo.protocol}`;
17
19
  case tokenType.pendle:
18
20
  return `Provide ${typeInfo.symbolUnderlyingToken} on ${typeInfo.protocol}`;
19
21
  case tokenType.balancerGauge:
@@ -1,6 +1,6 @@
1
+ import { PriceService } from "../../../modules/v4/price";
1
2
  import { PriceSourceMethod } from "../../../../database/api/.generated";
2
3
  import { log } from "../../logger";
3
- import PriceService from "../priceService";
4
4
  import { getERC4626Price } from "./getERC4626";
5
5
  export default class ERC4626Service {
6
6
  static instance = new ERC4626Service();
@@ -14,7 +14,7 @@ export default class ERC4626Service {
14
14
  return log.warn(`❌ ERC4626Service ticker not found for ${token.symbol}`);
15
15
  const rate = await getERC4626Price(args.chainId, args.address, args.decimals, args.vaultDecimals);
16
16
  // 2 returned tokens as stUSD and STUSD (business requirement)
17
- const price = this.priceCalculation(rate, args.vaultToken);
17
+ const price = await this.priceCalculation(rate, args.vaultToken);
18
18
  const res = [
19
19
  { token: token.symbol, rate: price },
20
20
  { token: token.symbol.toUpperCase(), rate: price },
@@ -24,7 +24,13 @@ export default class ERC4626Service {
24
24
  const resolvedPrices = await Promise.all(pricePromises);
25
25
  return resolvedPrices.flat().filter(price => price !== undefined);
26
26
  }
27
- priceCalculation(rate, vaultToken) {
28
- return rate * PriceService.instance.prices[vaultToken];
27
+ async priceCalculation(rate, vaultToken) {
28
+ try {
29
+ const vaultTokenPrice = await PriceService.fetchPriceBySymbol(vaultToken);
30
+ return rate * vaultTokenPrice;
31
+ }
32
+ catch {
33
+ return Number.NaN;
34
+ }
29
35
  }
30
36
  }