@merkl/api 0.9.15

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 (819) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +90 -0
  3. package/dist/database/api/.generated/default.d.ts +1 -0
  4. package/dist/database/api/.generated/default.js +1 -0
  5. package/dist/database/api/.generated/drizzle/schema.d.ts +3029 -0
  6. package/dist/database/api/.generated/drizzle/schema.js +868 -0
  7. package/dist/database/api/.generated/drizzle/schema.ts +929 -0
  8. package/dist/database/api/.generated/edge.d.ts +1 -0
  9. package/dist/database/api/.generated/edge.js +691 -0
  10. package/dist/database/api/.generated/index-browser.js +650 -0
  11. package/dist/database/api/.generated/index.d.ts +46187 -0
  12. package/dist/database/api/.generated/index.js +720 -0
  13. package/dist/database/api/.generated/libquery_engine-debian-openssl-3.0.x.so.node +0 -0
  14. package/dist/database/api/.generated/libquery_engine-linux-arm64-openssl-1.1.x.so.node +0 -0
  15. package/dist/database/api/.generated/libquery_engine-linux-musl-arm64-openssl-3.0.x.so.node +0 -0
  16. package/dist/database/api/.generated/package.json +97 -0
  17. package/dist/database/api/.generated/runtime/edge-esm.js +31 -0
  18. package/dist/database/api/.generated/runtime/edge.js +31 -0
  19. package/dist/database/api/.generated/runtime/index-browser.d.ts +365 -0
  20. package/dist/database/api/.generated/runtime/index-browser.js +13 -0
  21. package/dist/database/api/.generated/runtime/library.d.ts +3447 -0
  22. package/dist/database/api/.generated/runtime/library.js +143 -0
  23. package/dist/database/api/.generated/runtime/react-native.js +80 -0
  24. package/dist/database/api/.generated/runtime/wasm.js +32 -0
  25. package/dist/database/api/.generated/schema.prisma +457 -0
  26. package/dist/database/api/.generated/wasm.d.ts +1 -0
  27. package/dist/database/api/.generated/wasm.js +650 -0
  28. package/dist/database/api/seeder/resources/protocol.d.ts +373 -0
  29. package/dist/database/api/seeder/resources/protocol.js +344 -0
  30. package/dist/database/engine/.generated/default.d.ts +1 -0
  31. package/dist/database/engine/.generated/default.js +1 -0
  32. package/dist/database/engine/.generated/edge.d.ts +1 -0
  33. package/dist/database/engine/.generated/edge.js +436 -0
  34. package/dist/database/engine/.generated/index-browser.js +411 -0
  35. package/dist/database/engine/.generated/index.d.ts +18906 -0
  36. package/dist/database/engine/.generated/index.js +465 -0
  37. package/dist/database/engine/.generated/libquery_engine-debian-openssl-3.0.x.so.node +0 -0
  38. package/dist/database/engine/.generated/libquery_engine-linux-arm64-openssl-1.1.x.so.node +0 -0
  39. package/dist/database/engine/.generated/libquery_engine-linux-musl-arm64-openssl-3.0.x.so.node +0 -0
  40. package/dist/database/engine/.generated/package.json +97 -0
  41. package/dist/database/engine/.generated/runtime/edge-esm.js +31 -0
  42. package/dist/database/engine/.generated/runtime/edge.js +31 -0
  43. package/dist/database/engine/.generated/runtime/index-browser.d.ts +365 -0
  44. package/dist/database/engine/.generated/runtime/index-browser.js +13 -0
  45. package/dist/database/engine/.generated/runtime/library.d.ts +3447 -0
  46. package/dist/database/engine/.generated/runtime/library.js +143 -0
  47. package/dist/database/engine/.generated/runtime/react-native.js +80 -0
  48. package/dist/database/engine/.generated/runtime/wasm.js +32 -0
  49. package/dist/database/engine/.generated/schema.prisma +207 -0
  50. package/dist/database/engine/.generated/wasm.d.ts +1 -0
  51. package/dist/database/engine/.generated/wasm.js +411 -0
  52. package/dist/database/index.d.ts +29 -0
  53. package/dist/database/index.js +13 -0
  54. package/dist/src/backgroundJobs/index.d.ts +1 -0
  55. package/dist/src/backgroundJobs/index.js +57 -0
  56. package/dist/src/backgroundJobs/jobs/campaignsCacheUpdater.d.ts +50 -0
  57. package/dist/src/backgroundJobs/jobs/campaignsCacheUpdater.js +173 -0
  58. package/dist/src/backgroundJobs/jobs/health.d.ts +41 -0
  59. package/dist/src/backgroundJobs/jobs/health.js +15 -0
  60. package/dist/src/backgroundJobs/jobs/opportunityUpdater.d.ts +36 -0
  61. package/dist/src/backgroundJobs/jobs/opportunityUpdater.js +19 -0
  62. package/dist/src/cache/declaration.d.ts +133 -0
  63. package/dist/src/cache/declaration.js +121 -0
  64. package/dist/src/cache/index.d.ts +61 -0
  65. package/dist/src/cache/index.js +161 -0
  66. package/dist/src/cache/redis.d.ts +312 -0
  67. package/dist/src/cache/redis.js +56 -0
  68. package/dist/src/constants.d.ts +108 -0
  69. package/dist/src/constants.js +128 -0
  70. package/dist/src/eden/index.d.ts +20952 -0
  71. package/dist/src/eden/index.js +4 -0
  72. package/dist/src/engine/dynamicData/factory.d.ts +3 -0
  73. package/dist/src/engine/dynamicData/factory.js +54 -0
  74. package/dist/src/engine/dynamicData/implementations/Ajna.d.ts +7 -0
  75. package/dist/src/engine/dynamicData/implementations/Ajna.js +101 -0
  76. package/dist/src/engine/dynamicData/implementations/Ambiant.d.ts +7 -0
  77. package/dist/src/engine/dynamicData/implementations/Ambiant.js +227 -0
  78. package/dist/src/engine/dynamicData/implementations/Badger.d.ts +7 -0
  79. package/dist/src/engine/dynamicData/implementations/Badger.js +84 -0
  80. package/dist/src/engine/dynamicData/implementations/Clamm.d.ts +7 -0
  81. package/dist/src/engine/dynamicData/implementations/Clamm.js +970 -0
  82. package/dist/src/engine/dynamicData/implementations/Compound.d.ts +7 -0
  83. package/dist/src/engine/dynamicData/implementations/Compound.js +136 -0
  84. package/dist/src/engine/dynamicData/implementations/Dolomite.d.ts +7 -0
  85. package/dist/src/engine/dynamicData/implementations/Dolomite.js +53 -0
  86. package/dist/src/engine/dynamicData/implementations/EigenLayer.d.ts +7 -0
  87. package/dist/src/engine/dynamicData/implementations/EigenLayer.js +64 -0
  88. package/dist/src/engine/dynamicData/implementations/Encompassing.d.ts +7 -0
  89. package/dist/src/engine/dynamicData/implementations/Encompassing.js +26 -0
  90. package/dist/src/engine/dynamicData/implementations/Erc20.d.ts +6 -0
  91. package/dist/src/engine/dynamicData/implementations/Erc20.js +159 -0
  92. package/dist/src/engine/dynamicData/implementations/Erc20Snapshot.d.ts +7 -0
  93. package/dist/src/engine/dynamicData/implementations/Erc20Snapshot.js +32 -0
  94. package/dist/src/engine/dynamicData/implementations/EventBased.d.ts +7 -0
  95. package/dist/src/engine/dynamicData/implementations/EventBased.js +104 -0
  96. package/dist/src/engine/dynamicData/implementations/Hyperdrive.d.ts +7 -0
  97. package/dist/src/engine/dynamicData/implementations/Hyperdrive.js +106 -0
  98. package/dist/src/engine/dynamicData/implementations/Morpho.d.ts +7 -0
  99. package/dist/src/engine/dynamicData/implementations/Morpho.js +109 -0
  100. package/dist/src/engine/dynamicData/implementations/Radiant.d.ts +7 -0
  101. package/dist/src/engine/dynamicData/implementations/Radiant.js +117 -0
  102. package/dist/src/engine/dynamicData/implementations/Silo.d.ts +9 -0
  103. package/dist/src/engine/dynamicData/implementations/Silo.js +109 -0
  104. package/dist/src/engine/dynamicData/implementations/UniswapV4.d.ts +7 -0
  105. package/dist/src/engine/dynamicData/implementations/UniswapV4.js +249 -0
  106. package/dist/src/engine/dynamicData/implementations/Vest.d.ts +9 -0
  107. package/dist/src/engine/dynamicData/implementations/Vest.js +58 -0
  108. package/dist/src/engine/dynamicData/implementations/default.d.ts +5 -0
  109. package/dist/src/engine/dynamicData/implementations/default.js +5 -0
  110. package/dist/src/engine/dynamicData/utils/fetchA51Strategies.d.ts +18 -0
  111. package/dist/src/engine/dynamicData/utils/fetchA51Strategies.js +44 -0
  112. package/dist/src/engine/dynamicData/utils/fetchAmbientInfo.d.ts +12 -0
  113. package/dist/src/engine/dynamicData/utils/fetchAmbientInfo.js +59 -0
  114. package/dist/src/engine/dynamicData/utils/fetchClamInfo.d.ts +2 -0
  115. package/dist/src/engine/dynamicData/utils/fetchClamInfo.js +27 -0
  116. package/dist/src/engine/dynamicData/utils/fetchLogs.d.ts +10 -0
  117. package/dist/src/engine/dynamicData/utils/fetchLogs.js +149 -0
  118. package/dist/src/engine/dynamicData/utils/getCompV2ForksVaults.d.ts +19 -0
  119. package/dist/src/engine/dynamicData/utils/getCompV2ForksVaults.js +134 -0
  120. package/dist/src/engine/dynamicData/utils/getContractCreationBlock.d.ts +2 -0
  121. package/dist/src/engine/dynamicData/utils/getContractCreationBlock.js +44 -0
  122. package/dist/src/engine/dynamicData/utils/getDolomiteMarkets.d.ts +8 -0
  123. package/dist/src/engine/dynamicData/utils/getDolomiteMarkets.js +53 -0
  124. package/dist/src/engine/dynamicData/utils/getEulerV2Vaults.d.ts +8 -0
  125. package/dist/src/engine/dynamicData/utils/getEulerV2Vaults.js +209 -0
  126. package/dist/src/engine/dynamicData/utils/getUniswapV4Pools.d.ts +8 -0
  127. package/dist/src/engine/dynamicData/utils/getUniswapV4Pools.js +183 -0
  128. package/dist/src/engine/erc20SubTypeProcessors/GenericProcessor.d.ts +99 -0
  129. package/dist/src/engine/erc20SubTypeProcessors/GenericProcessor.js +329 -0
  130. package/dist/src/engine/erc20SubTypeProcessors/helpers/eulerVaultNames.d.ts +1 -0
  131. package/dist/src/engine/erc20SubTypeProcessors/helpers/eulerVaultNames.js +13 -0
  132. package/dist/src/engine/erc20SubTypeProcessors/helpers/factoryFinder.d.ts +5 -0
  133. package/dist/src/engine/erc20SubTypeProcessors/helpers/factoryFinder.js +41 -0
  134. package/dist/src/engine/erc20SubTypeProcessors/helpers/getBlacklistedSupply.d.ts +2 -0
  135. package/dist/src/engine/erc20SubTypeProcessors/helpers/getBlacklistedSupply.js +22 -0
  136. package/dist/src/engine/erc20SubTypeProcessors/helpers/hardcoded.d.ts +3 -0
  137. package/dist/src/engine/erc20SubTypeProcessors/helpers/hardcoded.js +30 -0
  138. package/dist/src/engine/erc20SubTypeProcessors/helpers/metamorphoTvl.d.ts +1 -0
  139. package/dist/src/engine/erc20SubTypeProcessors/helpers/metamorphoTvl.js +35 -0
  140. package/dist/src/engine/erc20SubTypeProcessors/helpers/ownerFinder.d.ts +2 -0
  141. package/dist/src/engine/erc20SubTypeProcessors/helpers/ownerFinder.js +12 -0
  142. package/dist/src/engine/erc20SubTypeProcessors/helpers/spliceTVL.d.ts +7 -0
  143. package/dist/src/engine/erc20SubTypeProcessors/helpers/spliceTVL.js +21 -0
  144. package/dist/src/engine/erc20SubTypeProcessors/helpers/tokenType.d.ts +107 -0
  145. package/dist/src/engine/erc20SubTypeProcessors/helpers/tokenType.js +193 -0
  146. package/dist/src/engine/erc20SubTypeProcessors/implementations/AaveProcessor.d.ts +30 -0
  147. package/dist/src/engine/erc20SubTypeProcessors/implementations/AaveProcessor.js +25 -0
  148. package/dist/src/engine/erc20SubTypeProcessors/implementations/AnglesLiquid.d.ts +35 -0
  149. package/dist/src/engine/erc20SubTypeProcessors/implementations/AnglesLiquid.js +50 -0
  150. package/dist/src/engine/erc20SubTypeProcessors/implementations/AssetProcessor.d.ts +35 -0
  151. package/dist/src/engine/erc20SubTypeProcessors/implementations/AssetProcessor.js +47 -0
  152. package/dist/src/engine/erc20SubTypeProcessors/implementations/AuraProcessor.d.ts +70 -0
  153. package/dist/src/engine/erc20SubTypeProcessors/implementations/AuraProcessor.js +110 -0
  154. package/dist/src/engine/erc20SubTypeProcessors/implementations/BEXRewardGaugeProcessor.d.ts +51 -0
  155. package/dist/src/engine/erc20SubTypeProcessors/implementations/BEXRewardGaugeProcessor.js +102 -0
  156. package/dist/src/engine/erc20SubTypeProcessors/implementations/BalancerGaugeProcessor.d.ts +49 -0
  157. package/dist/src/engine/erc20SubTypeProcessors/implementations/BalancerGaugeProcessor.js +83 -0
  158. package/dist/src/engine/erc20SubTypeProcessors/implementations/BalancerPoolProcessor.d.ts +60 -0
  159. package/dist/src/engine/erc20SubTypeProcessors/implementations/BalancerPoolProcessor.js +95 -0
  160. package/dist/src/engine/erc20SubTypeProcessors/implementations/BalancerV3PoolProcessor.d.ts +44 -0
  161. package/dist/src/engine/erc20SubTypeProcessors/implementations/BalancerV3PoolProcessor.js +75 -0
  162. package/dist/src/engine/erc20SubTypeProcessors/implementations/BeefyProcessor.d.ts +48 -0
  163. package/dist/src/engine/erc20SubTypeProcessors/implementations/BeefyProcessor.js +50 -0
  164. package/dist/src/engine/erc20SubTypeProcessors/implementations/BunniV2Processor.d.ts +45 -0
  165. package/dist/src/engine/erc20SubTypeProcessors/implementations/BunniV2Processor.js +87 -0
  166. package/dist/src/engine/erc20SubTypeProcessors/implementations/CompoundProcessor.d.ts +44 -0
  167. package/dist/src/engine/erc20SubTypeProcessors/implementations/CompoundProcessor.js +36 -0
  168. package/dist/src/engine/erc20SubTypeProcessors/implementations/ERC4626Processor.d.ts +34 -0
  169. package/dist/src/engine/erc20SubTypeProcessors/implementations/ERC4626Processor.js +36 -0
  170. package/dist/src/engine/erc20SubTypeProcessors/implementations/EnzymeProcessor.d.ts +40 -0
  171. package/dist/src/engine/erc20SubTypeProcessors/implementations/EnzymeProcessor.js +51 -0
  172. package/dist/src/engine/erc20SubTypeProcessors/implementations/EqualizerGaugeProcessor.d.ts +28 -0
  173. package/dist/src/engine/erc20SubTypeProcessors/implementations/EqualizerGaugeProcessor.js +53 -0
  174. package/dist/src/engine/erc20SubTypeProcessors/implementations/EulerBorrowProcessor.d.ts +36 -0
  175. package/dist/src/engine/erc20SubTypeProcessors/implementations/EulerBorrowProcessor.js +51 -0
  176. package/dist/src/engine/erc20SubTypeProcessors/implementations/EulerLendProcessor.d.ts +36 -0
  177. package/dist/src/engine/erc20SubTypeProcessors/implementations/EulerLendProcessor.js +47 -0
  178. package/dist/src/engine/erc20SubTypeProcessors/implementations/FluidProcessor.d.ts +39 -0
  179. package/dist/src/engine/erc20SubTypeProcessors/implementations/FluidProcessor.js +36 -0
  180. package/dist/src/engine/erc20SubTypeProcessors/implementations/FraxProcessor.d.ts +33 -0
  181. package/dist/src/engine/erc20SubTypeProcessors/implementations/FraxProcessor.js +41 -0
  182. package/dist/src/engine/erc20SubTypeProcessors/implementations/GammaProcessor.d.ts +43 -0
  183. package/dist/src/engine/erc20SubTypeProcessors/implementations/GammaProcessor.js +63 -0
  184. package/dist/src/engine/erc20SubTypeProcessors/implementations/GearboxProcessor.d.ts +44 -0
  185. package/dist/src/engine/erc20SubTypeProcessors/implementations/GearboxProcessor.js +57 -0
  186. package/dist/src/engine/erc20SubTypeProcessors/implementations/HanjiVaultProcessor.d.ts +43 -0
  187. package/dist/src/engine/erc20SubTypeProcessors/implementations/HanjiVaultProcessor.js +58 -0
  188. package/dist/src/engine/erc20SubTypeProcessors/implementations/HoldStationProcessor.d.ts +29 -0
  189. package/dist/src/engine/erc20SubTypeProcessors/implementations/HoldStationProcessor.js +34 -0
  190. package/dist/src/engine/erc20SubTypeProcessors/implementations/HourglassProcessor.d.ts +36 -0
  191. package/dist/src/engine/erc20SubTypeProcessors/implementations/HourglassProcessor.js +34 -0
  192. package/dist/src/engine/erc20SubTypeProcessors/implementations/MaverickBPProcessor.d.ts +50 -0
  193. package/dist/src/engine/erc20SubTypeProcessors/implementations/MaverickBPProcessor.js +74 -0
  194. package/dist/src/engine/erc20SubTypeProcessors/implementations/MetamorphoProcessor.d.ts +33 -0
  195. package/dist/src/engine/erc20SubTypeProcessors/implementations/MetamorphoProcessor.js +47 -0
  196. package/dist/src/engine/erc20SubTypeProcessors/implementations/NoLinkVaultProcessor.d.ts +38 -0
  197. package/dist/src/engine/erc20SubTypeProcessors/implementations/NoLinkVaultProcessor.js +81 -0
  198. package/dist/src/engine/erc20SubTypeProcessors/implementations/PendleProcessor.d.ts +29 -0
  199. package/dist/src/engine/erc20SubTypeProcessors/implementations/PendleProcessor.js +29 -0
  200. package/dist/src/engine/erc20SubTypeProcessors/implementations/PendleYTProcessor.d.ts +29 -0
  201. package/dist/src/engine/erc20SubTypeProcessors/implementations/PendleYTProcessor.js +29 -0
  202. package/dist/src/engine/erc20SubTypeProcessors/implementations/RadiantProcessor.d.ts +32 -0
  203. package/dist/src/engine/erc20SubTypeProcessors/implementations/RadiantProcessor.js +58 -0
  204. package/dist/src/engine/erc20SubTypeProcessors/implementations/RfxProcessor.d.ts +40 -0
  205. package/dist/src/engine/erc20SubTypeProcessors/implementations/RfxProcessor.js +67 -0
  206. package/dist/src/engine/erc20SubTypeProcessors/implementations/Satlayer.d.ts +34 -0
  207. package/dist/src/engine/erc20SubTypeProcessors/implementations/Satlayer.js +27 -0
  208. package/dist/src/engine/erc20SubTypeProcessors/implementations/SpectraProcessor.d.ts +31 -0
  209. package/dist/src/engine/erc20SubTypeProcessors/implementations/SpectraProcessor.js +41 -0
  210. package/dist/src/engine/erc20SubTypeProcessors/implementations/SpectraYTProcessor.d.ts +31 -0
  211. package/dist/src/engine/erc20SubTypeProcessors/implementations/SpectraYTProcessor.js +39 -0
  212. package/dist/src/engine/erc20SubTypeProcessors/implementations/SpliceProcessor.d.ts +16 -0
  213. package/dist/src/engine/erc20SubTypeProcessors/implementations/SpliceProcessor.js +36 -0
  214. package/dist/src/engine/erc20SubTypeProcessors/implementations/SturdySiloProcessor.d.ts +39 -0
  215. package/dist/src/engine/erc20SubTypeProcessors/implementations/SturdySiloProcessor.js +37 -0
  216. package/dist/src/engine/erc20SubTypeProcessors/implementations/TempestVaultProcessor.d.ts +52 -0
  217. package/dist/src/engine/erc20SubTypeProcessors/implementations/TempestVaultProcessor.js +79 -0
  218. package/dist/src/engine/erc20SubTypeProcessors/implementations/TemplateProcessor.d.ts +32 -0
  219. package/dist/src/engine/erc20SubTypeProcessors/implementations/TemplateProcessor.js +40 -0
  220. package/dist/src/engine/erc20SubTypeProcessors/implementations/TorosProcessor.d.ts +30 -0
  221. package/dist/src/engine/erc20SubTypeProcessors/implementations/TorosProcessor.js +33 -0
  222. package/dist/src/engine/erc20SubTypeProcessors/implementations/UniswapProcessor.d.ts +44 -0
  223. package/dist/src/engine/erc20SubTypeProcessors/implementations/UniswapProcessor.js +68 -0
  224. package/dist/src/engine/erc20SubTypeProcessors/implementations/VicunaProcessor.d.ts +28 -0
  225. package/dist/src/engine/erc20SubTypeProcessors/implementations/VicunaProcessor.js +35 -0
  226. package/dist/src/engine/erc20SubTypeProcessors/implementations/WoofiProcessor.d.ts +32 -0
  227. package/dist/src/engine/erc20SubTypeProcessors/implementations/WoofiProcessor.js +40 -0
  228. package/dist/src/engine/erc20SubTypeProcessors/implementations/ZkSwapThreePoolProcessor.d.ts +53 -0
  229. package/dist/src/engine/erc20SubTypeProcessors/implementations/ZkSwapThreePoolProcessor.js +55 -0
  230. package/dist/src/engine/erc20SubTypeProcessors/implementations/curveNPoolProcessor.d.ts +39 -0
  231. package/dist/src/engine/erc20SubTypeProcessors/implementations/curveNPoolProcessor.js +95 -0
  232. package/dist/src/engine/erc20SubTypeProcessors/implementations/curveProcessor.d.ts +49 -0
  233. package/dist/src/engine/erc20SubTypeProcessors/implementations/curveProcessor.js +70 -0
  234. package/dist/src/engine/erc20SubTypeProcessors/implementations/processorMapping.d.ts +6 -0
  235. package/dist/src/engine/erc20SubTypeProcessors/implementations/processorMapping.js +142 -0
  236. package/dist/src/engine/erc20SubTypeProcessors/implementations/stakedCurveProcessor.d.ts +54 -0
  237. package/dist/src/engine/erc20SubTypeProcessors/implementations/stakedCurveProcessor.js +77 -0
  238. package/dist/src/engine/erc20SubTypeProcessors/implementations/xU308Processor.d.ts +37 -0
  239. package/dist/src/engine/erc20SubTypeProcessors/implementations/xU308Processor.js +49 -0
  240. package/dist/src/engine/erc20SubTypeProcessors/subtypesPrices.d.ts +4 -0
  241. package/dist/src/engine/erc20SubTypeProcessors/subtypesPrices.js +24 -0
  242. package/dist/src/engine/erc20SubTypeProcessors/subtypesRound1.d.ts +3 -0
  243. package/dist/src/engine/erc20SubTypeProcessors/subtypesRound1.js +336 -0
  244. package/dist/src/engine/erc20SubTypeProcessors/subtypesRound2.d.ts +4 -0
  245. package/dist/src/engine/erc20SubTypeProcessors/subtypesRound2.js +22 -0
  246. package/dist/src/engine/erc20SubTypeProcessors/subtypesRound3.d.ts +3 -0
  247. package/dist/src/engine/erc20SubTypeProcessors/subtypesRound3.js +22 -0
  248. package/dist/src/engine/erc20SubTypeProcessors/subtypesRound4.d.ts +3 -0
  249. package/dist/src/engine/erc20SubTypeProcessors/subtypesRound4.js +22 -0
  250. package/dist/src/engine/opportunityMetadata/factory.d.ts +3 -0
  251. package/dist/src/engine/opportunityMetadata/factory.js +57 -0
  252. package/dist/src/engine/opportunityMetadata/implementations/Ajna.d.ts +15 -0
  253. package/dist/src/engine/opportunityMetadata/implementations/Ajna.js +52 -0
  254. package/dist/src/engine/opportunityMetadata/implementations/Ambiant.d.ts +15 -0
  255. package/dist/src/engine/opportunityMetadata/implementations/Ambiant.js +31 -0
  256. package/dist/src/engine/opportunityMetadata/implementations/Badger.d.ts +15 -0
  257. package/dist/src/engine/opportunityMetadata/implementations/Badger.js +25 -0
  258. package/dist/src/engine/opportunityMetadata/implementations/Clamm.d.ts +15 -0
  259. package/dist/src/engine/opportunityMetadata/implementations/Clamm.js +50 -0
  260. package/dist/src/engine/opportunityMetadata/implementations/Compound.d.ts +16 -0
  261. package/dist/src/engine/opportunityMetadata/implementations/Compound.js +20 -0
  262. package/dist/src/engine/opportunityMetadata/implementations/Default.d.ts +13 -0
  263. package/dist/src/engine/opportunityMetadata/implementations/Default.js +11 -0
  264. package/dist/src/engine/opportunityMetadata/implementations/Dolomite.d.ts +15 -0
  265. package/dist/src/engine/opportunityMetadata/implementations/Dolomite.js +17 -0
  266. package/dist/src/engine/opportunityMetadata/implementations/EigenLayer.d.ts +15 -0
  267. package/dist/src/engine/opportunityMetadata/implementations/EigenLayer.js +11 -0
  268. package/dist/src/engine/opportunityMetadata/implementations/Encompassing.d.ts +15 -0
  269. package/dist/src/engine/opportunityMetadata/implementations/Encompassing.js +37 -0
  270. package/dist/src/engine/opportunityMetadata/implementations/Erc20.d.ts +15 -0
  271. package/dist/src/engine/opportunityMetadata/implementations/Erc20.js +71 -0
  272. package/dist/src/engine/opportunityMetadata/implementations/Erc20Snapshot.d.ts +14 -0
  273. package/dist/src/engine/opportunityMetadata/implementations/Erc20Snapshot.js +10 -0
  274. package/dist/src/engine/opportunityMetadata/implementations/Euler.d.ts +15 -0
  275. package/dist/src/engine/opportunityMetadata/implementations/Euler.js +34 -0
  276. package/dist/src/engine/opportunityMetadata/implementations/EventBased.d.ts +20 -0
  277. package/dist/src/engine/opportunityMetadata/implementations/EventBased.js +45 -0
  278. package/dist/src/engine/opportunityMetadata/implementations/Hyperdrive.d.ts +15 -0
  279. package/dist/src/engine/opportunityMetadata/implementations/Hyperdrive.js +21 -0
  280. package/dist/src/engine/opportunityMetadata/implementations/Invalid.d.ts +11 -0
  281. package/dist/src/engine/opportunityMetadata/implementations/Invalid.js +10 -0
  282. package/dist/src/engine/opportunityMetadata/implementations/Ion.d.ts +16 -0
  283. package/dist/src/engine/opportunityMetadata/implementations/Ion.js +15 -0
  284. package/dist/src/engine/opportunityMetadata/implementations/JsonAirdrop.d.ts +15 -0
  285. package/dist/src/engine/opportunityMetadata/implementations/JsonAirdrop.js +38 -0
  286. package/dist/src/engine/opportunityMetadata/implementations/Morpho.d.ts +15 -0
  287. package/dist/src/engine/opportunityMetadata/implementations/Morpho.js +21 -0
  288. package/dist/src/engine/opportunityMetadata/implementations/Radiant.d.ts +15 -0
  289. package/dist/src/engine/opportunityMetadata/implementations/Radiant.js +11 -0
  290. package/dist/src/engine/opportunityMetadata/implementations/Silo.d.ts +15 -0
  291. package/dist/src/engine/opportunityMetadata/implementations/Silo.js +15 -0
  292. package/dist/src/engine/opportunityMetadata/implementations/UniswapV4.d.ts +15 -0
  293. package/dist/src/engine/opportunityMetadata/implementations/UniswapV4.js +28 -0
  294. package/dist/src/engine/opportunityMetadata/implementations/Vest.d.ts +15 -0
  295. package/dist/src/engine/opportunityMetadata/implementations/Vest.js +12 -0
  296. package/dist/src/entities/campaign.d.ts +58 -0
  297. package/dist/src/entities/campaign.js +136 -0
  298. package/dist/src/errors/BadRequest.error.d.ts +4 -0
  299. package/dist/src/errors/BadRequest.error.js +7 -0
  300. package/dist/src/errors/Conflict.error.d.ts +4 -0
  301. package/dist/src/errors/Conflict.error.js +7 -0
  302. package/dist/src/errors/HttpError.d.ts +11 -0
  303. package/dist/src/errors/HttpError.js +17 -0
  304. package/dist/src/errors/NotFound.error.d.ts +8 -0
  305. package/dist/src/errors/NotFound.error.js +12 -0
  306. package/dist/src/errors/Opportunity.error.d.ts +6 -0
  307. package/dist/src/errors/Opportunity.error.js +11 -0
  308. package/dist/src/errors/Unauthorized.error.d.ts +4 -0
  309. package/dist/src/errors/Unauthorized.error.js +7 -0
  310. package/dist/src/errors/VoidString.error.d.ts +4 -0
  311. package/dist/src/errors/VoidString.error.js +7 -0
  312. package/dist/src/errors/index.d.ts +5 -0
  313. package/dist/src/errors/index.js +5 -0
  314. package/dist/src/guards/BackOffice.guard.d.ts +7 -0
  315. package/dist/src/guards/BackOffice.guard.js +10 -0
  316. package/dist/src/guards/Engine.guard.d.ts +7 -0
  317. package/dist/src/guards/Engine.guard.js +10 -0
  318. package/dist/src/guards/TokenAuth.guard.d.ts +7 -0
  319. package/dist/src/guards/TokenAuth.guard.js +10 -0
  320. package/dist/src/hooks/checkQueryAddressValidity.d.ts +22 -0
  321. package/dist/src/hooks/checkQueryAddressValidity.js +7 -0
  322. package/dist/src/hooks/checkQueryChainIdValidity.d.ts +22 -0
  323. package/dist/src/hooks/checkQueryChainIdValidity.js +7 -0
  324. package/dist/src/index.d.ts +5237 -0
  325. package/dist/src/index.js +111 -0
  326. package/dist/src/jobs/dynamic-data.d.ts +9 -0
  327. package/dist/src/jobs/dynamic-data.js +24 -0
  328. package/dist/src/jobs/pendings.d.ts +1 -0
  329. package/dist/src/jobs/pendings.js +236 -0
  330. package/dist/src/jobs/prices.d.ts +1 -0
  331. package/dist/src/jobs/prices.js +10 -0
  332. package/dist/src/jobs/reward-breakdowns.d.ts +1 -0
  333. package/dist/src/jobs/reward-breakdowns.js +152 -0
  334. package/dist/src/jobs/rewards.d.ts +1 -0
  335. package/dist/src/jobs/rewards.js +112 -0
  336. package/dist/src/jobs/set-dungeon-keeper.d.ts +1 -0
  337. package/dist/src/jobs/set-dungeon-keeper.js +82 -0
  338. package/dist/src/jobs/update-dynamic-data.d.ts +1 -0
  339. package/dist/src/jobs/update-dynamic-data.js +62 -0
  340. package/dist/src/jobs/update-euler-vaults.d.ts +1 -0
  341. package/dist/src/jobs/update-euler-vaults.js +122 -0
  342. package/dist/src/jobs/update-uniswap-v4-pools.d.ts +1 -0
  343. package/dist/src/jobs/update-uniswap-v4-pools.js +14 -0
  344. package/dist/src/libs/computeFee.d.ts +4 -0
  345. package/dist/src/libs/computeFee.js +34 -0
  346. package/dist/src/libs/deprecated-merklv3/index.d.ts +5 -0
  347. package/dist/src/libs/deprecated-merklv3/index.js +184 -0
  348. package/dist/src/libs/getTokensList.d.ts +23 -0
  349. package/dist/src/libs/getTokensList.js +19 -0
  350. package/dist/src/libs/merklChainData.d.ts +4 -0
  351. package/dist/src/libs/merklChainData.js +115 -0
  352. package/dist/src/libs/parse/marketsWithCache.d.ts +4 -0
  353. package/dist/src/libs/parse/marketsWithCache.js +8 -0
  354. package/dist/src/libs/positions/EigenLayer/index.d.ts +6 -0
  355. package/dist/src/libs/positions/EigenLayer/index.js +54 -0
  356. package/dist/src/libs/positions/ajna/index.d.ts +6 -0
  357. package/dist/src/libs/positions/ajna/index.js +107 -0
  358. package/dist/src/libs/positions/badger/index.d.ts +6 -0
  359. package/dist/src/libs/positions/badger/index.js +80 -0
  360. package/dist/src/libs/positions/clamm/index.d.ts +7 -0
  361. package/dist/src/libs/positions/clamm/index.js +412 -0
  362. package/dist/src/libs/positions/clamm/thegraph/fetchAlmPositions.d.ts +5 -0
  363. package/dist/src/libs/positions/clamm/thegraph/fetchAlmPositions.js +36 -0
  364. package/dist/src/libs/positions/clamm/thegraph/fetchAmmPositions.d.ts +8 -0
  365. package/dist/src/libs/positions/clamm/thegraph/fetchAmmPositions.js +36 -0
  366. package/dist/src/libs/positions/clamm/thegraph/fetchFarmedPositions.d.ts +10 -0
  367. package/dist/src/libs/positions/clamm/thegraph/fetchFarmedPositions.js +42 -0
  368. package/dist/src/libs/positions/clamm/thegraph/index.d.ts +40 -0
  369. package/dist/src/libs/positions/clamm/thegraph/index.js +163 -0
  370. package/dist/src/libs/positions/compound/index.d.ts +24 -0
  371. package/dist/src/libs/positions/compound/index.js +91 -0
  372. package/dist/src/libs/positions/dolomite/index.d.ts +17 -0
  373. package/dist/src/libs/positions/dolomite/index.js +51 -0
  374. package/dist/src/libs/positions/erc20/index.d.ts +5 -0
  375. package/dist/src/libs/positions/erc20/index.js +56 -0
  376. package/dist/src/libs/positions/euler/index.d.ts +5 -0
  377. package/dist/src/libs/positions/euler/index.js +57 -0
  378. package/dist/src/libs/positions/index.d.ts +3 -0
  379. package/dist/src/libs/positions/index.js +53 -0
  380. package/dist/src/libs/positions/morpho/index.d.ts +6 -0
  381. package/dist/src/libs/positions/morpho/index.js +177 -0
  382. package/dist/src/libs/positions/prepareFetch.d.ts +22 -0
  383. package/dist/src/libs/positions/prepareFetch.js +392 -0
  384. package/dist/src/libs/positions/silo/index.d.ts +5 -0
  385. package/dist/src/libs/positions/silo/index.js +68 -0
  386. package/dist/src/libs/positions/types.d.ts +75 -0
  387. package/dist/src/libs/positions/types.js +1 -0
  388. package/dist/src/libs/staticCampaigns.d.ts +7 -0
  389. package/dist/src/libs/staticCampaigns.js +15 -0
  390. package/dist/src/libs/tokens/allowances.d.ts +1 -0
  391. package/dist/src/libs/tokens/allowances.js +18 -0
  392. package/dist/src/libs/tokens/balances.d.ts +11 -0
  393. package/dist/src/libs/tokens/balances.js +127 -0
  394. package/dist/src/libs/tokens/tokenInfo.d.ts +8 -0
  395. package/dist/src/libs/tokens/tokenInfo.js +22 -0
  396. package/dist/src/modules/v4/accounting/accounting.controller.d.ts +219 -0
  397. package/dist/src/modules/v4/accounting/accounting.controller.js +66 -0
  398. package/dist/src/modules/v4/accounting/accounting.model.d.ts +32 -0
  399. package/dist/src/modules/v4/accounting/accounting.model.js +32 -0
  400. package/dist/src/modules/v4/accounting/accounting.repository.d.ts +99 -0
  401. package/dist/src/modules/v4/accounting/accounting.repository.js +100 -0
  402. package/dist/src/modules/v4/accounting/accounting.service.d.ts +59 -0
  403. package/dist/src/modules/v4/accounting/accounting.service.js +107 -0
  404. package/dist/src/modules/v4/accounting/index.d.ts +3 -0
  405. package/dist/src/modules/v4/accounting/index.js +3 -0
  406. package/dist/src/modules/v4/airflow/airflow.service.d.ts +3 -0
  407. package/dist/src/modules/v4/airflow/airflow.service.js +20 -0
  408. package/dist/src/modules/v4/apr/apr.model.d.ts +41 -0
  409. package/dist/src/modules/v4/apr/apr.model.js +15 -0
  410. package/dist/src/modules/v4/apr/apr.service.d.ts +6 -0
  411. package/dist/src/modules/v4/apr/apr.service.js +49 -0
  412. package/dist/src/modules/v4/apr/index.d.ts +2 -0
  413. package/dist/src/modules/v4/apr/index.js +2 -0
  414. package/dist/src/modules/v4/blacklist/blacklist.controller.d.ts +123 -0
  415. package/dist/src/modules/v4/blacklist/blacklist.controller.js +42 -0
  416. package/dist/src/modules/v4/blacklist/blacklist.model.d.ts +15 -0
  417. package/dist/src/modules/v4/blacklist/blacklist.model.js +13 -0
  418. package/dist/src/modules/v4/blacklist/blacklist.repository.d.ts +21 -0
  419. package/dist/src/modules/v4/blacklist/blacklist.repository.js +50 -0
  420. package/dist/src/modules/v4/blacklist/blacklist.service.d.ts +24 -0
  421. package/dist/src/modules/v4/blacklist/blacklist.service.js +31 -0
  422. package/dist/src/modules/v4/blacklist/index.d.ts +3 -0
  423. package/dist/src/modules/v4/blacklist/index.js +3 -0
  424. package/dist/src/modules/v4/boost/boost.controller.d.ts +88 -0
  425. package/dist/src/modules/v4/boost/boost.controller.js +15 -0
  426. package/dist/src/modules/v4/boost/boost.model.d.ts +12 -0
  427. package/dist/src/modules/v4/boost/boost.model.js +14 -0
  428. package/dist/src/modules/v4/boost/boost.service.d.ts +11 -0
  429. package/dist/src/modules/v4/boost/boost.service.js +20 -0
  430. package/dist/src/modules/v4/boost/index.d.ts +2 -0
  431. package/dist/src/modules/v4/boost/index.js +2 -0
  432. package/dist/src/modules/v4/bucket/bucket.model.d.ts +10 -0
  433. package/dist/src/modules/v4/bucket/bucket.model.js +85 -0
  434. package/dist/src/modules/v4/bucket/bucket.service.d.ts +11 -0
  435. package/dist/src/modules/v4/bucket/bucket.service.js +170 -0
  436. package/dist/src/modules/v4/cache/cache.model.d.ts +13 -0
  437. package/dist/src/modules/v4/cache/cache.model.js +14 -0
  438. package/dist/src/modules/v4/cache/cache.repository.d.ts +5 -0
  439. package/dist/src/modules/v4/cache/cache.repository.js +62 -0
  440. package/dist/src/modules/v4/cache/cache.service.d.ts +9 -0
  441. package/dist/src/modules/v4/cache/cache.service.js +50 -0
  442. package/dist/src/modules/v4/cache/index.d.ts +1 -0
  443. package/dist/src/modules/v4/cache/index.js +1 -0
  444. package/dist/src/modules/v4/campaign/campaign.controller.d.ts +632 -0
  445. package/dist/src/modules/v4/campaign/campaign.controller.js +149 -0
  446. package/dist/src/modules/v4/campaign/campaign.model.d.ts +165 -0
  447. package/dist/src/modules/v4/campaign/campaign.model.js +113 -0
  448. package/dist/src/modules/v4/campaign/campaign.repository.d.ts +735 -0
  449. package/dist/src/modules/v4/campaign/campaign.repository.js +448 -0
  450. package/dist/src/modules/v4/campaign/campaign.service.d.ts +728 -0
  451. package/dist/src/modules/v4/campaign/campaign.service.js +309 -0
  452. package/dist/src/modules/v4/campaign/index.d.ts +2 -0
  453. package/dist/src/modules/v4/campaign/index.js +2 -0
  454. package/dist/src/modules/v4/chain/chain.controller.d.ts +145 -0
  455. package/dist/src/modules/v4/chain/chain.controller.js +44 -0
  456. package/dist/src/modules/v4/chain/chain.model.d.ts +43 -0
  457. package/dist/src/modules/v4/chain/chain.model.js +38 -0
  458. package/dist/src/modules/v4/chain/chain.repository.d.ts +75 -0
  459. package/dist/src/modules/v4/chain/chain.repository.js +70 -0
  460. package/dist/src/modules/v4/chain/chain.service.d.ts +55 -0
  461. package/dist/src/modules/v4/chain/chain.service.js +48 -0
  462. package/dist/src/modules/v4/chainInteraction/chainInteraction.service.d.ts +2 -0
  463. package/dist/src/modules/v4/chainInteraction/chainInteraction.service.js +4 -0
  464. package/dist/src/modules/v4/claims/claims.controller.d.ts +42 -0
  465. package/dist/src/modules/v4/claims/claims.controller.js +18 -0
  466. package/dist/src/modules/v4/claims/claims.model.d.ts +9 -0
  467. package/dist/src/modules/v4/claims/claims.model.js +1 -0
  468. package/dist/src/modules/v4/claims/claims.repository.d.ts +5 -0
  469. package/dist/src/modules/v4/claims/claims.repository.js +39 -0
  470. package/dist/src/modules/v4/claims/claims.service.d.ts +9 -0
  471. package/dist/src/modules/v4/claims/claims.service.js +40 -0
  472. package/dist/src/modules/v4/computedValue/computedValue.controller.d.ts +119 -0
  473. package/dist/src/modules/v4/computedValue/computedValue.controller.js +45 -0
  474. package/dist/src/modules/v4/computedValue/computedValue.model.d.ts +27 -0
  475. package/dist/src/modules/v4/computedValue/computedValue.model.js +30 -0
  476. package/dist/src/modules/v4/computedValue/computedValue.repository.d.ts +16 -0
  477. package/dist/src/modules/v4/computedValue/computedValue.repository.js +48 -0
  478. package/dist/src/modules/v4/computedValue/computedValue.service.d.ts +16 -0
  479. package/dist/src/modules/v4/computedValue/computedValue.service.js +25 -0
  480. package/dist/src/modules/v4/computedValue/index.d.ts +2 -0
  481. package/dist/src/modules/v4/computedValue/index.js +2 -0
  482. package/dist/src/modules/v4/creator/creator.controller.d.ts +118 -0
  483. package/dist/src/modules/v4/creator/creator.controller.js +30 -0
  484. package/dist/src/modules/v4/creator/creator.model.d.ts +29 -0
  485. package/dist/src/modules/v4/creator/creator.model.js +18 -0
  486. package/dist/src/modules/v4/creator/creator.repository.d.ts +40 -0
  487. package/dist/src/modules/v4/creator/creator.repository.js +63 -0
  488. package/dist/src/modules/v4/creator/creator.service.d.ts +61 -0
  489. package/dist/src/modules/v4/creator/creator.service.js +44 -0
  490. package/dist/src/modules/v4/creator/index.d.ts +3 -0
  491. package/dist/src/modules/v4/creator/index.js +3 -0
  492. package/dist/src/modules/v4/dynamicData/dynamicData.controller.d.ts +49 -0
  493. package/dist/src/modules/v4/dynamicData/dynamicData.controller.js +19 -0
  494. package/dist/src/modules/v4/dynamicData/dynamicData.model.d.ts +60 -0
  495. package/dist/src/modules/v4/dynamicData/dynamicData.model.js +54 -0
  496. package/dist/src/modules/v4/dynamicData/dynamicData.repository.d.ts +0 -0
  497. package/dist/src/modules/v4/dynamicData/dynamicData.repository.js +1 -0
  498. package/dist/src/modules/v4/dynamicData/dynamicData.service.d.ts +14 -0
  499. package/dist/src/modules/v4/dynamicData/dynamicData.service.js +131 -0
  500. package/dist/src/modules/v4/enso/enso.model.d.ts +166 -0
  501. package/dist/src/modules/v4/enso/enso.model.js +147 -0
  502. package/dist/src/modules/v4/enso/enso.service.d.ts +69 -0
  503. package/dist/src/modules/v4/enso/enso.service.js +116 -0
  504. package/dist/src/modules/v4/explorer/explorer.controller.d.ts +45 -0
  505. package/dist/src/modules/v4/explorer/explorer.controller.js +13 -0
  506. package/dist/src/modules/v4/explorer/explorer.model.d.ts +16 -0
  507. package/dist/src/modules/v4/explorer/explorer.model.js +8 -0
  508. package/dist/src/modules/v4/explorer/explorer.repository.d.ts +21 -0
  509. package/dist/src/modules/v4/explorer/explorer.repository.js +23 -0
  510. package/dist/src/modules/v4/explorer/explorer.service.d.ts +28 -0
  511. package/dist/src/modules/v4/explorer/explorer.service.js +24 -0
  512. package/dist/src/modules/v4/interaction/interaction.controller.d.ts +97 -0
  513. package/dist/src/modules/v4/interaction/interaction.controller.js +40 -0
  514. package/dist/src/modules/v4/interaction/interaction.model.d.ts +110 -0
  515. package/dist/src/modules/v4/interaction/interaction.model.js +25 -0
  516. package/dist/src/modules/v4/interaction/interaction.service.d.ts +38 -0
  517. package/dist/src/modules/v4/interaction/interaction.service.js +95 -0
  518. package/dist/src/modules/v4/kyberzap/kyberzap.model.d.ts +114 -0
  519. package/dist/src/modules/v4/kyberzap/kyberzap.model.js +83 -0
  520. package/dist/src/modules/v4/kyberzap/kyberzap.service.d.ts +34 -0
  521. package/dist/src/modules/v4/kyberzap/kyberzap.service.js +176 -0
  522. package/dist/src/modules/v4/liquidity/implementations/AjnaPositionFetcher.d.ts +6 -0
  523. package/dist/src/modules/v4/liquidity/implementations/AjnaPositionFetcher.js +90 -0
  524. package/dist/src/modules/v4/liquidity/implementations/BadgerPositionFetcher.d.ts +6 -0
  525. package/dist/src/modules/v4/liquidity/implementations/BadgerPositionFetcher.js +69 -0
  526. package/dist/src/modules/v4/liquidity/implementations/ClammPositionFetcher.d.ts +6 -0
  527. package/dist/src/modules/v4/liquidity/implementations/ClammPositionFetcher.js +61 -0
  528. package/dist/src/modules/v4/liquidity/implementations/DolomitePositionFetcher.d.ts +6 -0
  529. package/dist/src/modules/v4/liquidity/implementations/DolomitePositionFetcher.js +45 -0
  530. package/dist/src/modules/v4/liquidity/implementations/ERC20PositionFetcher.d.ts +6 -0
  531. package/dist/src/modules/v4/liquidity/implementations/ERC20PositionFetcher.js +47 -0
  532. package/dist/src/modules/v4/liquidity/implementations/EulerPositionFetcher.d.ts +6 -0
  533. package/dist/src/modules/v4/liquidity/implementations/EulerPositionFetcher.js +40 -0
  534. package/dist/src/modules/v4/liquidity/liquidity.controller.d.ts +39 -0
  535. package/dist/src/modules/v4/liquidity/liquidity.controller.js +16 -0
  536. package/dist/src/modules/v4/liquidity/liquidity.model.d.ts +25 -0
  537. package/dist/src/modules/v4/liquidity/liquidity.model.js +5 -0
  538. package/dist/src/modules/v4/liquidity/liquidity.repository.d.ts +14 -0
  539. package/dist/src/modules/v4/liquidity/liquidity.repository.js +6 -0
  540. package/dist/src/modules/v4/liquidity/liquidity.service.d.ts +5 -0
  541. package/dist/src/modules/v4/liquidity/liquidity.service.js +34 -0
  542. package/dist/src/modules/v4/merklRoot/index.d.ts +3 -0
  543. package/dist/src/modules/v4/merklRoot/index.js +3 -0
  544. package/dist/src/modules/v4/merklRoot/merklRoot.controller.d.ts +93 -0
  545. package/dist/src/modules/v4/merklRoot/merklRoot.controller.js +31 -0
  546. package/dist/src/modules/v4/merklRoot/merklRoot.model.d.ts +13 -0
  547. package/dist/src/modules/v4/merklRoot/merklRoot.model.js +12 -0
  548. package/dist/src/modules/v4/merklRoot/merklRoot.repository.d.ts +29 -0
  549. package/dist/src/modules/v4/merklRoot/merklRoot.repository.js +35 -0
  550. package/dist/src/modules/v4/merklRoot/merklRoot.service.d.ts +46 -0
  551. package/dist/src/modules/v4/merklRoot/merklRoot.service.js +44 -0
  552. package/dist/src/modules/v4/opportunity/index.d.ts +3 -0
  553. package/dist/src/modules/v4/opportunity/index.js +3 -0
  554. package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +958 -0
  555. package/dist/src/modules/v4/opportunity/opportunity.controller.js +155 -0
  556. package/dist/src/modules/v4/opportunity/opportunity.converter.d.ts +10 -0
  557. package/dist/src/modules/v4/opportunity/opportunity.converter.js +174 -0
  558. package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +357 -0
  559. package/dist/src/modules/v4/opportunity/opportunity.model.js +112 -0
  560. package/dist/src/modules/v4/opportunity/opportunity.repository.d.ts +985 -0
  561. package/dist/src/modules/v4/opportunity/opportunity.repository.js +430 -0
  562. package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +982 -0
  563. package/dist/src/modules/v4/opportunity/opportunity.service.js +302 -0
  564. package/dist/src/modules/v4/opportunity/transform-id.pipe.d.ts +5 -0
  565. package/dist/src/modules/v4/opportunity/transform-id.pipe.js +6 -0
  566. package/dist/src/modules/v4/opportunity/validate-id.pipe.d.ts +5 -0
  567. package/dist/src/modules/v4/opportunity/validate-id.pipe.js +12 -0
  568. package/dist/src/modules/v4/price/index.d.ts +3 -0
  569. package/dist/src/modules/v4/price/index.js +3 -0
  570. package/dist/src/modules/v4/price/price.controller.d.ts +185 -0
  571. package/dist/src/modules/v4/price/price.controller.js +55 -0
  572. package/dist/src/modules/v4/price/price.model.d.ts +32 -0
  573. package/dist/src/modules/v4/price/price.model.js +12 -0
  574. package/dist/src/modules/v4/price/price.repository.d.ts +36 -0
  575. package/dist/src/modules/v4/price/price.repository.js +22 -0
  576. package/dist/src/modules/v4/price/price.service.d.ts +40 -0
  577. package/dist/src/modules/v4/price/price.service.js +44 -0
  578. package/dist/src/modules/v4/prisma/index.d.ts +32 -0
  579. package/dist/src/modules/v4/prisma/index.js +1 -0
  580. package/dist/src/modules/v4/programPayload/programPayload.controller.d.ts +281 -0
  581. package/dist/src/modules/v4/programPayload/programPayload.controller.js +85 -0
  582. package/dist/src/modules/v4/programPayload/programPayload.model.d.ts +262 -0
  583. package/dist/src/modules/v4/programPayload/programPayload.model.js +176 -0
  584. package/dist/src/modules/v4/programPayload/programPayload.repository.d.ts +926 -0
  585. package/dist/src/modules/v4/programPayload/programPayload.repository.js +5418 -0
  586. package/dist/src/modules/v4/programPayload/programPayload.service.d.ts +26 -0
  587. package/dist/src/modules/v4/programPayload/programPayload.service.js +218 -0
  588. package/dist/src/modules/v4/protocol/protocol.controller.d.ts +155 -0
  589. package/dist/src/modules/v4/protocol/protocol.controller.js +38 -0
  590. package/dist/src/modules/v4/protocol/protocol.model.d.ts +55 -0
  591. package/dist/src/modules/v4/protocol/protocol.model.js +115 -0
  592. package/dist/src/modules/v4/protocol/protocol.repository.d.ts +79 -0
  593. package/dist/src/modules/v4/protocol/protocol.repository.js +81 -0
  594. package/dist/src/modules/v4/protocol/protocol.service.d.ts +24 -0
  595. package/dist/src/modules/v4/protocol/protocol.service.js +62 -0
  596. package/dist/src/modules/v4/referral/referral.controller.d.ts +82 -0
  597. package/dist/src/modules/v4/referral/referral.controller.js +25 -0
  598. package/dist/src/modules/v4/referral/referral.model.d.ts +10 -0
  599. package/dist/src/modules/v4/referral/referral.model.js +12 -0
  600. package/dist/src/modules/v4/referral/referral.service.d.ts +216 -0
  601. package/dist/src/modules/v4/referral/referral.service.js +171 -0
  602. package/dist/src/modules/v4/reward/index.d.ts +2 -0
  603. package/dist/src/modules/v4/reward/index.js +2 -0
  604. package/dist/src/modules/v4/reward/reward.controller.d.ts +338 -0
  605. package/dist/src/modules/v4/reward/reward.controller.js +124 -0
  606. package/dist/src/modules/v4/reward/reward.converter.d.ts +14 -0
  607. package/dist/src/modules/v4/reward/reward.converter.js +124 -0
  608. package/dist/src/modules/v4/reward/reward.model.d.ts +240 -0
  609. package/dist/src/modules/v4/reward/reward.model.js +159 -0
  610. package/dist/src/modules/v4/reward/reward.repository.d.ts +156 -0
  611. package/dist/src/modules/v4/reward/reward.repository.js +305 -0
  612. package/dist/src/modules/v4/reward/reward.service.d.ts +595 -0
  613. package/dist/src/modules/v4/reward/reward.service.js +347 -0
  614. package/dist/src/modules/v4/router.d.ts +4375 -0
  615. package/dist/src/modules/v4/router.js +76 -0
  616. package/dist/src/modules/v4/status/status.controller.d.ts +239 -0
  617. package/dist/src/modules/v4/status/status.controller.js +68 -0
  618. package/dist/src/modules/v4/status/status.model.d.ts +63 -0
  619. package/dist/src/modules/v4/status/status.model.js +34 -0
  620. package/dist/src/modules/v4/status/status.repository.d.ts +104 -0
  621. package/dist/src/modules/v4/status/status.repository.js +146 -0
  622. package/dist/src/modules/v4/status/status.service.d.ts +88 -0
  623. package/dist/src/modules/v4/status/status.service.js +144 -0
  624. package/dist/src/modules/v4/token/token.controller.d.ts +360 -0
  625. package/dist/src/modules/v4/token/token.controller.js +108 -0
  626. package/dist/src/modules/v4/token/token.model.d.ts +113 -0
  627. package/dist/src/modules/v4/token/token.model.js +74 -0
  628. package/dist/src/modules/v4/token/token.repository.d.ts +114 -0
  629. package/dist/src/modules/v4/token/token.repository.js +169 -0
  630. package/dist/src/modules/v4/token/token.service.d.ts +266 -0
  631. package/dist/src/modules/v4/token/token.service.js +422 -0
  632. package/dist/src/modules/v4/tracer/index.d.ts +1 -0
  633. package/dist/src/modules/v4/tracer/index.js +1 -0
  634. package/dist/src/modules/v4/tracer/tracer.service.d.ts +3 -0
  635. package/dist/src/modules/v4/tracer/tracer.service.js +30 -0
  636. package/dist/src/modules/v4/tvl/index.d.ts +2 -0
  637. package/dist/src/modules/v4/tvl/index.js +2 -0
  638. package/dist/src/modules/v4/tvl/tvl.model.d.ts +39 -0
  639. package/dist/src/modules/v4/tvl/tvl.model.js +15 -0
  640. package/dist/src/modules/v4/tvl/tvl.service.d.ts +6 -0
  641. package/dist/src/modules/v4/tvl/tvl.service.js +49 -0
  642. package/dist/src/modules/v4/uniswapV4/index.d.ts +4 -0
  643. package/dist/src/modules/v4/uniswapV4/index.js +4 -0
  644. package/dist/src/modules/v4/uniswapV4/uniswapV4.controller.d.ts +53 -0
  645. package/dist/src/modules/v4/uniswapV4/uniswapV4.controller.js +12 -0
  646. package/dist/src/modules/v4/uniswapV4/uniswapV4.model.d.ts +24 -0
  647. package/dist/src/modules/v4/uniswapV4/uniswapV4.model.js +17 -0
  648. package/dist/src/modules/v4/uniswapV4/uniswapV4.repository.d.ts +13 -0
  649. package/dist/src/modules/v4/uniswapV4/uniswapV4.repository.js +12 -0
  650. package/dist/src/modules/v4/uniswapV4/uniswapV4.service.d.ts +22 -0
  651. package/dist/src/modules/v4/uniswapV4/uniswapV4.service.js +247 -0
  652. package/dist/src/modules/v4/user/user.controller.d.ts +408 -0
  653. package/dist/src/modules/v4/user/user.controller.js +89 -0
  654. package/dist/src/modules/v4/user/user.model.d.ts +70 -0
  655. package/dist/src/modules/v4/user/user.model.js +67 -0
  656. package/dist/src/modules/v4/user/user.repository.d.ts +29 -0
  657. package/dist/src/modules/v4/user/user.repository.js +38 -0
  658. package/dist/src/modules/v4/user/user.service.d.ts +31 -0
  659. package/dist/src/modules/v4/user/user.service.js +67 -0
  660. package/dist/src/plugins/error-handling.plugin.d.ts +29 -0
  661. package/dist/src/plugins/error-handling.plugin.js +34 -0
  662. package/dist/src/routes/v1/allowances.d.ts +67 -0
  663. package/dist/src/routes/v1/allowances.js +115 -0
  664. package/dist/src/routes/v1/balances.d.ts +50 -0
  665. package/dist/src/routes/v1/balances.js +25 -0
  666. package/dist/src/routes/v1/prices.d.ts +42 -0
  667. package/dist/src/routes/v1/prices.js +9 -0
  668. package/dist/src/routes/v1/router.d.ts +102 -0
  669. package/dist/src/routes/v1/router.js +6 -0
  670. package/dist/src/routes/v1/tokens.d.ts +45 -0
  671. package/dist/src/routes/v1/tokens.js +17 -0
  672. package/dist/src/routes/v2/merkl.d.ts +55 -0
  673. package/dist/src/routes/v2/merkl.js +13 -0
  674. package/dist/src/routes/v2/router.d.ts +46 -0
  675. package/dist/src/routes/v2/router.js +3 -0
  676. package/dist/src/routes/v3/app.d.ts +48 -0
  677. package/dist/src/routes/v3/app.js +38 -0
  678. package/dist/src/routes/v3/blacklist.d.ts +45 -0
  679. package/dist/src/routes/v3/blacklist.js +19 -0
  680. package/dist/src/routes/v3/campaign/delay.d.ts +49 -0
  681. package/dist/src/routes/v3/campaign/delay.js +81 -0
  682. package/dist/src/routes/v3/campaignClaims.d.ts +48 -0
  683. package/dist/src/routes/v3/campaignClaims.js +29 -0
  684. package/dist/src/routes/v3/campaignUnclaimed.d.ts +47 -0
  685. package/dist/src/routes/v3/campaignUnclaimed.js +28 -0
  686. package/dist/src/routes/v3/campaigns.d.ts +58 -0
  687. package/dist/src/routes/v3/campaigns.js +136 -0
  688. package/dist/src/routes/v3/campaignsForMainParameter.d.ts +54 -0
  689. package/dist/src/routes/v3/campaignsForMainParameter.js +33 -0
  690. package/dist/src/routes/v3/campaignsRewardsReport.d.ts +47 -0
  691. package/dist/src/routes/v3/campaignsRewardsReport.js +48 -0
  692. package/dist/src/routes/v3/claims.d.ts +48 -0
  693. package/dist/src/routes/v3/claims.js +16 -0
  694. package/dist/src/routes/v3/compoundV2.d.ts +42 -0
  695. package/dist/src/routes/v3/compoundV2.js +9 -0
  696. package/dist/src/routes/v3/createCampaign.d.ts +47 -0
  697. package/dist/src/routes/v3/createCampaign.js +66 -0
  698. package/dist/src/routes/v3/dolomite.d.ts +46 -0
  699. package/dist/src/routes/v3/dolomite.js +12 -0
  700. package/dist/src/routes/v3/euler.d.ts +53 -0
  701. package/dist/src/routes/v3/euler.js +17 -0
  702. package/dist/src/routes/v3/fetch.d.ts +46 -0
  703. package/dist/src/routes/v3/fetch.js +27 -0
  704. package/dist/src/routes/v3/health.d.ts +40 -0
  705. package/dist/src/routes/v3/health.js +13 -0
  706. package/dist/src/routes/v3/lostyield.d.ts +53 -0
  707. package/dist/src/routes/v3/lostyield.js +101 -0
  708. package/dist/src/routes/v3/merkl.d.ts +88 -0
  709. package/dist/src/routes/v3/merkl.js +119 -0
  710. package/dist/src/routes/v3/morphoMarkets.d.ts +62 -0
  711. package/dist/src/routes/v3/morphoMarkets.js +27 -0
  712. package/dist/src/routes/v3/morphoVaults.d.ts +52 -0
  713. package/dist/src/routes/v3/morphoVaults.js +22 -0
  714. package/dist/src/routes/v3/multiChainPositions.d.ts +45 -0
  715. package/dist/src/routes/v3/multiChainPositions.js +70 -0
  716. package/dist/src/routes/v3/opportunity.d.ts +52 -0
  717. package/dist/src/routes/v3/opportunity.js +28 -0
  718. package/dist/src/routes/v3/overview.d.ts +78 -0
  719. package/dist/src/routes/v3/overview.js +72 -0
  720. package/dist/src/routes/v3/parse.d.ts +47 -0
  721. package/dist/src/routes/v3/parse.js +23 -0
  722. package/dist/src/routes/v3/payload.d.ts +58 -0
  723. package/dist/src/routes/v3/payload.js +40 -0
  724. package/dist/src/routes/v3/poolInfo.d.ts +43 -0
  725. package/dist/src/routes/v3/poolInfo.js +88 -0
  726. package/dist/src/routes/v3/positions.d.ts +62 -0
  727. package/dist/src/routes/v3/positions.js +62 -0
  728. package/dist/src/routes/v3/radiant.d.ts +56 -0
  729. package/dist/src/routes/v3/radiant.js +26 -0
  730. package/dist/src/routes/v3/recipients.d.ts +46 -0
  731. package/dist/src/routes/v3/recipients.js +29 -0
  732. package/dist/src/routes/v3/rewards.d.ts +73 -0
  733. package/dist/src/routes/v3/rewards.js +36 -0
  734. package/dist/src/routes/v3/rewardsReport.d.ts +56 -0
  735. package/dist/src/routes/v3/rewardsReport.js +40 -0
  736. package/dist/src/routes/v3/router.d.ts +752 -0
  737. package/dist/src/routes/v3/router.js +70 -0
  738. package/dist/src/routes/v3/silo.d.ts +53 -0
  739. package/dist/src/routes/v3/silo.js +20 -0
  740. package/dist/src/routes/v3/token.d.ts +51 -0
  741. package/dist/src/routes/v3/token.js +24 -0
  742. package/dist/src/routes/v3/twt/participants.d.ts +41 -0
  743. package/dist/src/routes/v3/twt/participants.js +63 -0
  744. package/dist/src/routes/v3/uniswapv4.d.ts +42 -0
  745. package/dist/src/routes/v3/uniswapv4.js +9 -0
  746. package/dist/src/routes/v3/updates.d.ts +53 -0
  747. package/dist/src/routes/v3/updates.js +47 -0
  748. package/dist/src/routes/v3/userRewards.d.ts +69 -0
  749. package/dist/src/routes/v3/userRewards.js +62 -0
  750. package/dist/src/types/external/spectraAPI.d.ts +88 -0
  751. package/dist/src/types/external/spectraAPI.js +1 -0
  752. package/dist/src/types/index.d.ts +20 -0
  753. package/dist/src/types/index.js +1 -0
  754. package/dist/src/types/returnTypes.d.ts +19 -0
  755. package/dist/src/types/returnTypes.js +1 -0
  756. package/dist/src/types/utils.d.ts +5 -0
  757. package/dist/src/types/utils.js +1 -0
  758. package/dist/src/utils/bigintToString.d.ts +1 -0
  759. package/dist/src/utils/bigintToString.js +20 -0
  760. package/dist/src/utils/caseChanges.d.ts +3 -0
  761. package/dist/src/utils/caseChanges.js +12 -0
  762. package/dist/src/utils/decodeCalls.d.ts +3 -0
  763. package/dist/src/utils/decodeCalls.js +306 -0
  764. package/dist/src/utils/encodeCalls.d.ts +3 -0
  765. package/dist/src/utils/encodeCalls.js +490 -0
  766. package/dist/src/utils/error.d.ts +60 -0
  767. package/dist/src/utils/error.js +102 -0
  768. package/dist/src/utils/execute.d.ts +22 -0
  769. package/dist/src/utils/execute.js +117 -0
  770. package/dist/src/utils/generateCardName.d.ts +6 -0
  771. package/dist/src/utils/generateCardName.js +198 -0
  772. package/dist/src/utils/generateIcons.d.ts +3 -0
  773. package/dist/src/utils/generateIcons.js +65 -0
  774. package/dist/src/utils/generic.d.ts +7 -0
  775. package/dist/src/utils/generic.js +43 -0
  776. package/dist/src/utils/hashArray.d.ts +2 -0
  777. package/dist/src/utils/hashArray.js +7 -0
  778. package/dist/src/utils/lastBlockBefore.d.ts +3 -0
  779. package/dist/src/utils/lastBlockBefore.js +78 -0
  780. package/dist/src/utils/logger.d.ts +62 -0
  781. package/dist/src/utils/logger.js +52 -0
  782. package/dist/src/utils/pricer.d.ts +54 -0
  783. package/dist/src/utils/pricer.js +189 -0
  784. package/dist/src/utils/prices/chainlinkRead.d.ts +4 -0
  785. package/dist/src/utils/prices/chainlinkRead.js +8 -0
  786. package/dist/src/utils/prices/curveVirtualPrice.d.ts +4 -0
  787. package/dist/src/utils/prices/curveVirtualPrice.js +7 -0
  788. package/dist/src/utils/prices/getDQUICK.d.ts +4 -0
  789. package/dist/src/utils/prices/getDQUICK.js +8 -0
  790. package/dist/src/utils/prices/priceFetcherFactory.d.ts +10 -0
  791. package/dist/src/utils/prices/priceFetcherFactory.js +29 -0
  792. package/dist/src/utils/prices/priceService.d.ts +13 -0
  793. package/dist/src/utils/prices/priceService.js +308 -0
  794. package/dist/src/utils/prices/services/coinGeckoService.d.ts +12 -0
  795. package/dist/src/utils/prices/services/coinGeckoService.js +61 -0
  796. package/dist/src/utils/prices/services/defillamaService.d.ts +12 -0
  797. package/dist/src/utils/prices/services/defillamaService.js +53 -0
  798. package/dist/src/utils/prices/services/dexScreenerService.d.ts +12 -0
  799. package/dist/src/utils/prices/services/dexScreenerService.js +62 -0
  800. package/dist/src/utils/prices/services/erc4626Service.d.ts +9 -0
  801. package/dist/src/utils/prices/services/erc4626Service.js +38 -0
  802. package/dist/src/utils/prices/services/getERC4626.d.ts +4 -0
  803. package/dist/src/utils/prices/services/getERC4626.js +11 -0
  804. package/dist/src/utils/prices/services/indexCoopService.d.ts +12 -0
  805. package/dist/src/utils/prices/services/indexCoopService.js +55 -0
  806. package/dist/src/utils/prices/services/priceFetcher.d.ts +8 -0
  807. package/dist/src/utils/prices/services/priceFetcher.js +1 -0
  808. package/dist/src/utils/prices/uniV2Price.d.ts +7 -0
  809. package/dist/src/utils/prices/uniV2Price.js +40 -0
  810. package/dist/src/utils/providers.d.ts +13 -0
  811. package/dist/src/utils/providers.js +37 -0
  812. package/dist/src/utils/queries/allCampaigns.d.ts +2 -0
  813. package/dist/src/utils/queries/allCampaigns.js +12 -0
  814. package/dist/src/utils/stryke.d.ts +2 -0
  815. package/dist/src/utils/stryke.js +4 -0
  816. package/dist/src/utils/throw.d.ts +21 -0
  817. package/dist/src/utils/throw.js +44 -0
  818. package/dist/tsconfig.package.tsbuildinfo +1 -0
  819. package/package.json +109 -0
