Struct pallet_staking::Pallet

source ·
pub struct Pallet<T>(_);
Expand description

The pallet implementing the on-chain logic.

Implementations§

source§

impl<T: Config> Pallet<T>

source

pub fn slashable_balance_of(stash: &T::AccountId) -> BalanceOf<T>

The total balance that can be slashed from a stash account as of right now.

source

pub fn slashable_balance_of_vote_weight( stash: &T::AccountId, issuance: BalanceOf<T> ) -> VoteWeight

Internal impl of Self::slashable_balance_of that returns VoteWeight.

source

pub fn weight_of_fn() -> Box<dyn Fn(&T::AccountId) -> VoteWeight>

Returns a closure around slashable_balance_of_vote_weight that can be passed around.

This prevents call sites from repeatedly requesting total_issuance from backend. But it is important to be only used while the total issuance is not changing.

source

pub fn weight_of(who: &T::AccountId) -> VoteWeight

Same as weight_of_fn, but made for one time use.

source

pub fn trigger_new_era( start_session_index: SessionIndex, exposures: BoundedVec<(T::AccountId, Exposure<T::AccountId, BalanceOf<T>>), MaxWinnersOf<T>> ) -> BoundedVec<T::AccountId, MaxWinnersOf<T>>

Plan a new era.

  • Bump the current era storage (which holds the latest planned era).
  • Store start session index for the new planned era.
  • Clean old era information.
  • Store staking information for the new planned era

Returns the new validator set.

source

pub fn store_stakers_info( exposures: BoundedVec<(T::AccountId, Exposure<T::AccountId, BalanceOf<T>>), MaxWinnersOf<T>>, new_planned_era: EraIndex ) -> BoundedVec<T::AccountId, MaxWinnersOf<T>>

Process the output of the election.

Store staking information for the new planned era

source

pub fn reward_by_ids( validators_points: impl IntoIterator<Item = (T::AccountId, u32)> )

Add reward points to validators using their stash account ID.

Validators are keyed by stash account ID and must be in the current elected set.

For each element in the iterator the given number of points in u32 is added to the validator, thus duplicates are handled.

At the end of the era each the total payout will be distributed among validator relatively to their points.

COMPLEXITY: Complexity is number_of_validator_to_reward x current_elected_len.

source

pub fn get_npos_voters(maybe_max_len: Option<usize>) -> Vec<VoterOf<Self>>

Get all of the voters that are eligible for the npos election.

maybe_max_len can imposes a cap on the number of voters returned;

Sets MinimumActiveStake to the minimum active nominator stake in the returned set of nominators.

This function is self-weighing as DispatchClass::Mandatory.

source

pub fn get_npos_targets(maybe_max_len: Option<usize>) -> Vec<T::AccountId>

Get the targets for an upcoming npos election.

This function is self-weighing as DispatchClass::Mandatory.

source

pub fn do_add_nominator(who: &T::AccountId, nominations: Nominations<T>)

This function will add a nominator to the Nominators storage map, and VoterList.

If the nominator already exists, their nominations will be updated.

NOTE: you must ALWAYS use this function to add nominator or update their targets. Any access to Nominators or VoterList outside of this function is almost certainly wrong.

source

pub fn do_remove_nominator(who: &T::AccountId) -> bool

This function will remove a nominator from the Nominators storage map, and VoterList.

Returns true if who was removed from Nominators, otherwise false.

NOTE: you must ALWAYS use this function to remove a nominator from the system. Any access to Nominators or VoterList outside of this function is almost certainly wrong.

source

pub fn do_add_validator(who: &T::AccountId, prefs: ValidatorPrefs)

This function will add a validator to the Validators storage map.

If the validator already exists, their preferences will be updated.

NOTE: you must ALWAYS use this function to add a validator to the system. Any access to Validators or VoterList outside of this function is almost certainly wrong.

source

pub fn do_remove_validator(who: &T::AccountId) -> bool

This function will remove a validator from the Validators storage map.

Returns true if who was removed from Validators, otherwise false.

NOTE: you must ALWAYS use this function to remove a validator from the system. Any access to Validators or VoterList outside of this function is almost certainly wrong.

source§

impl<T: Config> Pallet<T>

source

pub fn bond( origin: OriginFor<T>, controller: <<T as Config>::Lookup as StaticLookup>::Source, value: BalanceOf<T>, payee: RewardDestination<T::AccountId> ) -> DispatchResult

Take the origin account as a stash and lock up value of its balance. controller will be the account that controls it.

value must be more than the minimum_balance specified by T::Currency.

The dispatch origin for this call must be Signed by the stash account.

Emits Bonded.

  • Independent of the arguments. Moderate complexity.
  • O(1).
  • Three extra DB entries.
NOTE: Two of the storage writes (Self::bonded, Self::payee) are never cleaned unless the origin falls below existential deposit and gets removed as dust.
source

