referrerpolicy=no-referrer-when-downgrade
westend_runtime

Type Alias DelegatedStaking

Source
pub type DelegatedStaking = Pallet<Runtime>;

Aliased Type§

struct DelegatedStaking(/* private fields */);

Implementations

Source§

impl<T> Pallet<T>
where T: Config,

Source

pub fn register_agent( origin: <T as Config>::RuntimeOrigin, reward_account: <T as Config>::AccountId, ) -> Result<(), DispatchError>

Register an account to become a stake Agent. Sometimes also called a Delegatee.

Delegators can authorize Agents to stake on their behalf by delegating their funds to them. The Agent can then use the delegated funds to stake to Config::CoreStaking.

An account that is directly staked to Config::CoreStaking cannot become an Agent. However, they can migrate to become an agent using Self::migrate_to_agent.

Implementation note: This function allows any account to become an agent. It is important though that accounts that call StakingUnchecked::virtual_bond are keyless accounts. This is not a problem for now since this is only used by other pallets in the runtime which use keyless account as agents. If we later want to expose this as a dispatchable call, we should derive a sub-account from the caller and use that as the agent account.

Source

pub fn remove_agent( origin: <T as Config>::RuntimeOrigin, ) -> Result<(), DispatchError>

Remove an account from being an Agent.

This can only be called if the agent has no delegated funds, no pending slashes and no unclaimed withdrawals.

Source

pub fn migrate_to_agent( origin: <T as Config>::RuntimeOrigin, reward_account: <T as Config>::AccountId, ) -> Result<(), DispatchError>

Migrate from a Nominator account to Agent account.

The origin needs to

This function will create a proxy account to the agent called proxy_delegator and transfer the directly staked amount by the agent to it. The proxy_delegator delegates the funds to the origin making origin an Agent account. The real delegator accounts of the origin can later migrate their funds using Self::migrate_delegation to claim back their share of delegated funds from proxy_delegator to self.

Any free fund in the agent’s account will be marked as unclaimed withdrawal.

Source

pub fn release_delegation( origin: <T as Config>::RuntimeOrigin, delegator: <T as Config>::AccountId, amount: <<T as Config>::Currency as Inspect<<T as Config>::AccountId>>::Balance, num_slashing_spans: u32, ) -> Result<(), DispatchError>

Release previously delegated funds by delegator to origin.

Only agents can call this.

Tries to withdraw unbonded funds from CoreStaking if needed and release amount to delegator.

Source

pub fn migrate_delegation( origin: <T as Config>::RuntimeOrigin, delegator: <T as Config>::AccountId, amount: <<T as Config>::Currency as Inspect<<T as Config>::AccountId>>::Balance, ) -> Result<(), DispatchError>

Migrate delegated funds that are held in proxy_delegator to the claiming delegator’s account. If successful, the specified funds will be moved and delegated from delegator account to the agent.

This can be called by agent accounts that were previously a direct Nominator with Config::CoreStaking and has some remaining unclaimed delegations.

Internally, it moves some delegations from proxy_delegator account to delegator account and reapplying the holds.

Source

pub fn delegate_to_agent( origin: <T as Config>::RuntimeOrigin, agent: <T as Config>::AccountId, amount: <<T as Config>::Currency as Inspect<<T as Config>::AccountId>>::Balance, ) -> Result<(), DispatchError>

Delegate given amount of tokens to an Agent account.

If origin is the first time delegator, we add them to state. If they are already delegating, we increase the delegation.

Conditions:

  • Delegators cannot delegate to more than one agent.
  • The agent account should already be registered as such. See Self::register_agent.
Source§

impl<T> Pallet<T>
where T: Config,

Source

pub fn generate_proxy_delegator( agent: Agent<<T as Config>::AccountId>, ) -> Delegator<<T as Config>::AccountId>

Derive an account from the migrating agent account where the unclaimed delegation funds are held.

Source

pub fn do_slash( agent: Agent<<T as Config>::AccountId>, delegator: Delegator<<T as Config>::AccountId>, amount: <<T as Config>::Currency as Inspect<<T as Config>::AccountId>>::Balance, maybe_reporter: Option<<T as Config>::AccountId>, ) -> Result<(), DispatchError>

