mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-29 13:48:00 +00:00
Introduces account existence providers reference counting (#7363)
* Initial draft * Latest changes * Final bits. * Fixes * Fixes * Test fixes * Fix tests * Fix babe tests * Fix * Fix * Fix * Fix * Fix * fix warnings in assets * Fix UI tests * fix line width * Fix * Update frame/system/src/lib.rs Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * Update frame/system/src/lib.rs Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * Fix * fix unused warnings * Fix * Update frame/system/src/lib.rs Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> * Update frame/system/src/lib.rs Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> * Fix * fix slash and comprehensive slash test * fix reserved slash and comprehensive tests * check slash on non-existent account * Revert "Fix UI tests" This reverts commit e0002c0f13442f7d0c95a054a6c515536328a4a0. * Fix * Fix utility tests * keep dispatch error backwards compatible * Fix * Fix * fix ui test * Companion checker shouldn't be so anal. * Fix * Fix * Fix * Apply suggestions from code review Co-authored-by: Alexander Popiak <alexander.popiak@parity.io> * Update frame/balances/src/lib.rs Co-authored-by: Alexander Popiak <alexander.popiak@parity.io> * return correct slash info when failing gracefully * fix missing import * Update frame/system/src/lib.rs Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> * Fix * Update frame/balances/src/tests_local.rs Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> * Fixes Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com> Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> Co-authored-by: Alexander Popiak <alexander.popiak@parity.io>
This commit is contained in:
@@ -397,7 +397,7 @@ benchmarks! {
|
||||
let s in 1 .. MAX_SPANS;
|
||||
let (stash, controller) = create_stash_controller::<T>(0, 100, Default::default())?;
|
||||
add_slashing_spans::<T>(&stash, s);
|
||||
T::Currency::make_free_balance_be(&stash, 0u32.into());
|
||||
T::Currency::make_free_balance_be(&stash, T::Currency::minimum_balance());
|
||||
whitelist_account!(controller);
|
||||
}: _(RawOrigin::Signed(controller), stash.clone(), s)
|
||||
verify {
|
||||
|
||||
@@ -1222,6 +1222,8 @@ decl_error! {
|
||||
IncorrectHistoryDepth,
|
||||
/// Incorrect number of slashing spans provided.
|
||||
IncorrectSlashingSpans,
|
||||
/// Internal state has become somehow corrupted and the operation cannot continue.
|
||||
BadState,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1423,13 +1425,13 @@ decl_module! {
|
||||
Err(Error::<T>::InsufficientValue)?
|
||||
}
|
||||
|
||||
system::Module::<T>::inc_consumers(&stash).map_err(|_| Error::<T>::BadState)?;
|
||||
|
||||
// You're auto-bonded forever, here. We might improve this by only bonding when
|
||||
// you actually validate/nominate and remove once you unbond __everything__.
|
||||
<Bonded<T>>::insert(&stash, &controller);
|
||||
<Payee<T>>::insert(&stash, payee);
|
||||
|
||||
system::Module::<T>::inc_ref(&stash);
|
||||
|
||||
let current_era = CurrentEra::get().unwrap_or(0);
|
||||
let history_depth = Self::history_depth();
|
||||
let last_reward_era = current_era.saturating_sub(history_depth);
|
||||
@@ -2028,9 +2030,9 @@ decl_module! {
|
||||
}
|
||||
}
|
||||
|
||||
/// Remove all data structure concerning a staker/stash once its balance is zero.
|
||||
/// Remove all data structure concerning a staker/stash once its balance is at the minimum.
|
||||
/// This is essentially equivalent to `withdraw_unbonded` except it can be called by anyone
|
||||
/// and the target `stash` must have no funds left.
|
||||
/// and the target `stash` must have no funds left beyond the ED.
|
||||
///
|
||||
/// This can be called from any origin.
|
||||
///
|
||||
@@ -2045,7 +2047,8 @@ decl_module! {
|
||||
/// # </weight>
|
||||
#[weight = T::WeightInfo::reap_stash(*num_slashing_spans)]
|
||||
fn reap_stash(_origin, stash: T::AccountId, num_slashing_spans: u32) {
|
||||
ensure!(T::Currency::total_balance(&stash).is_zero(), Error::<T>::FundedTarget);
|
||||
let at_minimum = T::Currency::total_balance(&stash) == T::Currency::minimum_balance();
|
||||
ensure!(at_minimum, Error::<T>::FundedTarget);
|
||||
Self::kill_stash(&stash, num_slashing_spans)?;
|
||||
T::Currency::remove_lock(STAKING_ID, &stash);
|
||||
}
|
||||
@@ -3007,7 +3010,7 @@ impl<T: Config> Module<T> {
|
||||
<Validators<T>>::remove(stash);
|
||||
<Nominators<T>>::remove(stash);
|
||||
|
||||
system::Module::<T>::dec_ref(stash);
|
||||
system::Module::<T>::dec_consumers(stash);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -395,6 +395,8 @@ impl ExtBuilder {
|
||||
};
|
||||
|
||||
let num_validators = self.num_validators.unwrap_or(self.validator_count);
|
||||
// Check that the number of validators is sensible.
|
||||
assert!(num_validators <= 8);
|
||||
let validators = (0..num_validators)
|
||||
.map(|x| ((x + 1) * 10 + 1) as AccountId)
|
||||
.collect::<Vec<_>>();
|
||||
@@ -413,6 +415,14 @@ impl ExtBuilder {
|
||||
(31, balance_factor * 2000),
|
||||
(40, balance_factor),
|
||||
(41, balance_factor * 2000),
|
||||
(50, balance_factor),
|
||||
(51, balance_factor * 2000),
|
||||
(60, balance_factor),
|
||||
(61, balance_factor * 2000),
|
||||
(70, balance_factor),
|
||||
(71, balance_factor * 2000),
|
||||
(80, balance_factor),
|
||||
(81, balance_factor * 2000),
|
||||
(100, 2000 * balance_factor),
|
||||
(101, 2000 * balance_factor),
|
||||
// This allows us to have a total_payout different from 0.
|
||||
|
||||
@@ -1540,7 +1540,7 @@ fn on_free_balance_zero_stash_removes_validator() {
|
||||
// Reduce free_balance of stash to 0
|
||||
let _ = Balances::slash(&11, Balance::max_value());
|
||||
// Check total balance of stash
|
||||
assert_eq!(Balances::total_balance(&11), 0);
|
||||
assert_eq!(Balances::total_balance(&11), 10);
|
||||
|
||||
// Reap the stash
|
||||
assert_ok!(Staking::reap_stash(Origin::none(), 11, 0));
|
||||
@@ -1596,7 +1596,7 @@ fn on_free_balance_zero_stash_removes_nominator() {
|
||||
// Reduce free_balance of stash to 0
|
||||
let _ = Balances::slash(&11, Balance::max_value());
|
||||
// Check total balance of stash
|
||||
assert_eq!(Balances::total_balance(&11), 0);
|
||||
assert_eq!(Balances::total_balance(&11), 10);
|
||||
|
||||
// Reap the stash
|
||||
assert_ok!(Staking::reap_stash(Origin::none(), 11, 0));
|
||||
@@ -2454,8 +2454,8 @@ fn garbage_collection_after_slashing() {
|
||||
// validator and nominator slash in era are garbage-collected by era change,
|
||||
// so we don't test those here.
|
||||
|
||||
assert_eq!(Balances::free_balance(11), 0);
|
||||
assert_eq!(Balances::total_balance(&11), 0);
|
||||
assert_eq!(Balances::free_balance(11), 2);
|
||||
assert_eq!(Balances::total_balance(&11), 2);
|
||||
|
||||
let slashing_spans = <Staking as crate::Store>::SlashingSpans::get(&11).unwrap();
|
||||
assert_eq!(slashing_spans.iter().count(), 2);
|
||||
|
||||
Reference in New Issue
Block a user