Struct Delegation

Source
pub struct Delegation(pub AccountId);
Expand description

A wrapper struct that simplifies interactions with the Staking Pool standard on behalf of the account.

Delegation is a wrapper that provides the functionality to manage user account stake in the staking pool.

Tuple Fields§

§0: AccountId

Implementations§

Source§

impl Delegation

Source

pub fn view_staked_balance( &self, pool: AccountId, ) -> Result<QueryBuilder<PostprocessHandler<NearToken, CallResultHandler<u128>>>, BuilderError>

Prepares a new contract query (get_account_staked_balance) for fetching the staked balance (NearToken) of the account on the staking pool.

The call depends that the contract implements StakingPool

§Example
use near_api::*;

let balance = Staking::delegation("alice.testnet".parse()?)
    .view_staked_balance("pool.testnet".parse()?)?
    .fetch_from_testnet()
    .await?;
println!("Staked balance: {:?}", balance);
Source

pub fn view_unstaked_balance( &self, pool: AccountId, ) -> Result<QueryBuilder<PostprocessHandler<NearToken, CallResultHandler<u128>>>, BuilderError>

Prepares a new contract query (get_account_unstaked_balance) for fetching the unstaked(free, not used for staking) balance (NearToken) of the account on the staking pool.

The call depends that the contract implements StakingPool

§Example
use near_api::*;

let balance = Staking::delegation("alice.testnet".parse()?)
    .view_unstaked_balance("pool.testnet".parse()?)?
    .fetch_from_testnet()
    .await?;
println!("Unstaked balance: {:?}", balance);
Source

pub fn view_total_balance( &self, pool: AccountId, ) -> Result<QueryBuilder<PostprocessHandler<NearToken, CallResultHandler<u128>>>, BuilderError>

Prepares a new contract query (get_account_total_balance) for fetching the total balance (NearToken) of the account (free + staked) on the staking pool.

The call depends that the contract implements StakingPool

§Example
use near_api::*;

let balance = Staking::delegation("alice.testnet".parse()?)
    .view_total_balance("pool.testnet".parse()?)?
    .fetch_from_testnet()
    .await?;
println!("Total balance: {:?}", balance);
Source

pub fn view_balance( &self, pool: AccountId, ) -> Result<MultiQueryBuilder<PostprocessHandler<UserStakeBalance, MultiQueryHandler<(CallResultHandler<u128>, CallResultHandler<u128>, CallResultHandler<u128>)>>>, BuilderError>

Returns a full information about the staked balance (UserStakeBalance) of the account on the staking pool.

This is a complex query that requires 3 calls (get_account_staked_balance, get_account_unstaked_balance, get_account_total_balance) to the staking pool contract. The call depends that the contract implements StakingPool

§Example
use near_api::*;

let balance = Staking::delegation("alice.testnet".parse()?)
    .view_balance("pool.testnet".parse()?)?
    .fetch_from_testnet()
    .await?;
println!("Balance: {:?}", balance);
Source

pub fn is_account_unstaked_balance_available_for_withdrawal( &self, pool: AccountId, ) -> Result<QueryBuilder<CallResultHandler<bool>>, BuilderError>

Prepares a new contract query (is_account_unstaked_balance_available) for checking if the unstaked balance of the account is available for withdrawal.

Some pools configures minimum withdrawal period in epochs, so the balance is not available for withdrawal immediately.

The call depends that the contract implements StakingPool

§Example
use near_api::*;

let is_available = Staking::delegation("alice.testnet".parse()?)
    .is_account_unstaked_balance_available_for_withdrawal("pool.testnet".parse()?)?
    .fetch_from_testnet()
    .await?;
println!("Is available: {:?}", is_available);
Source

pub fn deposit( &self, pool: AccountId, amount: NearToken, ) -> Result<ConstructTransaction, BuilderError>

Prepares a new transaction contract call (deposit) for depositing funds into the staking pool. Please note that your deposit is not staked, and it will be allocated as unstaked (free) balance.

Please note that this call will deposit your account tokens into the contract, so you will not be able to use them for other purposes.

The call depends that the contract implements StakingPool

§Example
use near_api::*;

let result: near_primitives::views::FinalExecutionOutcomeView = Staking::delegation("alice.testnet".parse()?)
    .deposit("pool.testnet".parse()?, NearToken::from_near(1))?
    .with_signer(Signer::new(Signer::from_ledger())?)
    .send_to_testnet()
    .await?;
Source

pub fn deposit_and_stake( &self, pool: AccountId, amount: NearToken, ) -> Result<ConstructTransaction, BuilderError>

Prepares a new transaction contract call (deposit_and_stake) for depositing funds into the staking pool and staking them.

Please note that this call will deposit your account tokens into the contract, so you will not be able to use them for other purposes. Also, after you have staked your funds, if you decide to withdraw them, you might need to wait for the two lockup period to end.

  • Mandatory lockup before able to unstake
  • Optional lockup before able to withdraw (depends on the pool configuration)

