pub struct CallApi<'api> { /* private fields */ }Implementations§
source§impl<'api> CallApi<'api>
impl<'api> CallApi<'api>
sourcepub fn call(
&self,
dest: MultiAddress<AccountId, u32>,
value: u128,
gas_limit: u64,
storage_deposit_limit: Option<Compact<u128>>,
data: Vec<u8>
) -> Result<WrappedCall<'api>>
pub fn call(
&self,
dest: MultiAddress<AccountId, u32>,
value: u128,
gas_limit: u64,
storage_deposit_limit: Option<Compact<u128>>,
data: Vec<u8>
) -> Result<WrappedCall<'api>>
Makes a call to an account, optionally transferring some balance.
Parameters
-
dest: Address of the contract to call. -
value: The balance to transfer from theorigintodest. -
gas_limit: The gas limit enforced when executing the constructor. -
storage_deposit_limit: The maximum amount of balance that can be charged from the caller to pay for the storage consumed. -
data: The input data to pass to the contract. -
If the account is a smart-contract account, the associated code will be executed and any value will be transferred.
-
If the account is a regular account, any value will be transferred.
-
If no account exists and the call value is not less than
existential_deposit, a regular account will be created and any value will be transferred.
sourcepub fn instantiate_with_code(
&self,
value: u128,
gas_limit: u64,
storage_deposit_limit: Option<Compact<u128>>,
code: Vec<u8>,
data: Vec<u8>,
salt: Vec<u8>
) -> Result<WrappedCall<'api>>
pub fn instantiate_with_code(
&self,
value: u128,
gas_limit: u64,
storage_deposit_limit: Option<Compact<u128>>,
code: Vec<u8>,
data: Vec<u8>,
salt: Vec<u8>
) -> Result<WrappedCall<'api>>
Instantiates a new contract from the supplied code optionally transferring
some balance.
This dispatchable has the same effect as calling Self::upload_code +
Self::instantiate. Bundling them together provides efficiency gains. Please
also check the documentation of Self::upload_code.
Parameters
value: The balance to transfer from theoriginto the newly created contract.gas_limit: The gas limit enforced when executing the constructor.storage_deposit_limit: The maximum amount of balance that can be charged/reserved from the caller to pay for the storage consumed.code: The contract code to deploy in raw bytes.data: The input data to pass to the contract constructor.salt: Used for the address derivation. See [Pallet::contract_address].
Instantiation is executed as follows:
- The supplied
codeis instrumented, deployed, and acode_hashis created for that code. - If the
code_hashalready exists on the chain the underlyingcodewill be shared. - The destination address is computed based on the sender, code_hash and the salt.
- The smart-contract account is created at the computed address.
- The
valueis transferred to the new account. - The
deployfunction is executed in the context of the newly-created account.
sourcepub fn instantiate(
&self,
value: u128,
gas_limit: u64,
storage_deposit_limit: Option<Compact<u128>>,
code_hash: H256,
data: Vec<u8>,
salt: Vec<u8>
) -> Result<WrappedCall<'api>>
pub fn instantiate(
&self,
value: u128,
gas_limit: u64,
storage_deposit_limit: Option<Compact<u128>>,
code_hash: H256,
data: Vec<u8>,
salt: Vec<u8>
) -> Result<WrappedCall<'api>>
Instantiates a contract from a previously deployed wasm binary.
This function is identical to Self::instantiate_with_code but without the
code deployment step. Instead, the code_hash of an on-chain deployed wasm binary
must be supplied.
sourcepub fn upload_code(
&self,
code: Vec<u8>,
storage_deposit_limit: Option<Compact<u128>>
) -> Result<WrappedCall<'api>>
pub fn upload_code(
&self,
code: Vec<u8>,
storage_deposit_limit: Option<Compact<u128>>
) -> Result<WrappedCall<'api>>
Upload new code without instantiating a contract from it.
If the code does not already exist a deposit is reserved from the caller
and unreserved only when Self::remove_code is called. The size of the reserve
depends on the instrumented size of the the supplied code.
If the code already exists in storage it will still return Ok and upgrades
the in storage version to the current
InstructionWeights::version.
Note
Anyone can instantiate a contract from any uploaded code and thus prevent its removal.
To avoid this situation a constructor could employ access control so that it can
only be instantiated by permissioned entities. The same is true when uploading
through Self::instantiate_with_code.
sourcepub fn remove_code(&self, code_hash: H256) -> Result<WrappedCall<'api>>
pub fn remove_code(&self, code_hash: H256) -> Result<WrappedCall<'api>>
Remove the code stored under code_hash and refund the deposit to its owner.
A code can only be removed by its original uploader (its owner) and only if it is not used by any contract.
Trait Implementations§
Auto Trait Implementations§
impl<'api> !RefUnwindSafe for CallApi<'api>
impl<'api> Send for CallApi<'api>
impl<'api> Sync for CallApi<'api>
impl<'api> Unpin for CallApi<'api>
impl<'api> !UnwindSafe for CallApi<'api>
Blanket Implementations§
§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
§fn checked_from<T>(t: T) -> Option<Self>where
Self: TryFrom<T>,
fn checked_from<T>(t: T) -> Option<Self>where
Self: TryFrom<T>,
§fn checked_into<T>(self) -> Option<T>where
Self: TryInto<T>,
fn checked_into<T>(self) -> Option<T>where
Self: TryInto<T>,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait. Read more§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait. Read more§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s. Read more§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s. Read moresource§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
source§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
source§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
T. Read more§impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
unchecked_from.source§impl<T, S> UniqueSaturatedInto<T> for Swhere
T: Bounded,
S: TryInto<T>,
impl<T, S> UniqueSaturatedInto<T> for Swhere
T: Bounded,
S: TryInto<T>,
source§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T.