multiversx_sc::contract_base

Struct SendWrapper

Source
pub struct SendWrapper<A>{ /* private fields */ }
Expand description

API that groups methods that either send EGLD or ESDT, or that call other contracts.

Implementations§

Source§

impl<A> SendWrapper<A>

Source

pub fn new() -> Self

Source

pub fn esdt_system_sc_proxy( &self, ) -> ESDTSystemSCProxyMethods<TxScEnv<A>, (), ESDTSystemSCAddress, ()>

Backwards compatibility, synonymous to esdt_system_sc_tx, which is the more appropriate name now.

Source

pub fn esdt_system_sc_tx( &self, ) -> ESDTSystemSCProxyMethods<TxScEnv<A>, (), ESDTSystemSCAddress, ()>

Prepares a proxy object to call the ESDT system SC. It has the destination address set, as well as the contract type (as specified in the proxy).

Source

pub fn contract_call<R>( &self, to: ManagedAddress<A>, endpoint_name: impl Into<ManagedBuffer<A>>, ) -> ContractCallNoPayment<A, R>

Convenient way to quickly instance a minimal contract call (with no EGLD, no arguments, etc.)

You can further configure this contract call by chaining methods to it.

Source

pub fn direct_egld(&self, to: &ManagedAddress<A>, amount: &BigUint<A>)

Sends EGLD to a given address, directly. Used especially for sending EGLD to regular accounts.

Source

pub fn direct_non_zero_egld(&self, to: &ManagedAddress<A>, amount: &BigUint<A>)

Sends EGLD to a given address, directly. Used especially for sending EGLD to regular accounts.

If the amount is 0, it returns without error.

Source

pub fn direct( &self, to: &ManagedAddress<A>, token: &EgldOrEsdtTokenIdentifier<A>, nonce: u64, amount: &BigUint<A>, )

Sends either EGLD, ESDT or NFT to the target address, depending on the token identifier and nonce

Source

pub fn direct_non_zero( &self, to: &ManagedAddress<A>, token: &EgldOrEsdtTokenIdentifier<A>, nonce: u64, amount: &BigUint<A>, )

Sends either EGLD, ESDT or NFT to the target address, depending on the token identifier and nonce.

If the amount is 0, it returns without error.

Source

pub fn direct_esdt_with_gas_limit<D>( &self, to: &ManagedAddress<A>, token_identifier: &TokenIdentifier<A>, nonce: u64, amount: &BigUint<A>, gas: u64, endpoint_name: D, arguments: &[ManagedBuffer<A>], )
where D: Into<ManagedBuffer<A>>,

Sends a single ESDT transfer, and calls an endpoint at the destination.

Avoid if possible, use a contract call with ESDT transfer instead, and call .transfer_execute() on it.

Source

pub fn direct_non_zero_esdt_with_gas_limit<D>( &self, to: &ManagedAddress<A>, token_identifier: &TokenIdentifier<A>, nonce: u64, amount: &BigUint<A>, gas: u64, endpoint_name: D, arguments: &[ManagedBuffer<A>], )
where D: Into<ManagedBuffer<A>>,

Sends a single ESDT transfer, and calls an endpoint at the destination.

If the amount is 0, it returns without error.

Avoid if possible, use a contract call with ESDT transfer instead, and call .transfer_execute() on it.

Source

pub fn direct_esdt( &self, to: &ManagedAddress<A>, token_identifier: &TokenIdentifier<A>, token_nonce: u64, amount: &BigUint<A>, )

Sends a single ESDT transfer to target address.

Source

pub fn direct_non_zero_esdt_payment( &self, to: &ManagedAddress<A>, payment: &EsdtTokenPayment<A>, )

Sends a single ESDT transfer to target address.

If the amount is 0, it returns without error.

Source

pub fn direct_with_gas_limit<D>( &self, to: &ManagedAddress<A>, token: &EgldOrEsdtTokenIdentifier<A>, nonce: u64, amount: &BigUint<A>, gas: u64, endpoint_name: D, arguments: &[ManagedBuffer<A>], )
where D: Into<ManagedBuffer<A>>,

