Struct pallet_staking::pallet::Pallet [−][src]
pub struct Pallet<T>(_);
Expand description
The pallet implementing the on-chain logic.
Implementations
The total balance that can be slashed from a stash account as of right now.
pub fn slashable_balance_of_vote_weight(
stash: &T::AccountId,
issuance: BalanceOf<T>
) -> VoteWeight
pub fn slashable_balance_of_vote_weight(
stash: &T::AccountId,
issuance: BalanceOf<T>
) -> VoteWeight
Internal impl of Self::slashable_balance_of
that returns 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.
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.
Process the output of the election.
Store staking information for the new planned era
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
.
pub fn add_era_stakers(
current_era: EraIndex,
controller: T::AccountId,
exposure: Exposure<T::AccountId, BalanceOf<T>>
)
Get all of the voters that are eligible for the npos election.
This will use all on-chain nominators, and all the validators will inject a self vote.
Slashing
All nominations that have been submitted before the last non-zero slash of the validator are auto-chilled.
Note that this is VERY expensive. Use with care.
This is a very expensive function and result should be cached versus being called multiple times.
This function will add a nominator to the Nominators
storage map,
and keep track of the CounterForNominators
.
If the nominator already exists, their nominations will be updated.
This function will remove a nominator from the Nominators
storage map,
and keep track of the CounterForNominators
.
Returns true if who
was removed from Nominators
, otherwise false.
This function will add a validator to the Validators
storage map,
and keep track of the CounterForValidators
.
If the validator already exists, their preferences will be updated.
This function will remove a validator from the Validators
storage map,
and keep track of the CounterForValidators
.
Returns true if who
was removed from Validators
, otherwise false.
pub fn bond(
origin: OriginFor<T>,
controller: <T::Lookup as StaticLookup>::Source,
value: BalanceOf<T>,
payee: RewardDestination<T::AccountId>
) -> DispatchResult
pub fn bond(
origin: OriginFor<T>,
controller: <T::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.
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).
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 MAX_UNLOCKING_CHUNKS
)
can co-exists at the same time. In that case, Call::withdraw_unbonded
need
to be called first 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
.
pub fn withdraw_unbonded(
origin: OriginFor<T>,
num_slashing_spans: u32
) -> DispatchResultWithPostInfo
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.
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.
pub fn nominate(
origin: OriginFor<T>,
targets: Vec<<T::Lookup as StaticLookup>::Source>
) -> DispatchResult
pub fn nominate(
origin: OriginFor<T>,
targets: Vec<<T::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 (MAX_NOMINATIONS). - Both the reads and writes follow a similar pattern.
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.
pub fn set_payee(
origin: OriginFor<T>,
payee: RewardDestination<T::AccountId>
) -> DispatchResult
pub fn set_payee(
origin: OriginFor<T>,
payee: RewardDestination<T::AccountId>
) -> DispatchResult
(Re-)set the payment target for a 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.
- 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
pub fn set_controller(
origin: OriginFor<T>,
controller: <T::Lookup as StaticLookup>::Source
) -> DispatchResult
pub fn set_controller(
origin: OriginFor<T>,
controller: <T::Lookup as StaticLookup>::Source
) -> DispatchResult
(Re-)set the controller of a stash.
Effects will be felt at the beginning of the next era.
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
Increments the ideal number of validators.
The dispatch origin must be Root.
Same as Self::set_validator_count
.
Scale up the ideal number of validators by a factor.
The dispatch origin must be Root.
Same as Self::set_validator_count
.
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
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
pub fn set_invulnerables(
origin: OriginFor<T>,
invulnerables: Vec<T::AccountId>
) -> DispatchResult
pub fn set_invulnerables(
origin: OriginFor<T>,
invulnerables: Vec<T::AccountId>
) -> DispatchResult
pub fn force_unstake(
origin: OriginFor<T>,
stash: T::AccountId,
num_slashing_spans: u32
) -> DispatchResult
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.
O(S) where S is the number of slashing spans to be removed Reads: Bonded, Slashing Spans, Account, Locks Writes: Bonded, Slashing Spans (if S > 0), Ledger, Payee, Validators, Nominators, Account, Locks Writes Each: SpanSlash * S
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.
- Weight: O(1)
- Write: ForceEra
pub fn cancel_deferred_slash(
origin: OriginFor<T>,
era: EraIndex,
slash_indices: Vec<u32>
) -> DispatchResult
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::SlashCancelOrigin
.
Parameters: era and indices of the slashes for that era to kill.
Complexity: O(U + S) with U unapplied slashes weighted with U=1000 and S is the number of slash indices to be canceled.
- Read: Unapplied Slashes
- Write: Unapplied Slashes
pub fn payout_stakers(
origin: OriginFor<T>,
validator_stash: T::AccountId,
era: EraIndex
) -> DispatchResultWithPostInfo
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 toT::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.
pub fn set_history_depth(
origin: OriginFor<T>,
new_history_depth: EraIndex,
_era_items_deleted: u32
) -> DispatchResult
pub fn set_history_depth(
origin: OriginFor<T>,
new_history_depth: EraIndex,
_era_items_deleted: u32
) -> DispatchResult
Set HistoryDepth
value. This function will delete any history information
when HistoryDepth
is reduced.
Parameters:
new_history_depth
: The new history depth you would like to set.era_items_deleted
: The number of items that will be deleted by this dispatch. This should report all the storage items that will be deleted by clearing old era history. Needed to report an accurate weight for the dispatch. Trusted byRoot
to report an accurate number.
Origin must be root.
- E: Number of history depths removed, i.e. 10 -> 7 = 3
- Weight: O(E)
- DB Weight:
- Reads: Current Era, History Depth
- Writes: History Depth
- Clear Prefix Each: Era Stakers, EraStakersClipped, ErasValidatorPrefs
- Writes Each: ErasValidatorReward, ErasRewardPoints, ErasTotalStake, ErasStartSessionIndex
pub fn reap_stash(
_origin: OriginFor<T>,
stash: T::AccountId,
num_slashing_spans: u32
) -> DispatchResult
pub fn reap_stash(
_origin: OriginFor<T>,
stash: T::AccountId,
num_slashing_spans: u32
) -> DispatchResult
Remove all data structure concerning a staker/stash once its balance is at the minimum.
This is essentially equivalent to withdraw_unbonded
except it can be called by anyone
and the target stash
must have no funds left beyond the ED.
This can be called from any origin.
stash
: The stash account to reap. Its balance must be zero.
Complexity: O(S) where S is the number of slashing spans on the account. DB Weight:
- Reads: Stash Account, Bonded, Slashing Spans, Locks
- Writes: Bonded, Slashing Spans (if S > 0), Ledger, Payee, Validators, Nominators, Stash Account, Locks
- Writes Each: SpanSlash * S
pub fn kick(
origin: OriginFor<T>,
who: Vec<<T::Lookup as StaticLookup>::Source>
) -> DispatchResult
pub fn kick(
origin: OriginFor<T>,
who: Vec<<T::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.
Update the various staking limits this pallet.
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 toNone
, no limit is enforced.max_validator_count
: The max number of users who can be a validator at once. When set toNone
, no limit is enforced.
Origin 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.
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:
- 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
andMaxValidatorCount
must be set which is used to determine how close we are to the threshold. - A
MinNominatorBond
andMinValidatorBond
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.
Number of eras to keep in history.
Information is kept for eras in [current_era - history_depth; current_era]
.
Must be more than the number of eras delayed by session otherwise. I.e. active era must
always be in history. I.e. active_era > current_era - history_depth
must be
guaranteed.
The ideal number of staking participants.
Minimum number of staking participants before emergency conditions are imposed.
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.
pub fn payee<KArg>(k: KArg) -> RewardDestination<T::AccountId> where
KArg: EncodeLike<T::AccountId>,
pub fn payee<KArg>(k: KArg) -> RewardDestination<T::AccountId> where
KArg: EncodeLike<T::AccountId>,
Where the reward payment should be made. Keyed by stash.
The map from (wannabe) validator stash key to the preferences of that validator.
When updating this storage item, you must also update the CounterForValidators
.
pub fn nominators<KArg>(k: KArg) -> Option<Nominations<T::AccountId>> where
KArg: EncodeLike<T::AccountId>,
pub fn nominators<KArg>(k: KArg) -> Option<Nominations<T::AccountId>> where
KArg: EncodeLike<T::AccountId>,
The map from nominator stash key to the set of stash keys of all validators to nominate.
When updating this storage item, you must also update the CounterForNominators
.
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.
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
.
pub fn eras_start_session_index<KArg>(k: KArg) -> Option<SessionIndex> where
KArg: EncodeLike<EraIndex>,
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]
.
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.
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.
pub fn eras_validator_prefs<KArg1, KArg2>(
k1: KArg1,
k2: KArg2
) -> ValidatorPrefs where
KArg1: EncodeLike<EraIndex>,
KArg2: EncodeLike<T::AccountId>,
pub fn eras_validator_prefs<KArg1, KArg2>(
k1: KArg1,
k2: KArg2
) -> ValidatorPrefs where
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.
pub fn eras_validator_reward<KArg>(k: KArg) -> Option<BalanceOf<T>> where
KArg: EncodeLike<EraIndex>,
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.
pub fn eras_reward_points<KArg>(k: KArg) -> EraRewardPoints<T::AccountId> where
KArg: EncodeLike<EraIndex>,
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.
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.
The percentage of the slash that is distributed to reporters.
The rest of the slashed value is handled by the Slash
.
The amount of currency given to reporters of a slash event which was canceled by extraordinary circumstances (e.g. governance).
The last planned session scheduled by the session pallet.
This is basically in sync with the call to pallet_session::SessionManager::new_session
.
Trait Implementations
Get the benchmarks available for this pallet. Generally there is one benchmark per extrinsic, so these are sometimes just called “extrinsics”. Read more
fn run_benchmark(
extrinsic: &[u8],
c: &[(BenchmarkParameter, u32)],
whitelist: &[TrackedStorageKey],
verify: bool,
internal_repeats: u32
) -> Result<Vec<BenchmarkResults>, &'static str>
fn run_benchmark(
extrinsic: &[u8],
c: &[(BenchmarkParameter, u32)],
whitelist: &[TrackedStorageKey],
verify: bool,
internal_repeats: u32
) -> Result<Vec<BenchmarkResults>, &'static str>
Run the benchmarks for this pallet.
impl<T: Config> ElectionDataProvider<<T as Config>::AccountId, <T as Config>::BlockNumber> for Pallet<T>
impl<T: Config> ElectionDataProvider<<T as Config>::AccountId, <T as Config>::BlockNumber> for Pallet<T>
Maximum number of votes per voter that this data provider is providing.
All possible voters for the election. Read more
All possible targets for the election, i.e. the candidates. Read more
Provide a best effort prediction about when the next election is about to happen. Read more
Utility function only to be used in benchmarking scenarios, to be implemented optionally, else a noop. Read more
Utility function only to be used in benchmarking scenarios, to be implemented optionally, else a noop. Read more
fn put_snapshot(
voters: Vec<(T::AccountId, VoteWeight, Vec<T::AccountId>)>,
targets: Vec<T::AccountId>,
target_stake: Option<VoteWeight>
)
fn put_snapshot(
voters: Vec<(T::AccountId, VoteWeight, Vec<T::AccountId>)>,
targets: Vec<T::AccountId>,
target_stake: Option<VoteWeight>
)
Utility function only to be used in benchmarking scenarios, to be implemented optionally, else a noop. Read more
impl<T> EventHandler<<T as Config>::AccountId, <T as Config>::BlockNumber> for Pallet<T> where
T: Config + Config + Config,
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.
Note that the given account ID is the author of the current block.
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) Read more
Returns the current storage version as supported by the pallet.
Returns the on-chain storage version of the pallet as stored in the storage.
Perform a module upgrade. Read more
Execute some pre-checks prior to a runtime upgrade. Read more
The block is being initialized. Implement to have something happen. Read more
The block is being finalized. Implement to have something happen.
Run integrity test. Read more
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. Read more
Execute some post-checks after a runtime upgrade. Read more
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
Run integrity test. Read more
This function is being called after every block import (when fully synced). Read more
The block is being finalized. Implement to have something happen. Read more
Something that should happen at genesis.
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
The block is being initialized. Implement to have something happen. Read more
impl<T: Config> OnOffenceHandler<<T as Config>::AccountId, (<T as Config>::ValidatorId, <T as Config>::FullIdentification), u64> for Pallet<T> where
T: Config<ValidatorId = <T as Config>::AccountId>,
T: Config<FullIdentification = Exposure<<T as Config>::AccountId, BalanceOf<T>>, FullIdentificationOf = ExposureOf<T>>,
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>>,
impl<T: Config> OnOffenceHandler<<T as Config>::AccountId, (<T as Config>::ValidatorId, <T as Config>::FullIdentification), u64> for Pallet<T> where
T: Config<ValidatorId = <T as Config>::AccountId>,
T: Config<FullIdentification = Exposure<<T as Config>::AccountId, BalanceOf<T>>, FullIdentificationOf = ExposureOf<T>>,
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
.
fn on_offence(
offenders: &[OffenceDetails<T::AccountId, IdentificationTuple<T>>],
slash_fraction: &[Perbill],
slash_session: SessionIndex
) -> Weight
fn on_offence(
offenders: &[OffenceDetails<T::AccountId, IdentificationTuple<T>>],
slash_fraction: &[Perbill],
slash_session: SessionIndex
) -> Weight
A handler for an offence of a particular kind. Read more
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.
Auto Trait Implementations
impl<T> RefUnwindSafe for Pallet<T> where
T: RefUnwindSafe,
impl<T> UnwindSafe for Pallet<T> where
T: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more
impl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
T: Any,
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
. Read more
pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read more
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
pub fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
pub 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. Read more
Instruments this type with the provided Span
, returning an
Instrumented
wrapper. Read more
Generate a storage key unique to this runtime upgrade. Read more
Get temporary storage data written by Self::set_temp_storage
. Read more
Write some temporary data to a specific storage that can be read (potentially in
post-upgrade hook) via Self::get_temp_storage
. Read more
impl<T> PalletVersionToStorageVersionHelper for T where
T: GetStorageVersion + PalletInfoAccess,
impl<T> PalletVersionToStorageVersionHelper for T where
T: GetStorageVersion + PalletInfoAccess,
type Output = T
type Output = T
Should always be Self
The inverse inclusion map: attempts to construct self
from the equivalent element of its
superset. Read more
pub fn is_in_subset(&self) -> bool
pub fn is_in_subset(&self) -> bool
Checks if self
is actually part of its subset T
(and can be converted to it).
pub fn to_subset_unchecked(&self) -> SS
pub fn to_subset_unchecked(&self) -> SS
Use with care! Same as self.to_subset
but without any property checks. Always succeeds.
pub fn from_subset(element: &SS) -> SP
pub fn from_subset(element: &SS) -> SP
The inclusion map: converts self
to the equivalent element of its superset.
The counterpart to unchecked_from
.
Consume self to return an equivalent value of T
.
pub fn vzip(self) -> V
impl<T> MaybeDebug for T where
T: Debug,
impl<T> MaybeDebug for T where
T: Debug,