Fixes `TotalValueLocked` out of sync in nomination pools (#3052)
The `TotalLockedValue` storage value in nomination pools pallet may get out of sync if the staking pallet does implicit withdrawal of unlocking chunks belonging to a bonded pool stash. This fix is based on a new method in the `OnStakingUpdate` traits, `on_withdraw`, which allows the nomination pools pallet to adjust the `TotalLockedValue` every time there is an implicit or explicit withdrawal from a bonded pool's stash. This PR also adds a migration that checks and updates the on-chain TVL if it got out of sync due to the bug this PR fixes. **Changes to `trait OnStakingUpdate`** In order for staking to notify the nomination pools pallet that chunks where withdrew, we add a new method, `on_withdraw` to the `OnStakingUpdate` trait. The nomination pools pallet filters the withdraws that are related to bonded pool accounts and updates the `TotalValueLocked` accordingly. **Others** - Adds try-state checks to the EPM/staking e2e tests - Adds tests for auto withdrawing in the context of nomination pools **To-do** - [x] check if we need a migration to fix the current `TotalValueLocked` (run try-runtime) - [x] migrations to fix the current on-chain TVL value**Kusama**: ``` TotalValueLocked: 99.4559 kKSM TotalValueLocked (calculated) 99.4559 kKSM ``` ️ **Westend**: ``` TotalValueLocked: 18.4060 kWND TotalValueLocked (calculated) 18.4050 kWND ``` **Polkadot**: TVL not released yet. Closes https://github.com/paritytech/polkadot-sdk/issues/3055 --------- Co-authored-by: command-bot <> Co-authored-by: Ross Bulat <ross@parity.io> Co-authored-by:
Dónal Murray <donal.murray@parity.io>
Showing
- Cargo.lock 1 addition, 0 deletionsCargo.lock
- polkadot/runtime/westend/src/lib.rs 1 addition, 1 deletionpolkadot/runtime/westend/src/lib.rs
- prdoc/pr_3052.prdoc 15 additions, 0 deletionsprdoc/pr_3052.prdoc
- substrate/frame/election-provider-multi-phase/test-staking-e2e/Cargo.toml 16 additions, 0 deletions...election-provider-multi-phase/test-staking-e2e/Cargo.toml
- substrate/frame/election-provider-multi-phase/test-staking-e2e/src/lib.rs 152 additions, 14 deletions...election-provider-multi-phase/test-staking-e2e/src/lib.rs
- substrate/frame/election-provider-multi-phase/test-staking-e2e/src/mock.rs 91 additions, 15 deletions...lection-provider-multi-phase/test-staking-e2e/src/mock.rs
- substrate/frame/nomination-pools/src/lib.rs 16 additions, 26 deletionssubstrate/frame/nomination-pools/src/lib.rs
- substrate/frame/nomination-pools/src/migration.rs 70 additions, 16 deletionssubstrate/frame/nomination-pools/src/migration.rs
- substrate/frame/nomination-pools/src/mock.rs 13 additions, 0 deletionssubstrate/frame/nomination-pools/src/mock.rs
- substrate/frame/staking/src/pallet/impls.rs 4 additions, 1 deletionsubstrate/frame/staking/src/pallet/impls.rs
- substrate/frame/staking/src/pallet/mod.rs 1 addition, 1 deletionsubstrate/frame/staking/src/pallet/mod.rs
- substrate/primitives/staking/src/lib.rs 3 additions, 0 deletionssubstrate/primitives/staking/src/lib.rs
Please register or sign in to comment