diff --git a/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/domain/nominationPools/common/rewards/RealNominationPoolRewardCalculator.kt b/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/domain/nominationPools/common/rewards/RealNominationPoolRewardCalculator.kt index 4cec59f..fc9b047 100644 --- a/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/domain/nominationPools/common/rewards/RealNominationPoolRewardCalculator.kt +++ b/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/domain/nominationPools/common/rewards/RealNominationPoolRewardCalculator.kt @@ -13,9 +13,11 @@ import io.novafoundation.nova.feature_account_api.data.model.AccountIdMap import io.novafoundation.nova.feature_staking_api.domain.model.Exposure import io.novafoundation.nova.feature_staking_impl.data.StakingOption import io.novafoundation.nova.feature_staking_impl.data.chain +import io.novafoundation.nova.feature_staking_impl.data.stakingType import io.novafoundation.nova.feature_staking_api.domain.nominationPool.model.PoolId import io.novafoundation.nova.feature_staking_impl.data.unwrapNominationPools import io.novafoundation.nova.feature_staking_impl.domain.common.StakingSharedComputation +import io.novafoundation.nova.feature_staking_impl.domain.nominationPools.stakingBackingChainId import io.novafoundation.nova.feature_staking_impl.domain.common.electedExposuresInActiveEra import io.novafoundation.nova.feature_staking_impl.domain.nominationPools.common.NominationPoolSharedComputation import io.novafoundation.nova.feature_staking_impl.domain.rewards.RewardCalculator @@ -28,6 +30,8 @@ class NominationPoolRewardCalculatorFactory( suspend fun create(stakingOption: StakingOption, sharedComputationScope: CoroutineScope): NominationPoolRewardCalculator { val chainId = stakingOption.chain.id + // For nomination pools on parachains (like Asset Hub), get exposures from parent relay chain + val stakingBackingChainId = stakingOption.chain.stakingBackingChainId(stakingOption.stakingType) val delegateOption = stakingOption.unwrapNominationPools() @@ -38,7 +42,7 @@ class NominationPoolRewardCalculatorFactory( return RealNominationPoolRewardCalculator( directStakingDelegate = delegate, - exposures = sharedStakingSharedComputation.electedExposuresInActiveEra(stakingOption.assetWithChain.chain.id, sharedComputationScope), + exposures = sharedStakingSharedComputation.electedExposuresInActiveEra(stakingBackingChainId, sharedComputationScope), commissions = poolCommissions, poolStashesById = allPoolAccounts ) diff --git a/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/domain/rewards/RewardCalculatorFactory.kt b/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/domain/rewards/RewardCalculatorFactory.kt index 997761a..47c1c62 100644 --- a/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/domain/rewards/RewardCalculatorFactory.kt +++ b/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/domain/rewards/RewardCalculatorFactory.kt @@ -13,6 +13,7 @@ import io.novafoundation.nova.feature_staking_impl.data.repository.VaraRepositor import io.novafoundation.nova.feature_staking_impl.data.stakingType import io.novafoundation.nova.feature_staking_impl.data.unwrapNominationPools import io.novafoundation.nova.feature_staking_impl.domain.common.StakingSharedComputation +import io.novafoundation.nova.feature_staking_impl.domain.nominationPools.stakingBackingChainId import io.novafoundation.nova.feature_staking_impl.domain.common.electedExposuresInActiveEra import io.novafoundation.nova.feature_staking_impl.domain.common.eraTimeCalculator import io.novafoundation.nova.feature_staking_impl.domain.error.accountIdNotFound @@ -64,10 +65,12 @@ class RewardCalculatorFactory( } suspend fun create(stakingOption: StakingOption, scope: CoroutineScope): RewardCalculator = withContext(Dispatchers.Default) { - val chainId = stakingOption.assetWithChain.chain.id + val chain = stakingOption.assetWithChain.chain + // For nomination pools on parachains (like Asset Hub), get exposures from parent relay chain + val stakingBackingChainId = chain.stakingBackingChainId(stakingOption.stakingType) - val exposures = shareStakingSharedComputation.get().electedExposuresInActiveEra(chainId, scope) - val validatorsPrefs = stakingRepository.getValidatorPrefs(chainId, exposures.keys) + val exposures = shareStakingSharedComputation.get().electedExposuresInActiveEra(stakingBackingChainId, scope) + val validatorsPrefs = stakingRepository.getValidatorPrefs(stakingBackingChainId, exposures.keys) create(stakingOption, exposures, validatorsPrefs, scope) }