@merkl/api 0.19.7 → 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 (293) hide show
  1. package/dist/src/backgroundJobs/jobs/campaignsCacheUpdater.js +4 -3
  2. package/dist/src/eden/index.d.ts +15 -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}/subtypesRound2.d.ts +1 -1
  44. package/dist/src/{factories → engine}/opportunityMetadata/implementations/Erc20.js +3 -3
  45. package/dist/src/{factories → engine}/opportunityMetadata/implementations/Euler.d.ts +1 -1
  46. package/dist/src/{factories → engine}/opportunityMetadata/implementations/Euler.js +7 -7
  47. package/dist/src/{factories → engine}/opportunityMetadata/implementations/Vest.js +1 -1
  48. package/dist/src/index.d.ts +5 -16
  49. package/dist/src/jobs/update-euler-vaults.js +2 -2
  50. package/dist/src/modules/v4/apr/apr.service.d.ts +1 -1
  51. package/dist/src/modules/v4/apr/apr.service.js +4 -4
  52. package/dist/src/modules/v4/campaign/campaign.service.d.ts +0 -8
  53. package/dist/src/modules/v4/campaign/campaign.service.js +0 -13
  54. package/dist/src/modules/v4/dynamicData/dynamicData.service.js +3 -4
  55. package/dist/src/modules/v4/opportunity/opportunity.service.js +1 -1
  56. package/dist/src/modules/v4/uniswapV4/uniswapV4.controller.d.ts +2 -2
  57. package/dist/src/modules/v4/uniswapV4/uniswapV4.service.d.ts +2 -2
  58. package/dist/src/modules/v4/uniswapV4/uniswapV4.service.js +1 -1
  59. package/dist/src/routes/v3/campaigns.d.ts +1 -1
  60. package/dist/src/routes/v3/compoundV2.d.ts +2 -10
  61. package/dist/src/routes/v3/compoundV2.js +1 -1
  62. package/dist/src/routes/v3/dolomite.js +1 -1
  63. package/dist/src/routes/v3/euler.js +1 -1
  64. package/dist/src/routes/v3/router.d.ts +5 -16
  65. package/dist/src/routes/v3/uniswapv4.d.ts +2 -5
  66. package/dist/src/routes/v3/uniswapv4.js +1 -1
  67. package/dist/src/utils/decodeCalls.d.ts +1 -1
  68. package/dist/src/utils/decodeCalls.js +1 -1
  69. package/dist/src/utils/encodeCalls.d.ts +1 -1
  70. package/dist/src/utils/encodeCalls.js +1 -1
  71. package/dist/src/utils/generateCardName.d.ts +1 -1
  72. package/dist/src/utils/generateCardName.js +1 -1
  73. package/dist/src/utils/generateIcons.d.ts +1 -1
  74. package/dist/src/utils/generateIcons.js +1 -1
  75. package/dist/tsconfig.package.tsbuildinfo +1 -1
  76. package/package.json +1 -1
  77. package/dist/src/factories/dynamicData/factory.d.ts +0 -0
  78. package/dist/src/factories/dynamicData/factory.js +0 -10
  79. package/dist/src/libs/campaigns/campaignTypes/AjnaDynamicData.d.ts +0 -5
  80. package/dist/src/libs/campaigns/campaignTypes/AjnaDynamicData.js +0 -111
  81. package/dist/src/libs/campaigns/campaignTypes/AmbientDynamicData.d.ts +0 -3
  82. package/dist/src/libs/campaigns/campaignTypes/AmbientDynamicData.js +0 -245
  83. package/dist/src/libs/campaigns/campaignTypes/BadgerDynamicData.d.ts +0 -5
  84. package/dist/src/libs/campaigns/campaignTypes/BadgerDynamicData.js +0 -96
  85. package/dist/src/libs/campaigns/campaignTypes/CLAMMDynamicData.d.ts +0 -3
  86. package/dist/src/libs/campaigns/campaignTypes/CLAMMDynamicData.js +0 -988
  87. package/dist/src/libs/campaigns/campaignTypes/CompoundDynamicData.d.ts +0 -3
  88. package/dist/src/libs/campaigns/campaignTypes/CompoundDynamicData.js +0 -142
  89. package/dist/src/libs/campaigns/campaignTypes/DolomiteDynamicData.d.ts +0 -5
  90. package/dist/src/libs/campaigns/campaignTypes/DolomiteDynamicData.js +0 -63
  91. package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicData.d.ts +0 -4
  92. package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicData.js +0 -167
  93. package/dist/src/libs/campaigns/campaignTypes/ERC20_SNAPSHOTDynamicData.d.ts +0 -5
  94. package/dist/src/libs/campaigns/campaignTypes/ERC20_SNAPSHOTDynamicData.js +0 -38
  95. package/dist/src/libs/campaigns/campaignTypes/EigenLayerDynamicData.d.ts +0 -3
  96. package/dist/src/libs/campaigns/campaignTypes/EigenLayerDynamicData.js +0 -70
  97. package/dist/src/libs/campaigns/campaignTypes/EncompassingDynamicData.d.ts +0 -5
  98. package/dist/src/libs/campaigns/campaignTypes/EncompassingDynamicData.js +0 -34
  99. package/dist/src/libs/campaigns/campaignTypes/EventBasedDynamicData.d.ts +0 -3
  100. package/dist/src/libs/campaigns/campaignTypes/EventBasedDynamicData.js +0 -115
  101. package/dist/src/libs/campaigns/campaignTypes/HyperdriveDynamicData.d.ts +0 -5
  102. package/dist/src/libs/campaigns/campaignTypes/HyperdriveDynamicData.js +0 -102
  103. package/dist/src/libs/campaigns/campaignTypes/JSON_AIRDROPDynamicData.d.ts +0 -5
  104. package/dist/src/libs/campaigns/campaignTypes/JSON_AIRDROPDynamicData.js +0 -19
  105. package/dist/src/libs/campaigns/campaignTypes/MORPHODynamicData.d.ts +0 -5
  106. package/dist/src/libs/campaigns/campaignTypes/MORPHODynamicData.js +0 -115
  107. package/dist/src/libs/campaigns/campaignTypes/RadiantDynamicData.d.ts +0 -3
  108. package/dist/src/libs/campaigns/campaignTypes/RadiantDynamicData.js +0 -125
  109. package/dist/src/libs/campaigns/campaignTypes/SILODynamicData.d.ts +0 -7
  110. package/dist/src/libs/campaigns/campaignTypes/SILODynamicData.js +0 -118
  111. package/dist/src/libs/campaigns/campaignTypes/UniswapV4DynamicData.d.ts +0 -3
  112. package/dist/src/libs/campaigns/campaignTypes/UniswapV4DynamicData.js +0 -267
  113. package/dist/src/libs/campaigns/campaignTypes/VestDynamicData.d.ts +0 -5
  114. package/dist/src/libs/campaigns/campaignTypes/VestDynamicData.js +0 -64
  115. package/dist/src/libs/campaigns/campaignsDynamicData.d.ts +0 -3
  116. package/dist/src/libs/campaigns/campaignsDynamicData.js +0 -131
  117. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/fetchA51Strategies.d.ts +0 -0
  118. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/fetchA51Strategies.js +0 -0
  119. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/fetchAmbientInfo.d.ts +0 -0
  120. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/fetchAmbientInfo.js +0 -0
  121. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/fetchClamInfo.d.ts +0 -0
  122. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/fetchClamInfo.js +0 -0
  123. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/fetchLogs.d.ts +0 -0
  124. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/fetchLogs.js +0 -0
  125. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/getCompV2ForksVaults.d.ts +0 -0
  126. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/getCompV2ForksVaults.js +0 -0
  127. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/getContractCreationBlock.d.ts +0 -0
  128. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/getContractCreationBlock.js +0 -0
  129. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/getDolomiteMarkets.d.ts +0 -0
  130. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/getDolomiteMarkets.js +0 -0
  131. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/getEulerV2Vaults.d.ts +0 -0
  132. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/getUniswapV4Pools.d.ts +0 -0
  133. /package/dist/src/{libs/campaigns → engine/dynamicData}/utils/getUniswapV4Pools.js +0 -0
  134. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/GenericProcessor.js +0 -0
  135. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/eulerVaultNames.d.ts +0 -0
  136. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/eulerVaultNames.js +0 -0
  137. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/factoryFinder.d.ts +0 -0
  138. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/factoryFinder.js +0 -0
  139. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/getBlacklistedSupply.d.ts +0 -0
  140. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/getBlacklistedSupply.js +0 -0
  141. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/hardcoded.d.ts +0 -0
  142. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/hardcoded.js +0 -0
  143. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/metamorphoTvl.d.ts +0 -0
  144. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/metamorphoTvl.js +0 -0
  145. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/ownerFinder.d.ts +0 -0
  146. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/ownerFinder.js +0 -0
  147. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/spliceTVL.d.ts +0 -0
  148. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/spliceTVL.js +0 -0
  149. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/tokenType.d.ts +0 -0
  150. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/helpers/tokenType.js +0 -0
  151. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/AaveProcessor.d.ts +0 -0
  152. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/AaveProcessor.js +0 -0
  153. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/AnglesLiquid.d.ts +0 -0
  154. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/AnglesLiquid.js +0 -0
  155. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/AssetProcessor.d.ts +0 -0
  156. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/AssetProcessor.js +0 -0
  157. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/AuraProcessor.d.ts +0 -0
  158. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/AuraProcessor.js +0 -0
  159. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/BalancerGaugeProcessor.d.ts +0 -0
  160. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/BalancerGaugeProcessor.js +0 -0
  161. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/BalancerPoolProcessor.d.ts +0 -0
  162. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/BalancerPoolProcessor.js +0 -0
  163. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/BalancerV3PoolProcessor.d.ts +0 -0
  164. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/BalancerV3PoolProcessor.js +0 -0
  165. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/BeefyProcessor.d.ts +0 -0
  166. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/BeefyProcessor.js +0 -0
  167. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/BunniV2Processor.d.ts +0 -0
  168. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/BunniV2Processor.js +0 -0
  169. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/CompoundProcessor.d.ts +0 -0
  170. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/CompoundProcessor.js +0 -0
  171. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/ERC4626Processor.d.ts +0 -0
  172. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/ERC4626Processor.js +0 -0
  173. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/EnzymeProcessor.d.ts +0 -0
  174. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/EnzymeProcessor.js +0 -0
  175. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/EqualizerGaugeProcessor.d.ts +0 -0
  176. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/EqualizerGaugeProcessor.js +0 -0
  177. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/EulerBorrowProcessor.d.ts +0 -0
  178. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/EulerBorrowProcessor.js +0 -0
  179. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/EulerLendProcessor.d.ts +0 -0
  180. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/EulerLendProcessor.js +0 -0
  181. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/FluidProcessor.d.ts +0 -0
  182. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/FluidProcessor.js +0 -0
  183. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/FraxProcessor.d.ts +0 -0
  184. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/FraxProcessor.js +0 -0
  185. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/GammaProcessor.d.ts +0 -0
  186. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/GammaProcessor.js +0 -0
  187. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/GearboxProcessor.d.ts +0 -0
  188. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/GearboxProcessor.js +0 -0
  189. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/HanjiVaultProcessor.d.ts +0 -0
  190. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/HanjiVaultProcessor.js +0 -0
  191. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/HoldStationProcessor.d.ts +0 -0
  192. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/HoldStationProcessor.js +0 -0
  193. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/HourglassProcessor.d.ts +0 -0
  194. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/HourglassProcessor.js +0 -0
  195. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/MaverickBPProcessor.d.ts +0 -0
  196. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/MaverickBPProcessor.js +0 -0
  197. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/MetamorphoProcessor.d.ts +0 -0
  198. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/MetamorphoProcessor.js +0 -0
  199. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/NoLinkVaultProcessor.d.ts +0 -0
  200. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/NoLinkVaultProcessor.js +0 -0
  201. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/PendleProcessor.d.ts +0 -0
  202. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/PendleProcessor.js +0 -0
  203. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/PendleYTProcessor.d.ts +0 -0
  204. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/PendleYTProcessor.js +0 -0
  205. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/RadiantProcessor.d.ts +0 -0
  206. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/RadiantProcessor.js +0 -0
  207. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/RfxProcessor.d.ts +0 -0
  208. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/RfxProcessor.js +0 -0
  209. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/Satlayer.d.ts +0 -0
  210. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/Satlayer.js +0 -0
  211. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/SpectraProcessor.d.ts +0 -0
  212. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/SpectraProcessor.js +0 -0
  213. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/SpectraYTProcessor.d.ts +0 -0
  214. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/SpectraYTProcessor.js +0 -0
  215. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/SpliceProcessor.d.ts +0 -0
  216. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/SpliceProcessor.js +0 -0
  217. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/SturdySiloProcessor.d.ts +0 -0
  218. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/SturdySiloProcessor.js +0 -0
  219. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/TempestVaultProcessor.d.ts +0 -0
  220. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/TempestVaultProcessor.js +0 -0
  221. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/TemplateProcessor.d.ts +0 -0
  222. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/TemplateProcessor.js +0 -0
  223. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/TorosProcessor.d.ts +0 -0
  224. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/TorosProcessor.js +0 -0
  225. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/UniswapProcessor.d.ts +0 -0
  226. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/UniswapProcessor.js +0 -0
  227. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/VicunaProcessor.d.ts +0 -0
  228. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/VicunaProcessor.js +0 -0
  229. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/WoofiProcessor.d.ts +0 -0
  230. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/WoofiProcessor.js +0 -0
  231. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/ZkSwapThreePoolProcessor.d.ts +0 -0
  232. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/ZkSwapThreePoolProcessor.js +0 -0
  233. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/curveNPoolProcessor.d.ts +0 -0
  234. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/curveNPoolProcessor.js +0 -0
  235. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/curveProcessor.d.ts +0 -0
  236. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/curveProcessor.js +0 -0
  237. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/processorMapping.d.ts +0 -0
  238. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/processorMapping.js +0 -0
  239. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/stakedCurveProcessor.d.ts +0 -0
  240. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/stakedCurveProcessor.js +0 -0
  241. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/xU308Processor.d.ts +0 -0
  242. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/implementations/xU308Processor.js +0 -0
  243. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/subtypesPrices.d.ts +0 -0
  244. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/subtypesPrices.js +0 -0
  245. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/subtypesRound1.d.ts +0 -0
  246. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/subtypesRound1.js +0 -0
  247. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/subtypesRound2.js +0 -0
  248. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/subtypesRound3.d.ts +0 -0
  249. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/subtypesRound3.js +0 -0
  250. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/subtypesRound4.d.ts +0 -0
  251. /package/dist/src/{libs/campaigns/campaignTypes/ERC20SubTypes → engine/erc20SubTypeProcessors}/subtypesRound4.js +0 -0
  252. /package/dist/src/{factories → engine}/opportunityMetadata/factory.d.ts +0 -0
  253. /package/dist/src/{factories → engine}/opportunityMetadata/factory.js +0 -0
  254. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Ajna.d.ts +0 -0
  255. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Ajna.js +0 -0
  256. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Ambiant.d.ts +0 -0
  257. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Ambiant.js +0 -0
  258. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Badger.d.ts +0 -0
  259. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Badger.js +0 -0
  260. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Clamm.d.ts +0 -0
  261. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Clamm.js +0 -0
  262. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Compound.d.ts +0 -0
  263. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Compound.js +0 -0
  264. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Default.d.ts +0 -0
  265. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Default.js +0 -0
  266. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Dolomite.d.ts +0 -0
  267. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Dolomite.js +0 -0
  268. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/EigenLayer.d.ts +0 -0
  269. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/EigenLayer.js +0 -0
  270. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Encompassing.d.ts +0 -0
  271. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Encompassing.js +0 -0
  272. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Erc20.d.ts +0 -0
  273. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Erc20Snapshot.d.ts +0 -0
  274. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Erc20Snapshot.js +0 -0
  275. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/EventBased.d.ts +0 -0
  276. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/EventBased.js +0 -0
  277. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Hyperdrive.d.ts +0 -0
  278. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Hyperdrive.js +0 -0
  279. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Invalid.d.ts +0 -0
  280. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Invalid.js +0 -0
  281. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Ion.d.ts +0 -0
  282. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Ion.js +0 -0
  283. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/JsonAirdrop.d.ts +0 -0
  284. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/JsonAirdrop.js +0 -0
  285. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Morpho.d.ts +0 -0
  286. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Morpho.js +0 -0
  287. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Radiant.d.ts +0 -0
  288. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Radiant.js +0 -0
  289. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Silo.d.ts +0 -0
  290. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/Silo.js +0 -0
  291. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/UniswapV4.d.ts +0 -0
  292. /package/dist/src/{factories → engine}/opportunityMetadata/implementations/UniswapV4.js +0 -0
  293. /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",