Sends either EGLD, ESDT or NFT to the target address, depending on the token identifier and nonce. Also and calls an endpoint at the destination.

Avoid if possible, use a contract call with ESDT transfer instead, and call .transfer_execute() on it.

Source

pub fn direct_non_zero_with_gas_limit<D>( &self, to: &ManagedAddress<A>, token: &EgldOrEsdtTokenIdentifier<A>, nonce: u64, amount: &BigUint<A>, gas: u64, endpoint_name: D, arguments: &[ManagedBuffer<A>], )
where D: Into<ManagedBuffer<A>>,

Sends either EGLD, ESDT or NFT to the target address, depending on the token identifier and nonce. Also and calls an endpoint at the destination.

If the amount is 0, it returns without error.

Avoid if possible, use a contract call with ESDT transfer instead, and call .transfer_execute() on it.

Source

pub fn direct_multi( &self, to: &ManagedAddress<A>, payments: &ManagedVec<A, EsdtTokenPayment<A>>, )

Sends multiple ESDT tokens to a target address.

Source

pub fn transfer_esdt_via_async_call( &self, to: ManagedAddress<A>, token: TokenIdentifier<A>, nonce: u64, amount: BigUint<A>, ) -> !

Performs a simple ESDT/NFT transfer, but via async call.

As with any async call, this immediately terminates the execution of the current call, so only use as the last call in your endpoint.

If you want to perform multiple transfers, use self.send().transfer_multiple_esdt_via_async_call() instead.

Note that EGLD can NOT be transfered with this function.

Source

pub fn transfer_esdt_non_zero_via_async_call( &self, to: ManagedAddress<A>, token: TokenIdentifier<A>, nonce: u64, amount: BigUint<A>, )

Performs a simple ESDT/NFT transfer, but via async call.

As with any async call, this immediately terminates the execution of the current call, so only use as the last call in your endpoint.

If you want to perform multiple transfers, use self.send().transfer_multiple_esdt_via_async_call() instead.
Note that EGLD can NOT be transfered with this function.

If the amount is 0, it returns without error.

Source

pub fn transfer_multiple_esdt_via_async_call( &self, to: ManagedAddress<A>, payments: ManagedVec<A, EsdtTokenPayment<A>>, ) -> !

Sends multiple ESDT tokens to a target address, via an async call.

Source

pub fn claim_developer_rewards( &self, child_sc_address: ManagedAddress<A>, ) -> Tx<TxScEnv<A>, (), ManagedAddress<A>, NotPayable, (), FunctionCall<A>, OriginalResultMarker<()>>

Creates a call to the ClaimDeveloperRewards builtin function.

Source

pub fn change_owner_address( &self, child_sc_address: ManagedAddress<A>, new_owner: &ManagedAddress<A>, ) -> Tx<TxScEnv<A>, (), ManagedAddress<A>, NotPayable, (), FunctionCall<A>, OriginalResultMarker<()>>

Creates a call to the ChangeOwnerAddress builtin function.

Source

pub fn call_local_esdt_built_in_function( &self, gas: u64, endpoint_name: ManagedBuffer<A>, arg_buffer: ManagedArgBuffer<A>, ) -> ManagedVec<A, ManagedBuffer<A>>

Allows synchronously calling a local function by name. Execution is resumed afterwards. You should never have to call this function directly. Use the other specific methods instead.

Source

pub fn esdt_local_mint( &self, token: &TokenIdentifier<A>, nonce: u64, amount: &BigUint<A>, )

Allows synchronous minting of ESDT/SFT (depending on nonce). Execution is resumed afterwards.

Note that the SC must have the ESDTLocalMint or ESDTNftAddQuantity roles set, or this will fail with “action is not allowed”.

For SFTs, you must use self.send().esdt_nft_create() before adding additional quantity.

This function cannot be used for NFTs.

Source

pub fn esdt_non_zero_local_mint( &self, token: &TokenIdentifier<A>, nonce: u64, amount: &BigUint<A>, )

