@merkl/api 0.19.6 → 0.19.8

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 (311) hide show
  1. package/dist/src/backgroundJobs/jobs/campaignsCacheUpdater.js +4 -3
  2. package/dist/src/eden/index.d.ts +85 -48
  3. package/dist/src/engine/dynamicData/factory.d.ts +3 -0
  4. package/dist/src/engine/dynamicData/factory.js +54 -0
  5. package/dist/src/engine/dynamicData/implementations/Ajna.d.ts +7 -0
  6. package/dist/src/engine/dynamicData/implementations/Ajna.js +101 -0
  7. package/dist/src/engine/dynamicData/implementations/Ambiant.d.ts +7 -0
  8. package/dist/src/engine/dynamicData/implementations/Ambiant.js +227 -0
  9. package/dist/src/engine/dynamicData/implementations/Badger.d.ts +7 -0
  10. package/dist/src/engine/dynamicData/implementations/Badger.js +84 -0
  11. package/dist/src/engine/dynamicData/implementations/Clamm.d.ts +7 -0
  12. package/dist/src/engine/dynamicData/implementations/Clamm.js +970 -0
  13. package/dist/src/engine/dynamicData/implementations/Compound.d.ts +7 -0
  14. package/dist/src/engine/dynamicData/implementations/Compound.js +136 -0
  15. package/dist/src/engine/dynamicData/implementations/Dolomite.d.ts +7 -0
  16. package/dist/src/engine/dynamicData/implementations/Dolomite.js +53 -0
  17. package/dist/src/engine/dynamicData/implementations/EigenLayer.d.ts +7 -0
  18. package/dist/src/engine/dynamicData/implementations/EigenLayer.js +64 -0
  19. package/dist/src/engine/dynamicData/implementations/Encompassing.d.ts +7 -0
  20. package/dist/src/engine/dynamicData/implementations/Encompassing.js +26 -0
  21. package/dist/src/engine/dynamicData/implementations/Erc20.d.ts +6 -0
  22. package/dist/src/engine/dynamicData/implementations/Erc20.js +159 -0
  23. package/dist/src/engine/dynamicData/implementations/Erc20Snapshot.d.ts +7 -0
  24. package/dist/src/engine/dynamicData/implementations/Erc20Snapshot.js +32 -0
  25. package/dist/src/engine/dynamicData/implementations/EventBased.d.ts +7 -0
  26. package/dist/src/engine/dynamicData/implementations/EventBased.js +104 -0
  27. package/dist/src/engine/dynamicData/implementations/Hyperdrive.d.ts +7 -0
  28. package/dist/src/engine/dynamicData/implementations/Hyperdrive.js +96 -0
  29. package/dist/src/engine/dynamicData/implementations/Morpho.d.ts +7 -0
  30. package/dist/src/engine/dynamicData/implementations/Morpho.js +109 -0
  31. package/dist/src/engine/dynamicData/implementations/Radiant.d.ts +7 -0
  32. package/dist/src/engine/dynamicData/implementations/Radiant.js +117 -0
  33. package/dist/src/engine/dynamicData/implementations/Silo.d.ts +9 -0
  34. package/dist/src/engine/dynamicData/implementations/Silo.js +109 -0
  35. package/dist/src/engine/dynamicData/implementations/UniswapV4.d.ts +7 -0
  36. package/dist/src/engine/dynamicData/implementations/UniswapV4.js +249 -0
  37. package/dist/src/engine/dynamicData/implementations/Vest.d.ts +9 -0
  38. package/dist/src/engine/dynamicData/implementations/Vest.js +58 -0
  39. package/dist/src/engine/dynamicData/implementations/default.d.ts +5 -0
  40. package/dist/src/engine/dynamicData/implementations/default.js +5 -0
  41. package/dist/src/{libs/campaigns → engine/dynamicData}/utils/getEulerV2Vaults.js +1 -1
  42. package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/GenericProcessor.d.ts +1 -1
  43. package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/tokenType.d.ts +2 -1
  44. package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/tokenType.js +2 -0
  45. package/dist/src/engine/erc20SubTypeProcessors/implementations/BunniV2Processor.d.ts +45 -0
  46. package/dist/src/engine/erc20SubTypeProcessors/implementations/BunniV2Processor.js +87 -0
  47. package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/processorMapping.js +2 -0
  48. package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/subtypesRound1.js +2 -0
  49. package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/subtypesRound2.d.ts +1 -1
  50. package/dist/src/{factories → engine}/opportunityMetadata/implementations/Erc20.js +3 -3
  51. package/dist/src/{factories → engine}/opportunityMetadata/implementations/Euler.d.ts +1 -1
  52. package/dist/src/{factories → engine}/opportunityMetadata/implementations/Euler.js +7 -7
  53. package/dist/src/{factories → engine}/opportunityMetadata/implementations/EventBased.d.ts +1 -1
  54. package/dist/src/{factories → engine}/opportunityMetadata/implementations/EventBased.js +2 -2
  55. package/dist/src/{factories → engine}/opportunityMetadata/implementations/Vest.js +1 -1
  56. package/dist/src/index.d.ts +19 -16
  57. package/dist/src/jobs/update-euler-vaults.js +2 -2
  58. package/dist/src/modules/v4/apr/apr.service.d.ts +1 -1
  59. package/dist/src/modules/v4/apr/apr.service.js +4 -4
  60. package/dist/src/modules/v4/campaign/campaign.controller.d.ts +5 -0
  61. package/dist/src/modules/v4/campaign/campaign.model.d.ts +1 -0
  62. package/dist/src/modules/v4/campaign/campaign.model.js +1 -0
  63. package/dist/src/modules/v4/campaign/campaign.repository.d.ts +4 -0
  64. package/dist/src/modules/v4/campaign/campaign.repository.js +2 -1
  65. package/dist/src/modules/v4/campaign/campaign.service.d.ts +0 -8
  66. package/dist/src/modules/v4/campaign/campaign.service.js +0 -13
  67. package/dist/src/modules/v4/dynamicData/dynamicData.service.js +3 -4
  68. package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +8 -0
  69. package/dist/src/modules/v4/opportunity/opportunity.converter.js +2 -2
  70. package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +2 -0
  71. package/dist/src/modules/v4/opportunity/opportunity.model.js +2 -0
  72. package/dist/src/modules/v4/opportunity/opportunity.repository.d.ts +1 -1
  73. package/dist/src/modules/v4/opportunity/opportunity.repository.js +14 -10
  74. package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +2 -2
  75. package/dist/src/modules/v4/opportunity/opportunity.service.js +5 -5
  76. package/dist/src/modules/v4/router.d.ts +14 -0
  77. package/dist/src/modules/v4/token/token.controller.d.ts +1 -0
  78. package/dist/src/modules/v4/token/token.model.d.ts +1 -0
  79. package/dist/src/modules/v4/token/token.model.js +1 -0
  80. package/dist/src/modules/v4/token/token.service.d.ts +3 -1
  81. package/dist/src/modules/v4/token/token.service.js +18 -0
  82. package/dist/src/modules/v4/uniswapV4/uniswapV4.controller.d.ts +2 -2
  83. package/dist/src/modules/v4/uniswapV4/uniswapV4.service.d.ts +2 -2
  84. package/dist/src/modules/v4/uniswapV4/uniswapV4.service.js +1 -1
  85. package/dist/src/routes/v3/campaigns.d.ts +1 -1
  86. package/dist/src/routes/v3/compoundV2.d.ts +2 -10
  87. package/dist/src/routes/v3/compoundV2.js +1 -1
  88. package/dist/src/routes/v3/dolomite.js +1 -1
  89. package/dist/src/routes/v3/euler.js +1 -1
  90. package/dist/src/routes/v3/router.d.ts +5 -16
  91. package/dist/src/routes/v3/uniswapv4.d.ts +2 -5
  92. package/dist/src/routes/v3/uniswapv4.js +1 -1
  93. package/dist/src/utils/decodeCalls.d.ts +1 -1
  94. package/dist/src/utils/decodeCalls.js +8 -2
  95. package/dist/src/utils/encodeCalls.d.ts +1 -1
  96. package/dist/src/utils/encodeCalls.js +20 -2
  97. package/dist/src/utils/generateCardName.d.ts +1 -1
  98. package/dist/src/utils/generateCardName.js +3 -1
  99. package/dist/src/utils/generateIcons.d.ts +1 -1
  100. package/dist/src/utils/generateIcons.js +1 -1
  101. package/dist/tsconfig.package.tsbuildinfo +1 -1
  102. package/package.json +2 -2
  103. package/dist/src/factories/dynamicData/factory.d.ts +0 -0
  104. package/dist/src/factories/dynamicData/factory.js +0 -10
  105. package/dist/src/libs/campaigns/campaignTypes/AjnaDynamicData.d.ts +0 -5
  106. package/dist/src/libs/campaigns/campaignTypes/AjnaDynamicData.js +0 -111
  107. package/dist/src/libs/campaigns/campaignTypes/AmbientDynamicData.d.ts +0 -3
  108. package/dist/src/libs/campaigns/campaignTypes/AmbientDynamicData.js +0 -243
  109. package/dist/src/libs/campaigns/campaignTypes/BadgerDynamicData.d.ts +0 -5
  110. package/dist/src/libs/campaigns/campaignTypes/BadgerDynamicData.js +0 -93
  111. package/dist/src/libs/campaigns/campaignTypes/CLAMMDynamicData.d.ts +0 -3
  112. package/dist/src/libs/campaigns/campaignTypes/CLAMMDynamicData.js +0 -986
  113. package/dist/src/libs/campaigns/campaignTypes/CompoundDynamicData.d.ts +0 -3
  114. package/dist/src/libs/campaigns/campaignTypes/CompoundDynamicData.js +0 -139
  115. package/dist/src/libs/campaigns/campaignTypes/DolomiteDynamicData.d.ts +0 -5
  116. package/dist/src/libs/campaigns/campaignTypes/DolomiteDynamicData.js +0 -60
  117. package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicData.d.ts +0 -4
  118. package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicData.js +0 -164
  119. package/dist/src/libs/campaigns/campaignTypes/ERC20_SNAPSHOTDynamicData.d.ts +0 -5
  120. package/dist/src/libs/campaigns/campaignTypes/ERC20_SNAPSHOTDynamicData.js +0 -38
  121. package/dist/src/libs/campaigns/campaignTypes/EigenLayerDynamicData.d.ts +0 -3
  122. package/dist/src/libs/campaigns/campaignTypes/EigenLayerDynamicData.js +0 -67
  123. package/dist/src/libs/campaigns/campaignTypes/EncompassingDynamicData.d.ts +0 -5
  124. package/dist/src/libs/campaigns/campaignTypes/EncompassingDynamicData.js +0 -34
  125. package/dist/src/libs/campaigns/campaignTypes/EventBasedDynamicData.d.ts +0 -3
  126. package/dist/src/libs/campaigns/campaignTypes/EventBasedDynamicData.js +0 -114
  127. package/dist/src/libs/campaigns/campaignTypes/HyperdriveDynamicData.d.ts +0 -5
  128. package/dist/src/libs/campaigns/campaignTypes/HyperdriveDynamicData.js +0 -99
  129. package/dist/src/libs/campaigns/campaignTypes/JSON_AIRDROPDynamicData.d.ts +0 -5
  130. package/dist/src/libs/campaigns/campaignTypes/JSON_AIRDROPDynamicData.js +0 -19
  131. package/dist/src/libs/campaigns/campaignTypes/MORPHODynamicData.d.ts +0 -5
  132. package/dist/src/libs/campaigns/campaignTypes/MORPHODynamicData.js +0 -112
  133. package/dist/src/libs/campaigns/campaignTypes/RadiantDynamicData.d.ts +0 -3
  134. package/dist/src/libs/campaigns/campaignTypes/RadiantDynamicData.js +0 -122
  135. package/dist/src/libs/campaigns/campaignTypes/SILODynamicData.d.ts +0 -7
  136. package/dist/src/libs/campaigns/campaignTypes/SILODynamicData.js +0 -115
  137. package/dist/src/libs/campaigns/campaignTypes/UniswapV4DynamicData.d.ts +0 -3
  138. package/dist/src/libs/campaigns/campaignTypes/UniswapV4DynamicData.js +0 -265
  139. package/dist/src/libs/campaigns/campaignTypes/VestDynamicData.d.ts +0 -5
  140. package/dist/src/libs/campaigns/campaignTypes/VestDynamicData.js +0 -61
  141. package/dist/src/libs/campaigns/campaignsDynamicData.d.ts +0 -3
  142. package/dist/src/libs/campaigns/campaignsDynamicData.js +0 -131
  143. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/fetchA51Strategies.d.ts +0 -0
  144. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/fetchA51Strategies.js +0 -0
  145. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/fetchAmbientInfo.d.ts +0 -0
  146. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/fetchAmbientInfo.js +0 -0
  147. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/fetchClamInfo.d.ts +0 -0
  148. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/fetchClamInfo.js +0 -0
  149. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/fetchLogs.d.ts +0 -0
  150. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/fetchLogs.js +0 -0
  151. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/getCompV2ForksVaults.d.ts +0 -0
  152. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/getCompV2ForksVaults.js +0 -0
  153. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/getContractCreationBlock.d.ts +0 -0
  154. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/getContractCreationBlock.js +0 -0
  155. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/getDolomiteMarkets.d.ts +0 -0
  156. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/getDolomiteMarkets.js +0 -0
  157. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/getEulerV2Vaults.d.ts +0 -0
  158. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/getUniswapV4Pools.d.ts +0 -0
  159. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/getUniswapV4Pools.js +0 -0
  160. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/GenericProcessor.js +0 -0
  161. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/eulerVaultNames.d.ts +0 -0
  162. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/eulerVaultNames.js +0 -0
  163. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/factoryFinder.d.ts +0 -0
  164. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/factoryFinder.js +0 -0
  165. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/getBlacklistedSupply.d.ts +0 -0
  166. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/getBlacklistedSupply.js +0 -0
  167. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/hardcoded.d.ts +0 -0
  168. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/hardcoded.js +0 -0
  169. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/metamorphoTvl.d.ts +0 -0
  170. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/metamorphoTvl.js +0 -0
  171. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/ownerFinder.d.ts +0 -0
  172. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/ownerFinder.js +0 -0
  173. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/spliceTVL.d.ts +0 -0
  174. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/spliceTVL.js +0 -0
  175. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/AaveProcessor.d.ts +0 -0
  176. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/AaveProcessor.js +0 -0
  177. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/AnglesLiquid.d.ts +0 -0
  178. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/AnglesLiquid.js +0 -0
  179. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/AssetProcessor.d.ts +0 -0
  180. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/AssetProcessor.js +0 -0
  181. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/AuraProcessor.d.ts +0 -0
  182. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/AuraProcessor.js +0 -0
  183. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/BalancerGaugeProcessor.d.ts +0 -0
  184. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/BalancerGaugeProcessor.js +0 -0
  185. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/BalancerPoolProcessor.d.ts +0 -0
  186. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/BalancerPoolProcessor.js +0 -0
  187. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/BalancerV3PoolProcessor.d.ts +0 -0
  188. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/BalancerV3PoolProcessor.js +0 -0
  189. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/BeefyProcessor.d.ts +0 -0
  190. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/BeefyProcessor.js +0 -0
  191. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/CompoundProcessor.d.ts +0 -0
  192. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/CompoundProcessor.js +0 -0
  193. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/ERC4626Processor.d.ts +0 -0
  194. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/ERC4626Processor.js +0 -0
  195. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/EnzymeProcessor.d.ts +0 -0
  196. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/EnzymeProcessor.js +0 -0
  197. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/EqualizerGaugeProcessor.d.ts +0 -0
  198. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/EqualizerGaugeProcessor.js +0 -0
  199. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/EulerBorrowProcessor.d.ts +0 -0
  200. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/EulerBorrowProcessor.js +0 -0
  201. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/EulerLendProcessor.d.ts +0 -0
  202. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/EulerLendProcessor.js +0 -0
  203. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/FluidProcessor.d.ts +0 -0
  204. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/FluidProcessor.js +0 -0
  205. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/FraxProcessor.d.ts +0 -0
  206. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/FraxProcessor.js +0 -0
  207. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/GammaProcessor.d.ts +0 -0
  208. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/GammaProcessor.js +0 -0
  209. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/GearboxProcessor.d.ts +0 -0
  210. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/GearboxProcessor.js +0 -0
  211. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/HanjiVaultProcessor.d.ts +0 -0
  212. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/HanjiVaultProcessor.js +0 -0
  213. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/HoldStationProcessor.d.ts +0 -0
  214. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/HoldStationProcessor.js +0 -0
  215. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/HourglassProcessor.d.ts +0 -0
  216. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/HourglassProcessor.js +0 -0
  217. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/MaverickBPProcessor.d.ts +0 -0
  218. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/MaverickBPProcessor.js +0 -0
  219. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/MetamorphoProcessor.d.ts +0 -0
  220. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/MetamorphoProcessor.js +0 -0
  221. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/NoLinkVaultProcessor.d.ts +0 -0
  222. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/NoLinkVaultProcessor.js +0 -0
  223. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/PendleProcessor.d.ts +0 -0
  224. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/PendleProcessor.js +0 -0
  225. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/PendleYTProcessor.d.ts +0 -0
  226. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/PendleYTProcessor.js +0 -0
  227. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/RadiantProcessor.d.ts +0 -0
  228. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/RadiantProcessor.js +0 -0
  229. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/RfxProcessor.d.ts +0 -0
  230. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/RfxProcessor.js +0 -0
  231. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/Satlayer.d.ts +0 -0
  232. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/Satlayer.js +0 -0
  233. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/SpectraProcessor.d.ts +0 -0
  234. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/SpectraProcessor.js +0 -0
  235. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/SpectraYTProcessor.d.ts +0 -0
  236. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/SpectraYTProcessor.js +0 -0
  237. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/SpliceProcessor.d.ts +0 -0
  238. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/SpliceProcessor.js +0 -0
  239. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/SturdySiloProcessor.d.ts +0 -0
  240. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/SturdySiloProcessor.js +0 -0
  241. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/TempestVaultProcessor.d.ts +0 -0
  242. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/TempestVaultProcessor.js +0 -0
  243. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/TemplateProcessor.d.ts +0 -0
  244. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/TemplateProcessor.js +0 -0
  245. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/TorosProcessor.d.ts +0 -0
  246. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/TorosProcessor.js +0 -0
  247. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/UniswapProcessor.d.ts +0 -0
  248. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/UniswapProcessor.js +0 -0
  249. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/VicunaProcessor.d.ts +0 -0
  250. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/VicunaProcessor.js +0 -0
  251. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/WoofiProcessor.d.ts +0 -0
  252. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/WoofiProcessor.js +0 -0
  253. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/ZkSwapThreePoolProcessor.d.ts +0 -0
  254. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/ZkSwapThreePoolProcessor.js +0 -0
  255. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/curveNPoolProcessor.d.ts +0 -0
  256. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/curveNPoolProcessor.js +0 -0
  257. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/curveProcessor.d.ts +0 -0
  258. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/curveProcessor.js +0 -0
  259. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/processorMapping.d.ts +0 -0
  260. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/stakedCurveProcessor.d.ts +0 -0
  261. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/stakedCurveProcessor.js +0 -0
  262. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/xU308Processor.d.ts +0 -0
  263. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/xU308Processor.js +0 -0
  264. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/subtypesPrices.d.ts +0 -0
  265. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/subtypesPrices.js +0 -0
  266. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/subtypesRound1.d.ts +0 -0
  267. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/subtypesRound2.js +0 -0
  268. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/subtypesRound3.d.ts +0 -0
  269. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/subtypesRound3.js +0 -0
  270. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/subtypesRound4.d.ts +0 -0
  271. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/subtypesRound4.js +0 -0
  272. /package/dist/src/{factories → engine}/opportunityMetadata/factory.d.ts +0 -0
  273. /package/dist/src/{factories → engine}/opportunityMetadata/factory.js +0 -0
  274. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Ajna.d.ts +0 -0
  275. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Ajna.js +0 -0
  276. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Ambiant.d.ts +0 -0
  277. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Ambiant.js +0 -0
  278. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Badger.d.ts +0 -0
  279. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Badger.js +0 -0
  280. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Clamm.d.ts +0 -0
  281. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Clamm.js +0 -0
  282. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Compound.d.ts +0 -0
  283. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Compound.js +0 -0
  284. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Default.d.ts +0 -0
  285. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Default.js +0 -0
  286. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Dolomite.d.ts +0 -0
  287. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Dolomite.js +0 -0
  288. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/EigenLayer.d.ts +0 -0
  289. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/EigenLayer.js +0 -0
  290. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Encompassing.d.ts +0 -0
  291. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Encompassing.js +0 -0
  292. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Erc20.d.ts +0 -0
  293. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Erc20Snapshot.d.ts +0 -0
  294. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Erc20Snapshot.js +0 -0
  295. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Hyperdrive.d.ts +0 -0
  296. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Hyperdrive.js +0 -0
  297. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Invalid.d.ts +0 -0
  298. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Invalid.js +0 -0
  299. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Ion.d.ts +0 -0
  300. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Ion.js +0 -0
  301. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/JsonAirdrop.d.ts +0 -0
  302. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/JsonAirdrop.js +0 -0
  303. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Morpho.d.ts +0 -0
  304. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Morpho.js +0 -0
  305. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Radiant.d.ts +0 -0
  306. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Radiant.js +0 -0
  307. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Silo.d.ts +0 -0
  308. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Silo.js +0 -0
  309. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/UniswapV4.d.ts +0 -0
  310. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/UniswapV4.js +0 -0
  311. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Vest.d.ts +0 -0