@@ -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 {
@@ -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) {
@@ -4551,8 +4551,8 @@ declare const app: Elysia<"", false, {
4551
4551
  query: {
4552
4552
  types?: string | number | string[] | number[] | undefined;
4553
4553
  chainIds?: string | string[] | undefined;
4554
- live?: boolean | undefined;
4555
4554
  creatorTag?: string | undefined;
4555
+ live?: boolean | undefined;
4556
4556
  hideTestTokens?: string | undefined;
4557
4557
  };
4558
4558
  headers: unknown;
@@ -4655,16 +4655,8 @@ declare const app: Elysia<"", false, {
4655
4655
  query: {};
4656
4656
  headers: unknown;
4657
4657
  response: {
4658
- 200: {
4659
- [x: string]: {
4660
- address: string;
4661
- symbolCToken: string;
4662
- decimalsCToken: number;
4663
- underlying: string;
4664
- symbolUnderlying: string;
4665
- decimalsUnderlying: number;
4666
- }[];
4667
- };
4658
+ [x: string]: any;
4659
+ 200: any;
4668
4660
  };
4669
4661
  };
4670
4662
  };
@@ -5218,11 +5210,8 @@ declare const app: Elysia<"", false, {
5218
5210
  query: {};
5219
5211
  headers: unknown;
5220
5212
  response: {
5221
- 200: {
5222
- [x: string]: {
5223
- [poolId: string]: UniswapV4PoolType;
5224
- } | undefined;
5225
- };
5213
+ [x: string]: any;
5214
+ 200: any;
5226
5215
  };
5227
5216
  };
5228
5217
  };
