StorageDeposit

Struct StorageDeposit 

Source
pub struct StorageDeposit(Contract);
Expand description

A wrapper struct that simplifies interactions with the Storage Management standard

Contracts on NEAR Protocol often implement a NEP-145 for managing storage deposits, which are required for storing data on the blockchain. This struct provides convenient methods to interact with these storage-related functions on the contract.

§Example

use near_api::*;

let storage = StorageDeposit::on_contract("contract.testnet".parse()?);

// Check storage balance
let balance = storage.view_account_storage("alice.testnet".parse()?)?.fetch_from_testnet().await?;
println!("Storage balance: {:?}", balance);

// Bob pays for Alice's storage on the contract contract.testnet
let deposit_tx = storage.deposit("alice.testnet".parse()?, NearToken::from_near(1))
    .with_signer("bob.testnet".parse()?, Signer::new(Signer::from_ledger())?)?
    .send_to_testnet()
    .await
    .unwrap();

Tuple Fields§

§0: Contract

Implementations§

Source§

impl StorageDeposit

Source

pub const fn on_contract(contract_id: AccountId) -> Self

Source

pub const fn contract_id(&self) -> &AccountId

Returns the underlying contract account ID for this storage deposit wrapper.

§Example
use near_api::*;

let storage = StorageDeposit::on_contract("contract.testnet".parse()?);
let contract_id = storage.contract_id();
println!("Contract ID: {}", contract_id);
Source

pub fn as_contract(&self) -> Contract

Converts this storage deposit wrapper to a Contract for other contract operations.

§Example
use near_api::*;

let storage = StorageDeposit::on_contract("usdt.tether-token.near".parse()?);
let contract = storage.as_contract();

// Now you can call other contract methods
let metadata: serde_json::Value = contract.call_function("ft_metadata", ())?.read_only().fetch_from_mainnet().await?.data;
println!("Token metadata: {:?}", metadata);
Source

pub fn view_account_storage( &self, account_id: AccountId, ) -> Result<RequestBuilder<PostprocessHandler<Data<Option<StorageBalance>>, CallResultHandler<Option<StorageBalanceInternal>>>>, BuilderError>

Prepares a new contract query (storage_balance_of) for fetching the storage balance (Option<StorageBalance>) of the account on the contract.

§Example
use near_api::*;

let balance = StorageDeposit::on_contract("contract.testnet".parse()?)
    .view_account_storage("alice.testnet".parse()?)?
    .fetch_from_testnet()
    .await?;
println!("Storage balance: {:?}", balance);
Source

pub fn deposit( &self, receiver_account_id: AccountId, amount: NearToken, ) -> StorageDepositBuilder

Prepares a new transaction contract call (storage_deposit) for depositing storage on the contract.

Returns a StorageDepositBuilder that allows configuring the deposit behavior with registration_only().

§Example
use near_api::*;

// Basic deposit for another account
let tx = StorageDeposit::on_contract("contract.testnet".parse()?)
    .deposit("alice.testnet".parse()?, NearToken::from_near(1))
    .with_signer("bob.testnet".parse()?, Signer::new(Signer::from_ledger())?)?
    .send_to_testnet()
    .await?;

// Registration-only deposit (refunds excess above minimum)
let tx = StorageDeposit::on_contract("contract.testnet".parse()?)
    .deposit("alice.testnet".parse()?, NearToken::from_near(1))
    .registration_only()
    .with_signer("bob.testnet".parse()?, Signer::new(Signer::from_ledger())?)?
    .send_to_testnet()
    .await?;
Source

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

Prepares a new transaction contract call (storage_withdraw) for withdrawing storage from the contract.

§Example
use near_api::*;

let tx = StorageDeposit::on_contract("contract.testnet".parse()?)
    .withdraw("alice.testnet".parse()?, NearToken::from_near(1))?
    .with_signer( Signer::new(Signer::from_ledger())?)
    .send_to_testnet()
    .await?;
Source

pub fn unregister(&self) -> StorageUnregisterBuilder

Prepares a new transaction contract call (storage_unregister) for unregistering the predecessor account and returning the storage NEAR deposit.

If the predecessor account is not registered, the function returns false without panic.

By default, the contract will panic if the caller has existing account data (such as a positive token balance). Use force() to ignore existing account data and force unregistering (which may burn token balances).

Note: Requires exactly 1 yoctoNEAR attached for security purposes.

§Example
use near_api::*;

// Normal unregister (fails if account has data like token balance)
let tx = StorageDeposit::on_contract("contract.testnet".parse()?)
    .unregister()
    .with_signer("alice.testnet".parse()?, Signer::new(Signer::from_ledger())?)?
    .send_to_testnet()
    .await?;

// Force unregister (burns any remaining token balance)
let tx = StorageDeposit::on_contract("contract.testnet".parse()?)
    .unregister()
    .force()
    .with_signer("alice.testnet".parse()?, Signer::new(Signer::from_ledger())?)?
    .send_to_testnet()
    .await?;

Trait Implementations§

Source§

impl Clone for StorageDeposit

Source§

fn clone(&self) -> StorageDeposit

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 StorageDeposit

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

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