pub struct GasStatus {
    pub gas_model_version: u64,
    /* private fields */
}
Expand description

The Move VM implementation of state for gas metering.

Initialize with a CostTable and the gas provided to the transaction. Provide all the proper guarantees about gas metering in the Move VM.

Every client must use an instance of this type to interact with the Move VM.

Fields§

§gas_model_version: u64

Implementations§

source§

impl GasStatus

source

pub fn new( cost_table: CostTable, budget: u64, gas_price: u64, gas_model_version: u64 ) -> Self

Initialize the gas state with metering enabled.

Charge for every operation and fail when there is no more gas to pay for operations. This is the instantiation that must be used when executing a user script.

source

pub fn new_unmetered() -> Self

Initialize the gas state with metering disabled.

It should be used by clients in very specific cases and when executing system code that does not have to charge the user.

source

pub fn push_stack(&mut self, pushes: u64) -> PartialVMResult<()>

source

pub fn pop_stack(&mut self, pops: u64)

source

pub fn increase_instruction_count(&mut self, amount: u64) -> PartialVMResult<()>

source

pub fn increase_stack_size(&mut self, size_amount: u64) -> PartialVMResult<()>

source

pub fn decrease_stack_size(&mut self, size_amount: u64)

source

pub fn charge( &mut self, num_instructions: u64, pushes: u64, pops: u64, incr_size: u64, _decr_size: u64 ) -> PartialVMResult<()>

Given: pushes + pops + increase + decrease in size for an instruction charge for the execution of the instruction.

source

pub fn cost_table(&self) -> &CostTable

Return the CostTable behind this GasStatus.

source

pub fn remaining_gas(&self) -> Gas

Return the gas left.

source

pub fn deduct_gas(&mut self, amount: InternalGas) -> PartialVMResult<()>

Charge a given amount of gas and fail if not enough gas units are left.

source

pub fn set_metering(&mut self, enabled: bool)

source

pub fn gas_used_pre_gas_price(&self) -> u64

source

pub fn charge_bytes( &mut self, size: usize, cost_per_byte: u64 ) -> PartialVMResult<()>

source

pub fn gas_price(&self) -> u64

source

pub fn stack_height_high_water_mark(&self) -> u64

source

pub fn stack_size_high_water_mark(&self) -> u64

source

pub fn instructions_executed(&self) -> u64

Trait Implementations§

source§

impl Debug for GasStatus

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl GasMeter for GasStatus

source§

fn charge_simple_instr( &mut self, instr: SimpleInstruction ) -> PartialVMResult<()>

Charge an instruction and fail if not enough gas units are left.

source§

fn charge_pop(&mut self, popped_val: impl ValueView) -> PartialVMResult<()>

source§

fn charge_native_function( &mut self, amount: InternalGas, ret_vals: Option<impl ExactSizeIterator<Item = impl ValueView>> ) -> PartialVMResult<()>

source§

fn charge_native_function_before_execution( &mut self, _ty_args: impl ExactSizeIterator<Item = impl TypeView>, args: impl ExactSizeIterator<Item = impl ValueView> ) -> PartialVMResult<()>

source§

fn charge_call( &mut self, _module_id: &ModuleId, _func_name: &str, args: impl ExactSizeIterator<Item = impl ValueView>, _num_locals: NumArgs ) -> PartialVMResult<()>

source§

fn charge_call_generic( &mut self, _module_id: &ModuleId, _func_name: &str, _ty_args: impl ExactSizeIterator<Item = impl TypeView>, args: impl ExactSizeIterator<Item = impl ValueView>, _num_locals: NumArgs ) -> PartialVMResult<()>

source§

fn charge_ld_const(&mut self, size: NumBytes) -> PartialVMResult<()>

source§

fn charge_ld_const_after_deserialization( &mut self, _val: impl ValueView ) -> PartialVMResult<()>

source§

fn charge_copy_loc(&mut self, val: impl ValueView) -> PartialVMResult<()>

source§

fn charge_move_loc(&mut self, val: impl ValueView) -> PartialVMResult<()>

source§

fn charge_store_loc(&mut self, val: impl ValueView) -> PartialVMResult<()>

source§

fn charge_pack( &mut self, _is_generic: bool, args: impl ExactSizeIterator<Item = impl ValueView> ) -> PartialVMResult<()>

source§

fn charge_unpack( &mut self, _is_generic: bool, args: impl ExactSizeIterator<Item = impl ValueView> ) -> PartialVMResult<()>

source§

fn charge_read_ref(&mut self, ref_val: impl ValueView) -> PartialVMResult<()>

source§

fn charge_write_ref( &mut self, new_val: impl ValueView, old_val: impl ValueView ) -> PartialVMResult<()>

source§

fn charge_eq( &mut self, lhs: impl ValueView, rhs: impl ValueView ) -> PartialVMResult<()>

source§

fn charge_neq( &mut self, lhs: impl ValueView, rhs: impl ValueView ) -> PartialVMResult<()>

source§

fn charge_vec_pack<'a>( &mut self, _ty: impl TypeView + 'a, args: impl ExactSizeIterator<Item = impl ValueView> ) -> PartialVMResult<()>

source§

fn charge_vec_len(&mut self, _ty: impl TypeView) -> PartialVMResult<()>

source§

fn charge_vec_borrow( &mut self, _is_mut: bool, _ty: impl TypeView, _is_success: bool ) -> PartialVMResult<()>

source§

fn charge_vec_push_back( &mut self, _ty: impl TypeView, _val: impl ValueView ) -> PartialVMResult<()>

source§

fn charge_vec_pop_back( &mut self, _ty: impl TypeView, _val: Option<impl ValueView> ) -> PartialVMResult<()>

source§

fn charge_vec_unpack( &mut self, _ty: impl TypeView, expect_num_elements: NumArgs, _elems: impl ExactSizeIterator<Item = impl ValueView> ) -> PartialVMResult<()>

source§

fn charge_vec_swap(&mut self, _ty: impl TypeView) -> PartialVMResult<()>

source§

fn charge_drop_frame( &mut self, _locals: impl Iterator<Item = impl ValueView> ) -> PartialVMResult<()>

source§

fn remaining_gas(&self) -> InternalGas

Returns the gas left
source§

fn get_profiler_mut(&mut self) -> Option<&mut GasProfiler>

source§

fn set_profiler(&mut self, profiler: GasProfiler)

Auto Trait Implementations§

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
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32 ) -> TaggedParser<'a, Implicit, Self, E>

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
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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.

§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a Request
source§

impl<T> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
source§

impl<T> Same for T

§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

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

§

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

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more