@@ -0,0 +1,249 @@
1
+ import { BucketService } from "@/modules/v4/bucket/bucket.service";
2
+ import { TokenService } from "@/modules/v4/token/token.service";
3
+ import { engineDbClient } from "@db";
4
+ import { BN2Number, ChainInteractionService, EAprBreakdownType, NETWORK_LABELS, UniswapV4Addresses, UniswapV4StateViewInterface, getSqrtRatioAtTick, shortenAddress, } from "@sdk";
5
+ import moment from "moment";
6
+ import { log } from "../../../utils/logger";
7
+ import { Pricer } from "../../../utils/pricer";
8
+ // Constants
9
+ const CALLS_LENGTH = 2;
10
+ /**
11
+ * Compute TVL
12
+ * @dev important: using the most recent state save with current prices
13
+ * it's only an estimate
14
+ */
15
+ async function computeUniV4PoolTVLFromMostRecentStateSave(chainId, poolID, priceCurrency0, priceCurrency1, decimalsCurrency0, decimalsCurrency1) {
16
+ let stateSave;
17
+ let blockNumber;
18
+ let states = {};
19
+ try {
20
+ const currentBlock = await ChainInteractionService(chainId).getBlockNumber();
21
+ const mostRecentStateSave = await engineDbClient.stateSave.findFirst({
22
+ where: {
23
+ id: `UniswapV4_${chainId}_${poolID}`,
24
+ blockNumber: {
25
+ lte: currentBlock,
26
+ },
27
+ },
28
+ orderBy: {
29
+ blockNumber: "desc",
30
+ },
31
+ });
32
+ stateSave = mostRecentStateSave.state;
33
+ blockNumber = mostRecentStateSave?.blockNumber;
34
+ states = stateSave.states;
35
+ // const globalState = stateSave.globalState as { tick: number; liquidity: string };
36
+ }
37
+ catch (e) {
38
+ log.warn(`merklDynamic data - failed to read a recent state of pool ${poolID} on ${NETWORK_LABELS[chainId]}`);
39
+ }
40
+ const { fileName, bucketName } = states;
41
+ // Bucket service
42
+ let tvl = 0;
43
+ let amount0 = 0;
44
+ let amount1 = 0;
45
+ try {
46
+ const bucket = new BucketService(bucketName, "merkl-production");
47
+ const storedStates = JSON.parse(await bucket.pull(fileName));
48
+ for (const [_, { value, params: _params }] of Object.entries(storedStates)) {
49
+ amount0 += BN2Number(value.amount0, decimalsCurrency0);
50
+ amount1 += BN2Number(value.amount1, decimalsCurrency1);
51
+ }
52
+ tvl = amount0 * (priceCurrency0 ?? 0) + amount1 * (priceCurrency1 ?? 0);
53
+ }
54
+ catch (e) {
55
+ console.log(e);
56
+ log.warn(`merklDynamic data - failed to decode state of pool ${poolID} on ${NETWORK_LABELS[chainId]}`);
57
+ }
58
+ return { tvl, amount0, amount1, blockNumber: blockNumber };
59
+ }
60
+ export class UniswapV4DynamicData {
61
+ async build(chainId, campaigns) {
62
+ const dynamicData = [];
63
+ const pricer = await Pricer.load();
64
+ const calls = [];
65
+ /** Dedupe pools from campaigns to build pool list */
66
+ const poolList = [];
67
+ for (const campaign of campaigns ?? []) {
68
+ /** Loop through all campaigns to add pools */
69
+ if (!poolList?.map(p => p.mainParameter.toLowerCase()).includes(campaign.mainParameter.toLowerCase())) {
70
+ poolList.push({
71
+ poolId: campaign.campaignParameters.poolId,
72
+ mainParameter: campaign.mainParameter, // FIXME
73
+ });
74
+ }
75
+ }
76
+ if (!!poolList) {
77
+ for (const pool of poolList) {
78
+ calls.push({
79
+ allowFailure: true,
80
+ callData: UniswapV4StateViewInterface.encodeFunctionData("getLiquidity", [pool.poolId]),
81
+ target: UniswapV4Addresses[chainId].StateView,
82
+ }, {
83
+ allowFailure: true,
84
+ callData: UniswapV4StateViewInterface.encodeFunctionData("getSlot0", [pool.poolId]),
85
+ target: UniswapV4Addresses[chainId].StateView,
86
+ });
87
+ }
88
+ const result = await ChainInteractionService(chainId).fetchState(calls);
89
+ let i = 0;
90
+ if (!!poolList) {
91
+ for (const pool of poolList) {
92
+ // This liquidity call gives the active liquidity on the pool. To get the total liquidity we would need to loop over all positions
93
+ let poolTotalLiquidity;
94
+ let sqrtPrice;
95
+ let tick;
96
+ let poolBalanceToken0 = 0;
97
+ let poolBalanceToken1 = 0;
98
+ const campaignsForPool = campaigns?.filter(campaign => campaign.mainParameter.toLowerCase() === pool.mainParameter.toLowerCase());
99
+ const prevI = i;
100
+ try {
101
+ poolTotalLiquidity = UniswapV4StateViewInterface.decodeFunctionResult("getLiquidity", result[i++].returnData)[0].toString();
102
+ const poolData = UniswapV4StateViewInterface.decodeFunctionResult("getSlot0", result[i++].returnData);
103
+ tick = poolData.tick;
104
+ sqrtPrice = getSqrtRatioAtTick(tick).toString();
105
+ }
106
+ catch {
107
+ log.warn(`merklDynamic data - failed to decode state of pool ${pool.poolId} on ${NETWORK_LABELS[chainId]}`);
108
+ i = prevI + CALLS_LENGTH;
109
+ continue;
110
+ }
111
+ const decimalsCurrency0 = campaignsForPool[0].campaignParameters.decimalsCurrency0;
112
+ const decimalsCurrency1 = campaignsForPool[0].campaignParameters.decimalsCurrency1;
113
+ const symbolCurrency0 = campaignsForPool[0].campaignParameters.symbolCurrency0;
114
+ const symbolCurrency1 = campaignsForPool[0].campaignParameters.symbolCurrency1;
115
+ const priceToken0 = (await pricer.get({
116
+ address: campaignsForPool[0].campaignParameters.currency0,
117
+ chainId: chainId,
118
+ symbol: symbolCurrency0,
119
+ }));
120
+ const priceToken1 = (await pricer.get({
121
+ address: campaignsForPool[0].campaignParameters.currency1,
122
+ chainId: chainId,
123
+ symbol: symbolCurrency1,
124
+ }));
125
+ const { tvl, amount0, amount1, blockNumber } = await computeUniV4PoolTVLFromMostRecentStateSave(chainId, pool.poolId, priceToken0, priceToken1, decimalsCurrency0, decimalsCurrency1);
126
+ poolBalanceToken0 += amount0;
127
+ poolBalanceToken1 += amount1;
128
+ /** Iterate over distributions to compute APRs */
129
+ for (const campaign of campaignsForPool) {
130
+ const c = campaign;
131
+ const amount = BN2Number(c.amount, c.campaignParameters.decimalsRewardToken);
132
+ const startTimestamp = BN2Number(c.startTimestamp, 0);
133
+ const endTimestamp = BN2Number(c.endTimestamp, 0);
134
+ const isLive = moment().unix() > startTimestamp && moment().unix() < endTimestamp;
135
+ const totalWeight = BN2Number(c.campaignParameters.weightFees, 4) +
136
+ BN2Number(c.campaignParameters.weightToken0, 4) +
137
+ BN2Number(c.campaignParameters.weightToken1, 4);
138
+ // Proportions in percentage
139
+ const propFees = (BN2Number(c.campaignParameters.weightFees, 4) / totalWeight) * 100;
140
+ const propToken0 = (BN2Number(c.campaignParameters.weightToken0, 4) / totalWeight) * 100;
141
+ const propToken1 = (BN2Number(c.campaignParameters.weightToken1, 4) / totalWeight) * 100;
142
+ let distributionMeanAPR = 0;
143
+ const blacklistedBalance0 = 0;
144
+ const blacklistedBalance1 = 0;
145
+ const blacklistedLiquidity = 0;
146
+ const aprs = {};
147
+ const aprBreakdowns = [];
148
+ let priceRewardToken = 0;
149
+ if (isLive && c.campaignParameters.symbolRewardToken !== "aglaMerkl") {
150
+ // priceRewardToken = (await pricer.get({
151
+ // address: c.rewardToken,
152
+ // chainId: chainId,
153
+ // symbol: c.campaignParameters.symbolRewardToken,
154
+ // })) as number;
155
+ priceRewardToken = await TokenService.getRewardTokenPrice(campaign);
156
+ /**
157
+ * Handle whitelisted/blacklisted addresses to compute APR
158
+ */
159
+ if (c.campaignParameters.whitelist.length > 0) {
160
+ // TODO
161
+ }
162
+ else if (c.campaignParameters.blacklist.length > 0) {
163
+ // TODO
164
+ }
165
+ /** Yearly rewards in $ */
166
+ const yearlyToken0Rewards = (propToken0 * priceRewardToken * amount * (365 * 24 * 3_600)) / (endTimestamp - startTimestamp);
167
+ const yearlyToken1Rewards = (propToken1 * priceRewardToken * amount * (365 * 24 * 3_600)) / (endTimestamp - startTimestamp);
168
+ const yearlyFeeRewards = (propFees * priceRewardToken * amount * (365 * 24 * 3_600)) / (endTimestamp - startTimestamp);
169
+ let poolAPRkey = "";
170
+ /**
171
+ * General APR (@notice potentially with a boost)
172
+ */
173
+ const poolBalanceToken0WithoutBlacklist = poolBalanceToken0;
174
+ const poolBalanceToken1WithoutBlacklist = poolBalanceToken1;
175
+ // const poolLiquidityWithoutBlacklist = poolTotalLiquidity - (blacklistedLiquidity ?? 0);
176
+ const tvl = poolBalanceToken0WithoutBlacklist * priceToken0 + poolBalanceToken1WithoutBlacklist * priceToken1;
177
+ distributionMeanAPR = (yearlyToken0Rewards + yearlyToken1Rewards + yearlyFeeRewards) / tvl;
178
+ distributionMeanAPR = !distributionMeanAPR || Number.isNaN(distributionMeanAPR) ? 0 : distributionMeanAPR;
179
+ /**
180
+ * @dev We cannot include a whitelisted distrib apr into the mean APR
181
+ */
182
+ if (c.campaignParameters.whitelist.length === 0) {
183
+ poolAPRkey = "Average APR (rewards / pool TVL)";
184
+ if (!aprs[poolAPRkey])
185
+ aprs[poolAPRkey] = 0;
186
+ aprs[poolAPRkey] += distributionMeanAPR;
187
+ // @Hugo wip: new way to structure aprBreakdowns
188
+ aprBreakdowns.push({
189
+ address: pool.poolId,
190
+ value: distributionMeanAPR,
191
+ type: EAprBreakdownType.AVERAGE,
192
+ label: "Average APR (rewards / pool TVL)",
193
+ });
194
+ // APR per token
195
+ poolAPRkey = `APR for holding ${c.campaignParameters.symbolCurrency0} in pool`;
196
+ if (!aprs[poolAPRkey])
197
+ aprs[poolAPRkey] = 0;
198
+ aprs[poolAPRkey] += yearlyToken0Rewards / (poolBalanceToken0WithoutBlacklist * priceToken0);
199
+ // @Hugo wip: new way to structure aprBreakdowns
200
+ aprBreakdowns.push({
201
+ address: pool.poolId,
202
+ value: yearlyToken0Rewards / (poolBalanceToken0WithoutBlacklist * priceToken0),
203
+ type: EAprBreakdownType.TOKEN1,
204
+ label: c.campaignParameters.symbolCurrency0,
205
+ });
206
+ poolAPRkey = `APR for holding ${c.campaignParameters.symbolCurrency1} in pool`;
207
+ if (!aprs[poolAPRkey])
208
+ aprs[poolAPRkey] = 0;
209
+ aprs[poolAPRkey] += yearlyToken1Rewards / (poolBalanceToken1WithoutBlacklist * priceToken1);
210
+ // @Hugo wip: new way to structure aprBreakdowns
211
+ aprBreakdowns.push({
212
+ address: pool.poolId,
213
+ value: yearlyToken1Rewards / (poolBalanceToken1WithoutBlacklist * priceToken1),
214
+ type: EAprBreakdownType.TOKEN2,
215
+ label: c.campaignParameters.symbolCurrency1,
216
+ });
217
+ }
218
+ else {
219
+ for (const _ of c.campaignParameters.whitelist) {
220
+ const poolAPRkey = `Whitelisted campaign on UniswapV4 via address ${shortenAddress(c.campaignParameters.whitelist[0])} Average APR`;
221
+ if (!aprs[poolAPRkey])
222
+ aprs[poolAPRkey] = 0;
223
+ }
224
+ aprs[poolAPRkey] += distributionMeanAPR;
225
+ }
226
+ }
227
+ dynamicData.push({
228
+ ...campaign,
229
+ apr: distributionMeanAPR,
230
+ aprs,
231
+ aprBreakdowns,
232
+ blacklistedBalance0,
233
+ blacklistedBalance1,
234
+ blacklistedLiquidity,
235
+ poolBalanceToken0,
236
+ poolBalanceToken1,
237
+ poolTotalLiquidity,
238
+ sqrtPrice,
239
+ tick: tick,
240
+ priceRewardToken: priceRewardToken,
241
+ tvl: poolBalanceToken0 * priceToken0 + poolBalanceToken1 * priceToken1,
242
+ });
243
+ }
244
+ }
245
+ }
246
+ }
247
+ return dynamicData;
248
+ }
249
+ }
@@ -0,0 +1,9 @@
1
+ import { type Campaign, type CampaignParameters, type MerklChainId } from "@sdk";
2
+ import type { DynamicDataBuilder } from "../interface";
3
+ export declare const VEST_TREASURY = "0x7ccF5BbeC69c790D27dA3b5398B9e0d6D6EeC9F3";
4
+ export declare const VEST_TOKEN = "0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4";
5
+ type campaignType = Campaign.VEST;
6
+ export declare class VestDynamicData implements DynamicDataBuilder<campaignType> {
7
+ build(chainId: MerklChainId, campaigns: CampaignParameters<campaignType>[]): Promise<VestCampaignDynamicData[]>;
8
+ }
9
+ export {};
@@ -0,0 +1,58 @@
1
+ import { TokenService } from "@/modules/v4/token/token.service";
2
+ import { BN2Number, ChainInteractionService, ERC20Interface, YEAR, } from "@sdk";
3
+ import { log } from "../../../utils/logger";
4
+ import { Pricer } from "../../../utils/pricer";
5
+ export const VEST_TREASURY = "0x7ccF5BbeC69c790D27dA3b5398B9e0d6D6EeC9F3";
6
+ export const VEST_TOKEN = "0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4";
7
+ export class VestDynamicData {
8
+ async build(chainId, campaigns) {
9
+ const pricer = await Pricer.load();
10
+ const calls = [];
11
+ for (const _campaign of campaigns) {
12
+ calls.push({
13
+ allowFailure: true,
14
+ callData: ERC20Interface.encodeFunctionData("balanceOf", [VEST_TREASURY]),
15
+ target: VEST_TOKEN,
16
+ });
17
+ }
18
+ const result = await ChainInteractionService(chainId).fetchState(calls);
19
+ let i = 0;
20
+ const dynamicData = [];
21
+ for (const campaign of campaigns) {
22
+ let totalSupply;
23
+ try {
24
+ totalSupply = BN2Number(ERC20Interface.decodeFunctionResult("balanceOf", result[i++].returnData)[0], 6);
25
+ }
26
+ catch {
27
+ log.warn(`Error getting totalSupply for campaign ${campaign.campaignId}`);
28
+ totalSupply = 0.0000001;
29
+ }
30
+ // const priceRewardToken =
31
+ // (await pricer.get({
32
+ // address: campaign.rewardToken,
33
+ // chainId: campaign.chainId,
34
+ // symbol: campaign.campaignParameters.symbolRewardToken,
35
+ // })) ?? 0;
36
+ const priceRewardToken = await TokenService.getRewardTokenPrice(campaign);
37
+ const priceTargetToken = (await pricer.get({
38
+ address: VEST_TOKEN,
39
+ chainId: campaign.computeChainId,
40
+ symbol: "USDC.e",
41
+ })) ?? 0;
42
+ const tvl = totalSupply * priceTargetToken;
43
+ dynamicData.push({
44
+ ...campaign,
45
+ apr: (priceRewardToken *
46
+ BN2Number(campaign.amount, campaign.campaignParameters.decimalsRewardToken) *
47
+ YEAR *
48
+ 100) /
49
+ campaign.campaignParameters.duration /
50
+ (totalSupply * priceTargetToken),
51
+ totalSupplyTargetToken: totalSupply,
52
+ tvl,
53
+ priceRewardToken: priceRewardToken,
54
+ });
55
+ }
56
+ return dynamicData;
57
+ }
58
+ }
@@ -0,0 +1,5 @@
1
+ import type { Campaign as CampaignEnum, CampaignParameters, MerklChainId } from "@sdk";
2
+ import type { DynamicDataBuilder } from "../interface";
3
+ export declare class DefaultDynamicData implements DynamicDataBuilder<CampaignEnum> {
4
+ build(_chainId: MerklChainId, campaigns: CampaignParameters<CampaignEnum>[]): Promise<CampaignParameters<CampaignEnum>[]>;
5
+ }
@@ -0,0 +1,5 @@
1
+ export class DefaultDynamicData {
2
+ async build(_chainId, campaigns) {
3
+ return campaigns;
4
+ }
5
+ }
@@ -1,4 +1,5 @@
1
1
  import { Redis } from "@/cache";
