mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 14:01:06 +00:00
More tests and checks confirming that ledger.controller is always correct. (#2599)
A bonded ledger fetched with the `StakingLedger` implementation exposes a method `ledger.controller()` that returns the controller of the ledger. However, that controller is computed and stored under the `ledger.controller` field on the fly - i.e when the ledger is fetched from storage using the `StakingLedger::get` method. The controller field is never stored in storage. This PR add a few more tests checks and improves the ledger try-state checks to make sure these invariants hold true. --------- Co-authored-by: command-bot <> Co-authored-by: Bastian Köcher <git@kchr.de> Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com>
This commit is contained in:
@@ -255,6 +255,20 @@ fn change_controller_works() {
|
||||
assert_eq!(Staking::bonded(&stash), Some(stash));
|
||||
mock::start_active_era(1);
|
||||
|
||||
// fetch the ledger from storage and check if the controller is correct.
|
||||
let ledger = Staking::ledger(StakingAccount::Stash(stash)).unwrap();
|
||||
assert_eq!(ledger.controller(), Some(stash));
|
||||
|
||||
// same if we fetch the ledger by controller.
|
||||
let ledger = Staking::ledger(StakingAccount::Controller(stash)).unwrap();
|
||||
assert_eq!(ledger.controller, Some(stash));
|
||||
assert_eq!(ledger.controller(), Some(stash));
|
||||
|
||||
// the raw storage ledger's controller is always `None`. however, we can still fetch the
|
||||
// correct controller with `ledger.controler()`.
|
||||
let raw_ledger = <Ledger<Test>>::get(&stash).unwrap();
|
||||
assert_eq!(raw_ledger.controller, None);
|
||||
|
||||
// `controller` is no longer in control. `stash` is now controller.
|
||||
assert_noop!(
|
||||
Staking::validate(RuntimeOrigin::signed(controller), ValidatorPrefs::default()),
|
||||
|
||||
Reference in New Issue
Block a user