pub struct StakingCallApi<'api> { /* private fields */ }

Implementations§

source§

impl<'api> StakingCallApi<'api>

source

pub fn bond( &self, controller: MultiAddress<AccountId, u32>, value: u128, payee: RewardDestination<AccountId> ) -> Result<WrappedCall>

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.

Weight: O(1) DB Weight:

  • Read: Bonded, Ledger, [Origin Account], Current Era, History Depth, Locks
  • Write: Bonded, Payee, [Origin Account], Locks, Ledger
source

pub fn bond_extra(&self, max_additional: u128) -> Result<WrappedCall>

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

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.

The dispatch origin for this call must be Signed by the stash, not the controller and it can be only called when [EraElectionStatus] is Closed.

Emits Bonded.

  • Independent of the arguments. Insignificant complexity.
  • O(1).
  • One DB entry.

DB Weight:

  • Read: Era Election Status, Bonded, Ledger, [Origin Account], Locks
  • Write: [Origin Account], Locks, Ledger
source

pub fn unbond(&self, value: u128) -> Result<WrappedCall>

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.

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).

The dispatch origin for this call must be Signed by the controller, not the stash. And, it can be only called when [EraElectionStatus] is Closed.

Emits Unbonded.

See also [Call::withdraw_unbonded].

  • Independent of the arguments. Limited but potentially exploitable complexity.
  • Contains a limited number of reads.
  • Each call (requires the remainder of the bonded balance to be above minimum_balance) will cause a new entry to be inserted into a vector (Ledger.unlocking) kept in storage. The only way to clean the aforementioned storage item is also user-controlled via withdraw_unbonded.
  • One DB entry.

Weight: O(1) DB Weight:

  • Read: EraElectionStatus, Ledger, CurrentEra, Locks, [Origin Account]
  • Write: Locks, Ledger, [Origin Account]
source

pub fn withdraw_unbonded(&self, num_slashing_spans: u32) -> Result<WrappedCall>

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, not the stash. And, it can be only called when [EraElectionStatus] is Closed.

Emits Withdrawn.

See also [Call::unbond].

  • Could be dependent on the origin argument and how much unlocking chunks exist. It implies consolidate_unlocked which loops over Ledger.unlocking, which is indirectly user-controlled. See [unbond] for more detail.
  • Contains a limited number of reads, yet the size of which could be large based on ledger.
  • Writes are limited to the origin account key.

Complexity O(S) where S is the number of slashing spans to remove Update:

  • Reads: EraElectionStatus, Ledger, Current Era, Locks, [Origin Account]
  • Writes: [Origin Account], Locks, Ledger Kill:
  • Reads: EraElectionStatus, Ledger, Current Era, Bonded, Slashing Spans, [Origin Account], Locks
  • Writes: Bonded, Slashing Spans (if S > 0), Ledger, Payee, Validators, Nominators, [Origin Account], Locks
  • Writes Each: SpanSlash * S NOTE: Weight annotation is the kill scenario, we refund otherwise.
source

pub fn validate(&self, prefs: ValidatorPrefs) -> Result<WrappedCall>

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. And, it can be only called when [EraElectionStatus] is Closed.

  • 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: Era Election Status, Ledger
  • Write: Nominators, Validators
source

pub fn nominate( &self, targets: Vec<MultiAddress<AccountId, u32>> ) -> Result<WrappedCall>

Declare the desire to nominate targets for the origin controller.

Effects will be felt at the beginning of the next era. This can only be called when [EraElectionStatus] is Closed.

The dispatch origin for this call must be Signed by the controller, not the stash. And, it can be only called when [EraElectionStatus] is Closed.

  • 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.

Weight: O(N) where N is the number of targets DB Weight:

  • Reads: Era Election Status, Ledger, Current Era
  • Writes: Validators, Nominators
source

pub fn chill(&self) -> Result<WrappedCall>

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. And, it can be only called when [EraElectionStatus] is Closed.

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

Weight: O(1) DB Weight:

  • Read: EraElectionStatus, Ledger
  • Write: Validators, Nominators
source

pub fn set_payee( &self, payee: RewardDestination<AccountId> ) -> Result<WrappedCall>

