diff --git a/runtime/common/src/attestations.rs b/runtime/common/src/attestations.rs index 6ae0d08b866c..ca95433a3a05 100644 --- a/runtime/common/src/attestations.rs +++ b/runtime/common/src/attestations.rs @@ -75,11 +75,19 @@ impl RewardAttestation for () { impl RewardAttestation for staking::Module { fn reward_immediate(validator_indices: impl IntoIterator) { + use staking::SessionInterface; + // The number of points to reward for a validity statement. // https://research.web3.foundation/en/latest/polkadot/Token%20Economics/#payment-details const STAKING_REWARD_POINTS: u32 = 20; - Self::reward_by_indices(validator_indices.into_iter().map(|i| (i, STAKING_REWARD_POINTS))) + let validators = T::SessionInterface::validators(); + + let validator_rewards = validator_indices.into_iter() + .filter_map(|i| validators.get(i as usize).cloned()) + .map(|v| (v, STAKING_REWARD_POINTS)); + + Self::reward_by_ids(validator_rewards); } } diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 8e7e810b574d..de7170130c61 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -275,6 +275,7 @@ parameter_types! { // 28 eras in which slashes can be cancelled (7 days). pub const SlashDeferDuration: staking::EraIndex = 28; pub const RewardCurve: &'static PiecewiseLinear<'static> = &REWARD_CURVE; + pub const MaxNominatorRewardedPerValidator: u32 = 64; } impl staking::Trait for Runtime { @@ -292,6 +293,7 @@ impl staking::Trait for Runtime { type SlashCancelOrigin = collective::EnsureProportionAtLeast<_1, _2, AccountId, CouncilCollective>; type SessionInterface = Self; type RewardCurve = RewardCurve; + type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; } parameter_types! { diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index c13d680f6c78..39679613b49e 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -282,6 +282,7 @@ parameter_types! { pub const BondingDuration: staking::EraIndex = 28; pub const SlashDeferDuration: staking::EraIndex = 28; pub const RewardCurve: &'static PiecewiseLinear<'static> = &REWARD_CURVE; + pub const MaxNominatorRewardedPerValidator: u32 = 64; } impl staking::Trait for Runtime { @@ -299,6 +300,7 @@ impl staking::Trait for Runtime { type SlashCancelOrigin = collective::EnsureProportionAtLeast<_3, _4, AccountId, CouncilCollective>; type SessionInterface = Self; type RewardCurve = RewardCurve; + type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; } parameter_types! {