Struct pallet_contracts::InstructionWeights [−][src]
pub struct InstructionWeights<T: Config> {}Show fields
pub version: u32, pub i64const: u32, pub i64load: u32, pub i64store: u32, pub select: u32, pub if: u32, pub br: u32, pub br_if: u32, pub br_table: u32, pub br_table_per_entry: u32, pub call: u32, pub call_indirect: u32, pub call_indirect_per_param: u32, pub local_get: u32, pub local_set: u32, pub local_tee: u32, pub global_get: u32, pub global_set: u32, pub memory_current: u32, pub memory_grow: u32, pub i64clz: u32, pub i64ctz: u32, pub i64popcnt: u32, pub i64eqz: u32, pub i64extendsi32: u32, pub i64extendui32: u32, pub i32wrapi64: u32, pub i64eq: u32, pub i64ne: u32, pub i64lts: u32, pub i64ltu: u32, pub i64gts: u32, pub i64gtu: u32, pub i64les: u32, pub i64leu: u32, pub i64ges: u32, pub i64geu: u32, pub i64add: u32, pub i64sub: u32, pub i64mul: u32, pub i64divs: u32, pub i64divu: u32, pub i64rems: u32, pub i64remu: u32, pub i64and: u32, pub i64or: u32, pub i64xor: u32, pub i64shl: u32, pub i64shrs: u32, pub i64shru: u32, pub i64rotl: u32, pub i64rotr: u32, pub _phantom: PhantomData<T>,
Expand description
Describes the weight for all categories of supported wasm instructions.
There there is one field for each wasm instruction that describes the weight to execute one instruction of that name. There are a few execptions:
- If there is a i64 and a i32 variant of an instruction we use the weight of the former for both.
- The following instructions are free of charge because they merely structure the wasm module and cannot be spammed without making the module invalid (and rejected): End, Unreachable, Return, Else
- The following instructions cannot be benchmarked because they are removed by any real world execution engine as a preprocessing step and therefore don’t yield a meaningful benchmark result. However, in contrast to the instructions mentioned in 2. they can be spammed. We price them with the same weight as the “default” instruction (i64.const): Block, Loop, Nop
- We price both i64.const and drop as InstructionWeights.i64const / 2. The reason for that is that we cannot benchmark either of them on its own but we need their individual values to derive (by subtraction) the weight of all other instructions that use them as supporting instructions. Supporting means mainly pushing arguments and dropping return values in order to maintain a valid module.
Fields
version: u32
Version of the instruction weights.
Note
Should be incremented whenever any instruction weight is changed. The reason is that changes to instruction weights require a re-instrumentation in order to apply the changes to an already deployed code. The re-instrumentation is triggered by comparing the version of the current schedule with the version the code was instrumented with. Changes usually happen when pallet_contracts is re-benchmarked.
Changes to other parts of the schedule should not increment the version in order to avoid unnecessary re-instrumentations.
i64const: u32
i64load: u32
i64store: u32
select: u32
if: u32
br: u32
br_if: u32
br_table: u32
br_table_per_entry: u32
call: u32
call_indirect: u32
call_indirect_per_param: u32
local_get: u32
local_set: u32
local_tee: u32
global_get: u32
global_set: u32
memory_current: u32
memory_grow: u32
i64clz: u32
i64ctz: u32
i64popcnt: u32
i64eqz: u32
i64extendsi32: u32
i64extendui32: u32
i32wrapi64: u32
i64eq: u32
i64ne: u32
i64lts: u32
i64ltu: u32
i64gts: u32
i64gtu: u32
i64les: u32
i64leu: u32
i64ges: u32
i64geu: u32
i64add: u32
i64sub: u32
i64mul: u32
i64divs: u32
i64divu: u32
i64rems: u32
i64remu: u32
i64and: u32
i64or: u32
i64xor: u32
i64shl: u32
i64shrs: u32
i64shru: u32
i64rotl: u32
i64rotr: u32
_phantom: PhantomData<T>
The type parameter is used in the default implementation.
Trait Implementations
Attempt to deserialise the value from input.
Attempt to skip the encoded value from input. Read more
fn encoded_fixed_size() -> Option<usize>
fn encoded_fixed_size() -> Option<usize>
Returns the fixed encoded size of the type. Read more
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Convert self to a slice and append it to the destination.
fn using_encoded<R, F>(&self, f: F) -> R where
F: FnOnce(&[u8]) -> R,
fn using_encoded<R, F>(&self, f: F) -> R where
F: FnOnce(&[u8]) -> R,
Convert self to a slice and then invoke the given closure with it.
fn encoded_size(&self) -> usize
fn encoded_size(&self) -> usize
Calculates the encoded size. Read more
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
This method tests for !=
.
Auto Trait Implementations
impl<T> RefUnwindSafe for InstructionWeights<T> where
T: RefUnwindSafe,
impl<T> Send for InstructionWeights<T> where
T: Send,
impl<T> Sync for InstructionWeights<T> where
T: Sync,
impl<T> Unpin for InstructionWeights<T> where
T: Unpin,
impl<T> UnwindSafe for InstructionWeights<T> where
T: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more
impl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
T: Any,
Convert 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
pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read more
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
pub fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
pub fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert &mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s. Read more
Instruments this type with the provided Span
, returning an
Instrumented
wrapper. Read more
type Output = T
type Output = T
Should always be Self
The inverse inclusion map: attempts to construct self
from the equivalent element of its
superset. Read more
pub fn is_in_subset(&self) -> bool
pub fn is_in_subset(&self) -> bool
Checks if self
is actually part of its subset T
(and can be converted to it).
pub fn to_subset_unchecked(&self) -> SS
pub fn to_subset_unchecked(&self) -> SS
Use with care! Same as self.to_subset
but without any property checks. Always succeeds.
pub fn from_subset(element: &SS) -> SP
pub fn from_subset(element: &SS) -> SP
The inclusion map: converts self
to the equivalent element of its superset.
The counterpart to unchecked_from
.
Consume self to return an equivalent value of T
.
pub fn vzip(self) -> V
impl<'_, '_, T> EncodeLike<&'_ &'_ T> for T where
T: Encode,
impl<'_, T> EncodeLike<&'_ T> for T where
T: Encode,
impl<'_, T> EncodeLike<&'_ mut T> for T where
T: Encode,
impl<T> EncodeLike<Arc<T>> for T where
T: Encode,
impl<T> EncodeLike<Rc<T>> for T where
T: Encode,
impl<T> MaybeDebug for T where
T: Debug,
impl<T> MaybeDebug for T where
T: Debug,