@merkl/api 0.10.129 → 0.10.131

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 (361) hide show
  1. package/dist/database/api/.generated/default.js +1 -0
  2. package/dist/database/api/.generated/edge.js +609 -0
  3. package/dist/database/api/.generated/index-browser.js +586 -0
  4. package/dist/database/api/.generated/index.js +638 -0
  5. package/dist/database/api/.generated/runtime/edge-esm.js +31 -0
  6. package/dist/database/api/.generated/runtime/edge.js +31 -0
  7. package/dist/database/api/.generated/runtime/index-browser.js +13 -0
  8. package/dist/database/api/.generated/runtime/library.js +143 -0
  9. package/dist/database/api/.generated/runtime/react-native.js +80 -0
  10. package/dist/database/api/.generated/runtime/wasm.js +32 -0
  11. package/dist/database/api/.generated/wasm.js +586 -0
  12. package/dist/database/api/seeder/resources/protocol.js +341 -0
  13. package/dist/database/engine/.generated/default.js +1 -0
  14. package/dist/database/engine/.generated/edge.js +438 -0
  15. package/dist/database/engine/.generated/index-browser.js +415 -0
  16. package/dist/database/engine/.generated/index.js +467 -0
  17. package/dist/database/engine/.generated/runtime/edge-esm.js +31 -0
  18. package/dist/database/engine/.generated/runtime/edge.js +31 -0
  19. package/dist/database/engine/.generated/runtime/index-browser.js +13 -0
  20. package/dist/database/engine/.generated/runtime/library.js +143 -0
  21. package/dist/database/engine/.generated/runtime/react-native.js +80 -0
  22. package/dist/database/engine/.generated/runtime/wasm.js +32 -0
  23. package/dist/database/engine/.generated/wasm.js +415 -0
  24. package/dist/src/backgroundJobs/index.js +44 -0
  25. package/dist/src/backgroundJobs/jobs/campaignsCacheUpdater.js +160 -0
  26. package/dist/src/backgroundJobs/jobs/health.js +15 -0
  27. package/dist/src/backgroundJobs/jobs/opportunityUpdater.js +63 -0
  28. package/dist/src/backgroundJobs/jobs/priceUpdater.js +16 -0
  29. package/dist/src/backgroundJobs/jobs/sync.js +33 -0
  30. package/dist/src/cache/declaration.js +146 -0
  31. package/dist/src/cache/index.js +152 -0
  32. package/dist/src/cache/redis.js +49 -0
  33. package/dist/src/constants.js +119 -0
  34. package/dist/src/entities/campaign.js +134 -0
  35. package/dist/src/entities/opportunity.js +549 -0
  36. package/dist/src/errors/BadRequest.error.js +7 -0
  37. package/dist/src/errors/Conflict.error.js +7 -0
  38. package/dist/src/errors/HttpError.js +11 -0
  39. package/dist/src/errors/NotFound.error.js +7 -0
  40. package/dist/src/errors/Opportunity.error.js +11 -0
  41. package/dist/src/errors/Unauthorized.error.js +7 -0
  42. package/dist/src/errors/index.js +5 -0
  43. package/dist/src/guards/BackOffice.guard.js +10 -0
  44. package/dist/src/guards/Engine.guard.js +10 -0
  45. package/dist/src/guards/TokenAuth.guard.js +10 -0
  46. package/dist/src/hooks/checkQueryAddressValidity.js +7 -0
  47. package/dist/src/hooks/checkQueryChainIdValidity.js +7 -0
  48. package/dist/src/index.js +79 -0
  49. package/dist/src/internal/controllers/endingCampaigns.js +41 -0
  50. package/dist/src/internal/controllers/unclaimed.js +36 -0
  51. package/dist/src/internal/index.js +30 -0
  52. package/dist/src/libs/campaigns/campaignTypes/AjnaDynamicData.js +111 -0
  53. package/dist/src/libs/campaigns/campaignTypes/BadgerDynamicData.js +93 -0
  54. package/dist/src/libs/campaigns/campaignTypes/CLAMMDynamicData.js +942 -0
  55. package/dist/src/libs/campaigns/campaignTypes/CompoundDynamicData.js +90 -0
  56. package/dist/src/libs/campaigns/campaignTypes/DolomiteDynamicData.js +60 -0
  57. package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicData.js +162 -0
  58. package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicDataRefacto.js +159 -0
  59. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/eulerVaultNames.js +13 -0
  60. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/factoryFinder.js +29 -0
  61. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/getBlacklistedSupply.js +22 -0
  62. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/metamorphoTvl.js +35 -0
  63. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/spliceTVL.js +21 -0
  64. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType.js +106 -0
  65. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/AaveProcessor.js +26 -0
  66. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/AssetProcessor.js +47 -0
  67. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/AuraProcessor.js +103 -0
  68. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/BalancerGaugeProcessor.js +83 -0
  69. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/BalancerPoolProcessor.js +99 -0
  70. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/BeefyProcessor.js +51 -0
  71. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/CompoundProcessor.js +36 -0
  72. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/EnzymeProcessor.js +51 -0
  73. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/EulerBorrowProcessor.js +46 -0
  74. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/EulerLendProcessor.js +47 -0
  75. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/FluidProcessor.js +36 -0
  76. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/FraxProcessor.js +41 -0
  77. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/GearboxProcessor.js +44 -0
  78. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/GenericProcessor.js +239 -0
  79. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/MetamorphoProcessor.js +43 -0
  80. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/PendleProcessor.js +31 -0
  81. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/RadiantProcessor.js +58 -0
  82. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/RfxProcessor.js +64 -0
  83. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/SpliceProcessor.js +35 -0
  84. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/SturdySiloProcessor.js +37 -0
  85. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/TemplateProcessor.js +40 -0
  86. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/TorosProcessor.js +33 -0
  87. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/UniswapProcessor.js +48 -0
  88. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/WoofiProcessor.js +40 -0
  89. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/curveProcessor.js +68 -0
  90. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/processorMapping.js +77 -0
  91. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesPrices.js +583 -0
  92. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesPricesRefactoFinal.js +24 -0
  93. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1.js +1209 -0
  94. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1RefactoFinal.js +194 -0
  95. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound2.js +645 -0
  96. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound2RefactoFinal.js +22 -0
  97. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound3.js +392 -0
  98. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound3RefactoFinal.js +22 -0
  99. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound4.js +323 -0
  100. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound4RefactoFinal.js +22 -0
  101. package/dist/src/libs/campaigns/campaignTypes/ERC20_SNAPSHOTDynamicData.js +38 -0
  102. package/dist/src/libs/campaigns/campaignTypes/EulerDynamicData.js +165 -0
  103. package/dist/src/libs/campaigns/campaignTypes/JSON_AIRDROPDynamicData.js +19 -0
  104. package/dist/src/libs/campaigns/campaignTypes/MORPHODynamicData.js +120 -0
  105. package/dist/src/libs/campaigns/campaignTypes/RadiantDynamicData.js +112 -0
  106. package/dist/src/libs/campaigns/campaignTypes/SILODynamicData.js +113 -0
  107. package/dist/src/libs/campaigns/campaignsDynamicData.js +83 -0
  108. package/dist/src/libs/campaigns/campaignsDynamicDataRefacto.js +78 -0
  109. package/dist/src/libs/campaigns/getCampaigns.js +18 -0
  110. package/dist/src/libs/campaigns/utils/fetchA51Strategies.js +44 -0
  111. package/dist/src/libs/campaigns/utils/fetchClamInfo.js +27 -0
  112. package/dist/src/libs/campaigns/utils/fetchLogs.js +91 -0
  113. package/dist/src/libs/campaigns/utils/getCompV2ForksVaults.js +122 -0
  114. package/dist/src/libs/campaigns/utils/getContractCreationBlock.js +44 -0
  115. package/dist/src/libs/campaigns/utils/getDolomiteMarkets.js +50 -0
  116. package/dist/src/libs/campaigns/utils/getEulerV2Vaults.js +87 -0
  117. package/dist/src/libs/campaigns/utils/getLastEligibilityRatio.js +56 -0
  118. package/dist/src/libs/computeFee.js +34 -0
  119. package/dist/src/libs/custom/twtParticipants.js +54 -0
  120. package/dist/src/libs/deprecated-merklv3/index.js +184 -0
  121. package/dist/src/libs/getTokensList.js +37 -0
  122. package/dist/src/libs/merklChainData.js +129 -0
  123. package/dist/src/libs/parse/marketsWithCache.js +8 -0
  124. package/dist/src/libs/positions/ajna/index.js +107 -0
  125. package/dist/src/libs/positions/badger/index.js +79 -0
  126. package/dist/src/libs/positions/clamm/index.js +419 -0
  127. package/dist/src/libs/positions/clamm/thegraph/fetchAlmPositions.js +35 -0
  128. package/dist/src/libs/positions/clamm/thegraph/fetchAmmPositions.js +35 -0
  129. package/dist/src/libs/positions/clamm/thegraph/fetchFarmedPositions.js +44 -0
  130. package/dist/src/libs/positions/clamm/thegraph/index.js +162 -0
  131. package/dist/src/libs/positions/compound/index.js +93 -0
  132. package/dist/src/libs/positions/dolomite/index.js +49 -0
  133. package/dist/src/libs/positions/erc20/index.js +55 -0
  134. package/dist/src/libs/positions/euler/index.js +57 -0
  135. package/dist/src/libs/positions/index.js +48 -0
  136. package/dist/src/libs/positions/morpho/index.js +177 -0
  137. package/dist/src/libs/positions/prepareFetch.js +339 -0
  138. package/dist/src/libs/positions/silo/index.js +67 -0
  139. package/dist/src/libs/positions/types.js +1 -0
  140. package/dist/src/libs/reports/campaignReport.js +37 -0
  141. package/dist/src/libs/reports/mainParameterRewards.js +48 -0
  142. package/dist/src/libs/rewards/userRewards.js +154 -0
  143. package/dist/src/libs/staticCampaigns.js +10 -0
  144. package/dist/src/libs/tokens/balances.js +126 -0
  145. package/dist/src/libs/tokens/tokenInfo.js +22 -0
  146. package/dist/src/modules/v4/accounting/accounting.controller.js +66 -0
  147. package/dist/src/modules/v4/accounting/accounting.model.js +32 -0
  148. package/dist/src/modules/v4/accounting/accounting.repository.js +100 -0
  149. package/dist/src/modules/v4/accounting/accounting.service.js +78 -0
  150. package/dist/src/modules/v4/accounting/index.js +3 -0
  151. package/dist/src/modules/v4/apr/apr.controller.js +1 -0
  152. package/dist/src/modules/v4/apr/apr.model.js +1 -0
  153. package/dist/src/modules/v4/apr/apr.repository.js +1 -0
  154. package/dist/src/modules/v4/apr/apr.service.js +40 -0
  155. package/dist/src/modules/v4/apr/index.js +2 -0
  156. package/dist/src/modules/v4/blacklist/blacklist.controller.js +45 -0
  157. package/dist/src/modules/v4/blacklist/blacklist.model.js +13 -0
  158. package/dist/src/modules/v4/blacklist/blacklist.repository.js +56 -0
  159. package/dist/src/modules/v4/blacklist/blacklist.service.js +24 -0
  160. package/dist/src/modules/v4/blacklist/index.js +3 -0
  161. package/dist/src/modules/v4/cache/cache.model.js +14 -0
  162. package/dist/src/modules/v4/cache/cache.repository.js +10 -0
  163. package/dist/src/modules/v4/cache/cache.service.js +44 -0
  164. package/dist/src/modules/v4/cache/index.js +1 -0
  165. package/dist/src/modules/v4/campaign/campaign.controller.js +56 -0
  166. package/dist/src/modules/v4/campaign/campaign.model.js +54 -0
  167. package/dist/src/modules/v4/campaign/campaign.repository.js +346 -0
  168. package/dist/src/modules/v4/campaign/campaign.service.js +203 -0
  169. package/dist/src/modules/v4/campaign/index.js +3 -0
  170. package/dist/src/modules/v4/chain/chain.controller.js +40 -0
  171. package/dist/src/modules/v4/chain/chain.model.js +17 -0
  172. package/dist/src/modules/v4/chain/chain.repository.js +64 -0
  173. package/dist/src/modules/v4/chain/chain.service.js +42 -0
  174. package/dist/src/modules/v4/chain/index.js +3 -0
  175. package/dist/src/modules/v4/dynamicData/dynamicData.controller.js +19 -0
  176. package/dist/src/modules/v4/dynamicData/dynamicData.model.js +6 -0
  177. package/dist/src/modules/v4/dynamicData/dynamicData.repository.js +1 -0
  178. package/dist/src/modules/v4/dynamicData/dynamicData.service.js +49 -0
  179. package/dist/src/modules/v4/dynamicData/index.js +3 -0
  180. package/dist/src/modules/v4/enso/enso.model.js +108 -0
  181. package/dist/src/modules/v4/enso/enso.service.js +46 -0
  182. package/dist/src/modules/v4/explorer/explorer.model.js +2 -0
  183. package/dist/src/modules/v4/explorer/explorer.repository.js +23 -0
  184. package/dist/src/modules/v4/explorer/explorer.service.js +24 -0
  185. package/dist/src/modules/v4/explorer/index.js +1 -0
  186. package/dist/src/modules/v4/index.js +4 -0
  187. package/dist/src/modules/v4/merklRoot/index.js +3 -0
  188. package/dist/src/modules/v4/merklRoot/merklRoot.controller.js +19 -0
  189. package/dist/src/modules/v4/merklRoot/merklRoot.model.js +6 -0
  190. package/dist/src/modules/v4/merklRoot/merklRoot.repository.js +31 -0
  191. package/dist/src/modules/v4/merklRoot/merklRoot.service.js +38 -0
  192. package/dist/src/modules/v4/opportunity/index.js +3 -0
  193. package/dist/src/modules/v4/opportunity/opportunity.controller.js +69 -0
  194. package/dist/src/modules/v4/opportunity/opportunity.model.js +36 -0
  195. package/dist/src/modules/v4/opportunity/opportunity.repository.d.ts +14 -0
  196. package/dist/src/modules/v4/opportunity/opportunity.repository.js +217 -0
  197. package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +0 -15
  198. package/dist/src/modules/v4/opportunity/opportunity.service.js +180 -0
  199. package/dist/src/modules/v4/opportunity/subservices/getAjnaMetadata.service.js +50 -0
  200. package/dist/src/modules/v4/opportunity/subservices/getBadgerMetadata.service.js +23 -0
  201. package/dist/src/modules/v4/opportunity/subservices/getClammMetadata.service.js +33 -0
  202. package/dist/src/modules/v4/opportunity/subservices/getCompoundMetadata.service.js +18 -0
  203. package/dist/src/modules/v4/opportunity/subservices/getDolomiteMetadata.service.js +15 -0
  204. package/dist/src/modules/v4/opportunity/subservices/getErc20Metadata.service.js +63 -0
  205. package/dist/src/modules/v4/opportunity/subservices/getErc20SnapshotMetadata.service.js +8 -0
  206. package/dist/src/modules/v4/opportunity/subservices/getEulerMetadata.service.js +30 -0
  207. package/dist/src/modules/v4/opportunity/subservices/getJsonAirDropMetadata.service.js +36 -0
  208. package/dist/src/modules/v4/opportunity/subservices/getMorphoMetadata.service.js +19 -0
  209. package/dist/src/modules/v4/opportunity/subservices/getRadiantMetadata.service.js +9 -0
  210. package/dist/src/modules/v4/opportunity/subservices/getSiloMetadata.service.js +13 -0
  211. package/dist/src/modules/v4/opportunity/transform-id.pipe.js +6 -0
  212. package/dist/src/modules/v4/opportunity/validate-id.pipe.js +12 -0
  213. package/dist/src/modules/v4/participate/participate.controller.js +66 -0
  214. package/dist/src/modules/v4/participate/participate.model.js +24 -0
  215. package/dist/src/modules/v4/participate/participate.service.js +33 -0
  216. package/dist/src/modules/v4/price/index.js +3 -0
  217. package/dist/src/modules/v4/price/price.controller.js +62 -0
  218. package/dist/src/modules/v4/price/price.model.js +12 -0
  219. package/dist/src/modules/v4/price/price.repository.js +18 -0
  220. package/dist/src/modules/v4/price/price.service.js +44 -0
  221. package/dist/src/modules/v4/prisma/index.js +1 -0
  222. package/dist/src/modules/v4/protocol/index.js +3 -0
  223. package/dist/src/modules/v4/protocol/protocol.controller.js +23 -0
  224. package/dist/src/modules/v4/protocol/protocol.model.js +68 -0
  225. package/dist/src/modules/v4/protocol/protocol.repository.js +37 -0
  226. package/dist/src/modules/v4/protocol/protocol.service.js +77 -0
  227. package/dist/src/modules/v4/reward/index.js +3 -0
  228. package/dist/src/modules/v4/reward/reward.controller.js +52 -0
  229. package/dist/src/modules/v4/reward/reward.model.js +104 -0
  230. package/dist/src/modules/v4/reward/reward.repository.js +237 -0
  231. package/dist/src/modules/v4/reward/reward.service.js +283 -0
  232. package/dist/src/modules/v4/reward/rewardConvertor.service.js +136 -0
  233. package/dist/src/modules/v4/router.js +57 -0
  234. package/dist/src/modules/v4/status/index.js +3 -0
  235. package/dist/src/modules/v4/status/status.controller.js +48 -0
  236. package/dist/src/modules/v4/status/status.model.js +24 -0
  237. package/dist/src/modules/v4/status/status.repository.js +88 -0
  238. package/dist/src/modules/v4/status/status.service.js +60 -0
  239. package/dist/src/modules/v4/token/index.js +3 -0
  240. package/dist/src/modules/v4/token/token.controller.js +32 -0
  241. package/dist/src/modules/v4/token/token.model.js +23 -0
  242. package/dist/src/modules/v4/token/token.repository.js +128 -0
  243. package/dist/src/modules/v4/token/token.service.js +268 -0
  244. package/dist/src/modules/v4/tvl/index.js +2 -0
  245. package/dist/src/modules/v4/tvl/tvl.controller.js +1 -0
  246. package/dist/src/modules/v4/tvl/tvl.model.js +1 -0
  247. package/dist/src/modules/v4/tvl/tvl.repository.js +1 -0
  248. package/dist/src/modules/v4/tvl/tvl.service.js +49 -0
  249. package/dist/src/modules/v4/uniswapV4/index.js +4 -0
  250. package/dist/src/modules/v4/uniswapV4/uniswapV4.controller.js +11 -0
  251. package/dist/src/modules/v4/uniswapV4/uniswapV4.model.js +17 -0
  252. package/dist/src/modules/v4/uniswapV4/uniswapV4.repository.js +2 -0
  253. package/dist/src/modules/v4/uniswapV4/uniswapV4.service.js +73 -0
  254. package/dist/src/modules/v4/user/index.js +3 -0
  255. package/dist/src/modules/v4/user/user.controller.js +69 -0
  256. package/dist/src/modules/v4/user/user.model.js +18 -0
  257. package/dist/src/modules/v4/user/user.repository.js +38 -0
  258. package/dist/src/modules/v4/user/user.service.js +50 -0
  259. package/dist/src/plugins/error-handling.plugin.js +28 -0
  260. package/dist/src/plugins/logger.plugin.js +22 -0
  261. package/dist/src/routes/v1/allowances.js +115 -0
  262. package/dist/src/routes/v1/balances.js +25 -0
  263. package/dist/src/routes/v1/prices.js +11 -0
  264. package/dist/src/routes/v1/tokens.js +17 -0
  265. package/dist/src/routes/v2/merkl.js +13 -0
  266. package/dist/src/routes/v3/ERC20Campaigns.js +63 -0
  267. package/dist/src/routes/v3/app.js +18 -0
  268. package/dist/src/routes/v3/blacklist.js +18 -0
  269. package/dist/src/routes/v3/campaign/delay.js +78 -0
  270. package/dist/src/routes/v3/campaignClaims.js +24 -0
  271. package/dist/src/routes/v3/campaignReport.js +22 -0
  272. package/dist/src/routes/v3/campaignUnclaimed.js +28 -0
  273. package/dist/src/routes/v3/campaigns.js +101 -0
  274. package/dist/src/routes/v3/campaignsForMainParameter.js +19 -0
  275. package/dist/src/routes/v3/campaignsInfo.js +54 -0
  276. package/dist/src/routes/v3/campaignsRewardsReport.js +47 -0
  277. package/dist/src/routes/v3/claims.js +45 -0
  278. package/dist/src/routes/v3/compoundV2.js +9 -0
  279. package/dist/src/routes/v3/createCampaign.js +66 -0
  280. package/dist/src/routes/v3/dolomite.js +9 -0
  281. package/dist/src/routes/v3/euler.js +9 -0
  282. package/dist/src/routes/v3/exports/campaigns.js +28 -0
  283. package/dist/src/routes/v3/fetch.js +27 -0
  284. package/dist/src/routes/v3/health.js +13 -0
  285. package/dist/src/routes/v3/lostyield.js +98 -0
  286. package/dist/src/routes/v3/merkl.js +119 -0
  287. package/dist/src/routes/v3/morphoMarkets.js +27 -0
  288. package/dist/src/routes/v3/morphoVaults.js +22 -0
  289. package/dist/src/routes/v3/multiChainPositions.js +69 -0
  290. package/dist/src/routes/v3/opportunity.js +63 -0
  291. package/dist/src/routes/v3/overview.js +73 -0
  292. package/dist/src/routes/v3/parse.js +23 -0
  293. package/dist/src/routes/v3/payload.js +40 -0
  294. package/dist/src/routes/v3/poolInfo.js +88 -0
  295. package/dist/src/routes/v3/positions.js +62 -0
  296. package/dist/src/routes/v3/radiant.js +26 -0
  297. package/dist/src/routes/v3/recipients.js +20 -0
  298. package/dist/src/routes/v3/rewards.js +33 -0
  299. package/dist/src/routes/v3/rewardsReport.js +51 -0
  300. package/dist/src/routes/v3/rootForTimestamp.js +47 -0
  301. package/dist/src/routes/v3/silo.js +20 -0
  302. package/dist/src/routes/v3/token.js +24 -0
  303. package/dist/src/routes/v3/tokenUnclaimed.js +24 -0
  304. package/dist/src/routes/v3/twt/participants.js +11 -0
  305. package/dist/src/routes/v3/updates.js +47 -0
  306. package/dist/src/routes/v3/userRewards.js +59 -0
  307. package/dist/src/types/index.js +6 -0
  308. package/dist/src/types/parameters/Action.js +11 -0
  309. package/dist/src/types/parameters/Chain.js +13 -0
  310. package/dist/src/types/parameters/ChainCampaignId.js +13 -0
  311. package/dist/src/types/parameters/MainParameter.js +19 -0
  312. package/dist/src/types/parameters/OpportunityId.js +14 -0
  313. package/dist/src/types/parameters/Timestamp.js +16 -0
  314. package/dist/src/types/parameters/Type.js +15 -0
  315. package/dist/src/types/parameters/index.js +17 -0
  316. package/dist/src/types/returnTypes.js +1 -0
  317. package/dist/src/types/utils.js +1 -0
  318. package/dist/src/utils/addString.js +6 -0
  319. package/dist/src/utils/bigintToString.js +20 -0
  320. package/dist/src/utils/crypto.js +4 -0
  321. package/dist/src/utils/decodeCalls.js +170 -0
  322. package/dist/src/utils/encodeCalls.js +240 -0
  323. package/dist/src/utils/error.js +90 -0
  324. package/dist/src/utils/execute.js +41 -0
  325. package/dist/src/utils/generateCardName.js +89 -0
  326. package/dist/src/utils/generic.js +117 -0
  327. package/dist/src/utils/hashArray.js +4 -0
  328. package/dist/src/utils/lastBlockBefore.js +78 -0
  329. package/dist/src/utils/logger.js +52 -0
  330. package/dist/src/utils/pricer.js +180 -0
  331. package/dist/src/utils/prices/chainlinkRead.js +8 -0
  332. package/dist/src/utils/prices/curveVirtualPrice.js +7 -0
  333. package/dist/src/utils/prices/getDQUICK.js +8 -0
  334. package/dist/src/utils/prices/priceFetcherFactory.js +29 -0
  335. package/dist/src/utils/prices/priceService.js +328 -0
  336. package/dist/src/utils/prices/services/coinGeckoService.js +53 -0
  337. package/dist/src/utils/prices/services/defillamaService.js +53 -0
  338. package/dist/src/utils/prices/services/dexScreenerService.js +62 -0
  339. package/dist/src/utils/prices/services/erc4626Service.js +30 -0
  340. package/dist/src/utils/prices/services/getERC4626.js +11 -0
  341. package/dist/src/utils/prices/services/indexCoopService.js +55 -0
  342. package/dist/src/utils/prices/services/priceFetcher.js +1 -0
  343. package/dist/src/utils/prices/uniV2Price.js +40 -0
  344. package/dist/src/utils/prisma.js +12 -0
  345. package/dist/src/utils/providers.js +30 -0
  346. package/dist/src/utils/queries/activeCampaigns.js +22 -0
  347. package/dist/src/utils/queries/allCampaigns.js +51 -0
  348. package/dist/src/utils/queries/campaignsForMainParameter.js +23 -0
  349. package/dist/src/utils/queries/claimsOverTime.js +111 -0
  350. package/dist/src/utils/queries/endingCampaigns.js +21 -0
  351. package/dist/src/utils/queries/futureCampaigns.js +19 -0
  352. package/dist/src/utils/queries/mainParameterCampaigns.js +11 -0
  353. package/dist/src/utils/queries/rewardsAmount.js +106 -0
  354. package/dist/src/utils/queries/unclaimed.js +81 -0
  355. package/dist/src/utils/rateLimit.js +13 -0
  356. package/dist/src/utils/stryke.js +4 -0
  357. package/dist/src/utils/throw.js +27 -0
  358. package/dist/src/utils/validation.js +20 -0
  359. package/dist/tsconfig.package.tsbuildinfo +1 -1
  360. package/package.json +2 -2
  361. package/dist/package.json +0 -91