pub fn bond_extra( origin: OriginFor<T>, max_additional: BalanceOf<T> ) -> DispatchResult

Add some extra amount that have appeared in the stash free_balance into the balance up for staking.

The dispatch origin for this call must be Signed by the stash, not the controller.

Use this if there are additional funds in your stash account that you wish to bond. Unlike bond or unbond this function does not impose any limitation on the amount that can be added.

Emits Bonded.

  • Independent of the arguments. Insignificant complexity.
  • O(1).
source

pub fn unbond( origin: OriginFor<T>, value: BalanceOf<T> ) -> DispatchResultWithPostInfo

Schedule a portion of the stash to be unlocked ready for transfer out after the bond period ends. If this leaves an amount actively bonded less than T::Currency::minimum_balance(), then it is increased to the full amount.

The dispatch origin for this call must be Signed by the controller, not the stash.

Once the unlock period is done, you can call withdraw_unbonded to actually move the funds out of management ready for transfer.

No more than a limited number of unlocking chunks (see MaxUnlockingChunks) can co-exists at the same time. If there are no unlocking chunks slots available Call::withdraw_unbonded is called to remove some of the chunks (if possible).

If a user encounters the InsufficientBond error when calling this extrinsic, they should call chill first in order to free up their bonded funds.

Emits Unbonded.

See also Call::withdraw_unbonded.

source

pub fn withdraw_unbonded( origin: OriginFor<T>, num_slashing_spans: u32 ) -> DispatchResultWithPostInfo

Remove any unlocked chunks from the unlocking queue from our management.

This essentially frees up that balance to be used by the stash account to do whatever it wants.

The dispatch origin for this call must be Signed by the controller.

Emits Withdrawn.

See also Call::unbond.

Complexity O(S) where S is the number of slashing spans to remove NOTE: Weight annotation is the kill scenario, we refund otherwise.

source

pub fn validate(origin: OriginFor<T>, prefs: ValidatorPrefs) -> DispatchResult

Declare the desire to validate for the origin controller.

Effects will be felt at the beginning of the next era.

The dispatch origin for this call must be Signed by the controller, not the stash.

source

pub fn nominate( origin: OriginFor<T>, targets: Vec<<<T as Config>::Lookup as StaticLookup>::Source> ) -> DispatchResult

Declare the desire to nominate targets for the origin controller.

Effects will be felt at the beginning of the next era.

The dispatch origin for this call must be Signed by the controller, not the stash.

  • The transaction’s complexity is proportional to the size of targets (N) which is capped at CompactAssignments::LIMIT (T::MaxNominations).
  • Both the reads and writes follow a similar pattern.
source

pub fn chill(origin: OriginFor<T>) -> DispatchResult

Declare no desire to either validate or nominate.

Effects will be felt at the beginning of the next era.

The dispatch origin for this call must be Signed by the controller, not the stash.

  • Independent of the arguments. Insignificant complexity.
  • Contains one read.
  • Writes are limited to the origin account key.
source

pub fn set_payee( origin: OriginFor<T>, payee: RewardDestination<T::AccountId> ) -> DispatchResult

(Re-)set the payment target for a controller.

Effects will be felt instantly (as soon as this function is completed successfully).

The dispatch origin for this call must be Signed by the controller, not the stash.

  • Independent of the arguments. Insignificant complexity.
  • Contains a limited number of reads.
  • Writes are limited to the origin account key.

  • Weight: O(1)
  • DB Weight:
    • Read: Ledger
    • Write: Payee
source

pub fn set_controller( origin: OriginFor<T>, controller: <<T as Config>::Lookup as StaticLookup>::Source ) -> DispatchResult

(Re-)set the controller of a stash.

Effects will be felt instantly (as soon as this function is completed successfully).

The dispatch origin for this call must be Signed by the stash, not the controller.

  • Independent of the arguments. Insignificant complexity.
  • Contains a limited number of reads.
  • Writes are limited to the origin account key.

Weight: O(1) DB Weight:

  • Read: Bonded, Ledger New Controller, Ledger Old Controller
  • Write: Bonded, Ledger New Controller, Ledger Old Controller
source

pub fn set_validator_count(origin: OriginFor<T>, new: u32) -> DispatchResult

Sets the ideal number of validators.

The dispatch origin must be Root.

Weight: O(1) Write: Validator Count

source

pub fn increase_validator_count( origin: OriginFor<T>, additional: u32 ) -> DispatchResult

Increments the ideal number of validators upto maximum of ElectionProviderBase::MaxWinners.

The dispatch origin must be Root.

Same as Self::set_validator_count.

source

pub fn scale_validator_count( origin: OriginFor<T>, factor: Percent ) -> DispatchResult

Scale up the ideal number of validators by a factor upto maximum of ElectionProviderBase::MaxWinners.

