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 theorigin
todest
. -
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 theorigin
to 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
code
is instrumented, deployed, and acode_hash
is created for that code. - If the
code_hash
already exists on the chain the underlyingcode
will 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
value
is transferred to the new account. - The
deploy
function 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
.§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
.§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.§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.source§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
.