-
Notifications
You must be signed in to change notification settings - Fork 684
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fixes TotalValueLocked
out of sync in nomination pools
#3052
Conversation
TotalValueLocked
out of sync in nomination pools
bot fmt |
@gpestana https://gitlab.parity.io/parity/mirrors/polkadot-sdk/-/jobs/5024240 was started for your command Comment |
@gpestana Command |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This warning comment for EventListeners
should probably be updated to reflect the additional on_withdraw
use case.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Neat solution of fixing the issue and removing a function on the pools side. Looks like a good approval once the migration has been determined.
@@ -2265,7 +2244,8 @@ pub mod pallet { | |||
|
|||
// Before calculating the `balance_to_unbond`, we call withdraw unbonded to ensure the | |||
// `transferrable_balance` is correct. | |||
let stash_killed = bonded_pool.withdraw_from_staking(num_slashing_spans)?; | |||
let stash_killed = |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we not update the TVL here, instead of needing the on_withdraw
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's what the fn withdraw_from_staking
was doing. However that's insufficient because staking may withdraw unlocking chunks from a bonded pool account without an explicit request from pools. If that happens, the TVL in the pool is not updated.
This is the culprit code on the staking side: https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/staking/src/pallet/mod.rs#L1029-L1039.
Co-authored-by: Ross Bulat <ross@parity.io>
Co-authored-by: Ross Bulat <ross@parity.io>
Co-authored-by: Ross Bulat <ross@parity.io>
The CI pipeline was cancelled due to failure one of the required jobs. |
The CI pipeline was cancelled due to failure one of the required jobs. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM - sorry for the grammatical tweaks 😀
substrate/frame/election-provider-multi-phase/test-staking-e2e/src/lib.rs
Outdated
Show resolved
Hide resolved
Co-authored-by: Dónal Murray <donal.murray@parity.io>
…/src/lib.rs Co-authored-by: Dónal Murray <donal.murray@parity.io>
Co-authored-by: Dónal Murray <donal.murray@parity.io>
…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 paritytech#3055 --------- Co-authored-by: command-bot <> Co-authored-by: Ross Bulat <ross@parity.io> Co-authored-by: Dónal Murray <donal.murray@parity.io>
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 theOnStakingUpdate
traits,on_withdraw
, which allows the nomination pools pallet to adjust theTotalLockedValue
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 theOnStakingUpdate
trait. The nomination pools pallet filters the withdraws that are related to bonded pool accounts and updates theTotalValueLocked
accordingly.Others
To-do
TotalValueLocked
(run try-runtime)✅ Kusama:
Polkadot: TVL not released yet.
Closes #3055