mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 15:11:02 +00:00
988e30f102
Closes https://github.com/paritytech/polkadot-sdk/issues/1966, https://github.com/paritytech/polkadot-sdk/issues/1963 and https://github.com/paritytech/polkadot-sdk/issues/1962. Disabling strategy specification [here](https://github.com/paritytech/polkadot-sdk/pull/2955). (Updated 13/02/2024) Implements: * validator disabling for a whole era instead of just a session * no more than 1/3 of the validators in the active set are disabled Removes: * `DisableStrategy` enum - now each validator committing an offence is disabled. * New era is not forced if too many validators are disabled. Before this PR not all offenders were disabled. A decision was made based on [`enum DisableStrategy`](https://github.com/paritytech/polkadot-sdk/blob/bbb6631641f9adba30c0ee6f4d11023a424dd362/substrate/primitives/staking/src/offence.rs#L54). Some offenders were disabled for a whole era, some just for a session, some were not disabled at all. This PR changes the disabling behaviour. Now a validator committing an offense is disabled immediately till the end of the current era. Some implementation notes: * `OffendingValidators` in pallet session keeps all offenders (this is not changed). However its type is changed from `Vec<(u32, bool)>` to `Vec<u32>`. The reason is simple - each offender is getting disabled so the bool doesn't make sense anymore. * When a validator is disabled it is first added to `OffendingValidators` and then to `DisabledValidators`. This is done in [`add_offending_validator`](https://github.com/paritytech/polkadot-sdk/blob/bbb6631641f9adba30c0ee6f4d11023a424dd362/substrate/frame/staking/src/slashing.rs#L325) from staking pallet. * In [`rotate_session`](https://github.com/paritytech/polkadot-sdk/blob/bdbe98297032e21a553bf191c530690b1d591405/substrate/frame/session/src/lib.rs#L623) the `end_session` also calls [`end_era`](https://github.com/paritytech/polkadot-sdk/blob/bbb6631641f9adba30c0ee6f4d11023a424dd362/substrate/frame/staking/src/pallet/impls.rs#L490) when an era ends. In this case `OffendingValidators` are cleared **(1)**. * Then in [`rotate_session`](https://github.com/paritytech/polkadot-sdk/blob/bdbe98297032e21a553bf191c530690b1d591405/substrate/frame/session/src/lib.rs#L623) `DisabledValidators` are cleared **(2)** * And finally (still in `rotate_session`) a call to [`start_session`](https://github.com/paritytech/polkadot-sdk/blob/bbb6631641f9adba30c0ee6f4d11023a424dd362/substrate/frame/staking/src/pallet/impls.rs#L430) repopulates the disabled validators **(3)**. * The reason for this complication is that session pallet knows nothing abut eras. To overcome this on each new session the disabled list is repopulated (points 2 and 3). Staking pallet knows when a new era starts so with point 1 it ensures that the offenders list is cleared. --------- Co-authored-by: ordian <noreply@reusable.software> Co-authored-by: ordian <write@reusable.software> Co-authored-by: Maciej <maciej.zyszkiewicz@parity.io> Co-authored-by: Gonçalo Pestana <g6pestana@gmail.com> Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Co-authored-by: command-bot <> Co-authored-by: Ankan <10196091+Ank4n@users.noreply.github.com>
47 lines
1.9 KiB
Markdown
47 lines
1.9 KiB
Markdown
# Changelog
|
|
|
|
All notable changes and migrations to pallet-staking will be documented in this file.
|
|
|
|
The format is loosely based
|
|
on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). We maintain a
|
|
single integer version number for staking pallet to keep track of all storage
|
|
migrations.
|
|
|
|
## [v15]
|
|
|
|
### Added
|
|
|
|
- New trait `DisablingStrategy` which is responsible for making a decision which offenders should be
|
|
disabled on new offence.
|
|
- Default implementation of `DisablingStrategy` - `UpToLimitDisablingStrategy`. It
|
|
disables each new offender up to a threshold (1/3 by default). Offenders are not runtime disabled for
|
|
offences in previous era(s). But they will be low-priority node-side disabled for dispute initiation.
|
|
- `OffendingValidators` storage item is replaced with `DisabledValidators`. The former keeps all
|
|
offenders and if they are disabled or not. The latter just keeps a list of all offenders as they
|
|
are disabled by default.
|
|
|
|
### Deprecated
|
|
|
|
- `enum DisableStrategy` is no longer needed because disabling is not related to the type of the
|
|
offence anymore. A decision if a offender is disabled or not is made by a `DisablingStrategy`
|
|
implementation.
|
|
|
|
## [v14]
|
|
|
|
### Added
|
|
|
|
- New item `ErasStakersPaged` that keeps up to `MaxExposurePageSize`
|
|
individual nominator exposures by era, validator and page.
|
|
- New item `ErasStakersOverview` complementary to `ErasStakersPaged` which keeps
|
|
state of own and total stake of the validator across pages.
|
|
- New item `ClaimedRewards` to support paged rewards payout.
|
|
|
|
### Deprecated
|
|
|
|
- `ErasStakers` and `ErasStakersClipped` is deprecated, will not be used any longer for the exposures of the new era
|
|
post v14 and can be removed after 84 eras once all the exposures are stale.
|
|
- Field `claimed_rewards` in item `Ledger` is renamed
|
|
to `legacy_claimed_rewards` and can be removed after 84 eras.
|
|
|
|
[v14]: https://github.com/paritytech/substrate/pull/13498
|