The dispatch origin must be Root.

Same as Self::set_validator_count.

source

pub fn force_no_eras(origin: OriginFor<T>) -> DispatchResult

Force there to be no new eras indefinitely.

The dispatch origin must be Root.

Warning

The election process starts multiple blocks before the end of the era. Thus the election process may be ongoing when this is called. In this case the election will continue until the next era is triggered.

  • No arguments.
  • Weight: O(1)
  • Write: ForceEra
source

pub fn force_new_era(origin: OriginFor<T>) -> DispatchResult

Force there to be a new era at the end of the next session. After this, it will be reset to normal (non-forced) behaviour.

The dispatch origin must be Root.

Warning

The election process starts multiple blocks before the end of the era. If this is called just before a new era is triggered, the election process may not have enough blocks to get a result.

  • No arguments.
  • Weight: O(1)
  • Write ForceEra
source

pub fn set_invulnerables( origin: OriginFor<T>, invulnerables: Vec<T::AccountId> ) -> DispatchResult

Set the validators who cannot be slashed (if any).

The dispatch origin must be Root.

source

pub fn force_unstake( origin: OriginFor<T>, stash: T::AccountId, num_slashing_spans: u32 ) -> DispatchResult

Force a current staker to become completely unstaked, immediately.

The dispatch origin must be Root.

source

pub fn force_new_era_always(origin: OriginFor<T>) -> DispatchResult

Force there to be a new era at the end of sessions indefinitely.

The dispatch origin must be Root.

Warning

The election process starts multiple blocks before the end of the era. If this is called just before a new era is triggered, the election process may not have enough blocks to get a result.

source

pub fn cancel_deferred_slash( origin: OriginFor<T>, era: EraIndex, slash_indices: Vec<u32> ) -> DispatchResult

Cancel enactment of a deferred slash.

Can be called by the T::AdminOrigin.

Parameters: era and indices of the slashes for that era to kill.

source

pub fn payout_stakers( origin: OriginFor<T>, validator_stash: T::AccountId, era: EraIndex ) -> DispatchResultWithPostInfo

Pay out all the stakers behind a single validator for a single era.

  • validator_stash is the stash account of the validator. Their nominators, up to T::MaxNominatorRewardedPerValidator, will also receive their rewards.
  • era may be any era between [current_era - history_depth; current_era].

The origin of this call must be Signed. Any account can call this function, even if it is not one of the stakers.

  • Time complexity: at most O(MaxNominatorRewardedPerValidator).
  • Contains a limited number of reads and writes.

N is the Number of payouts for the validator (including the validator) Weight:

  • Reward Destination Staked: O(N)

  • Reward Destination Controller (Creating): O(N)

    NOTE: weights are assuming that payouts are made to alive stash account (Staked). Paying even a dead controller is cheaper weight-wise. We don’t do any refunds here.

source

pub fn rebond( origin: OriginFor<T>, value: BalanceOf<T> ) -> DispatchResultWithPostInfo

Rebond a portion of the stash scheduled to be unlocked.

The dispatch origin must be signed by the controller.

  • Time complexity: O(L), where L is unlocking chunks
  • Bounded by MaxUnlockingChunks.
  • Storage changes: Can’t increase storage, only decrease it.
source

pub fn reap_stash( origin: OriginFor<T>, stash: T::AccountId, num_slashing_spans: u32 ) -> DispatchResultWithPostInfo

Remove all data structures concerning a staker/stash once it is at a state where it can be considered dust in the staking system. The requirements are:

  1. the total_balance of the stash is below existential deposit.
  2. or, the ledger.total of the stash is below existential deposit.

The former can happen in cases like a slash; the latter when a fully unbonded account is still receiving staking rewards in RewardDestination::Staked.

It can be called by anyone, as long as stash meets the above requirements.

Refunds the transaction fees upon successful execution.

source

pub fn kick( origin: OriginFor<T>, who: Vec<<<T as Config>::Lookup as StaticLookup>::Source> ) -> DispatchResult

Remove the given nominations from the calling validator.

Effects will be felt at the beginning of the next era.

The dispatch origin for this call must be Signed by the controller, not the stash.

  • who: A list of nominator stash accounts who are nominating this validator which should no longer be nominating this validator.

Note: Making this call only makes sense if you first set the validator preferences to block any further nominations.

source

pub fn set_staking_configs( origin: OriginFor<T>, min_nominator_bond: ConfigOp<BalanceOf<T>>, min_validator_bond: ConfigOp<BalanceOf<T>>, max_nominator_count: ConfigOp<u32>, max_validator_count: ConfigOp<u32>, chill_threshold: ConfigOp<Percent>, min_commission: ConfigOp<Perbill> ) -> DispatchResult