The call depends that the contract implements StakingPool

§Example
use near_api::*;

let result: near_primitives::views::FinalExecutionOutcomeView = Staking::delegation("alice.testnet".parse()?)
    .deposit_and_stake("pool.testnet".parse()?, NearToken::from_near(1))?
    .with_signer(Signer::new(Signer::from_ledger())?)
    .send_to_testnet()
    .await?;
Source

pub fn stake( &self, pool: AccountId, amount: NearToken, ) -> Result<ConstructTransaction, BuilderError>

Prepares a new transaction contract call (stake) for staking funds into the staking pool.

Please note that this call will use your unstaked balance. This means that you have to have enough balance already deposited into the contract. This won’t use your native account tokens, but just reallocate your balance inside the contract. Please also be aware that once you have staked your funds, you might not be able to withdraw them until the lockup periods end.

  • Mandatory lockup before able to unstake
  • Optional lockup before able to withdraw (depends on the pool configuration)

The call depends that the contract implements StakingPool

§Example
use near_api::*;

let result: near_primitives::views::FinalExecutionOutcomeView = Staking::delegation("alice.testnet".parse()?)
    .stake("pool.testnet".parse()?, NearToken::from_near(1))?
    .with_signer(Signer::new(Signer::from_ledger())?)
    .send_to_testnet()
    .await?;
Source

pub fn stake_all( &self, pool: AccountId, ) -> Result<ConstructTransaction, BuilderError>

Prepares a new transaction contract call (stake_all) for staking all available unstaked balance into the staking pool.

Please note that once you have staked your funds, you might not be able to withdraw them until the lockup periods end.

  • Mandatory lockup before able to unstake
  • Optional lockup before able to withdraw (depends on the pool configuration)

The call depends that the contract implements StakingPool

§Example
use near_api::*;

Staking::delegation("alice.testnet".parse()?)
    .stake_all("pool.testnet".parse()?)?
    .with_signer(Signer::new(Signer::from_ledger())?)
    .send_to_testnet()
    .await?;
Source

pub fn unstake( &self, pool: AccountId, amount: NearToken, ) -> Result<ConstructTransaction, BuilderError>

Prepares a new transaction contract call (unstake) for unstaking funds and returning them to your unstaked balance.

The contract will check if the minimum epoch height condition is met.

The call depends that the contract implements StakingPool

§Example
use near_api::*;

let result: near_primitives::views::FinalExecutionOutcomeView = Staking::delegation("alice.testnet".parse()?)
    .unstake("pool.testnet".parse()?, NearToken::from_near(1))?
    .with_signer(Signer::new(Signer::from_ledger())?)
    .send_to_testnet()
    .await?;
Source

pub fn unstake_all( &self, pool: AccountId, ) -> Result<ConstructTransaction, BuilderError>

Prepares a new transaction contract call (unstake_all) for unstaking all available staked balance and returning them to your unstaked balance.

The contract will check if the minimum epoch height condition is met.

The call depends that the contract implements StakingPool

§Example
use near_api::*;

let result: near_primitives::views::FinalExecutionOutcomeView = Staking::delegation("alice.testnet".parse()?)
    .unstake_all("pool.testnet".parse()?)?
    .with_signer(Signer::new(Signer::from_ledger())?)
    .send_to_testnet()
    .await?;
Source

pub fn withdraw( &self, pool: AccountId, amount: NearToken, ) -> Result<ConstructTransaction, BuilderError>

Prepares a new transaction contract call (withdraw) for withdrawing funds from the staking pool into your account.

Some pools configures minimum withdrawal period in epochs, so the balance is not available for withdrawal immediately.

The call depends that the contract implements StakingPool

§Example
use near_api::*;

let result: near_primitives::views::FinalExecutionOutcomeView = Staking::delegation("alice.testnet".parse()?)
    .withdraw("pool.testnet".parse()?, NearToken::from_near(1))?
    .with_signer(Signer::new(Signer::from_ledger())?)
    .send_to_testnet()
    .await?;
Source

pub fn withdraw_all( &self, pool: AccountId, ) -> Result<ConstructTransaction, BuilderError>

Prepares a new transaction contract call (withdraw_all) for withdrawing all available staked balance from the staking pool into your account.

Some pools configures minimum withdrawal period in epochs, so the balance is not available for withdrawal immediately.

The call depends that the contract implements StakingPool

§Example
use near_api::*;

let result: near_primitives::views::FinalExecutionOutcomeView = Staking::delegation("alice.testnet".parse()?)
    .withdraw_all("pool.testnet".parse()?)?
    .with_signer(Signer::new(Signer::from_ledger())?)
    .send_to_testnet()
    .await?;

Trait Implementations§

Source§

impl Clone for Delegation

Source§

fn clone(&self) -> Delegation

Returns a duplicate 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 Debug for Delegation

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

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
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

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

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

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.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

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

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

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

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

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>,

Source§

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.
Source§

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

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<T> ErasedDestructor for T
where T: 'static,