(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
source

pub fn set_controller( &self, controller: MultiAddress<AccountId, u32> ) -> Result<WrappedCall>

(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
source

pub fn set_validator_count(&self, new: u32) -> Result<WrappedCall>

Sets the ideal number of validators.

The dispatch origin must be Root.

Weight: O(1) Write: Validator Count

source

pub fn increase_validator_count(&self, additional: u32) -> Result<WrappedCall>

Increments the ideal number of validators.

The dispatch origin must be Root.

Same as [set_validator_count].

source

pub fn scale_validator_count(&self, factor: Percent) -> Result<WrappedCall>

Scale up the ideal number of validators by a factor.

The dispatch origin must be Root.

Same as [set_validator_count].

source

pub fn add_permissioned_validator( &self, identity: IdentityId, intended_count: Option<u32> ) -> Result<WrappedCall>

Governance committee on 2/3 rds majority can introduce a new potential identity to the pool of permissioned entities who can run validators. Staking module uses PermissionedIdentity to ensure validators have completed KYB compliance and considers them for validation.

Arguments
  • origin Required origin for adding a potential validator.
  • identity Validator’s IdentityId.
  • intended_count No. of validators given identity intends to run.
source

pub fn remove_permissioned_validator( &self, identity: IdentityId ) -> Result<WrappedCall>

Remove an identity from the pool of (wannabe) validator identities. Effects are known in the next session. Staking module checks PermissionedIdentity to ensure validators have completed KYB compliance

Arguments
  • origin Required origin for removing a potential validator.
  • identity Validator’s IdentityId.
source

pub fn validate_cdd_expiry_nominators( &self, targets: Vec<AccountId> ) -> Result<WrappedCall>

Validate the nominators CDD expiry time.

If an account from a given set of address is nominating then check the CDD expiry time of it and if it is expired then the account should be unbonded and removed from the nominating process.

#

  • Depends on passed list of AccountId.
  • Depends on the no. of claim issuers an accountId has for the CDD expiry. #
source

pub fn set_commission_cap(&self, new_cap: Perbill) -> Result<WrappedCall>

Changes commission rate which applies to all validators. Only Governance committee is allowed to change this value.

Arguments
  • new_cap the new commission cap.
source

pub fn set_min_bond_threshold(&self, new_value: u128) -> Result<WrappedCall>

Changes min bond value to be used in validate(). Only Governance committee is allowed to change this value.

Arguments
  • new_value the new minimum
source

pub fn force_no_eras(&self) -> Result<WrappedCall>

Force there to be no new eras indefinitely.

The dispatch origin must be Root.

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

pub fn force_new_era(&self) -> Result<WrappedCall>

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.

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

pub fn set_invulnerables( &self, invulnerables: Vec<AccountId> ) -> Result<WrappedCall>

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

The dispatch origin must be Root.

  • O(V)
  • Write: Invulnerables
source

pub fn force_unstake( &self, stash: AccountId, num_slashing_spans: u32 ) -> Result<WrappedCall>

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

source

pub fn force_new_era_always(&self) -> Result<WrappedCall>

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

The dispatch origin must be Root.

  • Weight: O(1)
  • Write: ForceEra
source

pub fn cancel_deferred_slash( &self, era: u32, slash_indices: Vec<u32> ) -> Result<WrappedCall>

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
source

pub fn payout_stakers( &self, validator_stash: AccountId, era: u32 ) -> Result<WrappedCall>

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.

This can only be called when [EraElectionStatus] is Closed.

  • 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) DB Weight:
  • Read: EraElectionStatus, CurrentEra, HistoryDepth, ErasValidatorReward, ErasStakersClipped, ErasRewardPoints, ErasValidatorPrefs (8 items)
  • Read Each: Bonded, Ledger, Payee, Locks, System Account (5 items)
  • Write Each: System Account, Locks, Ledger (3 items)
source

pub fn rebond(&self, value: u128) -> Result<WrappedCall>

Rebond a portion of the stash scheduled to be unlocked.

The dispatch origin must be signed by the controller, and it can be only called when [EraElectionStatus] is Closed.

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

  • DB Weight:
    • Reads: EraElectionStatus, Ledger, Locks, [Origin Account]
    • Writes: [Origin Account], Locks, Ledger
source

pub fn set_history_depth( &self, new_history_depth: u32, _era_items_deleted: u32 ) -> Result<WrappedCall>

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 by Root 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
source

pub fn reap_stash( &self, stash: AccountId, num_slashing_spans: u32 ) -> Result<WrappedCall>

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
source

pub fn submit_election_solution( &self, winners: Vec<u16>, compact: CompactAssignments, score: ElectionScore, era: u32, size: ElectionSize ) -> Result<WrappedCall>

Submit an election result to the chain. If the solution:

  1. is valid.
  2. has a better score than a potentially existing solution on chain.

then, it will be put on chain.

A solution consists of two pieces of data:

  1. winners: a flat vector of all the winners of the round.
  2. assignments: the compact version of an assignment vector that encodes the edge weights.

Both of which may be computed using phragmen, or any other algorithm.

Additionally, the submitter must provide:

  • The score that they claim their solution has.

Both validators and nominators will be represented by indices in the solution. The indices should respect the corresponding types ([ValidatorIndex] and [NominatorIndex]). Moreover, they should be valid when used to index into [SnapshotValidators] and [SnapshotNominators]. Any invalid index will cause the solution to be rejected. These two storage items are set during the election window and may be used to determine the indices.

A solution is valid if:

  1. It is submitted when [EraElectionStatus] is Open.
  2. Its claimed score is equal to the score computed on-chain.
  3. Presents the correct number of winners.
  4. All indexes must be value according to the snapshot vectors. All edge values must also be correct and should not overflow the granularity of the ratio type (i.e. 256 or billion).
  5. For each edge, all targets are actually nominated by the voter.
  6. Has correct self-votes.

A solutions score is consisted of 3 parameters:

  1. min { support.total } for each support of a winner. This value should be maximized.
  2. sum { support.total } for each support of a winner. This value should be minimized.
  3. sum { support.total^2 } for each support of a winner. This value should be minimized (to ensure less variance)

The transaction is assumed to be the longest path, a better solution.

  • Initial solution is almost the same.
  • Worse solution is retraced in pre-dispatch-checks which sets its own weight.
source

pub fn submit_election_solution_unsigned( &self, winners: Vec<u16>, compact: CompactAssignments, score: ElectionScore, era: u32, size: ElectionSize ) -> Result<WrappedCall>

Unsigned version of submit_election_solution.

Note that this must pass the [ValidateUnsigned] check which only allows transactions from the local node to be included. In other words, only the block author can include a transaction in the block.

See [submit_election_solution].

source

pub fn payout_stakers_by_system( &self, validator_stash: AccountId, era: u32 ) -> Result<WrappedCall>

System version of payout_stakers(). Only be called by the root origin.

source

pub fn change_slashing_allowed_for( &self, slashing_switch: SlashingSwitch ) -> Result<WrappedCall>

Switch slashing status on the basis of given SlashingSwitch. Can only be called by root.

Arguments
  • origin - AccountId of root.
  • slashing_switch - Switch used to set the targets for slashing.
source

pub fn update_permissioned_validator_intended_count( &self, identity: IdentityId, new_intended_count: u32 ) -> Result<WrappedCall>

Update the intended validator count for a given DID.

Arguments
  • origin which must be the required origin for adding a potential validator.
  • identity to add as a validator.
  • new_intended_count New value of intended count.
source

pub fn chill_from_governance( &self, identity: IdentityId, stash_keys: Vec<AccountId> ) -> Result<WrappedCall>

GC forcefully chills a validator. Effects will be felt at the beginning of the next era. And, it can be only called when [EraElectionStatus] is Closed.

Arguments
  • origin which must be a GC.
  • identity must be permissioned to run operator/validator nodes.
  • stash_keys contains the secondary keys of the permissioned identity
Errors
  • BadOrigin The origin was not a GC member.
  • CallNotAllowed The call is not allowed at the given time due to restrictions of election period.
  • NotExists Permissioned validator doesn’t exist.
  • NotStash Not a stash account for the permissioned identity.

Trait Implementations§

source§

impl<'api> Clone for StakingCallApi<'api>

source§

fn clone(&self) -> StakingCallApi<'api>

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<'api> From<&'api Api> for StakingCallApi<'api>

source§

fn from(api: &'api Api) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl<'api> !RefUnwindSafe for StakingCallApi<'api>

§

impl<'api> Send for StakingCallApi<'api>

§

impl<'api> Sync for StakingCallApi<'api>

§

impl<'api> Unpin for StakingCallApi<'api>

§

impl<'api> !UnwindSafe for StakingCallApi<'api>

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

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
§

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> DynClone for T
where T: Clone,

source§

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

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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 T
where 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.

§

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

§

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

Get a reference to the inner from the outer.

§

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

Get a mutable reference to the inner from the outer.

source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> SaturatedConversion for T

source§

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

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

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

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

impl<T> ToOwned for T
where 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, U> TryFrom<U> for T
where 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 T
where 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.
§

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

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
source§

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

source§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<T> JsonSchemaMaybe for T

§

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