Update the various staking configurations .

  • min_nominator_bond: The minimum active bond needed to be a nominator.
  • min_validator_bond: The minimum active bond needed to be a validator.
  • max_nominator_count: The max number of users who can be a nominator at once. When set to None, no limit is enforced.
  • max_validator_count: The max number of users who can be a validator at once. When set to None, no limit is enforced.
  • chill_threshold: The ratio of max_nominator_count or max_validator_count which should be filled in order for the chill_other transaction to work.
  • min_commission: The minimum amount of commission that each validators must maintain. This is checked only upon calling validate. Existing validators are not affected.

RuntimeOrigin must be Root to call this function.

NOTE: Existing nominators and validators will not be affected by this update. to kick people under the new limits, chill_other should be called.

source

pub fn chill_other( origin: OriginFor<T>, controller: T::AccountId ) -> DispatchResult

Declare a controller to stop participating as either a validator or nominator.

Effects will be felt at the beginning of the next era.

The dispatch origin for this call must be Signed, but can be called by anyone.

If the caller is the same as the controller being targeted, then no further checks are enforced, and this function behaves just like chill.

If the caller is different than the controller being targeted, the following conditions must be met:

  • controller must belong to a nominator who has become non-decodable,

Or:

  • A ChillThreshold must be set and checked which defines how close to the max nominators or validators we must reach before users can start chilling one-another.
  • A MaxNominatorCount and MaxValidatorCount must be set which is used to determine how close we are to the threshold.
  • A MinNominatorBond and MinValidatorBond must be set and checked, which determines if this is a person that should be chilled because they have not met the threshold bond required.

This can be helpful if bond requirements are updated, and we need to remove old users who do not satisfy these requirements.

source

pub fn force_apply_min_commission( origin: OriginFor<T>, validator_stash: T::AccountId ) -> DispatchResult

Force a validator to have at least the minimum commission. This will not affect a validator who already has a commission greater than or equal to the minimum. Any account can call this.

source

pub fn set_min_commission(origin: OriginFor<T>, new: Perbill) -> DispatchResult

Sets the minimum amount of commission that each validators must maintain.

This call has lower privilege requirements than set_staking_config and can be called by the T::AdminOrigin. Root can always call this.

source§

impl<T: Config> Pallet<T>

source

pub fn validator_count() -> u32

The ideal number of active validators.

source§

impl<T: Config> Pallet<T>

source

pub fn minimum_validator_count() -> u32

Minimum number of staking participants before emergency conditions are imposed.

source§

impl<T: Config> Pallet<T>

source

pub fn invulnerables() -> Vec<T::AccountId>

Any validators that may never be slashed or forcibly kicked. It’s a Vec since they’re easy to initialize and the performance hit is minimal (we expect no more than four invulnerables) and restricted to testnets.

source§

impl<T: Config> Pallet<T>

source

pub fn bonded<KArg>(k: KArg) -> Option<T::AccountId>where KArg: EncodeLike<T::AccountId>,

Map from all locked “stash” accounts to the controller account.

TWOX-NOTE: SAFE since AccountId is a secure hash.

source§

impl<T: Config> Pallet<T>

source

pub fn ledger<KArg>(k: KArg) -> Option<StakingLedger<T>>where KArg: EncodeLike<T::AccountId>,

Map from all (unlocked) “controller” accounts to the info regarding the staking.

source§

impl<T: Config> Pallet<T>

source

pub fn payee<KArg>(k: KArg) -> RewardDestination<T::AccountId>where KArg: EncodeLike<T::AccountId>,

Where the reward payment should be made. Keyed by stash.

TWOX-NOTE: SAFE since AccountId is a secure hash.

source§

impl<T: Config> Pallet<T>

source

pub fn validators<KArg>(k: KArg) -> ValidatorPrefswhere KArg: EncodeLike<T::AccountId>,

The map from (wannabe) validator stash key to the preferences of that validator.

TWOX-NOTE: SAFE since AccountId is a secure hash.

source§

impl<T: Config> Pallet<T>

source

pub fn nominators<KArg>(k: KArg) -> Option<Nominations<T>>where KArg: EncodeLike<T::AccountId>,

The map from nominator stash key to their nomination preferences, namely the validators that they wish to support.

Note that the keys of this storage map might become non-decodable in case the Config::MaxNominations configuration is decreased. In this rare case, these nominators are still existent in storage, their key is correct and retrievable (i.e. contains_key indicates that they exist), but their value cannot be decoded. Therefore, the non-decodable nominators will effectively not-exist, until they re-submit their preferences such that it is within the bounds of the newly set Config::MaxNominations.

This implies that ::iter_keys().count() and ::iter().count() might return different values for this map. Moreover, the main ::count() is aligned with the former, namely the number of keys that exist.

Lastly, if any of the nominators become non-decodable, they can be chilled immediately via Call::chill_other dispatchable by anyone.

TWOX-NOTE: SAFE since AccountId is a secure hash.

