mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-08 00:48:01 +00:00
87d41d0a89
* frame::support: GenesisConfig types for Runtime enabled * frame::support: macro generating GenesisBuild::build for RuntimeGenesisConfig * frame: ambiguity BuildStorage vs GenesisBuild fixed * fix * RuntimeGenesisBuild added * Revert "frame: ambiguity BuildStorage vs GenesisBuild fixed" This reverts commit 950f3d019d0e21c55a739c44cc19cdabd3ff0293. * Revert "fix" This reverts commit a2f76dd24e9a16cf9230d45825ed28787211118b. * Revert "RuntimeGenesisBuild added" This reverts commit 3c131b618138ced29c01ab8d15d8c6410c9e128b. * Revert "Revert "frame: ambiguity BuildStorage vs GenesisBuild fixed"" This reverts commit 2b1ecd467231eddec69f8d328039ba48a380da3d. * Revert "Revert "fix"" This reverts commit fd7fa629adf579d83e30e6ae9fd162637fc45e30. * Code review suggestions * frame: BuildGenesisConfig added, BuildGenesis deprecated * frame: some pallets updated with BuildGenesisConfig * constuct_runtime: support for BuildGenesisConfig * frame::support: genesis_build macro supports BuildGenesisConfig * frame: BuildGenesisConfig added, BuildGenesis deprecated * Cargo.lock update * test-runtime: fixes * Revert "fix" This reverts commit a2f76dd24e9a16cf9230d45825ed28787211118b. * Revert "frame: ambiguity BuildStorage vs GenesisBuild fixed" This reverts commit 950f3d019d0e21c55a739c44cc19cdabd3ff0293. * self review * doc fixed * ui tests fixed * fmt * tests fixed * genesis_build macrto fixed for non-generic GenesisConfig * BuildGenesisConfig constraints added * warning fixed * some duplication removed * fmt * fix * doc tests fix * doc fix * cleanup: remove BuildModuleGenesisStorage * self review comments * fix * Update frame/treasury/src/tests.rs Co-authored-by: Sebastian Kunert <skunert49@gmail.com> * Update frame/support/src/traits/hooks.rs Co-authored-by: Sebastian Kunert <skunert49@gmail.com> * doc fix: GenesisBuild exposed * ".git/.scripts/commands/fmt/fmt.sh" * frame: more serde(skip) + cleanup * Update frame/support/src/traits/hooks.rs Co-authored-by: Davide Galassi <davxy@datawok.net> * frame: phantom fields moved to the end of structs * chain-spec: Default::default cleanup * test-runtime: phantom at the end * merge master fixes * fix * fix * fix * fix * fix (facepalm) * Update frame/support/procedural/src/pallet/expand/genesis_build.rs Co-authored-by: Bastian Köcher <git@kchr.de> * fmt * fix * fix --------- Co-authored-by: parity-processbot <> Co-authored-by: Sebastian Kunert <skunert49@gmail.com> Co-authored-by: Davide Galassi <davxy@datawok.net> Co-authored-by: Bastian Köcher <git@kchr.de>
Session Pallet
The Session module allows validators to manage their session keys, provides a function for changing the session length, and handles session rotation.
Overview
Terminology
- Session: A session is a period of time that has a constant set of validators. Validators can only join
or exit the validator set at a session change. It is measured in block numbers. The block where a session is
ended is determined by the
ShouldEndSessiontrait. When the session is ending, a new validator set can be chosen byOnSessionEndingimplementations. - Session key: A session key is actually several keys kept together that provide the various signing functions required by network authorities/validators in pursuit of their duties.
- Validator ID: Every account has an associated validator ID. For some simple staking systems, this may just be the same as the account ID. For staking systems using a stash/controller model, the validator ID would be the stash account ID of the controller.
- Session key configuration process: Session keys are set using
set_keysfor use not in the next session, but the session after next. They are stored inNextKeys, a mapping between the caller'sValidatorIdand the session keys provided.set_keysallows users to set their session key prior to being selected as validator. It is a public call since it usesensure_signed, which checks that the origin is a signed account. As such, the account ID of the origin stored inNextKeysmay not necessarily be associated with a block author or a validator. The session keys of accounts are removed once their account balance is zero. - Session length: This pallet does not assume anything about the length of each session.
Rather, it relies on an implementation of
ShouldEndSessionto dictate a new session's start. This pallet provides thePeriodicSessionsstruct for simple periodic sessions. - Session rotation configuration: Configure as either a 'normal' (rewardable session where rewards are applied) or 'exceptional' (slashable) session rotation.
- Session rotation process: At the beginning of each block, the
on_initializefunction queries the provided implementation ofShouldEndSession. If the session is to end the newly activated validator IDs and session keys are taken from storage and passed to theSessionHandler. The validator set supplied bySessionManager::new_sessionand the corresponding session keys, which may have been registered viaset_keysduring the previous session, are written to storage where they will wait one session before being passed to theSessionHandlerthemselves.
Goals
The Session pallet is designed to make the following possible:
- Set session keys of the validator set for upcoming sessions.
- Control the length of sessions.
- Configure and switch between either normal or exceptional session rotations.
Interface
Dispatchable Functions
set_keys- Set a validator's session keys for upcoming sessions.
Public Functions
rotate_session- Change to the next session. Register the new authority set. Queue changes for next session rotation.disable_index- Disable a validator by index.disable- Disable a validator by Validator ID
Usage
Example from the FRAME
The Staking pallet uses the Session pallet to get the validator set.
use pallet_session as session;
fn validators<T: pallet_session::Config>() -> Vec<<T as pallet_session::Config>::ValidatorId> {
<pallet_session::Pallet<T>>::validators()
}
Related Pallets
License: Apache-2.0