Allows synchronous minting of ESDT/SFT (depending on nonce). Execution is resumed afterwards.

Note that the SC must have the ESDTLocalMint or ESDTNftAddQuantity roles set, or this will fail with “action is not allowed”.

For SFTs, you must use self.send().esdt_nft_create() before adding additional quantity. This function cannot be used for NFTs.

If the amount is 0, it returns without error.

Source

pub fn esdt_local_burn( &self, token: &TokenIdentifier<A>, nonce: u64, amount: &BigUint<A>, )

Allows synchronous burning of ESDT/SFT/NFT (depending on nonce). Execution is resumed afterwards.

Note that the SC must have the ESDTLocalBurn or ESDTNftBurn roles set, or this will fail with “action is not allowed”.

Source

pub fn esdt_non_zero_local_burn( &self, token: &TokenIdentifier<A>, nonce: u64, amount: &BigUint<A>, )

Allows synchronous burning of ESDT/SFT/NFT (depending on nonce). Execution is resumed afterwards.

Note that the SC must have the ESDTLocalBurn or ESDTNftBurn roles set, or this will fail with “action is not allowed”.

If the amount is 0, it returns without error.

Source

pub fn esdt_local_burn_multi( &self, payments: &ManagedVec<A, EsdtTokenPayment<A>>, )

Allows burning of multiple ESDT tokens at once.

Will execute a synchronous call to the appropriate burn builtin function for each.

Source

pub fn esdt_non_zero_local_burn_multi( &self, payments: &ManagedVec<A, EsdtTokenPayment<A>>, )

Allows burning of multiple ESDT tokens at once.

Will execute a synchronous call to the appropriate burn builtin function for each.

If any of the token amounts is 0 skips that token without throwing error.

Source

pub fn esdt_nft_create<T: TopEncode>( &self, token: &TokenIdentifier<A>, amount: &BigUint<A>, name: &ManagedBuffer<A>, royalties: &BigUint<A>, hash: &ManagedBuffer<A>, attributes: &T, uris: &ManagedVec<A, ManagedBuffer<A>>, ) -> u64

Creates a new NFT token of a certain type (determined by token_identifier). attributes can be any serializable custom struct.

This is a synchronous built-in function call, so the smart contract execution is resumed afterwards.

Must have ESDTNftCreate role set, or this will fail with “action is not allowed”.

Returns the nonce of the newly created NFT.

Source

pub fn esdt_non_zero_nft_create<T: TopEncode>( &self, token: &TokenIdentifier<A>, amount: &BigUint<A>, name: &ManagedBuffer<A>, royalties: &BigUint<A>, hash: &ManagedBuffer<A>, attributes: &T, uris: &ManagedVec<A, ManagedBuffer<A>>, ) -> u64

Creates a new NFT token of a certain type (determined by token_identifier).

attributes can be any serializable custom struct.

This is a built-in function, so the smart contract execution is resumed after. Must have ESDTNftCreate role set, or this will fail with “action is not allowed”.

Returns the nonce of the newly created NFT.

If the amount is 0, it returns without error.

Source

pub fn esdt_nft_create_compact<T: TopEncode>( &self, token: &TokenIdentifier<A>, amount: &BigUint<A>, attributes: &T, ) -> u64

Quick way of creating a new NFT token instance.

Returns the new NFT nonce.

Source

pub fn esdt_nft_create_compact_named<T: TopEncode>( &self, token: &TokenIdentifier<A>, amount: &BigUint<A>, name: &ManagedBuffer<A>, attributes: &T, ) -> u64

Quick way of creating a new NFT token instance, with custom name.

Returns the new NFT nonce.

Source

pub fn esdt_non_zero_nft_create_compact<T: TopEncode>( &self, token: &TokenIdentifier<A>, amount: &BigUint<A>, attributes: &T, ) -> u64

Quick way of creating a new NFT token instance.

Returns the new NFT nonce.

If the amount is 0, it returns without error.

Source