source§

impl<T: Config> Pallet<T>

source

pub fn current_era() -> Option<EraIndex>

The current era index.

This is the latest planned era, depending on how the Session pallet queues the validator set, it might be active or not.

source§

impl<T: Config> Pallet<T>

source

pub fn active_era() -> Option<ActiveEraInfo>

The active era information, it holds index and start.

The active era is the era being currently rewarded. Validator set of this era must be equal to SessionInterface::validators.

source§

impl<T: Config> Pallet<T>

source

pub fn eras_start_session_index<KArg>(k: KArg) -> Option<SessionIndex>where KArg: EncodeLike<EraIndex>,

The session index at which the era start for the last HISTORY_DEPTH eras.

Note: This tracks the starting session (i.e. session index when era start being active) for the eras in [CurrentEra - HISTORY_DEPTH, CurrentEra].

source§

impl<T: Config> Pallet<T>

source

pub fn eras_stakers<KArg1, KArg2>( k1: KArg1, k2: KArg2 ) -> Exposure<T::AccountId, BalanceOf<T>>where KArg1: EncodeLike<EraIndex>, KArg2: EncodeLike<T::AccountId>,

Exposure of validator at era.

This is keyed first by the era index to allow bulk deletion and then the stash account.

Is it removed after HISTORY_DEPTH eras. If stakers hasn’t been set or has been removed then empty exposure is returned.

source§

impl<T: Config> Pallet<T>

source

pub fn eras_stakers_clipped<KArg1, KArg2>( k1: KArg1, k2: KArg2 ) -> Exposure<T::AccountId, BalanceOf<T>>where KArg1: EncodeLike<EraIndex>, KArg2: EncodeLike<T::AccountId>,

Clipped Exposure of validator at era.

This is similar to ErasStakers but number of nominators exposed is reduced to the T::MaxNominatorRewardedPerValidator biggest stakers. (Note: the field total and own of the exposure remains unchanged). This is used to limit the i/o cost for the nominator payout.

This is keyed fist by the era index to allow bulk deletion and then the stash account.

Is it removed after HISTORY_DEPTH eras. If stakers hasn’t been set or has been removed then empty exposure is returned.

source§

impl<T: Config> Pallet<T>

source

pub fn eras_validator_prefs<KArg1, KArg2>( k1: KArg1, k2: KArg2 ) -> ValidatorPrefswhere KArg1: EncodeLike<EraIndex>, KArg2: EncodeLike<T::AccountId>,

Similar to ErasStakers, this holds the preferences of validators.

This is keyed first by the era index to allow bulk deletion and then the stash account.

Is it removed after HISTORY_DEPTH eras.

source§

impl<T: Config> Pallet<T>

source

pub fn eras_validator_reward<KArg>(k: KArg) -> Option<BalanceOf<T>>where KArg: EncodeLike<EraIndex>,

The total validator era payout for the last HISTORY_DEPTH eras.

Eras that haven’t finished yet or has been removed doesn’t have reward.

source§

impl<T: Config> Pallet<T>

source

pub fn eras_reward_points<KArg>(k: KArg) -> EraRewardPoints<T::AccountId>where KArg: EncodeLike<EraIndex>,

Rewards for the last HISTORY_DEPTH eras. If reward hasn’t been set or has been removed then 0 reward is returned.

source§

impl<T: Config> Pallet<T>

source

pub fn eras_total_stake<KArg>(k: KArg) -> BalanceOf<T>where KArg: EncodeLike<EraIndex>,

The total amount staked for the last HISTORY_DEPTH eras. If total hasn’t been set or has been removed then 0 stake is returned.

source§

impl<T: Config> Pallet<T>

source

pub fn force_era() -> Forcing

Mode of era forcing.

source§

impl<T: Config> Pallet<T>

source

pub fn slash_reward_fraction() -> Perbill

The percentage of the slash that is distributed to reporters.

The rest of the slashed value is handled by the Slash.

source§

impl<T: Config> Pallet<T>

source

pub fn canceled_payout() -> BalanceOf<T>

The amount of currency given to reporters of a slash event which was canceled by extraordinary circumstances (e.g. governance).

source§

impl<T: Config> Pallet<T>

source

pub fn slashing_spans<KArg>(k: KArg) -> Option<SlashingSpans>where KArg: EncodeLike<T::AccountId>,

Slashing spans for stash accounts.

source§

impl<T: Config> Pallet<T>

source

pub fn current_planned_session() -> SessionIndex

The last planned session scheduled by the session pallet.

This is basically in sync with the call to pallet_session::SessionManager::new_session.

source§

impl<T: Config> Pallet<T>

source

pub fn offending_validators() -> Vec<(u32, bool)>

Indices of validators that have offended in the active era and whether they are currently disabled.

