• Gonçalo Pestana's avatar
    Fixes `TotalValueLocked` out of sync in nomination pools (#3052) · aac07af0
    Gonçalo Pestana authored
    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: default avatarRoss Bulat <[email protected]>
    Co-authored-by: default avatarDónal Murray <[email protected]>
    aac07af0