@@ -1,6 +1,6 @@
1
1
  import { Redis } from "@/cache";
2
- import { fetchEulerVaultName } from "@/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/eulerVaultNames";
3
- import { LoggedEntityType, getEulerV2Vaults } from "@/libs/campaigns/utils/getEulerV2Vaults";
2
+ import { LoggedEntityType, getEulerV2Vaults } from "@/engine/dynamicData/utils/getEulerV2Vaults";
3
+ import { fetchEulerVaultName } from "@/engine/erc20SubTypeProcessors/helpers/eulerVaultNames";
4
4
  import { batchMulticallCallWithRetry } from "@/utils/generic";
5
5
  import { log } from "@/utils/logger";
6
6
  import { apiDbClient } from "@db";
@@ -2,5 +2,5 @@ import { type CampaignDynamicData, Campaign as CampaignTypeV3 } from "@sdk";
2
2
  import type { AprRecord } from "./apr.model";
3
3
  export declare abstract class AprService {
4
4
  static hashId(opportunityId: string, timestamp: bigint): string;
5
- static extractFromDynamicData<C extends CampaignTypeV3>(type: C, campaignsDynamicData: CampaignDynamicData<C>[], timestamp?: bigint): AprRecord["model"];
5
+ static extractFromDynamicData<C extends CampaignTypeV3>(type: C, campaigns: CampaignDynamicData<C>[], timestamp?: bigint): AprRecord["model"];
6
6
  }