This value should be a superset of disabled validators since not all offences lead to the validator being disabled (if there was no slash). This is needed to track the percentage of validators that have offended in the current era, ensuring a new era is forced if OffendingValidatorsThreshold is reached. The vec is always kept sorted so that we can find whether a given validator has previously offended using binary search. It gets cleared when the era ends.

Trait Implementations§

source§

impl<T: Config> Callable<T> for Pallet<T>

source§

impl<T> Clone for Pallet<T>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<T> Debug for Pallet<T>

source§

fn fmt(&self, fmt: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: Config> ElectionDataProvider for Pallet<T>

§

type AccountId = <T as Config>::AccountId

The account identifier type.
§

type BlockNumber = <T as Config>::BlockNumber

The block number type.
§

type MaxVotesPerVoter = <T as Config>::MaxNominations

Maximum number of votes per voter that this data provider is providing.
source§

fn desired_targets() -> Result<u32>

The number of targets to elect. Read more
source§

fn electing_voters(maybe_max_len: Option<usize>) -> Result<Vec<VoterOf<Self>>>

All the voters that participate in the election, thus “electing”. Read more
source§

fn electable_targets(maybe_max_len: Option<usize>) -> Result<Vec<T::AccountId>>

All possible targets for the election, i.e. the targets that could become elected, thus “electable”. Read more
source§

fn next_election_prediction(now: T::BlockNumber) -> T::BlockNumber

Provide a best effort prediction about when the next election is about to happen. Read more
source§

impl<T> EventHandler<<T as Config>::AccountId, <T as Config>::BlockNumber> for Pallet<T>where T: Config + Config + Config,

Add reward points to block authors:

  • 20 points to the block producer for producing a (non-uncle) block in the relay chain,
  • 2 points to the block producer for each reference to a previously unreferenced uncle, and
  • 1 point to the producer of each referenced uncle block.
source§

fn note_author(author: T::AccountId)

Note that the given account ID is the author of the current block.
source§

fn note_uncle(uncle_author: T::AccountId, _age: T::BlockNumber)

Note that the given account ID authored the given uncle, and how many blocks older than the current block it is (age >= 0, so siblings are allowed)
source§

impl<T: Config> GetStorageVersion for Pallet<T>

source§

fn current_storage_version() -> StorageVersion

Returns the current storage version as supported by the pallet.
source§

fn on_chain_storage_version() -> StorageVersion

Returns the on-chain storage version of the pallet as stored in the storage.
source§

impl<T: Config> Hooks<<T as Config>::BlockNumber> for Pallet<T>

source§

fn on_initialize(_now: BlockNumberFor<T>) -> Weight

The block is being initialized. Implement to have something happen. Read more
source§

fn on_finalize(_n: BlockNumberFor<T>)

The block is being finalized. Implement to have something happen.
source§

fn integrity_test()

Run integrity test. Read more
source§

fn on_idle(_n: BlockNumber, _remaining_weight: Weight) -> Weight

This will be run when the block is being finalized (before on_finalize). Implement to have something happen using the remaining weight. Will not fire if the remaining weight is 0. Return the weight used, the hook will subtract it from current weight used and pass the result to the next on_idle hook if it exists.
source§

fn on_runtime_upgrade() -> Weight

Perform a module upgrade. Read more
source§

fn offchain_worker(_n: BlockNumber)

Implementing this function on a module allows you to perform long-running tasks that make (by default) validators generate transactions that feed results of those long-running computations back on chain. Read more
source§

impl<T: Config> IntegrityTest for Pallet<T>

source§

fn integrity_test()

Run integrity test. Read more
source§

impl<T: Config> OffchainWorker<<T as Config>::BlockNumber> for Pallet<T>

source§

fn offchain_worker(n: <T as Config>::BlockNumber)

This function is being called after every block import (when fully synced). Read more
source§

impl<T: Config> OnFinalize<<T as Config>::BlockNumber> for Pallet<T>

source§

fn on_finalize(n: <T as Config>::BlockNumber)

The block is being finalized. Implement to have something happen. Read more
source§

impl<T: Config> OnGenesis for Pallet<T>

source§

fn on_genesis()

Something that should happen at genesis.
source§

impl<T: Config> OnIdle<<T as Config>::BlockNumber> for Pallet<T>

source§

fn on_idle(n: <T as Config>::BlockNumber, remaining_weight: Weight) -> Weight

The block is being finalized. Implement to have something happen in case there is leftover weight. Check the passed remaining_weight to make sure it is high enough to allow for your pallet’s extra computation. Read more
source§

impl<T: Config> OnInitialize<<T as Config>::BlockNumber> for Pallet<T>

source§

fn on_initialize(n: <T as Config>::BlockNumber) -> Weight

The block is being initialized. Implement to have something happen. Read more
source§

impl<T> OnOffenceHandler<<T as Config>::AccountId, (<T as Config>::ValidatorId, <T as Config>::FullIdentification), Weight> for Pallet<T>where T: Config<ValidatorId = <T as Config>::AccountId> + Config<FullIdentification = Exposure<<T as Config>::AccountId, BalanceOf<T>>, FullIdentificationOf = ExposureOf<T>> + Config, T::SessionHandler: SessionHandler<<T as Config>::AccountId>, T::SessionManager: SessionManager<<T as Config>::AccountId>, T::ValidatorIdOf: Convert<<T as Config>::AccountId, Option<<T as Config>::AccountId>>,

This is intended to be used with FilterHistoricalOffences.

source§

fn on_offence( offenders: &[OffenceDetails<T::AccountId, IdentificationTuple<T>>], slash_fraction: &[Perbill], slash_session: SessionIndex, disable_strategy: DisableStrategy ) -> Weight

A handler for an offence of a particular kind. Read more
source§

impl<T: Config> OnRuntimeUpgrade for Pallet<T>

source§

fn on_runtime_upgrade() -> Weight

Perform a module upgrade. Read more
source§

impl<T: Config> PalletInfoAccess for Pallet<T>

source§

fn index() -> usize

Index of the pallet as configured in the runtime.
source§

fn name() -> &'static str

Name of the pallet as configured in the runtime.
source§

fn module_name() -> &'static str

Name of the Rust module containing the pallet.
source§

fn crate_version() -> CrateVersion

Version of the crate containing the pallet.
source§

impl<T: Config> PalletsInfoAccess for Pallet<T>

source§

fn count() -> usize

The number of pallets’ information that this type represents. Read more
source§

fn infos() -> Vec<PalletInfoData>

All of the pallets’ information that this type represents.
source§

impl<T> PartialEq<Pallet<T>> for Pallet<T>

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<T: Config> ScoreProvider<<T as Config>::AccountId> for Pallet<T>

§

type Score = u64

source§

fn score(who: &T::AccountId) -> Self::Score

Get the current Score of who.
source§

impl<T: Config> SessionManager<<T as Config>::AccountId> for Pallet<T>

In this implementation new_session(session) must be called before end_session(session-1) i.e. the new session must be planned before the ending of the previous session.

Once the first new_session is planned, all session must start and then end in order, though some session can lag in between the newest session planned and the latest session started.

source§

fn new_session(new_index: SessionIndex) -> Option<Vec<T::AccountId>>

Plan a new session, and optionally provide the new validator set. Read more
source§

fn new_session_genesis(new_index: SessionIndex) -> Option<Vec<T::AccountId>>

Same as new_session, but it this should only be called at genesis. Read more
source§

fn start_session(start_index: SessionIndex)

Start an already planned session. Read more
source§

fn end_session(end_index: SessionIndex)

End the session. Read more
source§

impl<T: Config> SessionManager<<T as Config>::AccountId, Exposure<<T as Config>::AccountId, <T as Config>::CurrencyBalance>> for Pallet<T>

source§

fn new_session( new_index: SessionIndex ) -> Option<Vec<(T::AccountId, Exposure<T::AccountId, BalanceOf<T>>)>>

If there was a validator set change, its returns the set of new validators along with their full identifications.
source§

fn new_session_genesis( new_index: SessionIndex ) -> Option<Vec<(T::AccountId, Exposure<T::AccountId, BalanceOf<T>>)>>

source§

fn start_session(start_index: SessionIndex)

source§

fn end_session(end_index: SessionIndex)

source§

impl<T: Config> StakingInterface for Pallet<T>

§

type AccountId = <T as Config>::AccountId

AccountId type used by the staking system
§

type Balance = <T as Config>::CurrencyBalance

Balance type used by the staking system.
source§

fn minimum_nominator_bond() -> Self::Balance

The minimum amount required to bond in order to set nomination intentions. This does not necessarily mean the nomination will be counted in an election, but instead just enough to be stored as a nominator. In other words, this is the minimum amount to register the intention to nominate.
source§

fn minimum_validator_bond() -> Self::Balance

The minimum amount required to bond in order to set validation intentions.
source§

fn desired_validator_count() -> u32

The ideal number of active validators.
source§

fn election_ongoing() -> bool

Whether or not there is an ongoing election.
source§

fn force_unstake(who: Self::AccountId) -> DispatchResult

Force a current staker to become completely unstaked, immediately.
source§

fn stash_by_ctrl( controller: &Self::AccountId ) -> Result<Self::AccountId, DispatchError>

Return a stash account that is controlled by a controller. Read more
source§

fn is_exposed_in_era(who: &Self::AccountId, era: &EraIndex) -> bool

Checks whether an account staker has been exposed in an era.
source§

fn bonding_duration() -> EraIndex

Number of eras that staked funds must remain bonded for.
source§

fn current_era() -> EraIndex

The current era index. Read more
source§

fn stake(who: &Self::AccountId) -> Result<Stake<Self>, DispatchError>

Returns the stake of who.
source§

fn bond_extra(who: &Self::AccountId, extra: Self::Balance) -> DispatchResult

Bond some extra amount in who’s free balance against the active bonded balance of the account. The amount extra actually bonded will never be more than who’s free balance.
source§

fn unbond(who: &Self::AccountId, value: Self::Balance) -> DispatchResult

Schedule a portion of the active bonded balance to be unlocked at era Self::current_era + Self::bonding_duration. Read more
source§

fn chill(who: &Self::AccountId) -> DispatchResult

Chill who.
source§

fn withdraw_unbonded( who: Self::AccountId, num_slashing_spans: u32 ) -> Result<bool, DispatchError>

Unlock any funds schedule to unlock before or at the current era. Read more
source§

fn bond( who: &Self::AccountId, value: Self::Balance, payee: &Self::AccountId ) -> DispatchResult

Bond (lock) value of who’s balance, while forwarding any rewards to payee.
source§

fn nominate( who: &Self::AccountId, targets: Vec<Self::AccountId> ) -> DispatchResult

Have who nominate validators.
source§

fn total_stake(who: &Self::AccountId) -> Result<Self::Balance, DispatchError>

source§

fn active_stake(who: &Self::AccountId) -> Result<Self::Balance, DispatchError>

source§

fn is_unbonding(who: &Self::AccountId) -> Result<bool, DispatchError>

source§

fn fully_unbond(who: &Self::AccountId) -> Result<(), DispatchError>

source§

impl<T: Config> StorageInfoTrait for Pallet<T>

source§

impl<T: Config> WhitelistedStorageKeys for Pallet<T>

source§

fn whitelisted_storage_keys() -> Vec<TrackedStorageKey>

Returns a Vec<TrackedStorageKey> indicating the storage keys that should be whitelisted during benchmarking. This means that those keys will be excluded from the benchmarking performance calculation.
source§

impl<T> Eq for Pallet<T>

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for Pallet<T>where T: RefUnwindSafe,

§

impl<T> Send for Pallet<T>where T: Send,

§

impl<T> Sync for Pallet<T>where T: Sync,

§

impl<T> Unpin for Pallet<T>where T: Unpin,

§

impl<T> UnwindSafe for Pallet<T>where T: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CheckedConversion for T

source§

fn checked_from<T>(t: T) -> Option<Self>where Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
source§

fn checked_into<T>(self) -> Option<T>where Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
source§

impl<T> Conv for T

source§

fn conv<T>(self) -> Twhere Self: Into<T>,

Converts self into T using Into<T>. Read more
source§

impl<T> Downcast for Twhere T: Any,

source§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
source§

impl<T> DowncastSync for Twhere T: Any + Send + Sync,

source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

source§

impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> FmtForward for T

source§

fn fmt_binary(self) -> FmtBinary<Self>where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
source§

fn fmt_display(self) -> FmtDisplay<Self>where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
source§

fn fmt_octal(self) -> FmtOctal<Self>where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
source§

fn fmt_pointer(self) -> FmtPointer<Self>where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
source§

fn fmt_list(self) -> FmtList<Self>where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IsType<T> for T

source§

fn from_ref(t: &T) -> &T

Cast reference.
source§

fn into_ref(&self) -> &T

Cast reference.
source§

fn from_mut(t: &mut T) -> &mut T

Cast mutable reference.
source§

fn into_mut(&mut self) -> &mut T

Cast mutable reference.
source§

impl<T, Outer> IsWrappedBy<Outer> for Twhere Outer: AsRef<T> + AsMut<T> + From<T>, T: From<Outer>,

source§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

source§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

source§

impl<T> PalletVersionToStorageVersionHelper for Twhere T: GetStorageVersion + PalletInfoAccess,

source§

impl<T> Pipe for Twhere T: ?Sized,

source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> Rwhere Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R ) -> Rwhere Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
source§

impl<T> Pointable for T

source§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
source§

impl<T> SaturatedConversion for T

source§

fn saturated_from<T>(t: T) -> Selfwhere Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
source§

fn saturated_into<T>(self) -> Twhere Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
source§

impl<T> Tap for T

source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> TryConv for T

source§

fn try_conv<T>(self) -> Result<T, Self::Error>where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<S, T> UncheckedInto<T> for Swhere T: UncheckedFrom<S>,

source§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
source§

impl<T, S> UniqueSaturatedInto<T> for Swhere T: Bounded, S: TryInto<T>,

source§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
source§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<T> MaybeDebug for Twhere T: Debug,

source§

impl<T> MaybeDebug for Twhere T: Debug,

source§

impl<T> MaybeRefUnwindSafe for Twhere T: RefUnwindSafe,

source§

impl<T> Member for Twhere T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,