diff --git a/pallets/parachain-staking/src/auto_compound.rs b/pallets/parachain-staking/src/auto_compound.rs index 919866904d..a59982be39 100644 --- a/pallets/parachain-staking/src/auto_compound.rs +++ b/pallets/parachain-staking/src/auto_compound.rs @@ -63,6 +63,10 @@ where Self(sorted_delegations) } + pub fn get_auto_compounding_delegation_count(candidate: &T::AccountId) -> usize { + >::decode_len(candidate).unwrap_or_default() + } + /// Retrieves an instance of [AutoCompoundingDelegations] storage as [AutoCompoundDelegations]. pub fn get_storage(candidate: &T::AccountId) -> Self { Self(>::get(candidate)) @@ -205,7 +209,7 @@ where if !auto_compound.is_zero() { ensure!( - Self::get_storage(&candidate).len() + Self::get_auto_compounding_delegation_count(&candidate) as u32 <= candidate_auto_compounding_delegation_count_hint, >::TooLowCandidateAutoCompoundingDelegationCountToDelegate, ); diff --git a/pallets/parachain-staking/src/lib.rs b/pallets/parachain-staking/src/lib.rs index e61d81ff60..eff3cde70e 100644 --- a/pallets/parachain-staking/src/lib.rs +++ b/pallets/parachain-staking/src/lib.rs @@ -1512,11 +1512,11 @@ pub mod pallet { candidate: T::AccountId, ) -> DispatchResultWithPostInfo { let state = >::get(&candidate).ok_or(Error::::CandidateDNE)?; - let ac_state = >::get(&candidate); + let actual_auto_compound_delegation_count = + >::decode_len(&candidate).unwrap_or_default() as u32; // TODO use these to return actual weight used via `execute_leave_candidates_ideal` let actual_delegation_count = state.delegation_count; - let actual_auto_compound_delegation_count = ac_state.len() as u32; let actual_weight = T::WeightInfo::execute_leave_candidates_ideal( actual_delegation_count, actual_auto_compound_delegation_count, @@ -1788,7 +1788,8 @@ pub mod pallet { let num_delegators = state.delegations.len(); let mut num_paid_delegations = 0u32; let mut num_auto_compounding = 0u32; - let num_scheduled_requests = >::get(&collator).len(); + let num_scheduled_requests = + >::decode_len(&collator).unwrap_or_default(); if state.delegations.is_empty() { // solo collator with no delegators extra_weight = extra_weight @@ -2057,7 +2058,7 @@ pub mod pallet { ); let actual_weight = T::WeightInfo::delegator_bond_more( - >::get(&candidate).len() as u32, + >::decode_len(&candidate).unwrap_or_default() as u32, ); let in_top = state .increase_delegation::(candidate.clone(), more)