@merkl/api 0.10.129 → 0.10.131
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/database/api/.generated/default.js +1 -0
- package/dist/database/api/.generated/edge.js +609 -0
- package/dist/database/api/.generated/index-browser.js +586 -0
- package/dist/database/api/.generated/index.js +638 -0
- package/dist/database/api/.generated/runtime/edge-esm.js +31 -0
- package/dist/database/api/.generated/runtime/edge.js +31 -0
- package/dist/database/api/.generated/runtime/index-browser.js +13 -0
- package/dist/database/api/.generated/runtime/library.js +143 -0
- package/dist/database/api/.generated/runtime/react-native.js +80 -0
- package/dist/database/api/.generated/runtime/wasm.js +32 -0
- package/dist/database/api/.generated/wasm.js +586 -0
- package/dist/database/api/seeder/resources/protocol.js +341 -0
- package/dist/database/engine/.generated/default.js +1 -0
- package/dist/database/engine/.generated/edge.js +438 -0
- package/dist/database/engine/.generated/index-browser.js +415 -0
- package/dist/database/engine/.generated/index.js +467 -0
- package/dist/database/engine/.generated/runtime/edge-esm.js +31 -0
- package/dist/database/engine/.generated/runtime/edge.js +31 -0
- package/dist/database/engine/.generated/runtime/index-browser.js +13 -0
- package/dist/database/engine/.generated/runtime/library.js +143 -0
- package/dist/database/engine/.generated/runtime/react-native.js +80 -0
- package/dist/database/engine/.generated/runtime/wasm.js +32 -0
- package/dist/database/engine/.generated/wasm.js +415 -0
- package/dist/src/backgroundJobs/index.js +44 -0
- package/dist/src/backgroundJobs/jobs/campaignsCacheUpdater.js +160 -0
- package/dist/src/backgroundJobs/jobs/health.js +15 -0
- package/dist/src/backgroundJobs/jobs/opportunityUpdater.js +63 -0
- package/dist/src/backgroundJobs/jobs/priceUpdater.js +16 -0
- package/dist/src/backgroundJobs/jobs/sync.js +33 -0
- package/dist/src/cache/declaration.js +146 -0
- package/dist/src/cache/index.js +152 -0
- package/dist/src/cache/redis.js +49 -0
- package/dist/src/constants.js +119 -0
- package/dist/src/entities/campaign.js +134 -0
- package/dist/src/entities/opportunity.js +549 -0
- package/dist/src/errors/BadRequest.error.js +7 -0
- package/dist/src/errors/Conflict.error.js +7 -0
- package/dist/src/errors/HttpError.js +11 -0
- package/dist/src/errors/NotFound.error.js +7 -0
- package/dist/src/errors/Opportunity.error.js +11 -0
- package/dist/src/errors/Unauthorized.error.js +7 -0
- package/dist/src/errors/index.js +5 -0
- package/dist/src/guards/BackOffice.guard.js +10 -0
- package/dist/src/guards/Engine.guard.js +10 -0
- package/dist/src/guards/TokenAuth.guard.js +10 -0
- package/dist/src/hooks/checkQueryAddressValidity.js +7 -0
- package/dist/src/hooks/checkQueryChainIdValidity.js +7 -0
- package/dist/src/index.js +79 -0
- package/dist/src/internal/controllers/endingCampaigns.js +41 -0
- package/dist/src/internal/controllers/unclaimed.js +36 -0
- package/dist/src/internal/index.js +30 -0
- package/dist/src/libs/campaigns/campaignTypes/AjnaDynamicData.js +111 -0
- package/dist/src/libs/campaigns/campaignTypes/BadgerDynamicData.js +93 -0
- package/dist/src/libs/campaigns/campaignTypes/CLAMMDynamicData.js +942 -0
- package/dist/src/libs/campaigns/campaignTypes/CompoundDynamicData.js +90 -0
- package/dist/src/libs/campaigns/campaignTypes/DolomiteDynamicData.js +60 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicData.js +162 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicDataRefacto.js +159 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/eulerVaultNames.js +13 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/factoryFinder.js +29 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/getBlacklistedSupply.js +22 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/metamorphoTvl.js +35 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/spliceTVL.js +21 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType.js +106 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/AaveProcessor.js +26 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/AssetProcessor.js +47 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/AuraProcessor.js +103 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/BalancerGaugeProcessor.js +83 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/BalancerPoolProcessor.js +99 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/BeefyProcessor.js +51 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/CompoundProcessor.js +36 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/EnzymeProcessor.js +51 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/EulerBorrowProcessor.js +46 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/EulerLendProcessor.js +47 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/FluidProcessor.js +36 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/FraxProcessor.js +41 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/GearboxProcessor.js +44 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/GenericProcessor.js +239 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/MetamorphoProcessor.js +43 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/PendleProcessor.js +31 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/RadiantProcessor.js +58 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/RfxProcessor.js +64 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/SpliceProcessor.js +35 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/SturdySiloProcessor.js +37 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/TemplateProcessor.js +40 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/TorosProcessor.js +33 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/UniswapProcessor.js +48 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/WoofiProcessor.js +40 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/curveProcessor.js +68 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/processorMapping.js +77 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesPrices.js +583 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesPricesRefactoFinal.js +24 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1.js +1209 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1RefactoFinal.js +194 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound2.js +645 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound2RefactoFinal.js +22 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound3.js +392 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound3RefactoFinal.js +22 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound4.js +323 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound4RefactoFinal.js +22 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20_SNAPSHOTDynamicData.js +38 -0
- package/dist/src/libs/campaigns/campaignTypes/EulerDynamicData.js +165 -0
- package/dist/src/libs/campaigns/campaignTypes/JSON_AIRDROPDynamicData.js +19 -0
- package/dist/src/libs/campaigns/campaignTypes/MORPHODynamicData.js +120 -0
- package/dist/src/libs/campaigns/campaignTypes/RadiantDynamicData.js +112 -0
- package/dist/src/libs/campaigns/campaignTypes/SILODynamicData.js +113 -0
- package/dist/src/libs/campaigns/campaignsDynamicData.js +83 -0
- package/dist/src/libs/campaigns/campaignsDynamicDataRefacto.js +78 -0
- package/dist/src/libs/campaigns/getCampaigns.js +18 -0
- package/dist/src/libs/campaigns/utils/fetchA51Strategies.js +44 -0
- package/dist/src/libs/campaigns/utils/fetchClamInfo.js +27 -0
- package/dist/src/libs/campaigns/utils/fetchLogs.js +91 -0
- package/dist/src/libs/campaigns/utils/getCompV2ForksVaults.js +122 -0
- package/dist/src/libs/campaigns/utils/getContractCreationBlock.js +44 -0
- package/dist/src/libs/campaigns/utils/getDolomiteMarkets.js +50 -0
- package/dist/src/libs/campaigns/utils/getEulerV2Vaults.js +87 -0
- package/dist/src/libs/campaigns/utils/getLastEligibilityRatio.js +56 -0
- package/dist/src/libs/computeFee.js +34 -0
- package/dist/src/libs/custom/twtParticipants.js +54 -0
- package/dist/src/libs/deprecated-merklv3/index.js +184 -0
- package/dist/src/libs/getTokensList.js +37 -0
- package/dist/src/libs/merklChainData.js +129 -0
- package/dist/src/libs/parse/marketsWithCache.js +8 -0
- package/dist/src/libs/positions/ajna/index.js +107 -0
- package/dist/src/libs/positions/badger/index.js +79 -0
- package/dist/src/libs/positions/clamm/index.js +419 -0
- package/dist/src/libs/positions/clamm/thegraph/fetchAlmPositions.js +35 -0
- package/dist/src/libs/positions/clamm/thegraph/fetchAmmPositions.js +35 -0
- package/dist/src/libs/positions/clamm/thegraph/fetchFarmedPositions.js +44 -0
- package/dist/src/libs/positions/clamm/thegraph/index.js +162 -0
- package/dist/src/libs/positions/compound/index.js +93 -0
- package/dist/src/libs/positions/dolomite/index.js +49 -0
- package/dist/src/libs/positions/erc20/index.js +55 -0
- package/dist/src/libs/positions/euler/index.js +57 -0
- package/dist/src/libs/positions/index.js +48 -0
- package/dist/src/libs/positions/morpho/index.js +177 -0
- package/dist/src/libs/positions/prepareFetch.js +339 -0
- package/dist/src/libs/positions/silo/index.js +67 -0
- package/dist/src/libs/positions/types.js +1 -0
- package/dist/src/libs/reports/campaignReport.js +37 -0
- package/dist/src/libs/reports/mainParameterRewards.js +48 -0
- package/dist/src/libs/rewards/userRewards.js +154 -0
- package/dist/src/libs/staticCampaigns.js +10 -0
- package/dist/src/libs/tokens/balances.js +126 -0
- package/dist/src/libs/tokens/tokenInfo.js +22 -0
- package/dist/src/modules/v4/accounting/accounting.controller.js +66 -0
- package/dist/src/modules/v4/accounting/accounting.model.js +32 -0
- package/dist/src/modules/v4/accounting/accounting.repository.js +100 -0
- package/dist/src/modules/v4/accounting/accounting.service.js +78 -0
- package/dist/src/modules/v4/accounting/index.js +3 -0
- package/dist/src/modules/v4/apr/apr.controller.js +1 -0
- package/dist/src/modules/v4/apr/apr.model.js +1 -0
- package/dist/src/modules/v4/apr/apr.repository.js +1 -0
- package/dist/src/modules/v4/apr/apr.service.js +40 -0
- package/dist/src/modules/v4/apr/index.js +2 -0
- package/dist/src/modules/v4/blacklist/blacklist.controller.js +45 -0
- package/dist/src/modules/v4/blacklist/blacklist.model.js +13 -0
- package/dist/src/modules/v4/blacklist/blacklist.repository.js +56 -0
- package/dist/src/modules/v4/blacklist/blacklist.service.js +24 -0
- package/dist/src/modules/v4/blacklist/index.js +3 -0
- package/dist/src/modules/v4/cache/cache.model.js +14 -0
- package/dist/src/modules/v4/cache/cache.repository.js +10 -0
- package/dist/src/modules/v4/cache/cache.service.js +44 -0
- package/dist/src/modules/v4/cache/index.js +1 -0
- package/dist/src/modules/v4/campaign/campaign.controller.js +56 -0
- package/dist/src/modules/v4/campaign/campaign.model.js +54 -0
- package/dist/src/modules/v4/campaign/campaign.repository.js +346 -0
- package/dist/src/modules/v4/campaign/campaign.service.js +203 -0
- package/dist/src/modules/v4/campaign/index.js +3 -0
- package/dist/src/modules/v4/chain/chain.controller.js +40 -0
- package/dist/src/modules/v4/chain/chain.model.js +17 -0
- package/dist/src/modules/v4/chain/chain.repository.js +64 -0
- package/dist/src/modules/v4/chain/chain.service.js +42 -0
- package/dist/src/modules/v4/chain/index.js +3 -0
- package/dist/src/modules/v4/dynamicData/dynamicData.controller.js +19 -0
- package/dist/src/modules/v4/dynamicData/dynamicData.model.js +6 -0
- package/dist/src/modules/v4/dynamicData/dynamicData.repository.js +1 -0
- package/dist/src/modules/v4/dynamicData/dynamicData.service.js +49 -0
- package/dist/src/modules/v4/dynamicData/index.js +3 -0
- package/dist/src/modules/v4/enso/enso.model.js +108 -0
- package/dist/src/modules/v4/enso/enso.service.js +46 -0
- package/dist/src/modules/v4/explorer/explorer.model.js +2 -0
- package/dist/src/modules/v4/explorer/explorer.repository.js +23 -0
- package/dist/src/modules/v4/explorer/explorer.service.js +24 -0
- package/dist/src/modules/v4/explorer/index.js +1 -0
- package/dist/src/modules/v4/index.js +4 -0
- package/dist/src/modules/v4/merklRoot/index.js +3 -0
- package/dist/src/modules/v4/merklRoot/merklRoot.controller.js +19 -0
- package/dist/src/modules/v4/merklRoot/merklRoot.model.js +6 -0
- package/dist/src/modules/v4/merklRoot/merklRoot.repository.js +31 -0
- package/dist/src/modules/v4/merklRoot/merklRoot.service.js +38 -0
- package/dist/src/modules/v4/opportunity/index.js +3 -0
- package/dist/src/modules/v4/opportunity/opportunity.controller.js +69 -0
- package/dist/src/modules/v4/opportunity/opportunity.model.js +36 -0
- package/dist/src/modules/v4/opportunity/opportunity.repository.d.ts +14 -0
- package/dist/src/modules/v4/opportunity/opportunity.repository.js +217 -0
- package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +0 -15
- package/dist/src/modules/v4/opportunity/opportunity.service.js +180 -0
- package/dist/src/modules/v4/opportunity/subservices/getAjnaMetadata.service.js +50 -0
- package/dist/src/modules/v4/opportunity/subservices/getBadgerMetadata.service.js +23 -0
- package/dist/src/modules/v4/opportunity/subservices/getClammMetadata.service.js +33 -0
- package/dist/src/modules/v4/opportunity/subservices/getCompoundMetadata.service.js +18 -0
- package/dist/src/modules/v4/opportunity/subservices/getDolomiteMetadata.service.js +15 -0
- package/dist/src/modules/v4/opportunity/subservices/getErc20Metadata.service.js +63 -0
- package/dist/src/modules/v4/opportunity/subservices/getErc20SnapshotMetadata.service.js +8 -0
- package/dist/src/modules/v4/opportunity/subservices/getEulerMetadata.service.js +30 -0
- package/dist/src/modules/v4/opportunity/subservices/getJsonAirDropMetadata.service.js +36 -0
- package/dist/src/modules/v4/opportunity/subservices/getMorphoMetadata.service.js +19 -0
- package/dist/src/modules/v4/opportunity/subservices/getRadiantMetadata.service.js +9 -0
- package/dist/src/modules/v4/opportunity/subservices/getSiloMetadata.service.js +13 -0
- package/dist/src/modules/v4/opportunity/transform-id.pipe.js +6 -0
- package/dist/src/modules/v4/opportunity/validate-id.pipe.js +12 -0
- package/dist/src/modules/v4/participate/participate.controller.js +66 -0
- package/dist/src/modules/v4/participate/participate.model.js +24 -0
- package/dist/src/modules/v4/participate/participate.service.js +33 -0
- package/dist/src/modules/v4/price/index.js +3 -0
- package/dist/src/modules/v4/price/price.controller.js +62 -0
- package/dist/src/modules/v4/price/price.model.js +12 -0
- package/dist/src/modules/v4/price/price.repository.js +18 -0
- package/dist/src/modules/v4/price/price.service.js +44 -0
- package/dist/src/modules/v4/prisma/index.js +1 -0
- package/dist/src/modules/v4/protocol/index.js +3 -0
- package/dist/src/modules/v4/protocol/protocol.controller.js +23 -0
- package/dist/src/modules/v4/protocol/protocol.model.js +68 -0
- package/dist/src/modules/v4/protocol/protocol.repository.js +37 -0
- package/dist/src/modules/v4/protocol/protocol.service.js +77 -0
- package/dist/src/modules/v4/reward/index.js +3 -0
- package/dist/src/modules/v4/reward/reward.controller.js +52 -0
- package/dist/src/modules/v4/reward/reward.model.js +104 -0
- package/dist/src/modules/v4/reward/reward.repository.js +237 -0
- package/dist/src/modules/v4/reward/reward.service.js +283 -0
- package/dist/src/modules/v4/reward/rewardConvertor.service.js +136 -0
- package/dist/src/modules/v4/router.js +57 -0
- package/dist/src/modules/v4/status/index.js +3 -0
- package/dist/src/modules/v4/status/status.controller.js +48 -0
- package/dist/src/modules/v4/status/status.model.js +24 -0
- package/dist/src/modules/v4/status/status.repository.js +88 -0
- package/dist/src/modules/v4/status/status.service.js +60 -0
- package/dist/src/modules/v4/token/index.js +3 -0
- package/dist/src/modules/v4/token/token.controller.js +32 -0
- package/dist/src/modules/v4/token/token.model.js +23 -0
- package/dist/src/modules/v4/token/token.repository.js +128 -0
- package/dist/src/modules/v4/token/token.service.js +268 -0
- package/dist/src/modules/v4/tvl/index.js +2 -0
- package/dist/src/modules/v4/tvl/tvl.controller.js +1 -0
- package/dist/src/modules/v4/tvl/tvl.model.js +1 -0
- package/dist/src/modules/v4/tvl/tvl.repository.js +1 -0
- package/dist/src/modules/v4/tvl/tvl.service.js +49 -0
- package/dist/src/modules/v4/uniswapV4/index.js +4 -0
- package/dist/src/modules/v4/uniswapV4/uniswapV4.controller.js +11 -0
- package/dist/src/modules/v4/uniswapV4/uniswapV4.model.js +17 -0
- package/dist/src/modules/v4/uniswapV4/uniswapV4.repository.js +2 -0
- package/dist/src/modules/v4/uniswapV4/uniswapV4.service.js +73 -0
- package/dist/src/modules/v4/user/index.js +3 -0
- package/dist/src/modules/v4/user/user.controller.js +69 -0
- package/dist/src/modules/v4/user/user.model.js +18 -0
- package/dist/src/modules/v4/user/user.repository.js +38 -0
- package/dist/src/modules/v4/user/user.service.js +50 -0
- package/dist/src/plugins/error-handling.plugin.js +28 -0
- package/dist/src/plugins/logger.plugin.js +22 -0
- package/dist/src/routes/v1/allowances.js +115 -0
- package/dist/src/routes/v1/balances.js +25 -0
- package/dist/src/routes/v1/prices.js +11 -0
- package/dist/src/routes/v1/tokens.js +17 -0
- package/dist/src/routes/v2/merkl.js +13 -0
- package/dist/src/routes/v3/ERC20Campaigns.js +63 -0
- package/dist/src/routes/v3/app.js +18 -0
- package/dist/src/routes/v3/blacklist.js +18 -0
- package/dist/src/routes/v3/campaign/delay.js +78 -0
- package/dist/src/routes/v3/campaignClaims.js +24 -0
- package/dist/src/routes/v3/campaignReport.js +22 -0
- package/dist/src/routes/v3/campaignUnclaimed.js +28 -0
- package/dist/src/routes/v3/campaigns.js +101 -0
- package/dist/src/routes/v3/campaignsForMainParameter.js +19 -0
- package/dist/src/routes/v3/campaignsInfo.js +54 -0
- package/dist/src/routes/v3/campaignsRewardsReport.js +47 -0
- package/dist/src/routes/v3/claims.js +45 -0
- package/dist/src/routes/v3/compoundV2.js +9 -0
- package/dist/src/routes/v3/createCampaign.js +66 -0
- package/dist/src/routes/v3/dolomite.js +9 -0
- package/dist/src/routes/v3/euler.js +9 -0
- package/dist/src/routes/v3/exports/campaigns.js +28 -0
- package/dist/src/routes/v3/fetch.js +27 -0
- package/dist/src/routes/v3/health.js +13 -0
- package/dist/src/routes/v3/lostyield.js +98 -0
- package/dist/src/routes/v3/merkl.js +119 -0
- package/dist/src/routes/v3/morphoMarkets.js +27 -0
- package/dist/src/routes/v3/morphoVaults.js +22 -0
- package/dist/src/routes/v3/multiChainPositions.js +69 -0
- package/dist/src/routes/v3/opportunity.js +63 -0
- package/dist/src/routes/v3/overview.js +73 -0
- package/dist/src/routes/v3/parse.js +23 -0
- package/dist/src/routes/v3/payload.js +40 -0
- package/dist/src/routes/v3/poolInfo.js +88 -0
- package/dist/src/routes/v3/positions.js +62 -0
- package/dist/src/routes/v3/radiant.js +26 -0
- package/dist/src/routes/v3/recipients.js +20 -0
- package/dist/src/routes/v3/rewards.js +33 -0
- package/dist/src/routes/v3/rewardsReport.js +51 -0
- package/dist/src/routes/v3/rootForTimestamp.js +47 -0
- package/dist/src/routes/v3/silo.js +20 -0
- package/dist/src/routes/v3/token.js +24 -0
- package/dist/src/routes/v3/tokenUnclaimed.js +24 -0
- package/dist/src/routes/v3/twt/participants.js +11 -0
- package/dist/src/routes/v3/updates.js +47 -0
- package/dist/src/routes/v3/userRewards.js +59 -0
- package/dist/src/types/index.js +6 -0
- package/dist/src/types/parameters/Action.js +11 -0
- package/dist/src/types/parameters/Chain.js +13 -0
- package/dist/src/types/parameters/ChainCampaignId.js +13 -0
- package/dist/src/types/parameters/MainParameter.js +19 -0
- package/dist/src/types/parameters/OpportunityId.js +14 -0
- package/dist/src/types/parameters/Timestamp.js +16 -0
- package/dist/src/types/parameters/Type.js +15 -0
- package/dist/src/types/parameters/index.js +17 -0
- package/dist/src/types/returnTypes.js +1 -0
- package/dist/src/types/utils.js +1 -0
- package/dist/src/utils/addString.js +6 -0
- package/dist/src/utils/bigintToString.js +20 -0
- package/dist/src/utils/crypto.js +4 -0
- package/dist/src/utils/decodeCalls.js +170 -0
- package/dist/src/utils/encodeCalls.js +240 -0
- package/dist/src/utils/error.js +90 -0
- package/dist/src/utils/execute.js +41 -0
- package/dist/src/utils/generateCardName.js +89 -0
- package/dist/src/utils/generic.js +117 -0
- package/dist/src/utils/hashArray.js +4 -0
- package/dist/src/utils/lastBlockBefore.js +78 -0
- package/dist/src/utils/logger.js +52 -0
- package/dist/src/utils/pricer.js +180 -0
- package/dist/src/utils/prices/chainlinkRead.js +8 -0
- package/dist/src/utils/prices/curveVirtualPrice.js +7 -0
- package/dist/src/utils/prices/getDQUICK.js +8 -0
- package/dist/src/utils/prices/priceFetcherFactory.js +29 -0
- package/dist/src/utils/prices/priceService.js +328 -0
- package/dist/src/utils/prices/services/coinGeckoService.js +53 -0
- package/dist/src/utils/prices/services/defillamaService.js +53 -0
- package/dist/src/utils/prices/services/dexScreenerService.js +62 -0
- package/dist/src/utils/prices/services/erc4626Service.js +30 -0
- package/dist/src/utils/prices/services/getERC4626.js +11 -0
- package/dist/src/utils/prices/services/indexCoopService.js +55 -0
- package/dist/src/utils/prices/services/priceFetcher.js +1 -0
- package/dist/src/utils/prices/uniV2Price.js +40 -0
- package/dist/src/utils/prisma.js +12 -0
- package/dist/src/utils/providers.js +30 -0
- package/dist/src/utils/queries/activeCampaigns.js +22 -0
- package/dist/src/utils/queries/allCampaigns.js +51 -0
- package/dist/src/utils/queries/campaignsForMainParameter.js +23 -0
- package/dist/src/utils/queries/claimsOverTime.js +111 -0
- package/dist/src/utils/queries/endingCampaigns.js +21 -0
- package/dist/src/utils/queries/futureCampaigns.js +19 -0
- package/dist/src/utils/queries/mainParameterCampaigns.js +11 -0
- package/dist/src/utils/queries/rewardsAmount.js +106 -0
- package/dist/src/utils/queries/unclaimed.js +81 -0
- package/dist/src/utils/rateLimit.js +13 -0
- package/dist/src/utils/stryke.js +4 -0
- package/dist/src/utils/throw.js +27 -0
- package/dist/src/utils/validation.js +20 -0
- package/dist/tsconfig.package.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/dist/package.json +0 -91
@@ -0,0 +1,10 @@
|
|
1
|
+
import { UnauthorizedError } from "../errors";
|
2
|
+
import { t } from "elysia";
|
3
|
+
export const AuthorizationHeadersDto = t.Object({
|
4
|
+
authorization: t.String(),
|
5
|
+
});
|
6
|
+
export async function BackOfficeGuard({ headers }) {
|
7
|
+
if (headers.authorization !== `Bearer ${process.env.BACKOFFICE_SECRET}`) {
|
8
|
+
throw new UnauthorizedError();
|
9
|
+
}
|
10
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { UnauthorizedError } from "../errors";
|
2
|
+
import { t } from "elysia";
|
3
|
+
export const AuthorizationHeadersDto = t.Object({
|
4
|
+
authorization: t.String(),
|
5
|
+
});
|
6
|
+
export async function EngineGuard({ headers }) {
|
7
|
+
if (headers.authorization !== `Bearer ${process.env.ENGINE_SECRET}`) {
|
8
|
+
throw new UnauthorizedError();
|
9
|
+
}
|
10
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { UnauthorizedError } from "../errors";
|
2
|
+
import { t } from "elysia";
|
3
|
+
export const AuthorizationHeadersDto = t.Object({
|
4
|
+
authorization: t.String(),
|
5
|
+
});
|
6
|
+
export async function TokenAuthGuard({ headers }) {
|
7
|
+
if (headers.authorization !== `Bearer ${process.env.API_SECRET}`) {
|
8
|
+
throw new UnauthorizedError();
|
9
|
+
}
|
10
|
+
}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { throwOnInvalidAddress } from "../utils/throw";
|
2
|
+
export default function checkQueryAddressValidity(queryKey = "user") {
|
3
|
+
return (app) => app.onBeforeHandle(({ query }) => {
|
4
|
+
const address = query?.[queryKey];
|
5
|
+
query[queryKey] = throwOnInvalidAddress(address ?? "");
|
6
|
+
});
|
7
|
+
}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { throwOnUnsupportedChainId } from "../utils/throw";
|
2
|
+
export default function checkQueryChainIdValidity(queryKey = "chainId") {
|
3
|
+
return (app) => app.onBeforeHandle(({ query }) => {
|
4
|
+
const chainId = query?.[queryKey];
|
5
|
+
chainId !== undefined && throwOnUnsupportedChainId(chainId);
|
6
|
+
});
|
7
|
+
}
|
@@ -0,0 +1,79 @@
|
|
1
|
+
import { cors } from "@elysiajs/cors";
|
2
|
+
import { swagger } from "@elysiajs/swagger";
|
3
|
+
import axios from "axios";
|
4
|
+
import { Elysia } from "elysia";
|
5
|
+
import { autoroutes } from "elysia-autoroutes";
|
6
|
+
import { redisClient } from "./cache/redis";
|
7
|
+
import { v4 } from "./modules/v4/router";
|
8
|
+
import { errorHandler } from "./utils/error";
|
9
|
+
import { log } from "./utils/logger";
|
10
|
+
import { apiDbClient, engineDbClient } from "./utils/prisma";
|
11
|
+
// Axios with bun workaround
|
12
|
+
axios.defaults.headers.common["Accept-Encoding"] = "gzip";
|
13
|
+
const PORT = process.env.PORT || 3000;
|
14
|
+
const app = new Elysia({
|
15
|
+
normalize: false,
|
16
|
+
serve: {
|
17
|
+
maxRequestBodySize: 1024 * 1024 * 1024, // 1GB
|
18
|
+
},
|
19
|
+
})
|
20
|
+
.use(swagger({
|
21
|
+
documentation: {
|
22
|
+
info: {
|
23
|
+
contact: {
|
24
|
+
email: "contact@angle.money",
|
25
|
+
name: "Angle Labs",
|
26
|
+
},
|
27
|
+
description: "API to access data related to merkl campaigns, built and maintained by Angle Labs. This API is provided as is, without any warranty of any kind.",
|
28
|
+
license: {
|
29
|
+
name: "UNLICENSED",
|
30
|
+
},
|
31
|
+
title: "Merkl API",
|
32
|
+
version: "1.0.1",
|
33
|
+
},
|
34
|
+
},
|
35
|
+
exclude: [/v4\/(?!users\/[^/]+\/rewards$).*/, /v1\/.*/, /v2\/.*/],
|
36
|
+
}))
|
37
|
+
.use(cors())
|
38
|
+
.get("/", () => "Merkl API")
|
39
|
+
.use(swagger({
|
40
|
+
path: "/docs",
|
41
|
+
documentation: {
|
42
|
+
info: {
|
43
|
+
contact: {
|
44
|
+
email: "contact@angle.money",
|
45
|
+
name: "Angle Labs",
|
46
|
+
},
|
47
|
+
description: "API to access data related to merkl campaigns, built and maintained by Angle Labs. This API is provided as is, without any warranty of any kind.",
|
48
|
+
license: {
|
49
|
+
name: "UNLICENSED",
|
50
|
+
},
|
51
|
+
title: "Merkl API v4 (in development)",
|
52
|
+
version: "1.0.1",
|
53
|
+
},
|
54
|
+
tags: [
|
55
|
+
{
|
56
|
+
name: "Participate",
|
57
|
+
description: "Interact with opportunities on-chain",
|
58
|
+
},
|
59
|
+
],
|
60
|
+
},
|
61
|
+
exclude: [/v1\/.*/, /v2\/.*/, /v3\/.*/, /docs.*/, "/"],
|
62
|
+
}))
|
63
|
+
.use(v4)
|
64
|
+
.use(autoroutes({
|
65
|
+
routesDir: `${import.meta.dir}/routes`,
|
66
|
+
generateTags: false,
|
67
|
+
}))
|
68
|
+
.use(errorHandler())
|
69
|
+
.listen(PORT, ({ hostname, port }) => {
|
70
|
+
log.info(`🌐 Api started (${hostname}:${port})`);
|
71
|
+
});
|
72
|
+
// ─── Signal Handling ─────────────────────────────────────────────────────────
|
73
|
+
process.on("SIGTERM", () => {
|
74
|
+
engineDbClient.$disconnect();
|
75
|
+
apiDbClient.$disconnect();
|
76
|
+
redisClient.disconnect();
|
77
|
+
process.exit();
|
78
|
+
});
|
79
|
+
export { app };
|
@@ -0,0 +1,41 @@
|
|
1
|
+
import { engineDbClient } from "../../utils/prisma";
|
2
|
+
import { t } from "elysia";
|
3
|
+
import { Pricer } from "../../utils/pricer";
|
4
|
+
import { NON_RENEWED_CAMPAIGNS } from "../../utils/queries/endingCampaigns";
|
5
|
+
const ONE_DAY = 24 * 60 * 60;
|
6
|
+
export const endingCampaignsController = (app) => app.get("/v3/internal/endingCampaigns", async ({ query, set }) => {
|
7
|
+
let minEndDate = query.minEndDate;
|
8
|
+
let maxEndDate = query.maxEndDate;
|
9
|
+
let minStartDate = query.minStartDate;
|
10
|
+
const now = Math.floor(Date.now() / 1000);
|
11
|
+
if (!minStartDate) {
|
12
|
+
minStartDate = 0;
|
13
|
+
}
|
14
|
+
if (!minEndDate) {
|
15
|
+
minEndDate = now - ONE_DAY;
|
16
|
+
}
|
17
|
+
if (!maxEndDate) {
|
18
|
+
maxEndDate = now + ONE_DAY;
|
19
|
+
}
|
20
|
+
const endingCampaigns = await engineDbClient.$queryRaw(NON_RENEWED_CAMPAIGNS(maxEndDate, minStartDate, minEndDate));
|
21
|
+
const pricer = await Pricer.load();
|
22
|
+
for (const e of endingCampaigns) {
|
23
|
+
const price = await pricer.get({
|
24
|
+
symbol: e.symbol,
|
25
|
+
});
|
26
|
+
if (!price) {
|
27
|
+
e.usdValue = 0;
|
28
|
+
continue;
|
29
|
+
}
|
30
|
+
e.usdValue = price * e.amount;
|
31
|
+
e.hoursLeft = Math.floor((e.endTimestamp - now) / 3600);
|
32
|
+
}
|
33
|
+
return endingCampaigns.sort((a, b) => b.hoursLeft - a.hoursLeft);
|
34
|
+
}, {
|
35
|
+
query: t.Object({
|
36
|
+
maxEndDate: t.Optional(t.Numeric()),
|
37
|
+
minEndDate: t.Optional(t.Numeric()),
|
38
|
+
minStartDate: t.Optional(t.Numeric()),
|
39
|
+
nonRenewedOnly: t.Optional(t.String()),
|
40
|
+
}),
|
41
|
+
});
|
@@ -0,0 +1,36 @@
|
|
1
|
+
import { engineDbClient } from "../../utils/prisma";
|
2
|
+
import { t } from "elysia";
|
3
|
+
import { InvalidParameter } from "../../utils/error";
|
4
|
+
import { Pricer } from "../../utils/pricer";
|
5
|
+
import { UNCLAIMED_BEFORE } from "../../utils/queries/unclaimed";
|
6
|
+
export const unclaimedController = (app) => app.get("/v3/internal/unclaimed", async ({ query, set }) => {
|
7
|
+
let timestamp = query.timestamp;
|
8
|
+
const months = query.months;
|
9
|
+
if (!timestamp && !months)
|
10
|
+
throw new InvalidParameter("Missing timestamp or months");
|
11
|
+
if (!!timestamp && !!months)
|
12
|
+
throw new InvalidParameter("Cannot provide both timestamp and months");
|
13
|
+
if (!!months) {
|
14
|
+
timestamp = Math.floor(Date.now() / 1000) - months * 30 * 24 * 60 * 60;
|
15
|
+
}
|
16
|
+
if (!timestamp)
|
17
|
+
throw new InvalidParameter("Missing timestamp");
|
18
|
+
const unclaimed = await engineDbClient.$queryRaw(UNCLAIMED_BEFORE(timestamp));
|
19
|
+
const pricer = await Pricer.load();
|
20
|
+
for (const u of unclaimed) {
|
21
|
+
const price = await pricer.get({
|
22
|
+
symbol: u.symbol,
|
23
|
+
});
|
24
|
+
if (!price) {
|
25
|
+
u.usdValue = 0;
|
26
|
+
continue;
|
27
|
+
}
|
28
|
+
u.usdValue = price * u.unclaimed;
|
29
|
+
}
|
30
|
+
return unclaimed.sort((a, b) => b.usdValue - a.usdValue);
|
31
|
+
}, {
|
32
|
+
query: t.Object({
|
33
|
+
months: t.Optional(t.Numeric()),
|
34
|
+
timestamp: t.Optional(t.Numeric()),
|
35
|
+
}),
|
36
|
+
});
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import { redisClient } from "../cache/redis";
|
2
|
+
import { log } from "../utils/logger";
|
3
|
+
import { engineDbClient } from "../utils/prisma";
|
4
|
+
import { swagger } from "@elysiajs/swagger";
|
5
|
+
import axios from "axios";
|
6
|
+
import { Elysia } from "elysia";
|
7
|
+
import { endingCampaignsController } from "./controllers/endingCampaigns";
|
8
|
+
import { unclaimedController } from "./controllers/unclaimed";
|
9
|
+
// Axios with bun workaround
|
10
|
+
axios.defaults.headers.common["Accept-Encoding"] = "gzip";
|
11
|
+
const PORT = process.env.PORT || 3000;
|
12
|
+
const app = new Elysia()
|
13
|
+
.use(swagger())
|
14
|
+
.get("/", () => "Merkl Internal API")
|
15
|
+
.use(unclaimedController) // /v3/internal/unclaimed
|
16
|
+
.use(endingCampaignsController) // /v3/internal/endingCampaigns
|
17
|
+
.onError(ctx => {
|
18
|
+
console.error(ctx.error.message);
|
19
|
+
console.error(ctx.error.stack);
|
20
|
+
return (ctx.set.status = "Internal Server Error");
|
21
|
+
})
|
22
|
+
.listen(PORT, ({ hostname, port }) => {
|
23
|
+
log.info(`⚙️ Internal started (${hostname}:${port})`);
|
24
|
+
});
|
25
|
+
// ─── Signal Handling ─────────────────────────────────────────────────────────
|
26
|
+
process.on("SIGTERM", () => {
|
27
|
+
engineDbClient.$disconnect();
|
28
|
+
redisClient.disconnect();
|
29
|
+
process.exit();
|
30
|
+
});
|
@@ -0,0 +1,111 @@
|
|
1
|
+
import { batchMulticallCallWithRetry } from "../../../utils/generic";
|
2
|
+
import { providers } from "../../../utils/providers";
|
3
|
+
import { AjnaSubCampaignType, BN2Number, ERC20Pool__factory, NETWORK_LABELS, PoolInfoUtilsInterface, YEAR, } from "@sdk";
|
4
|
+
import { POOL_INFO_UTILS } from "@sdk";
|
5
|
+
import axios from "axios";
|
6
|
+
import { log } from "../../../utils/logger";
|
7
|
+
import { Pricer } from "../../../utils/pricer";
|
8
|
+
export async function AjnaDynamicData(chainId, campaigns) {
|
9
|
+
const pricer = await Pricer.load();
|
10
|
+
const calls = [];
|
11
|
+
for (const campaign of campaigns) {
|
12
|
+
if (campaign.campaignParameters.subCampaignType === AjnaSubCampaignType.lend) {
|
13
|
+
calls.push({
|
14
|
+
allowFailure: true,
|
15
|
+
callData: PoolInfoUtilsInterface.encodeFunctionData("poolPricesInfo", [campaign.campaignParameters.poolId]),
|
16
|
+
target: POOL_INFO_UTILS[campaign.computeChainId],
|
17
|
+
});
|
18
|
+
}
|
19
|
+
}
|
20
|
+
return {
|
21
|
+
cached: false,
|
22
|
+
call: {
|
23
|
+
callData: calls,
|
24
|
+
handler: () => { },
|
25
|
+
reducer: async (result) => {
|
26
|
+
const dynamicData = [];
|
27
|
+
const resIndexes = await batchMulticallCallWithRetry(chainId, {
|
28
|
+
calls,
|
29
|
+
});
|
30
|
+
let index = 0;
|
31
|
+
for (const campaign of campaigns) {
|
32
|
+
const res = await axios.get(`https://ajna-api.blockanalitica.com/v4/${NETWORK_LABELS[chainId].toLowerCase()}/pools/${campaign.campaignParameters.poolId.toLowerCase()}`);
|
33
|
+
try {
|
34
|
+
let totalSupplyTargetToken = 0;
|
35
|
+
let totalComputedTargetToken = 0;
|
36
|
+
let blacklistedSupply = 0;
|
37
|
+
let blacklistedPosition;
|
38
|
+
if (campaign.campaignParameters.subCampaignType === AjnaSubCampaignType.lend) {
|
39
|
+
totalSupplyTargetToken = res?.data.results?.quote_token_balance;
|
40
|
+
const htpIndex = PoolInfoUtilsInterface.decodeFunctionResult("poolPricesInfo", resIndexes[index].returnData)[3];
|
41
|
+
const lupIndex = PoolInfoUtilsInterface.decodeFunctionResult("poolPricesInfo", resIndexes[index].returnData)[5];
|
42
|
+
const threshold = BN2Number(lupIndex, 0) === 0 ? lupIndex : lupIndex.gt(htpIndex) ? lupIndex.add(22) : htpIndex.add(22);
|
43
|
+
const InterestEarningSupplyRes = await ERC20Pool__factory.connect(campaign.campaignParameters.poolId, providers[campaign.computeChainId]).depositUpToIndex(threshold);
|
44
|
+
totalComputedTargetToken = BN2Number(InterestEarningSupplyRes, 18);
|
45
|
+
index++;
|
46
|
+
}
|
47
|
+
else {
|
48
|
+
totalSupplyTargetToken = res?.data.results?.debt;
|
49
|
+
}
|
50
|
+
totalComputedTargetToken =
|
51
|
+
campaign.campaignSubType === AjnaSubCampaignType.lend ? totalComputedTargetToken : totalSupplyTargetToken;
|
52
|
+
if (campaign.campaignParameters.blacklist.length !== 0 && totalComputedTargetToken !== 0) {
|
53
|
+
for (const blacklisted of campaign.campaignParameters.blacklist) {
|
54
|
+
const res = await axios.get(`https://ajna-api.blockanalitica.com/v4/${NETWORK_LABELS[chainId].toLowerCase()}/wallets/${blacklisted}/pools/?days_ago=1&order=-debt&p_size=50`);
|
55
|
+
let nextRoute = null;
|
56
|
+
if (!!res.data.next) {
|
57
|
+
nextRoute = `https://${res.data.next.slice(res.data.next.indexOf(":") + 1)}`;
|
58
|
+
}
|
59
|
+
blacklistedPosition = res.data.results.find((position) => position.pool_address === campaign.campaignParameters.poolId);
|
60
|
+
blacklistedSupply = !blacklistedPosition
|
61
|
+
? 0
|
62
|
+
: campaign.campaignSubType === AjnaSubCampaignType.lend
|
63
|
+
? Number(blacklistedPosition.supply)
|
64
|
+
: Number(blacklistedPosition.debt);
|
65
|
+
while (nextRoute !== null && blacklistedSupply !== 0) {
|
66
|
+
const res = await axios.get(nextRoute);
|
67
|
+
blacklistedPosition = res.data.results.find((position) => position.pool_address === campaign.campaignParameters.poolId);
|
68
|
+
blacklistedSupply = !blacklistedPosition
|
69
|
+
? 0
|
70
|
+
: campaign.campaignSubType === AjnaSubCampaignType.lend
|
71
|
+
? Number(blacklistedPosition.supply)
|
72
|
+
: Number(blacklistedPosition.debt);
|
73
|
+
if (!!res.data.next) {
|
74
|
+
nextRoute = `https://${res.data.next.slice(res.data.next.indexOf(":") + 1)}`;
|
75
|
+
}
|
76
|
+
else {
|
77
|
+
nextRoute = null;
|
78
|
+
}
|
79
|
+
}
|
80
|
+
}
|
81
|
+
}
|
82
|
+
totalComputedTargetToken -= blacklistedSupply;
|
83
|
+
const priceRewardToken = (await pricer.get({
|
84
|
+
address: campaign.rewardToken,
|
85
|
+
chainId,
|
86
|
+
symbol: campaign.campaignParameters.symbolRewardToken,
|
87
|
+
})) ?? 0;
|
88
|
+
dynamicData.push({
|
89
|
+
...campaign,
|
90
|
+
apr: (priceRewardToken *
|
91
|
+
BN2Number(campaign.amount, campaign.campaignParameters.decimalsRewardToken) *
|
92
|
+
YEAR *
|
93
|
+
100) /
|
94
|
+
campaign.campaignParameters.duration /
|
95
|
+
(totalComputedTargetToken * res?.data.results?.quote_token_underlying_price),
|
96
|
+
totalSupplyTargetToken,
|
97
|
+
tvl: res?.data.results?.tvl,
|
98
|
+
computedtotalSupply: totalComputedTargetToken,
|
99
|
+
});
|
100
|
+
}
|
101
|
+
catch (e) {
|
102
|
+
log.error("Failed to fetch Ajna data", e);
|
103
|
+
// In this case we return just the staticData
|
104
|
+
dynamicData.push({ ...campaign });
|
105
|
+
}
|
106
|
+
}
|
107
|
+
return dynamicData;
|
108
|
+
},
|
109
|
+
},
|
110
|
+
};
|
111
|
+
}
|
@@ -0,0 +1,93 @@
|
|
1
|
+
import { BN2Number, SortedCdpsInterface, YEAR, } from "@sdk";
|
2
|
+
import { log } from "../../../utils/logger";
|
3
|
+
import { Pricer } from "../../../utils/pricer";
|
4
|
+
import { CDPMANAGER_ADDRESS, EBTC_ADDRESS, SORTEDCDPS_ADDRESS } from "../../../constants";
|
5
|
+
import { batchMulticallCallWithRetry } from "../../../utils/generic";
|
6
|
+
import { CdpManagerInterface } from "../../../../libs/sdk/src/merkl/interface";
|
7
|
+
export async function BadgerDynamicData(chainId, campaigns) {
|
8
|
+
const pricer = await Pricer.load();
|
9
|
+
const calls = [];
|
10
|
+
calls.push({
|
11
|
+
allowFailure: false,
|
12
|
+
callData: CdpManagerInterface.encodeFunctionData("getSystemDebt"),
|
13
|
+
target: CDPMANAGER_ADDRESS,
|
14
|
+
});
|
15
|
+
return {
|
16
|
+
cached: false,
|
17
|
+
call: {
|
18
|
+
callData: calls,
|
19
|
+
handler: () => { },
|
20
|
+
reducer: async (result) => {
|
21
|
+
const dynamicData = [];
|
22
|
+
for (const campaign of campaigns) {
|
23
|
+
try {
|
24
|
+
// Blacklist management
|
25
|
+
let blacklistSupply = 0;
|
26
|
+
let calls = [];
|
27
|
+
for (const blacklisted of [
|
28
|
+
"0xFBC472DdbE6DaE23fc0771518d1791D06a52cf4D",
|
29
|
+
"0x690C74AF48BE029e763E61b4aDeB10E06119D3ba",
|
30
|
+
"0xD0A7A8B98957b9CD3cFB9c0425AbE44551158e9e",
|
31
|
+
"0x68682e8857D24A5Bb71fCd5C6Dc5867731226B62",
|
32
|
+
]) {
|
33
|
+
calls.push({
|
34
|
+
allowFailure: false,
|
35
|
+
callData: SortedCdpsInterface.encodeFunctionData("getCdpsOf", [blacklisted]),
|
36
|
+
target: SORTEDCDPS_ADDRESS,
|
37
|
+
});
|
38
|
+
}
|
39
|
+
const resCdps = await batchMulticallCallWithRetry(chainId, {
|
40
|
+
calls,
|
41
|
+
});
|
42
|
+
calls = [];
|
43
|
+
for (const res of resCdps) {
|
44
|
+
const cdp = SortedCdpsInterface.decodeFunctionResult("getCdpsOf", res.returnData)[0];
|
45
|
+
if (cdp.length !== 0) {
|
46
|
+
calls.push({
|
47
|
+
allowFailure: false,
|
48
|
+
callData: CdpManagerInterface.encodeFunctionData("Cdps", cdp),
|
49
|
+
target: CDPMANAGER_ADDRESS,
|
50
|
+
});
|
51
|
+
}
|
52
|
+
}
|
53
|
+
const resBlacklist = await batchMulticallCallWithRetry(chainId, {
|
54
|
+
calls,
|
55
|
+
});
|
56
|
+
for (const res of resBlacklist) {
|
57
|
+
const cdpBlacklistedSupply = CdpManagerInterface.decodeFunctionResult("Cdps", res.returnData)[0];
|
58
|
+
blacklistSupply += BN2Number(cdpBlacklistedSupply, campaign.campaignParameters.decimalsTargetToken);
|
59
|
+
}
|
60
|
+
const totalSupplyTargetToken = BN2Number(CdpManagerInterface.decodeFunctionResult("getSystemDebt", result[0])[0], campaign.campaignParameters.decimalsTargetToken) - blacklistSupply;
|
61
|
+
const priceRewardToken = (await pricer.get({
|
62
|
+
address: campaign.rewardToken,
|
63
|
+
chainId,
|
64
|
+
symbol: campaign.campaignParameters.symbolRewardToken,
|
65
|
+
})) ?? 0;
|
66
|
+
const priceTargetToken = (await pricer.get({
|
67
|
+
address: EBTC_ADDRESS,
|
68
|
+
chainId,
|
69
|
+
symbol: campaign.campaignParameters.symbolTargetToken,
|
70
|
+
})) ?? 0;
|
71
|
+
dynamicData.push({
|
72
|
+
...campaign,
|
73
|
+
apr: (priceRewardToken *
|
74
|
+
BN2Number(campaign.amount, campaign.campaignParameters.decimalsRewardToken) *
|
75
|
+
YEAR *
|
76
|
+
100) /
|
77
|
+
campaign.campaignParameters.duration /
|
78
|
+
(totalSupplyTargetToken * priceTargetToken),
|
79
|
+
totalSupplyTargetToken,
|
80
|
+
tvl: totalSupplyTargetToken * priceTargetToken,
|
81
|
+
});
|
82
|
+
}
|
83
|
+
catch (e) {
|
84
|
+
log.error("Failed to fetch Dolomite data", e);
|
85
|
+
// In this case we return just the staticData
|
86
|
+
dynamicData.push({ ...campaign });
|
87
|
+
}
|
88
|
+
}
|
89
|
+
return dynamicData;
|
90
|
+
},
|
91
|
+
},
|
92
|
+
};
|
93
|
+
}
|