Trait sp_staking::DelegationInterface
source · 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 delegator_balance(
delegator: Delegator<Self::AccountId>,
) -> Option<Self::Balance>;
fn delegate(
delegator: Delegator<Self::AccountId>,
agent: Agent<Self::AccountId>,
reward_account: &Self::AccountId,
amount: Self::Balance,
) -> DispatchResult;
fn delegate_extra(
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§
Required Methods§
sourcefn agent_balance(agent: Agent<Self::AccountId>) -> Option<Self::Balance>
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.
sourcefn delegator_balance(
delegator: Delegator<Self::AccountId>,
) -> Option<Self::Balance>
fn delegator_balance( delegator: Delegator<Self::AccountId>, ) -> Option<Self::Balance>
Returns the total amount of funds delegated. None
if not a Delegator
.
sourcefn delegate(
delegator: Delegator<Self::AccountId>,
agent: Agent<Self::AccountId>,
reward_account: &Self::AccountId,
amount: Self::Balance,
) -> DispatchResult
fn delegate( delegator: Delegator<Self::AccountId>, agent: Agent<Self::AccountId>, reward_account: &Self::AccountId, amount: Self::Balance, ) -> DispatchResult
Delegate funds to Agent
.
Only used for the initial delegation. Use Self::delegate_extra
to add more delegation.
sourcefn delegate_extra(
delegator: Delegator<Self::AccountId>,
agent: Agent<Self::AccountId>,
amount: Self::Balance,
) -> DispatchResult
fn delegate_extra( delegator: Delegator<Self::AccountId>, agent: Agent<Self::AccountId>, amount: Self::Balance, ) -> DispatchResult
Add more delegation to the Agent
.
If this is the first delegation, use Self::delegate
instead.
sourcefn withdraw_delegation(
delegator: Delegator<Self::AccountId>,
agent: Agent<Self::AccountId>,
amount: Self::Balance,
num_slashing_spans: u32,
) -> DispatchResult
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
sourcefn pending_slash(agent: Agent<Self::AccountId>) -> Option<Self::Balance>
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.
sourcefn delegator_slash(
agent: Agent<Self::AccountId>,
delegator: Delegator<Self::AccountId>,
value: Self::Balance,
maybe_reporter: Option<Self::AccountId>,
) -> DispatchResult
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.