@@ -0,0 +1,90 @@
1
+ import { BN2Number, CTokenInterface, CompFork, CompoundSubCampaignType, LayerBankERC20Interface, YEAR, } from "@sdk";
2
+ import { log } from "../../../utils/logger";
3
+ import { Pricer } from "../../../utils/pricer";
4
+ export async function CompoundDynamicData(_chainId, campaigns) {
5
+ const pricer = await Pricer.load();
6
+ const calls = [];
7
+ for (const campaign of campaigns) {
8
+ if (campaign.campaignSubType === CompoundSubCampaignType.supply) {
9
+ calls.push({
10
+ allowFailure: true,
11
+ callData: CTokenInterface.encodeFunctionData("totalSupply"),
12
+ target: campaign.campaignParameters.targetToken,
13
+ });
14
+ }
15
+ else {
16
+ if (campaign.campaignParameters.compFork === CompFork.LayerBank) {
17
+ calls.push({
18
+ allowFailure: true,
19
+ callData: LayerBankERC20Interface.encodeFunctionData("totalBorrow"),
20
+ target: campaign.campaignParameters.targetToken,
21
+ });
22
+ }
23
+ calls.push({
24
+ allowFailure: true,
25
+ callData: CTokenInterface.encodeFunctionData("totalBorrows"),
26
+ target: campaign.campaignParameters.targetToken,
27
+ });
28
+ }
29
+ }
30
+ return {
31
+ cached: false,
32
+ call: {
33
+ callData: calls,
34
+ handler: () => { },
35
+ reducer: async (result) => {
36
+ let i = 0;
37
+ const dynamicData = [];
38
+ for (const campaign of campaigns) {
39
+ let totalSupplyTargetToken;
40
+ if (campaign.campaignSubType === CompoundSubCampaignType.supply) {
41
+ try {
42
+ totalSupplyTargetToken = BN2Number(CTokenInterface.decodeFunctionResult("totalSupply", result[i++])[0], campaign.campaignParameters.decimalsUnderlyingToken);
43
+ }
44
+ catch {
45
+ log.warn(`Error getting totalSupply for campaign ${campaign.campaignId} and token ${campaign.campaignParameters.targetToken}`);
46
+ totalSupplyTargetToken = 0.0000001;
47
+ }
48
+ }
49
+ else {
50
+ try {
51
+ if (campaign.campaignParameters.compFork === CompFork.LayerBank) {
52
+ totalSupplyTargetToken = BN2Number(LayerBankERC20Interface.decodeFunctionResult("totalBorrow", result[i++])[0], campaign.campaignParameters.decimalsUnderlyingToken);
53
+ }
54
+ else {
55
+ totalSupplyTargetToken = BN2Number(CTokenInterface.decodeFunctionResult("totalBorrows", result[i++])[0], campaign.campaignParameters.decimalsUnderlyingToken);
56
+ }
57
+ }
58
+ catch {
59
+ log.warn(`Error getting totalBorrows for campaign ${campaign.campaignId} and token ${campaign.campaignParameters.targetToken}`);
60
+ totalSupplyTargetToken = 0.0000001;
61
+ }
62
+ }
63
+ const priceRewardToken = (await pricer.get({
64
+ address: campaign.rewardToken,
65
+ chainId: campaign.chainId,
66
+ symbol: campaign.campaignParameters.symbolRewardToken,
67
+ })) ?? 0;
68
+ const priceTargetToken = (await pricer.get({
69
+ address: campaign.campaignParameters.underlyingToken,
70
+ chainId: campaign.computeChainId,
71
+ symbol: campaign.campaignParameters.symbolUnderlyingToken,
72
+ })) ?? 0;
73
+ dynamicData.push({
74
+ ...campaign,
75
+ apr: (priceRewardToken *
76
+ BN2Number(campaign.amount, campaign.campaignParameters.decimalsRewardToken) *
77
+ YEAR *
78
+ 100) /
79
+ campaign.campaignParameters.duration /
80
+ (totalSupplyTargetToken * priceTargetToken),
81
+ totalSupplyTargetToken,
82
+ tvl: totalSupplyTargetToken * priceTargetToken,
83
+ priceRewardToken: priceRewardToken,
84
+ });
85
+ }
86
+ return dynamicData;
87
+ },
88
+ },
89
+ };
90
+ }
@@ -0,0 +1,60 @@
1
+ import { BN2Number, DolomiteSubCampaignType, YEAR, } from "@sdk";
2
+ import axios from "axios";
3
+ import { log } from "../../../utils/logger";
4
+ import { Pricer } from "../../../utils/pricer";
5
+ export async function DolomiteDynamicData(chainId, campaigns) {
6
+ const pricer = await Pricer.load();
7
+ const calls = [];
8
+ return {
9
+ cached: false,
10
+ call: {
11
+ callData: calls,
12
+ handler: () => { },
13
+ reducer: async (result) => {
14
+ let i = 0;
15
+ const dynamicData = [];
16
+ for (const campaign of campaigns) {
17
+ try {
18
+ const apiRes = (await axios.get(`https://api.dolomite.io/balances/${campaign.computeChainId}/total-supply`))
19
+ .data.Result;
20
+ const tokenIndex = apiRes.findIndex(x => Number.parseFloat(x.token.marketId) === campaign.campaignParameters.marketIndex);
21
+ const tokenData = apiRes[tokenIndex].token;
22
+ const totalSupplyTargetToken = campaign.campaignSubType === DolomiteSubCampaignType.borrow
23
+ ? Number.parseFloat(tokenData.borrowLiquidity)
24
+ : campaign.campaignSubType === DolomiteSubCampaignType.supply
25
+ ? Number.parseFloat(tokenData.supplyLiquidity)
26
+ : Number.parseFloat(tokenData.supplyLiquidity) - Number.parseFloat(tokenData.borrowLiquidity);
27
+ const priceRewardToken = (await pricer.get({
28
+ address: campaign.rewardToken,
29
+ chainId,
30
+ symbol: campaign.campaignParameters.symbolRewardToken,
31
+ })) ?? 0;
32
+ const priceTargetToken = (await pricer.get({
33
+ address: tokenData.id,
34
+ chainId,
35
+ symbol: tokenData.symbol,
36
+ })) ?? 0;
37
+ i++;
38
+ dynamicData.push({
39
+ ...campaign,
40
+ apr: (priceRewardToken *
41
+ BN2Number(campaign.amount, campaign.campaignParameters.decimalsRewardToken) *
42
+ YEAR *
43
+ 100) /
44
+ campaign.campaignParameters.duration /
45
+ (totalSupplyTargetToken * priceTargetToken),
46
+ totalSupplyTargetToken,
47
+ tvl: totalSupplyTargetToken * priceTargetToken,
48
+ });
49
+ }
50
+ catch (e) {
51
+ log.error("Failed to fetch Dolomite data", e);
52
+ // In this case we return just the staticData
53
+ dynamicData.push({ ...campaign });
54
+ }
55
+ }
56
+ return dynamicData;
57
+ },
58
+ },
59
+ };
60
+ }
@@ -0,0 +1,162 @@
1
+ import { merklChainDataWithCache } from "../../merklChainData";
2
+ import { BN2Number, ERC20Interface, YEAR, } from "@sdk";
3
+ import { batchMulticallCallWithRetry } from "../../../utils/generic";
4
+ import { Pricer } from "../../../utils/pricer";
5
+ import { getLastEligibilityRatio } from "../utils/getLastEligibilityRatio";
6
+ import { tokenType } from "./ERC20SubTypes/helpers/tokenType";
7
+ import { getTokenPricesInfo } from "./ERC20SubTypes/subtypesPrices";
8
+ import { enzymeInterface, factoryInterface, getTokenTypeRound1, metamorphoInterface, } from "./ERC20SubTypes/subtypesRound1";
9
+ import { balancerPoolInterface, getTokenTypeRound2 } from "./ERC20SubTypes/subtypesRound2";
10
+ import { getTokenTypeRound3 } from "./ERC20SubTypes/subtypesRound3";
11
+ import { getTokenTypeRound4 } from "./ERC20SubTypes/subtypesRound4";
12
+ export async function ERC20DynamicData(chainId, campaigns) {
13
+ const pricer = await Pricer.load();
14
+ const currentRoot = (await merklChainDataWithCache(chainId)).merkleRoot;
15
+ // Round 1: Get the high level type for each token (will need to be refined lated with more calls)
16
+ const callsRounds1 = [];
17
+ for (const campaign of campaigns) {
18
+ // Keep this commented, only use for tests
19
+ // if (campaign.campaignId === "0xf09492c6d3bd475e269e9f90c92d7e11a671a8fc43470b424ccbb0eea67b762e") {
20
+ // // Filament test
21
+ // campaign.campaignParameters.targetToken = "0xe855B8018C22A05F84724e93693caf166912aDD5";
22
+ // }
23
+ if ([
24
+ "0xb9bf1ace04e702363bd76b5828ca64a00984af9118672be96c1c200943da941f",
25
+ "0x1ad188dd597199ca8e6d6a01d5af362769f46bb749da5c08d27eaec4397f53b5",
26
+ ].includes(campaign.campaignId)) {
27
+ campaign.campaignParameters.url = "https://moonwell.fi/markets/supply/base/usdc";
28
+ }
29
+ if (campaign.campaignId === "0xb656fa534c487d3d7c94a5ac2c265acde0d5b7a7c562548c58cfcbf4f7f552f4") {
30
+ campaign.campaignParameters.url = "https://app.indexcoop.com/swap/eth/hyeth";
31
+ }
32
+ callsRounds1.push({
33
+ allowFailure: true,
34
+ callData: factoryInterface.encodeFunctionData("factory"),
35
+ target: campaign.campaignParameters.targetToken,
36
+ });
37
+ callsRounds1.push({
38
+ allowFailure: true,
39
+ callData: metamorphoInterface.encodeFunctionData("MORPHO"),
40
+ target: campaign.campaignParameters.targetToken,
41
+ });
42
+ callsRounds1.push({
43
+ allowFailure: true,
44
+ callData: ERC20Interface.encodeFunctionData("name"),
45
+ target: campaign.campaignParameters.targetToken,
46
+ });
47
+ callsRounds1.push({
48
+ allowFailure: true,
49
+ callData: balancerPoolInterface.encodeFunctionData("getPoolId"),
50
+ target: campaign.campaignParameters.targetToken,
51
+ });
52
+ callsRounds1.push({
53
+ allowFailure: true,
54
+ callData: enzymeInterface.encodeFunctionData("getCreator"),
55
+ target: campaign.campaignParameters.targetToken,
56
+ });
57
+ }
58
+ const resultRound1 = await batchMulticallCallWithRetry(chainId, {
59
+ calls: callsRounds1,
60
+ });
61
+ const tokenTypesByCampaign = {};
62
+ // Round 2: Decode result from round 1 and get some additional info for the types before the final calls
63
+ const callsRounds2 = [];
64
+ let i = 0;
65
+ for (const campaign of campaigns) {
66
+ let typeStruct = {
67
+ type: tokenType.unknown,
68
+ calls: [],
69
+ typeInfo: {},
70
+ };
71
+ typeStruct = getTokenTypeRound1(resultRound1, campaign.campaignParameters.targetToken, i);
72
+ i += 5;
73
+ tokenTypesByCampaign[campaign.campaignId] = typeStruct;
74
+ callsRounds2.push(...typeStruct.calls);
75
+ }
76
+ const resultRound2 = await batchMulticallCallWithRetry(chainId, {
77
+ calls: callsRounds2,
78
+ });
79
+ // Round 3: Decode result from round 2 and get some additional info for the types before the final calls
80
+ const callsRounds3 = [];
81
+ let j = 0;
82
+ for (const campaign of campaigns) {
83
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
84
+ const callsForCampaign = tokenTypesByCampaign[campaign.campaignId].calls.length;
85
+ tokenTypesByCampaign[campaign.campaignId] = getTokenTypeRound2(j, tokenTypesByCampaign[campaign.campaignId].type, tokenTypesByCampaign[campaign.campaignId].typeInfo, resultRound2);
86
+ j += callsForCampaign;
87
+ callsRounds3.push(...tokenTypesByCampaign[campaign.campaignId].calls);
88
+ }
89
+ const resultRound3 = await batchMulticallCallWithRetry(chainId, {
90
+ calls: callsRounds3,
91
+ });
92
+ // Final round before execute
93
+ let callsFinal = [];
94
+ j = 0;
95
+ for (const campaign of campaigns) {
96
+ const callsForCampaign = tokenTypesByCampaign[campaign.campaignId].calls.length;
97
+ tokenTypesByCampaign[campaign.campaignId] = getTokenTypeRound3(j, tokenTypesByCampaign[campaign.campaignId].type, tokenTypesByCampaign[campaign.campaignId].typeInfo, resultRound3);
98
+ j += callsForCampaign;
99
+ callsFinal = callsFinal.concat(tokenTypesByCampaign[campaign.campaignId].calls);
100
+ }
101
+ // Round 4: Get the final data
102
+ const resultsFinal = await batchMulticallCallWithRetry(chainId, {
103
+ calls: callsFinal,
104
+ });
105
+ j = 0;
106
+ let calls = [];
107
+ for (const campaign of campaigns) {
108
+ const callsForCampaign = tokenTypesByCampaign[campaign.campaignId].calls.length;
109
+ tokenTypesByCampaign[campaign.campaignId] = getTokenTypeRound4(j, tokenTypesByCampaign[campaign.campaignId].type, tokenTypesByCampaign[campaign.campaignId].typeInfo, resultsFinal, campaign);
110
+ j += callsForCampaign;
111
+ calls = calls.concat(tokenTypesByCampaign[campaign.campaignId].calls);
112
+ }
113
+ return {
114
+ cached: false,
115
+ call: {
116
+ callData: calls,
117
+ handler: () => { },
118
+ reducer: async (result) => {
119
+ let i = 0;
120
+ const dynamicData = [];
121
+ for (const campaign of campaigns) {
122
+ const priceRewardToken = (await pricer.get({
123
+ address: campaign.rewardToken,
124
+ chainId,
125
+ symbol: campaign.campaignParameters.symbolRewardToken,
126
+ })) ?? 0;
127
+ // Get the data from the final round and process it to get the price of the target token and some extra info
128
+ const callsForCampaign = tokenTypesByCampaign[campaign.campaignId].calls.length;
129
+ tokenTypesByCampaign[campaign.campaignId] = await getTokenPricesInfo(i, tokenTypesByCampaign[campaign.campaignId].type, tokenTypesByCampaign[campaign.campaignId].typeInfo, result, campaign, pricer);
130
+ i += callsForCampaign;
131
+ const totalSupplyTargetToken = tokenTypesByCampaign[campaign.campaignId].typeInfo.totalSupply;
132
+ let whitelistedSupplyTargetToken = totalSupplyTargetToken - tokenTypesByCampaign[campaign.campaignId].typeInfo.blacklistedSupply;
133
+ const priceTargetToken = tokenTypesByCampaign[campaign.campaignId].typeInfo.priceTargetToken;
134
+ if (whitelistedSupplyTargetToken === 0) {
135
+ whitelistedSupplyTargetToken = 0.00001;
136
+ }
137
+ let lastEligibilityRatio = 1;
138
+ if (!!campaign.campaignParameters.hooks?.length) {
139
+ lastEligibilityRatio = await getLastEligibilityRatio(campaign, chainId, currentRoot, []);
140
+ }
141
+ dynamicData.push({
142
+ ...campaign,
143
+ apr: (lastEligibilityRatio *
144
+ (priceRewardToken *
145
+ BN2Number(campaign.amount, campaign.campaignParameters.decimalsRewardToken) *
146
+ YEAR *
147
+ 100)) /
148
+ campaign.campaignParameters.duration /
149
+ (whitelistedSupplyTargetToken * priceTargetToken),
150
+ totalSupplyTargetToken,
151
+ tvl: totalSupplyTargetToken * priceTargetToken,
152
+ type: tokenTypesByCampaign[campaign.campaignId].type,
153
+ typeInfo: tokenTypesByCampaign[campaign.campaignId].typeInfo,
154
+ priceRewardToken: priceRewardToken,
155
+ lastEligibilityRatio,
156
+ });
157
+ }
158
+ return dynamicData;
159
+ },
160
+ },
161
+ };
162
+ }
@@ -0,0 +1,159 @@
1
+ import { merklChainDataWithCache } from "../../merklChainData";
2
+ import { BN2Number, BalancerPoolInterface, ERC20Interface, EnzymeInterface, FactoryInterface, MetamorphoInterface, YEAR, } from "@sdk";
3
+ import { batchMulticallCallWithRetry } from "../../../utils/generic";
4
+ import { Pricer } from "../../../utils/pricer";
5
+ import { getLastEligibilityRatio } from "../utils/getLastEligibilityRatio";
6
+ import { tokenType } from "./ERC20SubTypes/helpers/tokenType";
7
+ import { getTokenPricesInfo } from "./ERC20SubTypes/subtypesPricesRefactoFinal";
8
+ import { getTokenTypeRound1 } from "./ERC20SubTypes/subtypesRound1RefactoFinal";
9
+ import { getTokenTypeRound2 } from "./ERC20SubTypes/subtypesRound2RefactoFinal";
10
+ import { getTokenTypeRound3 } from "./ERC20SubTypes/subtypesRound3RefactoFinal";
11
+ import { getTokenTypeRound4 } from "./ERC20SubTypes/subtypesRound4RefactoFinal";
12
+ export async function ERC20DynamicDataRefacto(chainId, campaigns) {
13
+ const pricer = await Pricer.load();
14
+ const currentRoot = (await merklChainDataWithCache(chainId)).merkleRoot;
15
+ // Round 1: Get the high level type for each token (will need to be refined lated with more calls)
16
+ const callsRounds1 = [];
17
+ for (const campaign of campaigns) {
18
+ // Keep this commented, only use for tests
19
+ // if (campaign.campaignId === "0xf09492c6d3bd475e269e9f90c92d7e11a671a8fc43470b424ccbb0eea67b762e") {
20
+ // // Filament test
21
+ // campaign.campaignParameters.targetToken = "0xe855B8018C22A05F84724e93693caf166912aDD5";
22
+ // }
23
+ if ([
24
+ "0xb9bf1ace04e702363bd76b5828ca64a00984af9118672be96c1c200943da941f",
25
+ "0x1ad188dd597199ca8e6d6a01d5af362769f46bb749da5c08d27eaec4397f53b5",
26
+ ].includes(campaign.campaignId)) {
27
+ campaign.campaignParameters.url = "https://moonwell.fi/markets/supply/base/usdc";
28
+ }
29
+ if (campaign.campaignId === "0xb656fa534c487d3d7c94a5ac2c265acde0d5b7a7c562548c58cfcbf4f7f552f4") {
30
+ campaign.campaignParameters.url = "https://app.indexcoop.com/swap/eth/hyeth";
31
+ }
32
+ callsRounds1.push({
33
+ allowFailure: true,
34
+ callData: FactoryInterface.encodeFunctionData("factory"),
35
+ target: campaign.campaignParameters.targetToken,
36
+ });
37
+ callsRounds1.push({
38
+ allowFailure: true,
39
+ callData: MetamorphoInterface.encodeFunctionData("MORPHO"),
40
+ target: campaign.campaignParameters.targetToken,
41
+ });
42
+ callsRounds1.push({
43
+ allowFailure: true,
44
+ callData: ERC20Interface.encodeFunctionData("name"),
45
+ target: campaign.campaignParameters.targetToken,
46
+ });
47
+ callsRounds1.push({
48
+ allowFailure: true,
49
+ callData: BalancerPoolInterface.encodeFunctionData("getPoolId"),
50
+ target: campaign.campaignParameters.targetToken,
51
+ });
52
+ callsRounds1.push({
53
+ allowFailure: true,
54
+ callData: EnzymeInterface.encodeFunctionData("getCreator"),
55
+ target: campaign.campaignParameters.targetToken,
56
+ });
57
+ }
58
+ const resultRound1 = await batchMulticallCallWithRetry(chainId, {
59
+ calls: callsRounds1,
60
+ });
61
+ const tokenTypesByCampaign = {};
62
+ // Round 2: Decode result from round 1 and get some additional info for the types before the final calls
63
+ const callsRounds2 = [];
64
+ let i = 0;
65
+ for (const campaign of campaigns) {
66
+ let typeStruct = {
67
+ type: tokenType.unknown,
68
+ calls: [],
69
+ typeInfo: {},
70
+ };
71
+ typeStruct = getTokenTypeRound1(resultRound1, campaign.campaignParameters.targetToken, i);
72
+ i += 5;
73
+ tokenTypesByCampaign[campaign.campaignId] = typeStruct;
74
+ callsRounds2.push(...typeStruct.calls);
75
+ }
76
+ const resultRound2 = await batchMulticallCallWithRetry(chainId, {
77
+ calls: callsRounds2,
78
+ });
79
+ // Round 3: Decode result from round 2 and get some additional info for the types before the final calls
80
+ const callsRounds3 = [];
81
+ let j = 0;
82
+ for (const campaign of campaigns) {
83
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
84
+ const callsForCampaign = tokenTypesByCampaign[campaign.campaignId].calls.length;
85
+ tokenTypesByCampaign[campaign.campaignId] = getTokenTypeRound2(j, tokenTypesByCampaign[campaign.campaignId].type, tokenTypesByCampaign[campaign.campaignId].typeInfo, resultRound2);
86
+ j += callsForCampaign;
87
+ callsRounds3.push(...tokenTypesByCampaign[campaign.campaignId].calls);
88
+ }
89
+ const resultRound3 = await batchMulticallCallWithRetry(chainId, {
90
+ calls: callsRounds3,
91
+ });
92
+ // Final round before execute
93
+ let callsFinal = [];
94
+ j = 0;
95
+ for (const campaign of campaigns) {
96
+ const callsForCampaign = tokenTypesByCampaign[campaign.campaignId].calls.length;
97
+ tokenTypesByCampaign[campaign.campaignId] = getTokenTypeRound3(j, tokenTypesByCampaign[campaign.campaignId].type, tokenTypesByCampaign[campaign.campaignId].typeInfo, resultRound3);
98
+ j += callsForCampaign;
99
+ callsFinal = callsFinal.concat(tokenTypesByCampaign[campaign.campaignId].calls);
100
+ }
101
+ // Round 4: Get the final data
102
+ const resultsFinal = await batchMulticallCallWithRetry(chainId, {
103
+ calls: callsFinal,
104
+ });
105
+ j = 0;
106
+ let calls = [];
107
+ for (const campaign of campaigns) {
108
+ const callsForCampaign = tokenTypesByCampaign[campaign.campaignId].calls.length;
109
+ tokenTypesByCampaign[campaign.campaignId] = getTokenTypeRound4(j, tokenTypesByCampaign[campaign.campaignId].type, tokenTypesByCampaign[campaign.campaignId].typeInfo, resultsFinal, campaign);
110
+ j += callsForCampaign;
111
+ calls = calls.concat(tokenTypesByCampaign[campaign.campaignId].calls);
112
+ }
113
+ return {
114
+ cached: false,
115
+ call: {
116
+ callData: calls,
117
+ handler: () => { },
118
+ reducer: async (result) => {
119
+ let i = 0;
120
+ const dynamicData = [];
121
+ for (const campaign of campaigns) {
122
+ const priceRewardToken = (await pricer.get({
123
+ address: campaign.rewardToken,
124
+ chainId,
125
+ symbol: campaign.campaignParameters.symbolRewardToken,
126
+ })) ?? 0;
127
+ // Get the data from the final round and process it to get the price of the target token and some extra info
128
+ const callsForCampaign = tokenTypesByCampaign[campaign.campaignId].calls.length;
129
+ tokenTypesByCampaign[campaign.campaignId] = await getTokenPricesInfo(i, tokenTypesByCampaign[campaign.campaignId].type, tokenTypesByCampaign[campaign.campaignId].typeInfo, result, campaign, pricer);
130
+ i += callsForCampaign;
131
+ const totalSupplyTargetToken = tokenTypesByCampaign[campaign.campaignId].typeInfo.totalSupply;
132
+ const whitelistedSupplyTargetToken = tokenTypesByCampaign[campaign.campaignId].typeInfo.whitelistedSupplyTargetToken;
133
+ const priceTargetToken = tokenTypesByCampaign[campaign.campaignId].typeInfo.priceTargetToken;
134
+ let lastEligibilityRatio = 1;
135
+ if (!!campaign.campaignParameters.hooks?.length) {
136
+ lastEligibilityRatio = await getLastEligibilityRatio(campaign, chainId, currentRoot, []);
137
+ }
138
+ dynamicData.push({
139
+ ...campaign,
140
+ apr: (lastEligibilityRatio *
141
+ (priceRewardToken *
142
+ BN2Number(campaign.amount, campaign.campaignParameters.decimalsRewardToken) *
143
+ YEAR *
144
+ 100)) /
145
+ campaign.campaignParameters.duration /
146
+ (whitelistedSupplyTargetToken * priceTargetToken),
147
+ totalSupplyTargetToken,
148
+ tvl: totalSupplyTargetToken * priceTargetToken,
149
+ type: tokenTypesByCampaign[campaign.campaignId].type,
150
+ typeInfo: tokenTypesByCampaign[campaign.campaignId].typeInfo,
151
+ priceRewardToken: priceRewardToken,
152
+ lastEligibilityRatio,
153
+ });
154
+ }
155
+ return dynamicData;
156
+ },
157
+ },
158
+ };
159
+ }
@@ -0,0 +1,13 @@
1
+ // https://splice-api-ad64cd01a25d.herokuapp.com/mode/markets?market=0x34cf9BF641bd5f34197060A3f3478a1f97f78f0a
2
+ import axios from "axios";
3
+ export async function fetchEulerVaultName(vaultAddress, chainId) {
4
+ const url = `https://raw.githubusercontent.com/euler-xyz/euler-labels/refs/heads/master/${chainId}/vaults.json`;
5
+ try {
6
+ const response = await axios.get(url);
7
+ const vaultName = response.data[vaultAddress].name;
8
+ return vaultName;
9
+ }
10
+ catch {
11
+ return null;
12
+ }
13
+ }
@@ -0,0 +1,29 @@
1
+ import { tokenType } from "./tokenType";
2
+ const factoryAddresses = {
3
+ "0x420DD381b31aEf6683db6B902084cB0FFECe40Da": tokenType.aerodrome, // Aerodrome Base Factory
4
+ "0x31832f2a97Fd20664D76Cc421207669b55CE4BC0": tokenType.velodrome, // Velodrome Mode Factory
5
+ "0xc9Fe0C63Af9A39402e8a5514f9c43Af0322b665F": tokenType.curve, // Curve Factory Fraxtal
6
+ "0xc6C09471Ee39C7E30a067952FcC89c8922f9Ab53": tokenType.curve, // Curve Optimism Factory
7
+ "0x9e6d12097339ddd5402FDD39fc0Ef86Eec54AB39": tokenType.splice, // Splice Mode Factory
8
+ "0x49Afe3abCf66CF09Fab86cb1139D8811C8afe56F": tokenType.toros, // Toros Base Factory
9
+ "0xAf39606bec181887951Ab6912Ac7EA216Bd6E4B4": tokenType.akron, // Akron Arbitrum Factory
10
+ "0xC3DC853dD716bd5754f421ef94fdCbac3902ab32": tokenType.enzyme, // Enzyme ETH Factory
11
+ "0x2e25271297537B8124b8f883a92fFd95C4032733": tokenType.enzyme, // Enzyme Polygon Factory
12
+ "0x71f6b49ae1558357bBb5A6074f1143c46cBcA03d": tokenType.dragonswap, // DragonSwap SEI Factory
13
+ "0x40be1cBa6C5B47cDF9da7f963B6F761F4C60627D": tokenType.koi, // Silo Staking Factory
14
+ "0xFDa619b6d20975be80A10332cD39b9a4b0FAa8BB": tokenType.baseswap, // Poolside Factory
15
+ "0xa19C51D91891D3DF7C13Ed22a2f89d328A82950f": tokenType.fenix, // Fenix Factory
16
+ "0x3a76e377ED58c8731F9DF3A36155942438744Ce3": tokenType.zkswap, // ZKSwap Factory
17
+ "0x6fcf753f2C67b83f7B09746Bbc4FA0047b35D050": tokenType.pendle, // Pendle Factory
18
+ };
19
+ export function getTypeFromFactoryAddress(address) {
20
+ if (factoryAddresses[address]) {
21
+ return factoryAddresses[address];
22
+ }
23
+ return tokenType.unknown;
24
+ }
25
+ // Mapping of dispatcher to fund value calculator for enzyme
26
+ export const enzymeFundValueCalculatorRouterMapping = {
27
+ "0xC3DC853dD716bd5754f421ef94fdCbac3902ab32": "0x7c728cd0CfA92401E01A4849a01b57EE53F5b2b9", // ETH
28
+ "0x2e25271297537B8124b8f883a92fFd95C4032733": "0xD70389a7d6171e1DBA6C3df4DB7331811fd93f08", // Polygon
29
+ };
@@ -0,0 +1,22 @@
1
+ import { BN2Number, ERC20Interface } from "@sdk";
2
+ export function getBlacklistedSupply(index, decimals, blacklist, calls) {
3
+ if (blacklist.length === 0) {
4
+ return 0;
5
+ }
6
+ let blacklistedSupply = 0;
7
+ for (const _ of blacklist) {
8
+ blacklistedSupply += BN2Number(ERC20Interface.decodeFunctionResult("balanceOf", calls[index++])[0], decimals);
9
+ }
10
+ return blacklistedSupply;
11
+ }
12
+ export function getWhitelistedSupply(index, decimals, blacklist, whitelist, calls) {
13
+ if (whitelist.length === 0) {
14
+ return 0;
15
+ }
16
+ let start = index + blacklist.length;
17
+ let whitelistedSupply = 0;
18
+ for (const _ of whitelist) {
19
+ whitelistedSupply += BN2Number(ERC20Interface.decodeFunctionResult("balanceOf", calls[start++])[0], decimals);
20
+ }
21
+ return whitelistedSupply;
22
+ }
@@ -0,0 +1,35 @@
1
+ export async function fetchMetamorphoTvl(chainId, vaultAddress) {
2
+ const metamorphoAPI = "https://blue-api.morpho.org/graphql";
3
+ const query = `
4
+ query {
5
+ vaultByAddress(
6
+ address: "${vaultAddress}"
7
+ chainId: ${chainId}
8
+ ) {
9
+ state {
10
+ allocation {
11
+ supplyAssetsUsd
12
+ }
13
+ }
14
+ }
15
+ }
16
+ `;
17
+ const response = await fetch(metamorphoAPI, {
18
+ method: "POST",
19
+ headers: {
20
+ "Content-Type": "application/json",
21
+ },
22
+ body: JSON.stringify({ query }),
23
+ });
24
+ const data = await response.json();
25
+ let tvl = 0;
26
+ if (!data?.data) {
27
+ return tvl;
28
+ }
29
+ for (const allocation of data.data.vaultByAddress.state.allocation) {
30
+ if (allocation.supplyAssetsUsd) {
31
+ tvl += Number(allocation.supplyAssetsUsd);
32
+ }
33
+ }
34
+ return tvl;
35
+ }
@@ -0,0 +1,21 @@
1
+ // https://splice-api-ad64cd01a25d.herokuapp.com/mode/markets?market=0x34cf9BF641bd5f34197060A3f3478a1f97f78f0a
2
+ import axios from "axios";
3
+ export async function fetchSpliceInformation(marketAddress) {
4
+ const url = `https://splice-api-ad64cd01a25d.herokuapp.com/mode/markets?market=${marketAddress}`;
5
+ try {
6
+ const response = await axios.get(url);
7
+ const market = response.data?.markets[0];
8
+ return {
9
+ symbolUnderlyingToken: market.token.symbol,
10
+ priceTargetToken: market.pool.price,
11
+ tvl: market.pool.tvl,
12
+ };
13
+ }
14
+ catch (e) {
15
+ return {
16
+ symbolUnderlyingToken: "",
17
+ priceTargetToken: 0,
18
+ tvl: 1,
19
+ };
20
+ }
21
+ }