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>
1.9 KiB
1.9 KiB
Changelog
All notable changes and migrations to pallet-staking will be documented in this file.
The format is loosely based on Keep a Changelog. We maintain a single integer version number for staking pallet to keep track of all storage migrations.
[v15]
Added
- New trait
DisablingStrategywhich 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. OffendingValidatorsstorage item is replaced withDisabledValidators. 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 DisableStrategyis 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 aDisablingStrategyimplementation.
v14
Added
- New item
ErasStakersPagedthat keeps up toMaxExposurePageSizeindividual nominator exposures by era, validator and page. - New item
ErasStakersOverviewcomplementary toErasStakersPagedwhich keeps state of own and total stake of the validator across pages. - New item
ClaimedRewardsto support paged rewards payout.
Deprecated
ErasStakersandErasStakersClippedis 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_rewardsin itemLedgeris renamed tolegacy_claimed_rewardsand can be removed after 84 eras.