@@ -5,18 +5,18 @@ export class AprService {
5
5
  static hashId(opportunityId, timestamp) {
6
6
  return Bun.hash(`${opportunityId}${timestamp}`).toString();
7
7
  }
8
- static extractFromDynamicData(type, campaignsDynamicData, timestamp = BigInt(moment().unix())) {
8
+ static extractFromDynamicData(type, campaigns, timestamp = BigInt(moment().unix())) {
9
9
  const typesWithoutApr = [CampaignTypeV3.INVALID, CampaignTypeV3.JSON_AIRDROP, CampaignTypeV3.ERC20_SNAPSHOT];
10
10
  if (typesWithoutApr.includes(type))
11
11
  return { timestamp, cumulated: 0, breakdowns: [] };
12
- let cumulated = campaignsDynamicData.reduce((sum, campaign) => {
12
+ let cumulated = campaigns.reduce((sum, campaign) => {
13
13
  const isLive = BigInt(campaign.endTimestamp) > timestamp && BigInt(campaign.startTimestamp) < timestamp;
14
14
  if (!isLive)
15
15
  return sum;
16
16
  return sum + (Number.isNaN(Number(campaign.apr)) ? 0 : Number(campaign.apr));
17
17
  }, 0) ?? 0;
18
18
  cumulated = Number.isNaN(Number(cumulated)) || !Number.isFinite(cumulated) ? 0 : cumulated;
19
- const breakdowns = campaignsDynamicData.map(campaign => {
19
+ const breakdowns = campaigns.map(campaign => {
20
20
  const isLive = BigInt(campaign.endTimestamp) > timestamp && BigInt(campaign.startTimestamp) < timestamp;
21
21
  return {
22
22
  identifier: campaign.campaignId,
@@ -25,7 +25,7 @@ export class AprService {
25
25
  };
26
26
  });
27
27
  if (type === CampaignTypeV3.CLAMM) {
28
- for (const campaign of campaignsDynamicData) {
28
+ for (const campaign of campaigns) {
29
29
  const isLive = BigInt(campaign.endTimestamp) > timestamp && BigInt(campaign.startTimestamp) < timestamp;
30
30
  if (campaign.forwarders) {
31
31
  for (const forwarder of campaign.forwarders) {
@@ -722,14 +722,6 @@ export declare abstract class CampaignService {
722
722
  createdAt: Date;
723
723
  };
724
724
  static formatAsCampaignParameters<C extends CampaignEnum>(campaign: CampaignWithParams): CampaignParameters<C>;
725
- /**
726
- * Fetches the campaign dynamic data for a v3 campaign onchain
727
- * @param chainId
728
- * @param campaignType
729
- * @param campaigns of v3 type
730
- * @returns
731
- */
732
- static fetchDynamicData(chainId: number, campaignType: string, campaigns: CampaignParameters<any>[]): Promise<any>;
733
725
  /**
734
726
  * Shortcut to get daily amount from total
735
727
  * @param start timestamp
@@ -1,11 +1,9 @@
1
1
  import { HttpError } from "@/errors";
2
- import { campaignsDynamicData } from "@/libs/campaigns/campaignsDynamicData";
3
2
  import { OpportunityService } from "@/modules/v4/opportunity";
4
3
  import { StatusService } from "@/modules/v4/status/status.service";
5
4
  import { TokenRepository } from "@/modules/v4/token/token.repository";
6
5
  import { TokenService } from "@/modules/v4/token/token.service";
7
6
  import { CannotParseOpportunity, InvalidParameter } from "@/utils/error";
8
- import { executeSimple } from "@/utils/execute";
9
7
  import { log } from "@/utils/logger";
10
8
  import { Campaign as CampaignEnum, NETWORK_LABELS, } from "@sdk";
11
9
  import { utils } from "ethers";
@@ -293,17 +291,6 @@ export class CampaignService {
293
291
  amount: campaign.amount,
294
292
  };
295
293
  }
296
- /**
297
- * Fetches the campaign dynamic data for a v3 campaign onchain
298
- * @param chainId
299
- * @param campaignType
300
- * @param campaigns of v3 type
301
- * @returns
302
- */
303
- static async fetchDynamicData(chainId, campaignType, campaigns) {
304
- const calls = campaignsDynamicData(chainId, campaigns, CampaignEnum[campaignType]);
305
- return await executeSimple(chainId, calls);
306
- }
307
294
  /**
308
295
  * Shortcut to get daily amount from total
309
296
  * @param start timestamp
@@ -1,8 +1,7 @@
1
+ import { dynamicDataBuilderFactory } from "@/engine/dynamicData/factory";
1
2
  import { HttpError } from "@/errors";
2
- import { campaignsDynamicData } from "@/libs/campaigns/campaignsDynamicData";
3
3
  import { OpportunityService } from "@/modules/v4/opportunity/opportunity.service";
4
4
  import bigintToString from "@/utils/bigintToString";
5
- import { executeSimple } from "@/utils/execute";
6
5
  import { log } from "@/utils/logger";
7
6
  import { Campaign, NETWORK_LABELS } from "@sdk";
8
7
  import { Campaign as CampaignEnum } from "@sdk";
@@ -43,7 +42,7 @@ export class DynamicDataService {
43
42
  },
44
43
  ];
45
44
  log.info(`querying mock campaign on chain: ${NETWORK_LABELS[chainId]}`);
46
- const result = await executeSimple(Number(chainId), campaignsDynamicData(Number(chainId), campaigns, Campaign.ERC20));
45
+ const result = await dynamicDataBuilderFactory(Campaign.ERC20).build(Number(chainId), campaigns);
47
46
  return {
48
47
  priceTargetToken: result[0]?.typeInfo.priceTargetToken,
49
48
  totalSupply: result[0]?.typeInfo.totalSupply,
@@ -56,7 +55,7 @@ export class DynamicDataService {
56
55
  static async updateForCampaignType(campaigns, type) {
57
56
  const chainId = campaigns[0].computeChainId;
58
57
  const dynamicDataArray = [];
59
- const dynamicData = await executeSimple(chainId, campaignsDynamicData(chainId, campaigns, type));
58
+ const dynamicData = await dynamicDataBuilderFactory(typeof type === "number" ? type : Campaign[type]).build(chainId, campaigns);
60
59
  const oppMap = {};
61
60
  for (const data of dynamicData) {
62
61
  if (!!data) {
@@ -10,7 +10,7 @@ import { Prisma, Status } from "@db/api";
10
10
  import { record } from "@elysiajs/opentelemetry";
11
11
  import { Campaign as CampaignEnum } from "@sdk";
12
12
  import moment from "moment";
13
- import { metadataBuilderFactory } from "../../../factories/opportunityMetadata/factory";
13
+ import { metadataBuilderFactory } from "../../../engine/opportunityMetadata/factory";
14
14
  import { OpportunityRepository } from "./opportunity.repository";
15
15
  export class OpportunityService {
16
16
  static hashId(opportunity) {
@@ -27,10 +27,10 @@ export declare const uniswapV4Controller: Elysia<"uniswap-v4", false, {
27
27
  poolId: string;
28
28
  poolKey: {
29
29
  hooks: string;
30
- currency0: string;
31
- currency1: string;
32
30
  fee: number;
33
31
  tickSpacing: number;
32
+ currency0: string;
33
+ currency1: string;
34
34
  };
35
35
  decimalsCurrency0: number;
36
36
  decimalsCurrency1: number;
@@ -7,10 +7,10 @@ export declare abstract class UniswapV4Service {
7
7
  poolId: string;
8
8
  poolKey: {
9
9
  hooks: string;
10
- currency0: string;
11
- currency1: string;
12
10
  fee: number;
13
11
  tickSpacing: number;
12
+ currency0: string;
13
+ currency1: string;
14
14
  };
15
15
  decimalsCurrency0: number;
16
16
  decimalsCurrency1: number;