near_contract_standards/fungible_token/
macros.rs#[macro_export]
#[deprecated(
note = "implement the near_contract_standards::fungible_token::{FungibleTokenCore, FungibleTokenResolver} traits manually instead."
)]
macro_rules! impl_fungible_token_core {
($contract: ident, $token: ident $(, $on_tokens_burned_fn:ident)?) => {
use $crate::fungible_token::core::FungibleTokenCore;
use $crate::fungible_token::resolver::FungibleTokenResolver;
#[near]
impl FungibleTokenCore for $contract {
#[payable]
fn ft_transfer(
&mut self,
receiver_id: AccountId,
amount: U128,
memo: Option<String>,
) {
self.$token.ft_transfer(receiver_id, amount, memo)
}
#[payable]
fn ft_transfer_call(
&mut self,
receiver_id: AccountId,
amount: U128,
memo: Option<String>,
msg: String,
) -> PromiseOrValue<U128> {
self.$token.ft_transfer_call(receiver_id, amount, memo, msg)
}
fn ft_total_supply(&self) -> U128 {
self.$token.ft_total_supply()
}
fn ft_balance_of(&self, account_id: AccountId) -> U128 {
self.$token.ft_balance_of(account_id)
}
}
#[near]
impl FungibleTokenResolver for $contract {
#[private]
fn ft_resolve_transfer(
&mut self,
sender_id: AccountId,
receiver_id: AccountId,
amount: U128,
) -> U128 {
let (used_amount, burned_amount) =
self.$token.internal_ft_resolve_transfer(&sender_id, receiver_id, amount);
if burned_amount > 0 {
$(self.$on_tokens_burned_fn(sender_id, burned_amount);)?
}
used_amount.into()
}
}
};
}
#[macro_export]
#[deprecated(
note = "implement the near_contract_standards::fungible_token::StorageManagement trait manually instead."
)]
macro_rules! impl_fungible_token_storage {
($contract: ident, $token: ident $(, $on_account_closed_fn:ident)?) => {
use $crate::storage_management::{
StorageManagement, StorageBalance, StorageBalanceBounds
};
#[near]
impl StorageManagement for $contract {
#[payable]
fn storage_deposit(
&mut self,
account_id: Option<AccountId>,
registration_only: Option<bool>,
) -> StorageBalance {
self.$token.storage_deposit(account_id, registration_only)
}
#[payable]
fn storage_withdraw(&mut self, amount: Option<U128>) -> StorageBalance {
self.$token.storage_withdraw(amount)
}
#[payable]
fn storage_unregister(&mut self, force: Option<bool>) -> bool {
#[allow(unused_variables)]
if let Some((account_id, balance)) = self.$token.internal_storage_unregister(force) {
$(self.$on_account_closed_fn(account_id, balance);)?
true
} else {
false
}
}
fn storage_balance_bounds(&self) -> StorageBalanceBounds {
self.$token.storage_balance_bounds()
}
fn storage_balance_of(&self, account_id: AccountId) -> Option<StorageBalance> {
self.$token.storage_balance_of(account_id)
}
}
};
}