diff --git a/src/config/default.json b/src/config/default.json index 9ec54bd0c..b1f3147c3 100644 --- a/src/config/default.json +++ b/src/config/default.json @@ -101,7 +101,7 @@ "createPair": 30000000, "issueToken": 270000000, "setLocalRoles": 270000000, - "multiPairSwapMultiplier": 100000000, + "multiPairSwapMultiplier": 110000000, "swapEnableByUser": 180000000, "admin": { "setState": 200000000, diff --git a/src/config/mainnet.json b/src/config/mainnet.json index c3fbd0296..afe2b11fc 100644 --- a/src/config/mainnet.json +++ b/src/config/mainnet.json @@ -98,7 +98,8 @@ "erd1qqqqqqqqqqqqqpgqmvzrwmwkrrzug50e64kk7xerufncp47d2jpsf9m8rx", "erd1qqqqqqqqqqqqqpgqc6fyckfxvehlwr2zvfl34dycwgtm988g2jpsrnyazn", "erd1qqqqqqqqqqqqqpgqm78a0zmuqlm7z5qw9nseg6ecdszafljp2jpsxkm4rp", - "erd1qqqqqqqqqqqqqpgqk5xplswklltypmazcxx5mhn3jdvaxuf92jpsudss7r" + "erd1qqqqqqqqqqqqqpgqk5xplswklltypmazcxx5mhn3jdvaxuf92jpsudss7r", + "erd1qqqqqqqqqqqqqpgqjgtun0fhl2em5ayukvahm3myltaxc5tz2jpssz8axf" ] } }, diff --git a/src/config/staging.json b/src/config/staging.json index 7a35010c8..2ae7375dc 100644 --- a/src/config/staging.json +++ b/src/config/staging.json @@ -98,7 +98,8 @@ "erd1qqqqqqqqqqqqqpgqmvzrwmwkrrzug50e64kk7xerufncp47d2jpsf9m8rx", "erd1qqqqqqqqqqqqqpgqc6fyckfxvehlwr2zvfl34dycwgtm988g2jpsrnyazn", "erd1qqqqqqqqqqqqqpgqm78a0zmuqlm7z5qw9nseg6ecdszafljp2jpsxkm4rp", - "erd1qqqqqqqqqqqqqpgqk5xplswklltypmazcxx5mhn3jdvaxuf92jpsudss7r" + "erd1qqqqqqqqqqqqqpgqk5xplswklltypmazcxx5mhn3jdvaxuf92jpsudss7r", + "erd1qqqqqqqqqqqqqpgqjgtun0fhl2em5ayukvahm3myltaxc5tz2jpssz8axf" ] } }, diff --git a/src/modules/user/services/userEnergy/user.energy.compute.service.ts b/src/modules/user/services/userEnergy/user.energy.compute.service.ts index 8d99730f8..ce63fa20e 100644 --- a/src/modules/user/services/userEnergy/user.energy.compute.service.ts +++ b/src/modules/user/services/userEnergy/user.energy.compute.service.ts @@ -1,12 +1,16 @@ import { Injectable } from '@nestjs/common'; -import { constantsConfig, scAddress } from '../../../../config'; +import { scAddress } from '../../../../config'; import { EnergyType } from '@multiversx/sdk-exchange'; import { ClaimProgress } from '../../../../submodules/weekly-rewards-splitting/models/weekly-rewards-splitting.model'; -import { ContractType, OutdatedContract, UserDualYiledToken } from '../../models/user.model'; +import { + ContractType, + OutdatedContract, + UserDualYiledToken, +} from '../../models/user.model'; import { ProxyService } from '../../../proxy/services/proxy.service'; import { StakingProxyService } from '../../../staking-proxy/services/staking.proxy.service'; import { FarmVersion } from '../../../farm/models/farm.model'; -import { farmVersion, farmsAddresses } from '../../../../utils/farm.utils'; +import { farmVersion } from '../../../../utils/farm.utils'; import { BigNumber } from 'bignumber.js'; import { WeekTimekeepingAbiService } from 'src/submodules/week-timekeeping/services/week-timekeeping.abi.service'; import { WeeklyRewardsSplittingAbiService } from 'src/submodules/weekly-rewards-splitting/services/weekly-rewards-splitting.abi.service'; @@ -19,7 +23,6 @@ import { Constants } from '@multiversx/sdk-nestjs-common'; import { EnergyAbiService } from 'src/modules/energy/services/energy.abi.service'; import { RemoteConfigGetterService } from 'src/modules/remote-config/remote-config.getter.service'; import { StakingService } from 'src/modules/staking/services/staking.service'; -import { ContextGetterService } from 'src/services/context/context.getter.service'; import { PaginationArgs } from 'src/modules/dex.model'; import { UserMetaEsdtService } from '../user.metaEsdt.service'; @@ -37,7 +40,6 @@ export class UserEnergyComputeService { private readonly proxyService: ProxyService, private readonly remoteConfig: RemoteConfigGetterService, private readonly userMetaEsdtService: UserMetaEsdtService, - private readonly contextGetter: ContextGetterService, ) {} async getUserOutdatedContracts( @@ -221,47 +223,45 @@ export class UserEnergyComputeService { } async computeActiveFarmsV2ForUser(userAddress: string): Promise { - const userNfts = await this.contextGetter.getNftsForUser( - userAddress, - 0, - constantsConfig.MAX_USER_NFTS, - ); - const stakingProxies = await this.stakeProxyService.getStakingProxies(); - const filterAddresses = [ - ...farmsAddresses([FarmVersion.V2]), - stakingProxies.map((proxy) => proxy.address), - scAddress.proxyDexAddress.v2, - ]; - const filteredNfts = userNfts.filter((nft) => - filterAddresses.includes(nft.creator), - ); - const userActiveFarmAddresses = filteredNfts - .filter((nft) => - farmsAddresses([FarmVersion.V2]).includes(nft.creator), - ) - .map((nft) => nft.creator); + const maxPagination = new PaginationArgs({ + limit: 100, + offset: 0, + }); + const [farmTokens, farmLockedTokens, dualYieldTokens] = + await Promise.all([ + this.userMetaEsdtService.getUserFarmTokens( + userAddress, + maxPagination, + false, + ), + this.userMetaEsdtService.getUserLockedFarmTokensV2( + userAddress, + maxPagination, + false, + ), + this.userMetaEsdtService.getUserDualYieldTokens( + userAddress, + maxPagination, + false, + ), + ]); - const proxyNfts = filteredNfts.filter( - (nft) => nft.creator === scAddress.proxyDexAddress.v2, - ); - const promisesFarmLockedTokens = proxyNfts.map((token) => - this.decodeAndGetFarmAddressFarmLockedTokens( + let userActiveFarmAddresses = farmTokens.map((token) => token.creator); + const promisesFarmLockedTokens = farmLockedTokens.map((token) => { + return this.decodeAndGetFarmAddressFarmLockedTokens( token.identifier, token.attributes, - ), - ); - userActiveFarmAddresses.push( - ...(await Promise.all(promisesFarmLockedTokens)), - ); + ); + }); + const promisesDualYieldTokens = dualYieldTokens.map((token) => { + return this.getFarmAddressForDualYieldToken(token.collection); + }); - const stakingProxyNfts = filteredNfts.filter((nft) => - stakingProxies.map((proxy) => proxy.address).includes(nft.creator), - ); - const promisesDualYieldTokens = stakingProxyNfts.map((token) => - this.getFarmAddressForDualYieldToken(token.identifier), - ); - userActiveFarmAddresses.push( - ...(await Promise.all(promisesDualYieldTokens)), + userActiveFarmAddresses = userActiveFarmAddresses.concat( + await Promise.all([ + ...promisesFarmLockedTokens, + ...promisesDualYieldTokens, + ]), ); return [...new Set(userActiveFarmAddresses)].filter( (address) => farmVersion(address) === FarmVersion.V2, @@ -326,6 +326,10 @@ export class UserEnergyComputeService { } async getFarmAddressForDualYieldToken(collection: string): Promise { + if (!collection || collection === undefined) { + return undefined; + } + const stakingProxyAddress = await this.stakeProxyService.getStakingProxyAddressByDualYieldTokenID( collection, diff --git a/src/services/context/context.getter.service.ts b/src/services/context/context.getter.service.ts index 606ba787c..ce7d82f94 100644 --- a/src/services/context/context.getter.service.ts +++ b/src/services/context/context.getter.service.ts @@ -61,23 +61,7 @@ export class ContextGetterService extends GenericGetterService { type = 'MetaESDT', collections?: string[], ): Promise { - const cacheKey = this.getCacheKey('nftsForUser', address, from, size); - let nfts = await this.cachingService.getRemote(cacheKey); - if (nfts) { - const userNfts = collections - ? nfts - .filter((nft) => collections.includes(nft.collection)) - .slice(from, size) - : nfts.slice(from, size); - return userNfts; - } - - nfts = await this.apiService.getNftsForUser(address, type); - await this.cachingService.setRemote( - cacheKey, - nfts, - Constants.oneSecond() * 6, - ); + const nfts = await this.apiService.getNftsForUser(address, type); const userNfts = collections ? nfts