pub trait DelegationInterface {
    type Balance: Sub<Output = Self::Balance> + Ord + PartialEq + Default + Copy + MaxEncodedLen + FullCodec + TypeInfo + Saturating;
    type AccountId: Clone + Debug;

    // Required methods
    fn agent_balance(agent: Agent<Self::AccountId>) -> Option<Self::Balance>;
    fn agent_transferable_balance(
        agent: Agent<Self::AccountId>
    ) -> Option<Self::Balance>;
    fn delegator_balance(
        delegator: Delegator<Self::AccountId>
    ) -> Option<Self::Balance>;
    fn register_agent(
        agent: Agent<Self::AccountId>,
        reward_account: &Self::AccountId
    ) -> DispatchResult;
    fn remove_agent(agent: Agent<Self::AccountId>) -> DispatchResult;
    fn delegate(
        delegator: Delegator<Self::AccountId>,
        agent: Agent<Self::AccountId>,
        amount: Self::Balance
    ) -> DispatchResult;
    fn withdraw_delegation(
        delegator: Delegator<Self::AccountId>,
        agent: Agent<Self::AccountId>,
        amount: Self::Balance,
        num_slashing_spans: u32
    ) -> DispatchResult;
    fn pending_slash(agent: Agent<Self::AccountId>) -> Option<Self::Balance>;
    fn delegator_slash(
        agent: Agent<Self::AccountId>,
        delegator: Delegator<Self::AccountId>,
        value: Self::Balance,
        maybe_reporter: Option<Self::AccountId>
    ) -> DispatchResult;
}
Expand description

Trait to provide delegation functionality for stakers.

Required Associated Types§

source

type Balance: Sub<Output = Self::Balance> + Ord + PartialEq + Default + Copy + MaxEncodedLen + FullCodec + TypeInfo + Saturating

Balance type used by the staking system.

source

type AccountId: Clone + Debug

AccountId type used by the staking system.

Required Methods§

source

fn agent_balance(agent: Agent<Self::AccountId>) -> Option<Self::Balance>

Returns effective balance of the Agent account. None if not an Agent.

This takes into account any pending slashes to Agent against the delegated balance.

source

fn agent_transferable_balance( agent: Agent<Self::AccountId> ) -> Option<Self::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<Self::AccountId> ) -> Option<Self::Balance>

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

source

fn register_agent( agent: Agent<Self::AccountId>, reward_account: &Self::AccountId ) -> DispatchResult

Register Agent such that it can accept delegation.

source

fn remove_agent(agent: Agent<Self::AccountId>) -> DispatchResult

Removes Agent registration.

This should only be allowed if the agent has no staked funds.

source

fn delegate( delegator: Delegator<Self::AccountId>, agent: Agent<Self::AccountId>, amount: Self::Balance ) -> DispatchResult

Add delegation to the Agent.

source

fn withdraw_delegation( delegator: Delegator<Self::AccountId>, agent: Agent<Self::AccountId>, amount: Self::Balance, num_slashing_spans: u32 ) -> DispatchResult

Withdraw or revoke delegation to Agent.

If there are Agent funds upto amount available to withdraw, then those funds would be released to the delegator

source

fn pending_slash(agent: Agent<Self::AccountId>) -> Option<Self::Balance>

Returns pending slashes posted to the Agent account. None if not an Agent.

Slashes to Agent account are not immediate and are applied lazily. Since Agent has an unbounded number of delegators, immediate slashing is not possible.

source

fn delegator_slash( agent: Agent<Self::AccountId>, delegator: Delegator<Self::AccountId>, value: Self::Balance, maybe_reporter: Option<Self::AccountId> ) -> DispatchResult

Apply a pending slash to an Agent by slashing value from delegator.

A reporter may be provided (if one exists) in order for the implementor to reward them, if applicable.

Object Safety§

This trait is not object safe.

Implementors§