Take slash amount from agent’s pending_slashcounter and apply it to delegator account.

Trait Implementations

Source§

impl<T> BeforeAllRuntimeMigrations for Pallet<T>
where T: Config,

Source§

fn before_all_runtime_migrations() -> Weight

Something that should happen before runtime migrations are executed.
Source§

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

Source§

impl<T> Clone for Pallet<T>

Source§

fn clone(&self) -> Pallet<T>

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<(), Error>

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

impl<T> DelegationInterface for Pallet<T>
where T: Config,

Source§

fn agent_balance( agent: Agent<<Pallet<T> as DelegationInterface>::AccountId>, ) -> Option<<Pallet<T> as DelegationInterface>::Balance>

Effective balance of the Agent account.

Source§

fn register_agent( agent: Agent<<Pallet<T> as DelegationInterface>::AccountId>, reward_account: &<Pallet<T> as DelegationInterface>::AccountId, ) -> Result<(), DispatchError>

Delegate funds to an Agent.

Source§

fn remove_agent( agent: Agent<<Pallet<T> as DelegationInterface>::AccountId>, ) -> Result<(), DispatchError>

Remove Agent registration.

Source§

fn delegate( who: Delegator<<Pallet<T> as DelegationInterface>::AccountId>, agent: Agent<<Pallet<T> as DelegationInterface>::AccountId>, amount: <Pallet<T> as DelegationInterface>::Balance, ) -> Result<(), DispatchError>

Add more delegation to the Agent account.

Source§

fn withdraw_delegation( delegator: Delegator<<Pallet<T> as DelegationInterface>::AccountId>, agent: Agent<<Pallet<T> as DelegationInterface>::AccountId>, amount: <Pallet<T> as DelegationInterface>::Balance, num_slashing_spans: u32, ) -> Result<(), DispatchError>

Withdraw delegation of delegator to Agent.

If there are funds in Agent account that can be withdrawn, then those funds would be unlocked/released in the delegator’s account.

Source§

fn pending_slash( agent: Agent<<Pallet<T> as DelegationInterface>::AccountId>, ) -> Option<<Pallet<T> as DelegationInterface>::Balance>

Returns pending slash of the agent.

Source§

type Balance = <<T as Config>::Currency as Inspect<<T as Config>::AccountId>>::Balance

Balance type used by the staking system.
Source§

type AccountId = <T as Config>::AccountId

AccountId type used by the staking system.
Source§

fn agent_transferable_balance( agent: Agent<<Pallet<T> as DelegationInterface>::AccountId>, ) -> Option<<Pallet<T> as DelegationInterface>::Balance>

Returns the total amount of funds that is unbonded and can be withdrawn from the Agent account. None if not an Agent.
Source§

fn delegator_balance( delegator: Delegator<<Pallet<T> as DelegationInterface>::AccountId>, ) -> Option<<Pallet<T> as DelegationInterface>::Balance>

Returns the total amount of funds delegated. None if not a Delegator.
Source§

fn delegator_slash( agent: Agent<<Pallet<T> as DelegationInterface>::AccountId>, delegator: Delegator<<Pallet<T> as DelegationInterface>::AccountId>, value: <Pallet<T> as DelegationInterface>::Balance, maybe_reporter: Option<<Pallet<T> as DelegationInterface>::AccountId>, ) -> Result<(), DispatchError>

Apply a pending slash to an Agent by slashing value from delegator. Read more
Source§

impl<T> DelegationMigrator for Pallet<T>
where T: Config,

Source§

fn force_kill_agent(agent: Agent<<Pallet<T> as DelegationMigrator>::AccountId>)

Only used for testing.

Source§

type Balance = <<T as Config>::Currency as Inspect<<T as Config>::AccountId>>::Balance

Balance type used by the staking system.
Source§

type AccountId = <T as Config>::AccountId

AccountId type used by the staking system.
Source§

fn migrate_nominator_to_agent( agent: Agent<<Pallet<T> as DelegationMigrator>::AccountId>, reward_account: &<Pallet<T> as DelegationMigrator>::AccountId, ) -> Result<(), DispatchError>

