mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-20 03:31:03 +00:00
Only maintain at most 1 UnlockChunk per era (#10670)
* Only maintain at most 1 `UnlockChunk` per era * Bound `unlocking` * Run cargo +nightly-2021-10-29 fmt * Make benchmarks stuff compile * Update frame/staking/src/lib.rs Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * Remove DerefMut; Implement neccesary methods directly * Doc comments for new BoundedVec methods * Fix benchmarks * wip bonded_vec macro * Correct rust doc * Apply suggestions from code review Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * Update staking::Config impls * Add MaxUnlockingChunks to more places * Use defensive saturating add * FMT Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com>
This commit is contained in:
@@ -301,6 +301,7 @@ mod pallet;
|
||||
|
||||
use codec::{Decode, Encode, HasCompact};
|
||||
use frame_support::{
|
||||
parameter_types,
|
||||
traits::{ConstU32, Currency, Get},
|
||||
weights::Weight,
|
||||
BoundedVec, EqNoBound, PartialEqNoBound, RuntimeDebugNoBound,
|
||||
@@ -347,6 +348,10 @@ type NegativeImbalanceOf<T> = <<T as Config>::Currency as Currency<
|
||||
<T as frame_system::Config>::AccountId,
|
||||
>>::NegativeImbalance;
|
||||
|
||||
parameter_types! {
|
||||
pub MaxUnlockingChunks: u32 = 32;
|
||||
}
|
||||
|
||||
/// Information regarding the active era (era in used in session).
|
||||
#[derive(Encode, Decode, RuntimeDebug, TypeInfo)]
|
||||
pub struct ActiveEraInfo {
|
||||
@@ -446,9 +451,10 @@ pub struct StakingLedger<AccountId, Balance: HasCompact> {
|
||||
/// rounds.
|
||||
#[codec(compact)]
|
||||
pub active: Balance,
|
||||
/// Any balance that is becoming free, which may eventually be transferred out
|
||||
/// of the stash (assuming it doesn't get slashed first).
|
||||
pub unlocking: Vec<UnlockChunk<Balance>>,
|
||||
/// Any balance that is becoming free, which may eventually be transferred out of the stash
|
||||
/// (assuming it doesn't get slashed first). It is assumed that this will be treated as a first
|
||||
/// in, first out queue where the new (higher value) eras get pushed on the back.
|
||||
pub unlocking: BoundedVec<UnlockChunk<Balance>, MaxUnlockingChunks>,
|
||||
/// List of eras for which the stakers behind a validator have claimed rewards. Only updated
|
||||
/// for validators.
|
||||
pub claimed_rewards: Vec<EraIndex>,
|
||||
@@ -463,7 +469,7 @@ impl<AccountId, Balance: HasCompact + Copy + Saturating + AtLeast32BitUnsigned +
|
||||
stash,
|
||||
total: Zero::zero(),
|
||||
active: Zero::zero(),
|
||||
unlocking: vec![],
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
}
|
||||
}
|
||||
@@ -472,7 +478,7 @@ impl<AccountId, Balance: HasCompact + Copy + Saturating + AtLeast32BitUnsigned +
|
||||
/// total by the sum of their balances.
|
||||
fn consolidate_unlocked(self, current_era: EraIndex) -> Self {
|
||||
let mut total = self.total;
|
||||
let unlocking = self
|
||||
let unlocking: BoundedVec<_, _> = self
|
||||
.unlocking
|
||||
.into_iter()
|
||||
.filter(|chunk| {
|
||||
@@ -483,7 +489,11 @@ impl<AccountId, Balance: HasCompact + Copy + Saturating + AtLeast32BitUnsigned +
|
||||
false
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
.collect::<Vec<_>>()
|
||||
.try_into()
|
||||
.expect(
|
||||
"filtering items from a bounded vec always leaves length less than bounds. qed",
|
||||
);
|
||||
|
||||
Self {
|
||||
stash: self.stash,
|
||||
|
||||
Reference in New Issue
Block a user