@@ -0,0 +1,970 @@
1
+ import { nftPositionByIdsQuery, positionMultipleOwnersQuery } from "@/libs/positions/clamm/thegraph";
2
+ import { fetchFarmedPositions } from "@/libs/positions/clamm/thegraph/fetchFarmedPositions";
3
+ import { TokenService } from "@/modules/v4/token/token.service";
4
+ import { A51Factory__factory, ALM, ALMMapping, AMM, AMMAlgorithm, AMMAlgorithmMapping, BN2Number, ChainInteractionService, DecodeLiquidity, EAprBreakdownType, ERC20Interface, Forwarder, JonesDoubleRewardTracker__factory, Liquidity, NETWORK_LABELS, NitroInterface, PoolInterface, PoolState, PriorityAMM, SqrtPrice, almName, ammName, getAmountsForLiquidity, getTickAtSqrtRatio, isBlacklisted, isWhitelisted, merklSubgraphAMMEndpoints, shortenAddress, spNFTInterface, withTimeout, } from "@sdk";
5
+ import axios from "axios";
6
+ import { BigNumber, utils } from "ethers";
7
+ import request from "graphql-request";
8
+ import JSBI from "jsbi";
9
+ import moment from "moment";
10
+ import { MERKL_ALM_POSITION_FETCHING_TIMEOUT } from "../../../constants";
11
+ import { log } from "../../../utils/logger";
12
+ import { Pricer } from "../../../utils/pricer";
13
+ import { isStrykeCampaign } from "../../../utils/stryke";
14
+ import { fetchA51Strategies } from "../utils/fetchA51Strategies";
15
+ export class ClammDynamicData {
16
+ async build(chainId, campaigns) {
17
+ const dynamicData = [];
18
+ const pricer = await Pricer.load();
19
+ const calls = [];
20
+ const A51Interface = A51Factory__factory.createInterface();
21
+ /** Dedupe pools from campaigns to build pool list */
22
+ let poolList = [];
23
+ for (const campaign of campaigns ?? []) {
24
+ /** Loop through all campaigns to add pools */
25
+ if (!poolList?.map(p => p.mainParameter.toLowerCase()).includes(campaign.mainParameter.toLowerCase())) {
26
+ if (AMMAlgorithmMapping[campaign.campaignParameters.amm] === undefined) {
27
+ console.log("Invalid AMM", campaign.campaignParameters.amm);
28
+ continue;
29
+ }
30
+ poolList.push({
31
+ address: campaign.campaignParameters.poolAddress,
32
+ mainParameter: campaign.mainParameter, // main parameter containes info of poolAddress + AMM (in case its a priority AMM)
33
+ alms: [],
34
+ amm: campaign.campaignParameters.amm,
35
+ });
36
+ }
37
+ /** Now we have an entry with campaign.mainParameter in poolList */
38
+ const poolIndex = poolList
39
+ ?.map(p => p.mainParameter.toLowerCase())
40
+ .findIndex(a => a === campaign.mainParameter.toLowerCase());
41
+ /** Fill ALMs per pools */
42
+ for (const forwarder of campaign.campaignParameters.forwarders
43
+ .filter(f => f.forwarderType === Forwarder.CLAMM)
44
+ .sort((a, b) => a.priority - b.priority)) {
45
+ const alm = {
46
+ address: forwarder.sender,
47
+ ...(!!forwarder.owner && { owner: forwarder.owner?.toLowerCase() }),
48
+ target: forwarder.target.toLowerCase(),
49
+ type: forwarder.type,
50
+ priority: forwarder.priority,
51
+ };
52
+ /** If the ALM is not found - add it */
53
+ if (poolList[poolIndex].alms.findIndex(a => alm.address === a.address && alm.target === a.target) === -1) {
54
+ poolList[poolIndex].alms.push(alm);
55
+ }
56
+ }
57
+ }
58
+ poolList = poolList.filter(p => p.amm !== undefined && p.amm !== null);
59
+ if (!!poolList) {
60
+ // Prepare A51 fetching
61
+ const A51Pools = [];
62
+ for (const pool of poolList) {
63
+ for (const _ of pool.alms.filter(a => a.type === ALM.A51)) {
64
+ A51Pools.push(pool.address.toLowerCase());
65
+ }
66
+ }
67
+ let A51Strategies = {};
68
+ if (A51Pools.length > 0) {
69
+ A51Strategies = await fetchA51Strategies(chainId, [...new Set(A51Pools)]);
70
+ }
71
+ for (const pool of poolList) {
72
+ const poolInterface = PoolInterface[AMMAlgorithmMapping[pool.amm]];
73
+ const d = campaigns?.filter(campaign => campaign.mainParameter.toLowerCase() === pool.mainParameter.toLowerCase())[0];
74
+ calls.push({
75
+ allowFailure: true,
76
+ callData: poolInterface.encodeFunctionData(Liquidity[AMMAlgorithmMapping[pool.amm]]),
77
+ target: pool.address,
78
+ }, {
79
+ allowFailure: true,
80
+ callData: poolInterface.encodeFunctionData(PoolState[AMMAlgorithmMapping[pool.amm]]),
81
+ target: pool.address,
82
+ }, {
83
+ allowFailure: true,
84
+ callData: ERC20Interface.encodeFunctionData("balanceOf", [pool.address]),
85
+ target: d.campaignParameters.token0,
86
+ }, {
87
+ allowFailure: true,
88
+ callData: ERC20Interface.encodeFunctionData("balanceOf", [pool.address]),
89
+ target: d.campaignParameters.token1,
90
+ });
91
+ /** Direct ALMs */
92
+ for (const alm of pool.alms.filter(a => a.target.toLowerCase() === pool.address.toLowerCase() && a.type !== ALM.A51)) {
93
+ let almAddress = alm.address;
94
+ if (alm.type === ALM.Beefy) {
95
+ almAddress = alm.owner ?? alm.address;
96
+ }
97
+ calls.push({
98
+ allowFailure: true,
99
+ callData: ERC20Interface.encodeFunctionData("totalSupply"),
100
+ target: alm.address,
101
+ });
102
+ calls.push({
103
+ allowFailure: true,
104
+ callData: ERC20Interface.encodeFunctionData("balanceOf", [almAddress]),
105
+ target: d.campaignParameters.token0,
106
+ });
107
+ calls.push({
108
+ allowFailure: true,
109
+ callData: ERC20Interface.encodeFunctionData("balanceOf", [almAddress]),
110
+ target: d.campaignParameters.token1,
111
+ });
112
+ }
113
+ /** Multi-hop ALMs */
114
+ for (const alm of pool.alms.filter(a => a.target !== pool.address.toLowerCase())) {
115
+ if (alm.type === ALM.spNFT) {
116
+ calls.push({
117
+ allowFailure: true,
118
+ callData: spNFTInterface.encodeFunctionData("getPoolInfo"),
119
+ target: alm.address,
120
+ });
121
+ }
122
+ else if (alm.type === ALM.kpNFT) {
123
+ calls.push({
124
+ allowFailure: true,
125
+ callData: spNFTInterface.encodeFunctionData("getPoolInfo"),
126
+ target: alm.address,
127
+ });
128
+ }
129
+ else if (alm.type === ALM.Nitro) {
130
+ calls.push({
131
+ allowFailure: true,
132
+ callData: NitroInterface.encodeFunctionData("totalDepositAmount"),
133
+ target: alm.address,
134
+ });
135
+ }
136
+ else if ([ALM.ConcentricStaker, ALM.GammaChef].includes(alm.type)) {
137
+ calls.push({
138
+ allowFailure: true,
139
+ callData: ERC20Interface.encodeFunctionData("balanceOf", [alm.address]),
140
+ target: alm.target,
141
+ });
142
+ }
143
+ else if (alm.type === ALM.JonesTracker) {
144
+ calls.push({
145
+ allowFailure: true,
146
+ callData: JonesDoubleRewardTracker__factory.createInterface().encodeFunctionData("totalStakedAmount"),
147
+ target: alm.address,
148
+ });
149
+ }
150
+ else {
151
+ calls.push({
152
+ allowFailure: true,
153
+ callData: ERC20Interface.encodeFunctionData("totalSupply"),
154
+ target: alm.address,
155
+ });
156
+ }
157
+ }
158
+ /** A51 Strategies */
159
+ for (const w of pool.alms.filter(a => a.type === ALM.A51)) {
160
+ const strategies = A51Strategies?.[pool.address.toLowerCase()]?.[w.address] ?? [];
161
+ for (const strategy of strategies) {
162
+ calls.push({
163
+ allowFailure: true,
164
+ callData: A51Interface.encodeFunctionData("strategies", [strategy.id]),
165
+ target: w.address,
166
+ });
167
+ }
168
+ }
169
+ }
170
+ /**
171
+ * Fetch all ALM vaults positions for the pools.
172
+ * @dev Do it in parallel with 1 call / AMM subgraph to save time.
173
+ */
174
+ const positions = {};
175
+ const positionsPromise = Object.keys(AMM)
176
+ .filter(amm => !!merklSubgraphAMMEndpoints[chainId][Number.parseInt(amm)])
177
+ .map(async (amm) => {
178
+ const tgURL = merklSubgraphAMMEndpoints[chainId][Number.parseInt(amm)];
179
+ let targetAddressesList = [];
180
+ if (!!poolList) {
181
+ for (const pool of poolList) {
182
+ if (pool.amm === Number.parseInt(amm)) {
183
+ /** Add direct alm addresses */
184
+ targetAddressesList = targetAddressesList.concat(pool.alms
185
+ .filter(a => a.target.toLowerCase() === pool.address.toLowerCase())
186
+ ?.map(w => {
187
+ return !!w?.owner && Number.parseInt(amm) !== AMM.Stryke
188
+ ? w.owner.toLowerCase()
189
+ : w.address.toLowerCase();
190
+ }) ?? []);
191
+ /** Add blacklisted / whitelisted addresses (optional) */
192
+ for (const campaign of campaigns.filter(campaign => campaign.mainParameter.toLowerCase() === pool.mainParameter.toLowerCase())) {
193
+ const distributionBlacklist = campaign.campaignId === "0x4a805dd97d823dfbc34d138af3d09536ac792b6ad73079573df082c71d4b057c"
194
+ ? [...campaign.campaignParameters.blacklist, "0x657e6d2073A99aF61952beb7EE564169616b90C1"]
195
+ : campaign.campaignParameters.blacklist;
196
+ if (!!distributionBlacklist && distributionBlacklist.length > 0)
197
+ targetAddressesList = targetAddressesList.concat(distributionBlacklist.map((address) => address.toLowerCase()));
198
+ let distributionWhitelist = campaign.campaignParameters?.whitelist;
199
+ if (distributionWhitelist.length === 1 &&
200
+ distributionWhitelist[0].toLowerCase() ===
201
+ "0xE4bA6740aF4c666325D49B3112E4758371386aDc".toLowerCase()) {
202
+ distributionWhitelist = ["0xe11d346757d052214686bCbC860C94363AfB4a9A"];
203
+ }
204
+ if (!isStrykeCampaign(pool.amm) && !!distributionWhitelist && distributionWhitelist.length > 0)
205
+ targetAddressesList = targetAddressesList.concat(distributionWhitelist.map((address) => address.toLowerCase()));
206
+ }
207
+ }
208
+ }
209
+ }
210
+ targetAddressesList = targetAddressesList.filter((a, index, self) => self.indexOf(a) === index); // Dedupe
211
+ if (targetAddressesList?.length > 0) {
212
+ positions[Number.parseInt(amm)] = [];
213
+ /** Fetch NFT Wrapper positions */
214
+ const farmedPositionsList = await fetchFarmedPositions(chainId, targetAddressesList, Number(amm));
215
+ const farmedPositionsById = Object.keys(farmedPositionsList).reduce((acc, curr) => {
216
+ for (const pos of farmedPositionsList[curr]) {
217
+ acc[pos.id] = pos;
218
+ }
219
+ return acc;
220
+ }, {});
221
+ if (Object.keys(farmedPositionsById).length > 0) {
222
+ let hasFollowingPage = true;
223
+ let skip = 0;
224
+ const res = { nft: [] };
225
+ while (hasFollowingPage) {
226
+ const auxRes = await request(tgURL, nftPositionByIdsQuery, {
227
+ ids: Object.keys(farmedPositionsById),
228
+ skip,
229
+ });
230
+ res.nft = res.nft.concat(auxRes.nft ?? []);
231
+ if (auxRes.nft.length < 1000) {
232
+ hasFollowingPage = false;
233
+ }
234
+ skip += 1000;
235
+ }
236
+ if (!!res.nft) {
237
+ for (const pos of res.nft) {
238
+ positions[Number.parseInt(amm)]?.push({
239
+ ...pos,
240
+ owner: farmedPositionsById[pos.id].holder,
241
+ });
242
+ }
243
+ }
244
+ }
245
+ await withTimeout((async () => {
246
+ let hasFollowingPage = true;
247
+ let skip = 0;
248
+ const res = { direct: [], nft: [] };
249
+ while (hasFollowingPage) {
250
+ const auxRes = await request(tgURL, positionMultipleOwnersQuery, {
251
+ owners: targetAddressesList,
252
+ skip,
253
+ });
254
+ res.direct = res.direct.concat(auxRes.direct ?? []);
255
+ res.nft = res.nft.concat(auxRes.nft ?? []);
256
+ if (auxRes.direct.length < 1000 && auxRes.nft.length < 1000) {
257
+ hasFollowingPage = false;
258
+ }
259
+ skip += 1000;
260
+ }
261
+ return res;
262
+ })().then(res => {
263
+ if (!!res.direct) {
264
+ for (const pos of res.direct) {
265
+ positions[Number.parseInt(amm)]?.push(pos);
266
+ }
267
+ }
268
+ if (!!res.nft) {
269
+ for (const pos of res.nft) {
270
+ positions[Number.parseInt(amm)]?.push(pos);
271
+ }
272
+ }
273
+ }), MERKL_ALM_POSITION_FETCHING_TIMEOUT).catch(error => {
274
+ const service = `Merkl AMM Subgraph for ${NETWORK_LABELS[chainId]} ${AMM[Number.parseInt(amm)]}`;
275
+ log.error(service, error, service, tgURL);
276
+ });
277
+ }
278
+ });
279
+ const result = await ChainInteractionService(chainId).fetchState(calls);
280
+ // Wait for position fetching before finalizing the data
281
+ await Promise.all(positionsPromise);
282
+ let i = 0;
283
+ if (!!poolList) {
284
+ for (const pool of poolList) {
285
+ const poolInterface = PoolInterface[AMMAlgorithmMapping[pool.amm]];
286
+ // This liquidity call gives the active liquidity on the pool. To get the total liquidity we would need to loop over all positions
287
+ let poolTotalLiquidity;
288
+ let sqrtPrice;
289
+ let poolBalanceToken0;
290
+ let poolBalanceToken1;
291
+ const d = campaigns?.filter(campaign => campaign.mainParameter.toLowerCase() === pool.mainParameter.toLowerCase())[0];
292
+ const decimalsToken0 = d.campaignParameters.decimalsToken0;
293
+ const decimalsToken1 = d.campaignParameters.decimalsToken1;
294
+ const symbolToken0 = d.campaignParameters.symbolToken0;
295
+ const symbolToken1 = d.campaignParameters.symbolToken1;
296
+ const prevI = i;
297
+ try {
298
+ poolTotalLiquidity = BN2Number(poolInterface.decodeFunctionResult(Liquidity[AMMAlgorithmMapping[pool.amm]], result[i++].returnData)[DecodeLiquidity[AMMAlgorithmMapping[pool.amm]]]);
299
+ sqrtPrice = poolInterface
300
+ .decodeFunctionResult(PoolState[AMMAlgorithmMapping[pool.amm]], result[i++].returnData)[SqrtPrice[AMMAlgorithmMapping[pool.amm]]].toString();
301
+ poolBalanceToken0 = BN2Number(ERC20Interface.decodeFunctionResult("balanceOf", result[i++].returnData)[0], decimalsToken0);
302
+ poolBalanceToken1 = BN2Number(ERC20Interface.decodeFunctionResult("balanceOf", result[i++].returnData)[0], decimalsToken1);
303
+ }
304
+ catch (e) {
305
+ log.warn(`merklDynamic data - failed to decode state of pool ${pool.address} on ${NETWORK_LABELS[chainId]}`);
306
+ i = prevI + 4;
307
+ continue;
308
+ }
309
+ const priceToken0 = (await pricer.get({
310
+ address: d.campaignParameters.token0,
311
+ chainId: chainId,
312
+ symbol: symbolToken0,
313
+ }));
314
+ const priceToken1 = (await pricer.get({
315
+ address: d.campaignParameters.token1,
316
+ chainId: chainId,
317
+ symbol: symbolToken1,
318
+ }));
319
+ const almDetails = [];
320
+ /** Direct ALMs */
321
+ for (const w of pool.alms.filter(a => a.target.toLowerCase() === pool.address.toLowerCase() && a.type !== ALM.A51)) {
322
+ const prevI = i;
323
+ try {
324
+ const totalSupply = BN2Number(ERC20Interface.decodeFunctionResult("totalSupply", result[i++].returnData)[0]);
325
+ const almIdleBalance0 = BN2Number(ERC20Interface.decodeFunctionResult("balanceOf", result[i++].returnData)[0], d.campaignParameters.decimalsToken0);
326
+ let almBalance0 = almIdleBalance0;
327
+ const almIdleBalance1 = BN2Number(ERC20Interface.decodeFunctionResult("balanceOf", result[i++].returnData)[0], d.campaignParameters.decimalsToken1);
328
+ let almBalance1 = almIdleBalance1;
329
+ let almTotalLiquidity = 0;
330
+ let almInRangeLiquidity = 0;
331
+ const almPositions = positions?.[pool.amm]?.filter(pos => pos.pool.id === pool.address.toLowerCase() &&
332
+ [w.address.toLowerCase(), ...[!!w?.owner && w.owner.toLowerCase()]].includes(pos.owner.toLowerCase()));
333
+ const almPositionsWithAPIType = [];
334
+ if (!!almPositions) {
335
+ for (const position of almPositions) {
336
+ const upperTick = Number.parseInt(position.tickUpper);
337
+ const lowerTick = Number.parseInt(position.tickLower);
338
+ const [amount0, amount1] = getAmountsForLiquidity(sqrtPrice, lowerTick, upperTick, BigNumber.from(position.liquidity));
339
+ const balance0 = BN2Number(amount0, decimalsToken0);
340
+ const balance1 = BN2Number(amount1, decimalsToken1);
341
+ const totalLiquidity = BN2Number(position.liquidity);
342
+ const inRangeLiquidity = balance0 > 0 && balance1 > 0 ? (BN2Number(position.liquidity) ?? 0) : 0;
343
+ almTotalLiquidity += totalLiquidity;
344
+ almInRangeLiquidity += inRangeLiquidity;
345
+ almBalance0 += balance0;
346
+ almBalance1 += balance1;
347
+ almPositionsWithAPIType.push({
348
+ balance0,
349
+ balance1,
350
+ id: position.id,
351
+ inRangeLiquidity,
352
+ lowerTick,
353
+ totalLiquidity,
354
+ tvl: priceToken0 * balance0 + priceToken1 * balance1,
355
+ upperTick,
356
+ });
357
+ }
358
+ // The wrapper type can exist in the subgraph without being declared in the SDK which can lead to type errors
359
+ if (!!ALMMapping[pool.amm] && w.type in ALMMapping[pool.amm]) {
360
+ almDetails.push({
361
+ almAPR: 0, // filled later on
362
+ almAddress: utils.getAddress(w.address),
363
+ almBalance0,
364
+ almIdleBalance0,
365
+ almIdleBalance1,
366
+ almBalance1,
367
+ almInRangeLiquidity,
368
+ almTVL: almBalance0 * priceToken0 + almBalance1 * priceToken1,
369
+ almTotalLiquidity,
370
+ forwarderType: Forwarder.CLAMM,
371
+ label: `${ALMMapping[pool.amm]?.[w.type]} ${w.address}`,
372
+ origin: w.type,
373
+ positions: almPositionsWithAPIType,
374
+ priority: 0,
375
+ sender: utils.getAddress(w.address),
376
+ target: w.target,
377
+ owner: utils.getAddress(w.owner ?? w.address),
378
+ totalSupply,
379
+ type: w.type,
380
+ });
381
+ }
382
+ }
383
+ }
384
+ catch (e) {
385
+ log.warn(`merklDynamic data - failed to handle direct alm data of pool ${pool.address} on ${NETWORK_LABELS[chainId]} - ${w.address}`);
386
+ i = prevI + 3;
387
+ }
388
+ }
389
+ /** Multi-hop ALMs */
390
+ for (const w of pool.alms.filter(a => a.target !== pool.address.toLowerCase())) {
391
+ const prevI = i;
392
+ try {
393
+ let totalSupply;
394
+ if (w.type === ALM.spNFT) {
395
+ totalSupply = BN2Number(spNFTInterface.decodeFunctionResult("getPoolInfo", result[i++].returnData)[5]);
396
+ }
397
+ else if (w.type === ALM.kpNFT) {
398
+ totalSupply = BN2Number(spNFTInterface.decodeFunctionResult("getPoolInfo", result[i++].returnData)[5]);
399
+ }
400
+ else if (w.type === ALM.Nitro) {
401
+ totalSupply = BN2Number(NitroInterface.decodeFunctionResult("totalDepositAmount", result[i++].returnData)[0]);
402
+ }
403
+ else if ([ALM.ConcentricStaker, ALM.GammaChef].includes(w.type)) {
404
+ totalSupply = BN2Number(ERC20Interface.decodeFunctionResult("balanceOf", result[i++].returnData)[0]);
405
+ }
406
+ else if (w.type === ALM.JonesTracker) {
407
+ totalSupply = BN2Number(JonesDoubleRewardTracker__factory.createInterface().decodeFunctionResult("totalStakedAmount", result[i++].returnData)[0]);
408
+ }
409
+ else {
410
+ totalSupply = BN2Number(ERC20Interface.decodeFunctionResult("totalSupply", result[i++].returnData)[0]);
411
+ }
412
+ const wrappedALM = almDetails.filter(a => utils.getAddress(a.almAddress) === utils.getAddress(w.target))[0];
413
+ if (!!wrappedALM && !!wrappedALM.totalSupply) {
414
+ const ratio = totalSupply / wrappedALM.totalSupply;
415
+ almDetails.push({
416
+ almAPR: 0,
417
+ // filled later on
418
+ almAddress: w.address,
419
+ almIdleBalance0: 0,
420
+ almIdleBalance1: 0,
421
+ almBalance0: ratio * wrappedALM.almBalance0,
422
+ almBalance1: ratio * wrappedALM.almBalance1,
423
+ almInRangeLiquidity: ratio * wrappedALM.almInRangeLiquidity,
424
+ almTVL: ratio * wrappedALM.almTVL,
425
+ almTotalLiquidity: ratio * wrappedALM.almTotalLiquidity,
426
+ forwarderType: Forwarder.CLAMM,
427
+ label: `${ALMMapping[pool.amm]?.[w.type]} ${w.address}`,
428
+ origin: w.type,
429
+ positions: wrappedALM.positions.map(pos => {
430
+ return {
431
+ ...pos,
432
+ balance0: ratio * pos.balance0,
433
+ balance1: ratio * pos.balance1,
434
+ inRangeLiquidity: ratio * pos.inRangeLiquidity,
435
+ totalLiquidity: ratio * pos.totalLiquidity,
436
+ tvl: ratio * pos.tvl,
437
+ };
438
+ }),
439
+ priority: wrappedALM.priority + 1,
440
+ sender: utils.getAddress(w.address),
441
+ target: w.target,
442
+ owner: w.owner ?? w.address,
443
+ totalSupply,
444
+ type: w.type,
445
+ });
446
+ }
447
+ else {
448
+ log.local(`Target ALM not found (${NETWORK_LABELS[chainId]}). Address: ${w.address}, Target: ${w.target}`);
449
+ }
450
+ }
451
+ catch {
452
+ log.warn(`merklDynamic data - failed to handle multi hop alm data of pool ${pool.address} on ${NETWORK_LABELS[chainId]} - ${w.address}`);
453
+ i = prevI + 1;
454
+ }
455
+ }
456
+ /** A51 Strategies */
457
+ for (const w of pool.alms.filter(a => a.type === ALM.A51)) {
458
+ const prevI = i;
459
+ const strategies = A51Strategies?.[pool.address.toLowerCase()]?.[w.address] ?? [];
460
+ let j = 0;
461
+ for (const strategy of strategies) {
462
+ j++;
463
+ const almPositionsWithAPIType = [];
464
+ let almTotalLiquidity = 0;
465
+ let almInRangeLiquidity = 0;
466
+ let almBalance0 = 0;
467
+ let almBalance1 = 0;
468
+ try {
469
+ // struct StrategyData {
470
+ // StrategyKey key; 0
471
+ // address owner; 1
472
+ // bytes actions; 2
473
+ // bytes actionStatus; 3
474
+ // bool isCompound; 4
475
+ // bool isPrivate; 5
476
+ // uint256 managementFee; 6
477
+ // uint256 performanceFee; 7
478
+ // Account account; 8
479
+ // }
480
+ const strategyAccount = A51Interface.decodeFunctionResult("strategies", result[i++].returnData)[8];
481
+ // struct Account {
482
+ // uint256 fee0; 0
483
+ // uint256 fee1; 1
484
+ // uint256 balance0; 2
485
+ // uint256 balance1; 3
486
+ // uint256 totalShares; 4
487
+ // uint128 uniswapLiquidity;
488
+ // uint256 feeGrowthInside0LastX128;
489
+ // uint256 feeGrowthInside1LastX128;
490
+ // uint256 feeGrowthOutside0LastX128;
491
+ // uint256 feeGrowthOutside1LastX128;
492
+ // }
493
+ const a51Positions = positions?.[pool.amm]?.filter(pos => pos.pool.id === pool.address.toLowerCase() &&
494
+ pos.owner === w.address.toLowerCase() &&
495
+ pos.tickLower === strategy.tickLower.toString() &&
496
+ pos.tickUpper === strategy.tickUpper.toString());
497
+ if (!!a51Positions) {
498
+ for (const position of a51Positions) {
499
+ const upperTick = Number.parseInt(position.tickUpper);
500
+ const lowerTick = Number.parseInt(position.tickLower);
501
+ const [amount0, amount1] = getAmountsForLiquidity(sqrtPrice, lowerTick, upperTick, BigNumber.from(position.liquidity));
502
+ const balance0 = BN2Number(amount0, decimalsToken0);
503
+ const balance1 = BN2Number(amount1, decimalsToken1);
504
+ const totalLiquidity = BN2Number(position.liquidity);
505
+ const inRangeLiquidity = balance0 > 0 && balance1 > 0 ? (BN2Number(position.liquidity) ?? 0) : 0;
506
+ almTotalLiquidity += totalLiquidity;
507
+ almInRangeLiquidity += inRangeLiquidity;
508
+ almBalance0 += balance0;
509
+ almBalance1 += balance1;
510
+ almPositionsWithAPIType.push({
511
+ balance0,
512
+ balance1,
513
+ id: position.id,
514
+ inRangeLiquidity,
515
+ lowerTick,
516
+ totalLiquidity,
517
+ tvl: priceToken0 * balance0 + priceToken1 * balance1,
518
+ upperTick,
519
+ });
520
+ }
521
+ }
522
+ if (!!ALMMapping[pool.amm] && w.type in ALMMapping[pool.amm]) {
523
+ almDetails.push({
524
+ almAPR: 0,
525
+ // filled later on
526
+ almAddress: utils.getAddress(w.address),
527
+ almBalance0,
528
+ almBalance1,
529
+ almIdleBalance0: 0,
530
+ almIdleBalance1: 0,
531
+ almInRangeLiquidity,
532
+ almTVL: almBalance0 * priceToken0 + almBalance1 * priceToken1,
533
+ almTotalLiquidity,
534
+ forwarderType: Forwarder.CLAMM,
535
+ label: `${ALMMapping[pool.amm]?.[w.type]} ${w.address} - ${strategy.id}`,
536
+ origin: w.type,
537
+ positions: almPositionsWithAPIType,
538
+ priority: 0,
539
+ sender: w.address,
540
+ target: w.target,
541
+ owner: w.owner ?? w.address,
542
+ totalSupply: strategyAccount[4].toString(),
543
+ type: w.type,
544
+ });
545
+ }
546
+ }
547
+ catch (e) {
548
+ log.warn(`merklDynamic data - failed to handle A51 data of pool ${pool.address} on ${NETWORK_LABELS[chainId]} - ${w.address}`);
549
+ i = prevI + j;
550
+ }
551
+ }
552
+ }
553
+ /** Iterate over distributions to compute APRs */
554
+ for (const campaign of campaigns.filter(campaign => campaign.mainParameter.toLowerCase() === pool.mainParameter.toLowerCase())) {
555
+ const c = campaign;
556
+ const amount = BN2Number(c.amount, c.campaignParameters.decimalsRewardToken);
557
+ const startTimestamp = BN2Number(c.startTimestamp, 0);
558
+ const endTimestamp = BN2Number(c.endTimestamp, 0);
559
+ const isLive = moment().unix() > startTimestamp && moment().unix() < endTimestamp;
560
+ const totalWeight = BN2Number(c.campaignParameters.weightFees, 4) +
561
+ BN2Number(c.campaignParameters.weightToken0, 4) +
562
+ BN2Number(c.campaignParameters.weightToken1, 4);
563
+ // Proportions in percentage
564
+ const propFees = (BN2Number(c.campaignParameters.weightFees, 4) / totalWeight) * 100;
565
+ const propToken0 = (BN2Number(c.campaignParameters.weightToken0, 4) / totalWeight) * 100;
566
+ const propToken1 = (BN2Number(c.campaignParameters.weightToken1, 4) / totalWeight) * 100;
567
+ let distributionMeanAPR = 0;
568
+ let blacklistedBalance0 = 0;
569
+ let blacklistedBalance1 = 0;
570
+ let blacklistedLiquidity = 0;
571
+ /**
572
+ * @dev In case there is a super amm handling some other amm lp positions,
573
+ * we only need to check the positions associated to this super amm subgraph
574
+ * in order to compute the APRs.
575
+ * Yet, the pool will still be labelled with the main amm
576
+ */
577
+ const amm = c.campaignParameters.whitelist.length > 0 && !!PriorityAMM?.[chainId]?.[c.campaignParameters.whitelist[0]]
578
+ ? PriorityAMM[chainId]?.[c.campaignParameters.whitelist[0]]
579
+ : pool.amm;
580
+ const aprs = {};
581
+ const aprBreakdowns = [];
582
+ /** Clear alm APRs */
583
+ const distributionForwarders = almDetails.map(x => ({ ...x }));
584
+ let priceRewardToken = 0;
585
+ if (isLive && c.campaignParameters.symbolRewardToken !== "aglaMerkl") {
586
+ // priceRewardToken = (await pricer.get({
587
+ // address: c.rewardToken,
588
+ // chainId: chainId,
589
+ // symbol: c.campaignParameters.symbolRewardToken,
590
+ // })) as number;
591
+ priceRewardToken = await TokenService.getRewardTokenPrice(campaign);
592
+ /**
593
+ * Handle whitelisted/blacklisted addresses to compute APR
594
+ */
595
+ if (c.campaignParameters.whitelist.length > 0) {
596
+ blacklistedBalance0 = poolBalanceToken0;
597
+ blacklistedBalance1 = poolBalanceToken1;
598
+ blacklistedLiquidity = poolTotalLiquidity;
599
+ // Get all beefy staker is whitelisted, get a list of all senders
600
+ let targetToMatch = "";
601
+ for (const alm of almDetails.filter(a => a.type === ALM.BeefyStaker)) {
602
+ if (c.campaignParameters.whitelist.includes(alm.sender)) {
603
+ targetToMatch = alm.target;
604
+ }
605
+ }
606
+ if (targetToMatch !== "") {
607
+ for (const alm of almDetails.filter(a => a.type === ALM.Beefy)) {
608
+ if (targetToMatch === alm.sender.toLowerCase()) {
609
+ c.campaignParameters.whitelist.push(alm.owner);
610
+ }
611
+ }
612
+ }
613
+ positions?.[pool.amm]?.forEach(pos => {
614
+ if (pos.pool.id === pool.address.toLowerCase() &&
615
+ (isWhitelisted(pos.owner, c.campaignParameters.whitelist) || isStrykeCampaign(pool.amm))) {
616
+ let [amount0, amount1] = [BigNumber.from(0), BigNumber.from(0)];
617
+ try {
618
+ [amount0, amount1] = getAmountsForLiquidity(sqrtPrice, Number.parseInt(pos.tickLower), Number.parseInt(pos.tickUpper), BigNumber.from(pos.liquidity));
619
+ }
620
+ catch {
621
+ log.warn(`merklDynamic data - failed to handle whitelisted positions of pool ${pool.address} on ${NETWORK_LABELS[chainId]} - ${pos.owner} ${pos.tickLower} ${pos.tickUpper} ${pos.liquidity}`);
622
+ }
623
+ blacklistedBalance0 -= BN2Number(amount0, decimalsToken0);
624
+ blacklistedBalance1 -= BN2Number(amount1, decimalsToken1);
625
+ if (c.campaignParameters.isOutOfRangeIncentivized
626
+ ? BN2Number(amount0, decimalsToken0) > 0 || BN2Number(amount1, decimalsToken1) > 0
627
+ : BN2Number(amount0, decimalsToken0) > 0 && BN2Number(amount1, decimalsToken1) > 0)
628
+ blacklistedLiquidity -= BN2Number(pos.liquidity);
629
+ }
630
+ // Handling the case of a ALM of priority 2 being whitelisted
631
+ else if (pos.pool.id === pool.address.toLowerCase() &&
632
+ almDetails.map(a => a.target.toLowerCase()).includes(pos.owner.toLowerCase()) // If pos owner is an ALM
633
+ ) {
634
+ // If we're in this branch it means the ALM owning the position is not whitelisted
635
+ const almHolding = almDetails.filter(a => a.almAddress.toLowerCase() === pos.owner.toLowerCase())[0];
636
+ for (const whitelistedAddress of c.campaignParameters.whitelist) {
637
+ const forwarderIndex = distributionForwarders.findIndex(f => utils.getAddress(f.almAddress) === utils.getAddress(whitelistedAddress));
638
+ if (forwarderIndex !== -1 &&
639
+ almHolding.almAddress.toLowerCase() ===
640
+ distributionForwarders[forwarderIndex].target.toLowerCase()) {
641
+ // If we are here it means one of the ALM whitelisted is a "child" of the ALM holding the position
642
+ const childALM = distributionForwarders[forwarderIndex];
643
+ let [amount0, amount1] = [BigNumber.from(0), BigNumber.from(0)];
644
+ try {
645
+ [amount0, amount1] = getAmountsForLiquidity(sqrtPrice, Number.parseInt(pos.tickLower), Number.parseInt(pos.tickUpper), BigNumber.from(pos.liquidity));
646
+ }
647
+ catch {
648
+ log.warn(`merklDynamic data - failed to handle whitelisted positions of pool ${pool.address} on ${NETWORK_LABELS[chainId]} - ${pos.owner} ${pos.tickLower} ${pos.tickUpper} ${pos.liquidity}`);
649
+ }
650
+ blacklistedBalance0 -=
651
+ (BN2Number(amount0, decimalsToken0) * childALM.almBalance0) / almHolding.almBalance0;
652
+ blacklistedBalance1 -=
653
+ (BN2Number(amount1, decimalsToken1) * childALM.almBalance1) / almHolding.almBalance1;
654
+ if (c.campaignParameters.isOutOfRangeIncentivized
655
+ ? BN2Number(amount0, decimalsToken0) > 0 || BN2Number(amount1, decimalsToken1) > 0
656
+ : BN2Number(amount0, decimalsToken0) > 0 && BN2Number(amount1, decimalsToken1) > 0)
657
+ blacklistedLiquidity -=
658
+ (BN2Number(pos.liquidity) * childALM.almTotalLiquidity) / almHolding.almTotalLiquidity;
659
+ }
660
+ }
661
+ }
662
+ });
663
+ }
664
+ else if (c.campaignParameters.blacklist.length > 0) {
665
+ blacklistedBalance0 = 0;
666
+ blacklistedBalance1 = 0;
667
+ blacklistedLiquidity = 0;
668
+ for (const blacklistedAddress of c.campaignParameters.blacklist) {
669
+ const blackAddressPositions = positions?.[amm]?.filter(pos => pos.pool.id === pool.address.toLowerCase() && pos.owner === blacklistedAddress.toLowerCase());
670
+ if (!!blackAddressPositions) {
671
+ for (const position of blackAddressPositions) {
672
+ const [amount0, amount1] = getAmountsForLiquidity(sqrtPrice, Number.parseInt(position.tickLower), Number.parseInt(position.tickUpper), BigNumber.from(position.liquidity));
673
+ blacklistedBalance0 += BN2Number(amount0, decimalsToken0);
674
+ blacklistedBalance1 += BN2Number(amount1, decimalsToken1);
675
+ if (BN2Number(amount0, decimalsToken0) > 0 && BN2Number(amount1, decimalsToken1) > 0)
676
+ blacklistedLiquidity += BN2Number(position.liquidity);
677
+ }
678
+ }
679
+ }
680
+ }
681
+ /** Yearly rewards in $ */
682
+ const yearlyToken0Rewards = (propToken0 * priceRewardToken * amount * (365 * 24 * 3_600)) / (endTimestamp - startTimestamp);
683
+ const yearlyToken1Rewards = (propToken1 * priceRewardToken * amount * (365 * 24 * 3_600)) / (endTimestamp - startTimestamp);
684
+ const yearlyFeeRewards = (propFees * priceRewardToken * amount * (365 * 24 * 3_600)) / (endTimestamp - startTimestamp);
685
+ let poolAPRkey = "";
686
+ // /**
687
+ // * @notice Stryke users receive rewards with respect to their LP positions (they hold through
688
+ // * Stryke contracts and the `used liquidity` hold in the Stryke option market contracts
689
+ // */
690
+ // if (amm === AMM.Stryke || amm === AMM.StrykePCS) {
691
+ // try {
692
+ // poolBalanceToken0 +=
693
+ // BN2Number(
694
+ // await Erc20__factory.connect(c.campaignParameters.token0, providers[chainId]).balanceOf(
695
+ // DOPEX_OPTION_MARKET[pool.address.toLowerCase()]
696
+ // ),
697
+ // c.campaignParameters.decimalsToken0
698
+ // ) / 2;
699
+ // poolBalanceToken1 +=
700
+ // BN2Number(
701
+ // await Erc20__factory.connect(c.campaignParameters.token1, providers[chainId]).balanceOf(
702
+ // DOPEX_OPTION_MARKET[pool.address.toLowerCase()]
703
+ // ),
704
+ // c.campaignParameters.decimalsToken1
705
+ // ) / 2;
706
+ // } catch {
707
+ // log.error(
708
+ // "clamm dynamic data fetching",
709
+ // `failed to handle dopex option market - ${pool.address}`
710
+ // );
711
+ // }
712
+ // }
713
+ /**
714
+ * General APR (@notice potentially with a boost)
715
+ */
716
+ let poolBalanceToken0WithoutBlacklist = poolBalanceToken0 - (blacklistedBalance0 ?? 0);
717
+ poolBalanceToken0WithoutBlacklist = !!poolBalanceToken0WithoutBlacklist
718
+ ? poolBalanceToken0WithoutBlacklist
719
+ : 0.00001;
720
+ let poolBalanceToken1WithoutBlacklist = poolBalanceToken1 - (blacklistedBalance1 ?? 0);
721
+ poolBalanceToken1WithoutBlacklist = !!poolBalanceToken1WithoutBlacklist
722
+ ? poolBalanceToken1WithoutBlacklist
723
+ : 0.00001;
724
+ const poolLiquidityWithoutBlacklist = poolTotalLiquidity - (blacklistedLiquidity ?? 0);
725
+ const tvl = isStrykeCampaign(amm)
726
+ ? (await axios.get(`https://api.stryke.xyz/clamm/stats/tvl/${pool.address}?chainId=${chainId}`))
727
+ .data
728
+ : poolBalanceToken0WithoutBlacklist * priceToken0 + poolBalanceToken1WithoutBlacklist * priceToken1;
729
+ distributionMeanAPR = (yearlyToken0Rewards + yearlyToken1Rewards + yearlyFeeRewards) / tvl;
730
+ distributionMeanAPR = !distributionMeanAPR || Number.isNaN(distributionMeanAPR) ? 0 : distributionMeanAPR;
731
+ /**
732
+ * @dev We cannot include a whitelisted distrib apr into the mean APR
733
+ */
734
+ if (c.campaignParameters.whitelist.length === 0) {
735
+ poolAPRkey = "Average APR (rewards / pool TVL)";
736
+ if (!aprs[poolAPRkey])
737
+ aprs[poolAPRkey] = 0;
738
+ aprs[poolAPRkey] += distributionMeanAPR;
739
+ // @Hugo wip: new way to structure aprBreakdowns
740
+ aprBreakdowns.push({
741
+ address: pool.address,
742
+ value: distributionMeanAPR,
743
+ type: EAprBreakdownType.AVERAGE,
744
+ label: "Average APR (rewards / pool TVL)",
745
+ });
746
+ // APR per token
747
+ poolAPRkey = `APR for holding ${c.campaignParameters.symbolToken0} in pool`;
748
+ if (!aprs[poolAPRkey])
749
+ aprs[poolAPRkey] = 0;
750
+ aprs[poolAPRkey] += yearlyToken0Rewards / (poolBalanceToken0WithoutBlacklist * priceToken0);
751
+ // @Hugo wip: new way to structure aprBreakdowns
752
+ aprBreakdowns.push({
753
+ address: pool.address,
754
+ value: yearlyToken0Rewards / (poolBalanceToken0WithoutBlacklist * priceToken0),
755
+ type: EAprBreakdownType.TOKEN1,
756
+ label: c.campaignParameters.symbolToken0,
757
+ });
758
+ poolAPRkey = `APR for holding ${c.campaignParameters.symbolToken1} in pool`;
759
+ if (!aprs[poolAPRkey])
760
+ aprs[poolAPRkey] = 0;
761
+ aprs[poolAPRkey] += yearlyToken1Rewards / (poolBalanceToken1WithoutBlacklist * priceToken1);
762
+ // @Hugo wip: new way to structure aprBreakdowns
763
+ aprBreakdowns.push({
764
+ address: pool.address,
765
+ value: yearlyToken1Rewards / (poolBalanceToken1WithoutBlacklist * priceToken1),
766
+ type: EAprBreakdownType.TOKEN2,
767
+ label: c.campaignParameters.symbolToken1,
768
+ });
769
+ }
770
+ else {
771
+ for (const whitelistedAddress of c.campaignParameters.whitelist) {
772
+ const forwarderIndex = distributionForwarders.findIndex(f => utils.getAddress(f.almAddress) === utils.getAddress(whitelistedAddress));
773
+ const poolAPRkey = `Whitelisted campaign on ${ammName(amm)} via address ${shortenAddress(c.campaignParameters.whitelist[0])} Average APR`;
774
+ if (!aprs[poolAPRkey])
775
+ aprs[poolAPRkey] = 0;
776
+ // Account for idle liquidity
777
+ if (forwarderIndex > -1) {
778
+ // @Hugo wip: new way to structure aprBreakdowns
779
+ const breakdownWl = {
780
+ address: c.campaignParameters.whitelist[0],
781
+ value: 0,
782
+ type: EAprBreakdownType.WHITELIST,
783
+ label: ammName(amm),
784
+ };
785
+ if (distributionForwarders[forwarderIndex].priority === 2) {
786
+ distributionMeanAPR =
787
+ (yearlyToken0Rewards + yearlyToken1Rewards + yearlyFeeRewards) /
788
+ (tvl +
789
+ distributionForwarders[forwarderIndex].almBalance0 * priceToken0 +
790
+ distributionForwarders[forwarderIndex].almBalance1 * priceToken1);
791
+ }
792
+ else {
793
+ distributionMeanAPR =
794
+ (yearlyToken0Rewards + yearlyToken1Rewards + yearlyFeeRewards) /
795
+ (tvl +
796
+ distributionForwarders[forwarderIndex].almIdleBalance0 * priceToken0 +
797
+ distributionForwarders[forwarderIndex].almIdleBalance1 * priceToken1);
798
+ }
799
+ distributionMeanAPR =
800
+ !distributionMeanAPR || Number.isNaN(distributionMeanAPR) ? 0 : distributionMeanAPR;
801
+ // @Hugo wip: new way to structure aprBreakdowns
802
+ breakdownWl.value = distributionMeanAPR;
803
+ aprBreakdowns.push(breakdownWl);
804
+ }
805
+ }
806
+ aprs[poolAPRkey] += distributionMeanAPR;
807
+ }
808
+ /**
809
+ * ALM APRs
810
+ * @notice given a campaign
811
+ * */
812
+ distributionForwarders.forEach((alm, index) => {
813
+ const targetForwarder = distributionForwarders.filter(f => f.almAddress.toLowerCase() === alm.target.toLowerCase())?.[0];
814
+ // @Hugo wip: new way to structure aprBreakdowns
815
+ const aprsBreakdown = getForwarderAprbreakDown(distributionForwarders, alm, c, pool, yearlyToken0Rewards, yearlyToken1Rewards, yearlyFeeRewards, poolBalanceToken0WithoutBlacklist, poolBalanceToken1WithoutBlacklist, poolLiquidityWithoutBlacklist, tvl, distributionMeanAPR, index, chainId, amm);
816
+ // @Hugo wip: new way to structure aprBreakdowns
817
+ aprsBreakdown && aprBreakdowns.push(aprsBreakdown);
818
+ const isALMWhitelisted = c.campaignParameters.whitelist.length > 0
819
+ ? isStrykeCampaign(pool.amm)
820
+ ? true
821
+ : isWhitelisted(alm.sender, c.campaignParameters.whitelist) ||
822
+ isWhitelisted(alm.almAddress, c.campaignParameters.whitelist) ||
823
+ isWhitelisted(!!alm?.owner ? alm.owner : "", c.campaignParameters.whitelist) ||
824
+ isWhitelisted(!!alm?.target ? alm.target : "", c.campaignParameters.whitelist) ||
825
+ (!!targetForwarder?.owner &&
826
+ isWhitelisted(targetForwarder?.owner, c.campaignParameters.whitelist))
827
+ : true;
828
+ const isBlacklistedByCampaign = isBlacklisted(alm.sender, c.campaignParameters.blacklist) ||
829
+ isBlacklisted(alm.almAddress, c.campaignParameters.blacklist) ||
830
+ (!!alm?.target && isBlacklisted(alm?.target, c.campaignParameters.blacklist)) ||
831
+ !isALMWhitelisted;
832
+ if (!isBlacklistedByCampaign && !!alm.almTVL && alm.almTVL > 0) {
833
+ try {
834
+ poolAPRkey = `${almName(alm.origin)} ${alm.almAddress}`;
835
+ if (!aprs[poolAPRkey])
836
+ aprs[poolAPRkey] = 0;
837
+ // Token 0 APR
838
+ const almToken0APR = (yearlyToken0Rewards * (alm?.almBalance0 ?? 0 - alm?.almIdleBalance0 ?? 0)) /
839
+ poolBalanceToken0WithoutBlacklist /
840
+ alm.almTVL;
841
+ aprs[poolAPRkey] += almToken0APR;
842
+ // Token 1 APR
843
+ const almToken1APR = (yearlyToken1Rewards * (alm?.almBalance1 ?? 0 - alm?.almIdleBalance1 ?? 0)) /
844
+ poolBalanceToken1WithoutBlacklist /
845
+ alm.almTVL;
846
+ ((alm.almBalance1 / (alm?.almBalance1 ?? 0 + alm?.almIdleBalance1 ?? 0)) *
847
+ alm.almBalance1 *
848
+ yearlyToken1Rewards) /
849
+ poolBalanceToken1WithoutBlacklist /
850
+ alm.almTVL;
851
+ aprs[poolAPRkey] += almToken1APR;
852
+ // Fee APR
853
+ const almFeeAPR = (yearlyFeeRewards * (alm?.almInRangeLiquidity ?? 0)) / poolLiquidityWithoutBlacklist / alm.almTVL;
854
+ aprs[poolAPRkey] += almFeeAPR;
855
+ if (isStrykeCampaign(amm)) {
856
+ // computation is less precise here as we don't have the details of balances
857
+ aprs[poolAPRkey] = (yearlyToken0Rewards + yearlyToken1Rewards + yearlyFeeRewards) / tvl;
858
+ }
859
+ /** Fix to tackle discrepancies in the APRs when there is a whitelist */
860
+ if ((c.campaignParameters.whitelist?.length === 1 &&
861
+ (isWhitelisted(alm.sender, c.campaignParameters.whitelist) ||
862
+ isWhitelisted(alm.almAddress, c.campaignParameters.whitelist) ||
863
+ isWhitelisted(!!alm?.target ? alm.target : "", c.campaignParameters.whitelist) ||
864
+ isWhitelisted(!!alm?.owner ? alm.owner : "", c.campaignParameters.whitelist))) ||
865
+ (!!targetForwarder?.owner &&
866
+ isWhitelisted(targetForwarder?.owner, c.campaignParameters.whitelist))) {
867
+ if (aprs[poolAPRkey] < distributionMeanAPR || !aprs[poolAPRkey] || aprs[poolAPRkey] > 1e12) {
868
+ aprs[poolAPRkey] = distributionMeanAPR;
869
+ }
870
+ }
871
+ distributionForwarders[index].almAPR = aprs[poolAPRkey];
872
+ }
873
+ catch (e) {
874
+ log.error("CLAMMDynamicData", `failed to compute ALM APR for ${alm.almAddress} (sender ${alm.sender}) on ${NETWORK_LABELS[chainId]}: ${e}`);
875
+ }
876
+ }
877
+ });
878
+ }
879
+ dynamicData.push({
880
+ ...campaign,
881
+ amm: pool.amm,
882
+ ammAlgo: AMMAlgorithmMapping[pool.amm],
883
+ ammAlgoName: AMMAlgorithm[AMMAlgorithmMapping[pool.amm]],
884
+ ammName: AMM[pool.amm],
885
+ apr: distributionMeanAPR,
886
+ aprs,
887
+ aprBreakdowns,
888
+ blacklistedBalance0,
889
+ blacklistedBalance1,
890
+ blacklistedLiquidity,
891
+ forwarders: distributionForwarders,
892
+ isLive,
893
+ isMock: c.campaignParameters.symbolRewardToken === "aglaMerkl",
894
+ poolBalanceToken0,
895
+ poolBalanceToken1,
896
+ poolTotalLiquidity,
897
+ symbolToken0,
898
+ symbolToken1,
899
+ tick: getTickAtSqrtRatio(JSBI.BigInt(sqrtPrice)),
900
+ priceRewardToken: priceRewardToken,
901
+ tvl: isStrykeCampaign(pool.amm)
902
+ ? (await axios.get(`https://api.stryke.xyz/clamm/stats/tvl/${pool.address}?chainId=${chainId}`))
903
+ .data
904
+ : poolBalanceToken0 * priceToken0 + poolBalanceToken1 * priceToken1,
905
+ });
906
+ }
907
+ }
908
+ }
909
+ }
910
+ return dynamicData;
911
+ }
912
+ }
913
+ function getForwarderAprbreakDown(distributionForwarders, alm, campaign, pool, yearlyToken0Rewards, yearlyToken1Rewards, yearlyFeeRewards, poolBalanceToken0WithoutBlacklist, poolBalanceToken1WithoutBlacklist, poolLiquidityWithoutBlacklist, tvl, distributionMeanAPR, index, chainId, amm) {
914
+ if (!distributionForwarders)
915
+ return null;
916
+ let aprBreakdowns = null;
917
+ const targetForwarder = distributionForwarders.filter(f => f.almAddress.toLowerCase() === alm.target.toLowerCase())?.[0];
918
+ const isALMWhitelisted = campaign.campaignParameters.whitelist.length > 0
919
+ ? isStrykeCampaign(pool.amm)
920
+ ? true
921
+ : isWhitelisted(alm.sender, campaign.campaignParameters.whitelist) ||
922
+ isWhitelisted(alm.almAddress, campaign.campaignParameters.whitelist) ||
923
+ isWhitelisted(!!alm?.owner ? alm.owner : "", campaign.campaignParameters.whitelist) ||
924
+ isWhitelisted(!!alm?.target ? alm.target : "", campaign.campaignParameters.whitelist) ||
925
+ (!!targetForwarder?.owner && isWhitelisted(targetForwarder?.owner, campaign.campaignParameters.whitelist))
926
+ : true;
927
+ const isBlacklistedByCampaign = isBlacklisted(alm.sender, campaign.campaignParameters.blacklist) ||
928
+ isBlacklisted(alm.almAddress, campaign.campaignParameters.blacklist) ||
929
+ (!!alm?.target && isBlacklisted(alm?.target, campaign.campaignParameters.blacklist)) ||
930
+ !isALMWhitelisted;
931
+ if (!isBlacklistedByCampaign && !!alm.almTVL && alm.almTVL > 0) {
932
+ try {
933
+ // Token 0 APR
934
+ const almToken0APR = (yearlyToken0Rewards * (alm?.almBalance0 ?? 0 - alm?.almIdleBalance0 ?? 0)) /
935
+ poolBalanceToken0WithoutBlacklist /
936
+ alm.almTVL;
937
+ // Token 1 APR
938
+ const almToken1APR = (yearlyToken1Rewards * (alm?.almBalance1 ?? 0 - alm?.almIdleBalance1 ?? 0)) /
939
+ poolBalanceToken1WithoutBlacklist /
940
+ alm.almTVL;
941
+ // Fee APR
942
+ const almFeeAPR = (yearlyFeeRewards * (alm?.almInRangeLiquidity ?? 0)) / poolLiquidityWithoutBlacklist / alm.almTVL;
943
+ let aprValue = almToken0APR + almToken1APR + almFeeAPR;
944
+ // computation is less precise here as we don't have the details of balances
945
+ if (isStrykeCampaign(amm))
946
+ aprValue = (yearlyToken0Rewards + yearlyToken1Rewards + yearlyFeeRewards) / tvl;
947
+ /** Fix to tackle discrepancies in the APRs when there is a whitelist */
948
+ if ((campaign.campaignParameters.whitelist?.length === 1 &&
949
+ (isWhitelisted(alm.sender, campaign.campaignParameters.whitelist) ||
950
+ isWhitelisted(alm.almAddress, campaign.campaignParameters.whitelist) ||
951
+ isWhitelisted(!!alm?.target ? alm.target : "", campaign.campaignParameters.whitelist) ||
952
+ isWhitelisted(!!alm?.owner ? alm.owner : "", campaign.campaignParameters.whitelist))) ||
953
+ (!!targetForwarder?.owner && isWhitelisted(targetForwarder?.owner, campaign.campaignParameters.whitelist))) {
954
+ if (aprValue < distributionMeanAPR || !aprValue || aprValue > 1e12)
955
+ aprValue = distributionMeanAPR;
956
+ }
957
+ aprBreakdowns = {
958
+ address: pool.address,
959
+ value: aprValue,
960
+ type: EAprBreakdownType.FORWARDER,
961
+ label: almName(alm.origin),
962
+ };
963
+ distributionForwarders[index].almAPR = aprValue; // @Hugo wip: new way to structure aprBreakdowns + check this
964
+ }
965
+ catch (e) {
966
+ log.error("CLAMMDynamicData", `failed to compute ALM APR for ${alm.almAddress} (sender ${alm.sender}) on ${NETWORK_LABELS[chainId]}: ${e}`);
967
+ }
968
+ }
969
+ return aprBreakdowns;
970
+ }