Migrate an existing Nominator to Agent account. Read more
Source§

fn migrate_delegation( agent: Agent<<Pallet<T> as DelegationMigrator>::AccountId>, delegator: Delegator<<Pallet<T> as DelegationMigrator>::AccountId>, value: <Pallet<T> as DelegationMigrator>::Balance, ) -> Result<(), DispatchError>

Migrate value of delegation to delegator from a migrating agent. Read more
Source§

impl<T> DispatchViewFunction for Pallet<T>
where T: Config,

Source§

fn dispatch_view_function<O>( id: &ViewFunctionId, input: &mut &[u8], output: &mut O, ) -> Result<(), ViewFunctionDispatchError>
where O: Output,

Source§

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

Source§

type InCodeStorageVersion = StorageVersion

This type is generated by the pallet macro. Read more
Source§

fn in_code_storage_version() -> <Pallet<T> as GetStorageVersion>::InCodeStorageVersion

Returns the in-code storage version as specified in the storage_version attribute, or NoStorageVersionSet if the attribute is missing.
Source§

fn on_chain_storage_version() -> StorageVersion

Returns the storage version of the pallet as last set in the actual on-chain storage.
Source§

fn current_storage_version() -> Self::InCodeStorageVersion

👎Deprecated: This method has been renamed to in_code_storage_version and will be removed after March 2024.
DEPRECATED: Use Self::current_storage_version instead. Read more
Source§

impl<T> Hooks<<<<T as Config>::Block as HeaderProvider>::HeaderT as Header>::Number> for Pallet<T>
where T: Config,

Source§

fn try_state( _n: <<<T as Config>::Block as HeaderProvider>::HeaderT as Header>::Number, ) -> Result<(), DispatchError>

Execute the sanity checks of this pallet, per block. Read more
Source§

fn on_initialize(_n: BlockNumber) -> Weight

Block initialization hook. This is called at the very beginning of block execution. Read more
Source§

fn on_finalize(_n: BlockNumber)

Block finalization hook. This is called at the very end of block execution. Read more
Source§

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

Hook to consume a block’s idle time. This will run when the block is being finalized (before Hooks::on_finalize). Read more
Source§

fn on_poll(_n: BlockNumber, _weight: &mut WeightMeter)

A hook to run logic after inherent application. Read more
Source§

fn on_runtime_upgrade() -> Weight

Hook executed when a code change (aka. a “runtime upgrade”) is detected by the FRAME Executive pallet. Read more
Source§

fn pre_upgrade() -> Result<Vec<u8>, DispatchError>

Execute some pre-checks prior to a runtime upgrade. Read more
Source§

fn post_upgrade(_state: Vec<u8>) -> Result<(), DispatchError>

Execute some post-checks after a runtime upgrade. Read more
Source§

fn offchain_worker(_n: BlockNumber)

Implementing this function on a pallet allows you to perform long-running tasks that are dispatched as separate threads, and entirely independent of the main blockchain execution. Read more
Source§

fn integrity_test()

Check the integrity of this pallet’s configuration. Read more
Source§

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

Source§

impl<T> OffchainWorker<<<<T as Config>::Block as HeaderProvider>::HeaderT as Header>::Number> for Pallet<T>
where T: Config,

Source§

fn offchain_worker( n: <<<T as Config>::Block as HeaderProvider>::HeaderT as Header>::Number, )

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

impl<T> OnFinalize<<<<T as Config>::Block as HeaderProvider>::HeaderT as Header>::Number> for Pallet<T>
where T: Config,

Source§

fn on_finalize( n: <<<T as Config>::Block as HeaderProvider>::HeaderT as Header>::Number, )

Source§

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

Source§

fn on_genesis()

Something that should happen at genesis.
Source§

impl<T> OnIdle<<<<T as Config>::Block as HeaderProvider>::HeaderT as Header>::Number> for Pallet<T>
where T: Config,

Source§

fn on_idle( n: <<<T as Config>::Block as HeaderProvider>::HeaderT as Header>::Number, remaining_weight: Weight, ) -> Weight

Source§