2
+ import { fetchEulerVaultName } from "@/engine/erc20SubTypeProcessors/helpers/eulerVaultNames";
2
3
  import { batchMulticallCallWithRetry } from "@/utils/generic";
3
4
  import { log } from "@/utils/logger";
4
5
  import { providers } from "@/utils/providers";
@@ -6,7 +7,6 @@ import { apiDbClient } from "@db";
6
7
  import { ChainInteractionService, ERC20Interface, EULER_ADDRESSES, EulerEVKInterface, EulerVaultLensInterface, EulerVault__factory, NETWORK_LABELS, eulerChainIds, getContractCreationBlock, } from "@sdk";
7
8
  import { getAddress } from "ethers/lib/utils";
8
9
  import _ from "lodash";
9
- import { fetchEulerVaultName } from "../campaignTypes/ERC20SubTypes/helpers/eulerVaultNames";
10
10
  import { safeFetchLogs } from "./fetchLogs";
11
11
  export var LoggedEntityType;
12
12
  (function (LoggedEntityType) {
@@ -1,6 +1,6 @@
1
1
  import type { Pricer } from "@/utils/pricer";
2
2
  import { type CallDto, type Campaign, type CampaignParameters } from "@sdk";
3
- import type { ERC20SupportedCampaignType } from "../ERC20DynamicData";
3
+ import type { ERC20SupportedCampaignType } from "../dynamicData/implementations/Erc20";
4
4
  import { type tokenType, type tokenTypeStruct } from "./helpers/tokenType";
5
5
  export declare enum Round {
6
6
  one = "round1",
@@ -90,7 +90,8 @@ export declare enum tokenType {
90
90
  katana = "katana",
91
91
  balancerV3 = "balancerV3",
92
92
  hanji_liquidity_vault_token = "hanji_liquidity_vault_token",
93
- xU308 = "xU308"
93
+ xU308 = "xU308",
94
+ bunniV2 = "bunniV2"
94
95
  }
95
96
  export declare const tokenTypeToProtocol: {
96
97
  [key in tokenType]: {
@@ -92,6 +92,7 @@ export var tokenType;
92
92
  tokenType["balancerV3"] = "balancerV3";
93
93
  tokenType["hanji_liquidity_vault_token"] = "hanji_liquidity_vault_token";
94
94
  tokenType["xU308"] = "xU308";
95
+ tokenType["bunniV2"] = "bunniV2";
95
96
  })(tokenType || (tokenType = {}));
96
97
  export const tokenTypeToProtocol = {
97
98
  [tokenType.aave_borrowing]: { protocol: "Aave", action: OpportunityAction.BORROW },
@@ -184,4 +185,5 @@ export const tokenTypeToProtocol = {
184
185
  [tokenType.balancerV3]: { protocol: "Balancer", action: OpportunityAction.POOL },
185
186
  [tokenType.hanji_liquidity_vault_token]: { protocol: "Hanji", action: OpportunityAction.POOL },
186
187
  [tokenType.xU308]: { protocol: "Uranium", action: OpportunityAction.HOLD },
188
+ [tokenType.bunniV2]: { protocol: "Bunni V2", action: OpportunityAction.HOLD },
187
189
  };
@@ -0,0 +1,45 @@
1
+ import type { Pricer } from "@/utils/pricer";
2
+ import { type Campaign, type CampaignParameters, type UniswapV4PoolKey } from "@sdk";
3
+ import type { PoolStateStructOutput } from "libs/sdk/src/generated/BunniV2Hub";
4
+ import { GenericProcessor, type dataType, type mandatoryCallKeys } from "../GenericProcessor";
5
+ import type { tokenType } from "../helpers/tokenType";
6
+ type callType = {
7
+ key: keyof dataRawBunniV2;
8
+ call: string;
9
+ target: keyof callKeysBunniV2;
10
+ metaData?: keyof callKeysBunniV2;
11
+ };
12
+ type callKeysBunniV2 = mandatoryCallKeys & {
13
+ decimalsToken0: string;
14
+ decimalsToken1: string;
15
+ hub: string;
16
+ poolId: string;
17
+ poolKey: string;
18
+ poolState: string;
19
+ symbolToken0: string;
20
+ symbolToken1: string;
21
+ token0: string;
22
+ token1: string;
23
+ totalSupply: string;
24
+ };
25
+ type dataRawBunniV2 = callKeysBunniV2 & {
26
+ poolId: string;
27
+ poolKey: UniswapV4PoolKey;
28
+ poolState: PoolStateStructOutput;
29
+ };
30
+ type dataTypeBunniV2 = dataType & {
31
+ poolId: string;
32
+ balance0: string;
33
+ balance1: string;
34
+ };
35
+ export declare class BunniV2Processor extends GenericProcessor<callKeysBunniV2, dataRawBunniV2, dataTypeBunniV2> {
36
+ rounds: {
37
+ round1: callType[];
38
+ round2: callType[];
39
+ round3: callType[];
40
+ round4: callType[];
41
+ };
42
+ processingRound2(typeInfo: dataRawBunniV2): void;
43
+ processingRound5(_index: number, type: tokenType, typeInfo: dataRawBunniV2, _calls: string[], campaign: CampaignParameters<Campaign.ERC20> | CampaignParameters<Campaign.EULER>, pricer: Pricer): Promise<dataTypeBunniV2>;
44
+ }
45
+ export {};
@@ -0,0 +1,87 @@
1
+ import { generateCardName } from "@/utils/generateCardName";
2
+ import { BN2Number, computeUniswapV4PoolId } from "@sdk";
3
+ import { GenericProcessor } from "../GenericProcessor";
4
+ export class BunniV2Processor extends GenericProcessor {
5
+ rounds = {
6
+ round1: [
7
+ {
8
+ key: "hub",
9
+ call: "hub",
10
+ target: "tokenAddress",
11
+ },
12
+ {
13
+ key: "poolKey",
14
+ call: "poolKey",
15
+ target: "tokenAddress",
16
+ },
17
+ {
18
+ key: "token0",
19
+ call: "token0",
20
+ target: "tokenAddress",
21
+ },
22
+ {
23
+ key: "token1",
24
+ call: "token1",
25
+ target: "tokenAddress",
26
+ },
27
+ ],
28
+ round2: [
29
+ {
30
+ key: "poolState",
31
+ call: "poolState",
32
+ target: "hub",
33
+ metaData: "poolId",
34
+ },
35
+ ],
36
+ round3: [
37
+ {
38
+ key: "decimalsToken0",
39
+ call: "decimals",
40
+ target: "token0",
41
+ },
42
+ {
43
+ key: "symbolToken0",
44
+ call: "symbol",
45
+ target: "token0",
46
+ },
47
+ {
48
+ key: "decimalsToken1",
49
+ call: "decimals",
50
+ target: "token1",
51
+ },
52
+ {
53
+ key: "symbolToken1",
54
+ call: "symbol",
55
+ target: "token1",
56
+ },
57
+ ],
58
+ round4: [{ key: "totalSupply", call: "totalSupply", target: "tokenAddress" }],
59
+ };
60
+ processingRound2(typeInfo) {
61
+ typeInfo.poolId = computeUniswapV4PoolId(typeInfo.poolKey);
62
+ }
63
+ async processingRound5(_index, type, typeInfo, _calls, campaign, pricer) {
64
+ const { whitelistedSupplyTargetToken, totalSupply, blacklistedSupply } = this.handleWhiteListBlacklistRound5(typeInfo, campaign);
65
+ const decimalsToken0 = Number(typeInfo.decimalsToken0);
66
+ const decimalsToken1 = Number(typeInfo.decimalsToken1);
67
+ const amount0 = BN2Number(typeInfo.poolState.rawBalance0, decimalsToken0) +
68
+ BN2Number(typeInfo.poolState.reserve0, decimalsToken0);
69
+ const amount1 = BN2Number(typeInfo.poolState.rawBalance1, decimalsToken0) +
70
+ BN2Number(typeInfo.poolState.reserve1, decimalsToken1);
71
+ const token0PRice = (await pricer.get({ symbol: typeInfo.symbolToken0 })) ?? 0;
72
+ const token1Price = (await pricer.get({ symbol: typeInfo.symbolToken1 })) ?? 0;
73
+ const tvl = token0PRice * amount0 + token1Price * amount1;
74
+ const priceTargetToken = tvl / totalSupply;
75
+ return {
76
+ ...typeInfo,
77
+ balance0: amount0.toString(),
78
+ balance1: amount1.toString(),
79
+ blacklistedSupply,
80
+ cardName: generateCardName(type, typeInfo, campaign),
81
+ priceTargetToken: priceTargetToken,
82
+ totalSupply,
83
+ tvl,
84
+ whitelistedSupplyTargetToken,
85
+ };
86
+ }
87
+ }
@@ -8,6 +8,7 @@ import { BalancerGaugeProcessor } from "./BalancerGaugeProcessor";
8
8
  import { BalancerPoolProcessor } from "./BalancerPoolProcessor";
9
9
  import { BalancerV3PoolProcessor } from "./BalancerV3PoolProcessor";
10
10
  import { BeefyProcessor } from "./BeefyProcessor";
11
+ import { BunniV2Processor } from "./BunniV2Processor";
11
12
  import { CompoundProcessor } from "./CompoundProcessor";
12
13
  import { ERC4626Processor } from "./ERC4626Processor";
13
14
  import { EnzymeProcessor } from "./EnzymeProcessor";
@@ -134,4 +135,5 @@ export const processorMapping = {
134
135
  [tokenType.balancerV3]: BalancerV3PoolProcessor,
135
136
  [tokenType.hanji_liquidity_vault_token]: HanjiVaultProcessor,
136
137
  [tokenType.xU308]: xU308Processor,
138
+ [tokenType.bunniV2]: BunniV2Processor,
137
139
  };
@@ -149,6 +149,8 @@ function satisfiesNameConditions(name, type) {
149
149
  return lowerCaseName.includes("spectra") && lowerCaseName.includes("curve");
150
150
  case tokenType.spectra_yt:
151
151
  return lowerCaseName.includes("yield") && lowerCaseName.includes("token");
152
+ case tokenType.bunniV2:
153
+ return lowerCaseName.includes("bunni");
152
154
  default:
153
155
  return false;
154
156
  }
@@ -1,4 +1,4 @@
1
1
  import type { CampaignParameters, ResultDto } from "@sdk";
2
- import type { ERC20SupportedCampaignType } from "../ERC20DynamicData";
2
+ import type { ERC20SupportedCampaignType } from "../dynamicData/implementations/Erc20";
3
3
  import type { tokenType, tokenTypeStruct } from "./helpers/tokenType";
4
4
  export declare function getTokenTypeRound2(index: number, type: tokenType, typeInfo: any, calls: ResultDto[], campaign?: CampaignParameters<ERC20SupportedCampaignType>): tokenTypeStruct;
@@ -1,6 +1,6 @@
1
+ import { dynamicDataBuilderFactory } from "@/engine/dynamicData/factory";
1
2
  import { log } from "@/utils/logger";
2
3
  import { Campaign as CampaignEnum } from "@sdk";
3
- import { CampaignService } from "../../../modules/v4/campaign";
4
4
  import { ProtocolService } from "../../../modules/v4/protocol/protocol.service";
5
5
  export class Erc20Metadata {
6
6
  async build(computeChainId, params, _subType, rewardTokenAddress, distributionChainId, campaignId) {
@@ -9,7 +9,7 @@ export class Erc20Metadata {
9
9
  let mainProtocolId = undefined;
10
10
  const tokens = [{ chainId: computeChainId, address: params.targetToken }];
11
11
  try {
12
- const [dynamicData] = (await CampaignService.fetchDynamicData(computeChainId, CampaignEnum[CampaignEnum.ERC20], [
12
+ const [dynamicData] = await dynamicDataBuilderFactory(CampaignEnum.ERC20).build(computeChainId, [
13
13
  {
14
14
  campaignId,
15
15
  rewardToken: rewardTokenAddress,
@@ -18,7 +18,7 @@ export class Erc20Metadata {
18
18
  computeChainId,
19
19
  campaignParameters: params,
20
20
  },
21
- ]));
21
+ ]);
22
22
  action = dynamicData?.typeInfo?.action ?? action;
23
23
  name = dynamicData?.typeInfo?.cardName;
24
24
  mainProtocolId = dynamicData?.typeInfo?.protocol?.toLowerCase().replace(" ", "");
@@ -2,7 +2,7 @@ import { Campaign as CampaignEnum, type CampaignParameters, type ChainId } from
2
2
  import type { MetadataBuilder } from "../interface";
3
3
  type campaignType = CampaignEnum.EULER;
4
4
  export declare class EulerMetadata implements MetadataBuilder<campaignType> {
5
- build(computeChainId: ChainId, params: CampaignParameters<campaignType>["campaignParameters"], subType: CampaignParameters<campaignType>["campaignSubType"], rewardTokenAddress: string, _distributionChainId: ChainId, campaignId: string): Promise<{
5
+ build(computeChainId: ChainId, params: CampaignParameters<campaignType>["campaignParameters"], subType: CampaignParameters<campaignType>["campaignSubType"], rewardTokenAddress: string, distributionChainId: ChainId, campaignId: string): Promise<{
6
6
  name: string;
7
7
  tokens: {
8
8
  chainId: ChainId;
@@ -1,21 +1,21 @@
1
+ import { dynamicDataBuilderFactory } from "@/engine/dynamicData/factory";
1
2
  import { log } from "@/utils/logger";
2
3
  import { OpportunityAction } from "@db/api";
3
4
  import { Campaign as CampaignEnum } from "@sdk";
4
- import { CampaignService } from "../../../modules/v4/campaign";
5
5
  export class EulerMetadata {
6
- async build(computeChainId, params, subType, rewardTokenAddress, _distributionChainId, campaignId) {
6
+ async build(computeChainId, params, subType, rewardTokenAddress, distributionChainId, campaignId) {
7
7
  let name = `Hold ${params.symbolTargetToken}`;
8
8
  try {
9
- const [dynamicData] = (await CampaignService.fetchDynamicData(computeChainId, CampaignEnum[CampaignEnum.EULER], [
9
+ const [dynamicData] = await dynamicDataBuilderFactory(CampaignEnum.EULER).build(computeChainId, [
10
10
  {
11
- campaignSubType: subType,
12
- campaignParameters: params,
13
- computeChainId,
14
11
  campaignId,
15
12
  rewardToken: rewardTokenAddress,
16
13
  amount: "1",
14
+ chainId: distributionChainId,
15
+ computeChainId,
16
+ campaignParameters: params,
17
17
  },
18
- ]));
18
+ ]);
19
19
  name = dynamicData?.typeInfo?.cardName;
20
20
  }
21
21
  catch {
@@ -3,7 +3,7 @@ import type { MetadataBuilder } from "../interface";
3
3
  type campaignType = CampaignEnum.EVENT_BASED;
4
4
  export declare class EventBasedMetadata implements MetadataBuilder<campaignType> {
5
5
  build(computeChainId: ChainId, params: CampaignParameters<campaignType>["campaignParameters"], _subType: CampaignParameters<campaignType>["campaignSubType"]): Promise<{
6
- action: "HOLD";
6
+ action: "SWAP";
7
7
  name: string;
8
8
  tokens: {
9
9
  chainId: ChainId;
@@ -1,7 +1,7 @@
1
1
  export class EventBasedMetadata {
2
2
  async build(computeChainId, params, _subType) {
3
3
  try {
4
- const action = "HOLD";
4
+ const action = "SWAP";
5
5
  const mainProtocolId = "Hanji";
6
6
  let name = `${params.eventID.split("(")[0]} on ${mainProtocolId}`;
7
7
  let tokens = [{ chainId: computeChainId, address: params.contract }];
@@ -33,7 +33,7 @@ export class EventBasedMetadata {
33
33
  mainProtocol: mainProtocolId,
34
34
  };
35
35
  }
36
- catch (error) {
36
+ catch {
37
37
  return {
38
38
  action: "INVALID",
39
39
  name: "Event Based Campaign",
@@ -1,4 +1,4 @@
1
- import { VEST_TOKEN } from "@/libs/campaigns/campaignTypes/VestDynamicData";
1
+ import { VEST_TOKEN } from "@/engine/dynamicData/implementations/Vest";
2
2
  import { OpportunityAction } from "@db/api";
3
3
  export class VestMetadata {
4
4
  async build(computeChainId, _params, _subType) {