pub fn esdt_non_zero_nft_create_compact_named<T: TopEncode>( &self, token: &TokenIdentifier<A>, amount: &BigUint<A>, name: &ManagedBuffer<A>, attributes: &T, ) -> u64

Quick way of creating a new NFT token instance, with custom name.

Returns the new NFT nonce.

If the amount is 0, it returns without error.

Source

pub fn sell_nft( &self, nft_id: &TokenIdentifier<A>, nft_nonce: u64, nft_amount: &BigUint<A>, buyer: &ManagedAddress<A>, payment_token: &EgldOrEsdtTokenIdentifier<A>, payment_nonce: u64, payment_amount: &BigUint<A>, ) -> BigUint<A>

Sends the NFTs to the buyer address and calculates and sends the required royalties to the NFT creator.

Returns the payment amount left after sending royalties.

Source

pub fn sell_nft_non_zero( &self, nft_id: &TokenIdentifier<A>, nft_nonce: u64, nft_amount: &BigUint<A>, buyer: &ManagedAddress<A>, payment_token: &EgldOrEsdtTokenIdentifier<A>, payment_nonce: u64, payment_amount: &BigUint<A>, ) -> BigUint<A>

Sends the NFTs to the buyer address and calculates and sends the required royalties to the NFT creator.

Returns the payment amount left after sending royalties.

If the nft_amount or the payment_amount is 0 returns without error

Source

pub fn nft_add_uri( &self, token_id: &TokenIdentifier<A>, nft_nonce: u64, new_uri: ManagedBuffer<A>, )

Adds a new URI to an NFT, via a synchronous builtin function call.

Source

pub fn nft_add_multiple_uri( &self, token_id: &TokenIdentifier<A>, nft_nonce: u64, new_uris: &ManagedVec<A, ManagedBuffer<A>>, )

Adds a multiple URIs to an NFT, via a synchronous builtin function call.

Source

pub fn nft_update_attributes<T: TopEncode>( &self, token_id: &TokenIdentifier<A>, nft_nonce: u64, new_attributes: &T, )

Changes attributes of an NFT, via a synchronous builtin function call.

Source

pub fn esdt_modify_royalties( &self, token_id: &TokenIdentifier<A>, nonce: u64, new_royalty: u64, )

Modifies royalties for a specific token.

Source

pub fn esdt_nft_set_new_uris( &self, token_id: &TokenIdentifier<A>, nonce: u64, uris: &ManagedVec<A, ManagedBuffer<A>>, )

Sets new uris for a specific token.

Source

pub fn esdt_nft_modify_creator(&self, token_id: &TokenIdentifier<A>, nonce: u64)

Changes the creator of a specific token into the caller.

Source

pub fn esdt_metadata_recreate<T: TopEncode>( &self, token_id: TokenIdentifier<A>, nonce: u64, name: ManagedBuffer<A>, royalties: u64, hash: ManagedBuffer<A>, new_attributes: &T, uris: ManagedVec<A, ManagedBuffer<A>>, )

Recreates an ESDT token with the newly specified attributes.

Source

pub fn esdt_metadata_update<T: TopEncode>( &self, token_id: TokenIdentifier<A>, nonce: u64, name: ManagedBuffer<A>, royalties: u64, hash: ManagedBuffer<A>, new_attributes: &T, uris: ManagedVec<A, ManagedBuffer<A>>, )

Updates an ESDT token with the newly specified attributes.

Trait Implementations§

Source§

impl<A> Default for SendWrapper<A>

Source§

fn default() -> SendWrapper<A>

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<A> Freeze for SendWrapper<A>

§

impl<A> RefUnwindSafe for SendWrapper<A>
where A: RefUnwindSafe,

§

impl<A> Send for SendWrapper<A>
where A: Send,

§

impl<A> Sync for SendWrapper<A>
where A: Sync,

§

impl<A> Unpin for SendWrapper<A>
where A: Unpin,

§

impl<A> UnwindSafe for SendWrapper<A>
where A: UnwindSafe,

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

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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