impl<T> OnInitialize<<<<T as Config>::Block as HeaderProvider>::HeaderT as Header>::Number> for Pallet<T>
where T: Config,

Source§

fn on_initialize( n: <<<T as Config>::Block as HeaderProvider>::HeaderT as Header>::Number, ) -> Weight

Source§

impl<T> OnPoll<<<<T as Config>::Block as HeaderProvider>::HeaderT as Header>::Number> for Pallet<T>
where T: Config,

Source§

fn on_poll( n: <<<T as Config>::Block as HeaderProvider>::HeaderT as Header>::Number, weight: &mut WeightMeter, )

Code to execute every now and then at the beginning of the block after inherent application. Read more
Source§

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

Source§

fn on_runtime_upgrade() -> Weight

Source§

fn pre_upgrade() -> Result<Vec<u8>, DispatchError>

Source§

fn post_upgrade(state: Vec<u8>) -> Result<(), DispatchError>

Source§

fn try_on_runtime_upgrade(checks: bool) -> Result<Weight, DispatchError>

The expected and default behavior of this method is to handle executing pre_upgrade -> on_runtime_upgrade -> post_upgrade hooks for a migration. Read more
Source§

impl<T> OnStakingUpdate<<T as Config>::AccountId, <<T as Config>::Currency as Inspect<<T as Config>::AccountId>>::Balance> for Pallet<T>
where T: Config,

Source§

fn on_slash( who: &<T as Config>::AccountId, _slashed_active: <<T as Config>::Currency as Inspect<<T as Config>::AccountId>>::Balance, _slashed_unlocking: &BTreeMap<u32, <<T as Config>::Currency as Inspect<<T as Config>::AccountId>>::Balance>, slashed_total: <<T as Config>::Currency as Inspect<<T as Config>::AccountId>>::Balance, )

Fired when a staker is slashed. Read more
Source§

fn on_withdraw( stash: &<T as Config>::AccountId, amount: <<T as Config>::Currency as Inspect<<T as Config>::AccountId>>::Balance, )

Fired when a portion of a staker’s balance has been withdrawn.
Source§

fn on_stake_update(_who: &AccountId, _prev_stake: Option<Stake<Balance>>)

Fired when the stake amount of someone updates. Read more
Source§

fn on_nominator_add(_who: &AccountId)

Fired when someone sets their intention to nominate. Read more
Source§

fn on_nominator_update(_who: &AccountId, _prev_nominations: Vec<AccountId>)

Fired when an existing nominator updates their nominations. Read more
Source§

fn on_nominator_remove(_who: &AccountId, _nominations: Vec<AccountId>)

Fired when someone removes their intention to nominate, either due to chill or validating. Read more
Source§

fn on_validator_add(_who: &AccountId)

Fired when someone sets their intention to validate. Read more
Source§

fn on_validator_update(_who: &AccountId)

Fired when an existing validator updates their preferences. Read more
Source§

fn on_validator_remove(_who: &AccountId)

Fired when someone removes their intention to validate, either due to chill or nominating.
Source§

fn on_unstake(_who: &AccountId)

Fired when someone is fully unstaked.
Source§

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

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 name_hash() -> [u8; 16]

Two128 hash of name.
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> PalletsInfoAccess for Pallet<T>
where T: Config,

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 for Pallet<T>

Source§

fn eq(&self, other: &Pallet<T>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

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

Source§

impl<T> TryDecodeEntireStorage for Pallet<T>
where T: Config,

Source§

fn try_decode_entire_state() -> Result<usize, Vec<TryDecodeEntireStorageError>>

Decode the entire data under the given storage, returning Ok(bytes_decoded) if success.
Source§

impl<T> TryState<<<<T as Config>::Block as HeaderProvider>::HeaderT as Header>::Number> for Pallet<T>
where T: Config,

Source§

fn try_state( n: <<<T as Config>::Block as HeaderProvider>::HeaderT as Header>::Number, _s: Select, ) -> Result<(), DispatchError>

Execute the state checks.
Source§

impl<T> ViewFunctionIdPrefix for Pallet<T>
where T: Config,

Source§

fn prefix() -> [u8; 16]

Source§

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

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>