ResourceMeter

Struct ResourceMeter 

Source
pub struct ResourceMeter<T: Config, S: State> { /* private fields */ }
Expand description

Resource meter tracking weight and storage deposit consumption.

Implementations§

Source§

impl<T: Config, S: State> ResourceMeter<T, S>

Source

pub fn new_nested( &self, limit: &CallResources<T>, ) -> Result<FrameMeter<T>, DispatchError>

Create a new nested meter with derived resource limits.

Source

pub fn absorb_weight_meter_only(&mut self, other: FrameMeter<T>)

Absorb only the weight consumption from a nested frame meter.

Source

pub fn absorb_all_meters( &mut self, other: FrameMeter<T>, contract: &T::AccountId, info: Option<&mut ContractInfo<T>>, )

Absorb all resource consumption from a nested frame meter.

Source

pub fn charge_weight_token<Tok: Token<T>>( &mut self, token: Tok, ) -> Result<ChargedAmount, DispatchError>

Charge a weight token against this meter’s remaining weight limit.

Returns Err(Error::OutOfGas) if the weight limit would be exceeded.

Source

pub fn charge_or_halt<Tok: Token<T>>( &mut self, token: Tok, ) -> ControlFlow<Halt, ChargedAmount>

Try to charge a weight token or halt if not enough weight is left.

Source

pub fn adjust_weight<Tok: Token<T>>( &mut self, charged_amount: ChargedAmount, token: Tok, )

Adjust an earlier weight charge with the actual weight consumed.

Source

pub fn sync_from_executor( &mut self, engine_fuel: Gas, ) -> Result<(), DispatchError>

Synchronize meter state with PolkaVM executor’s fuel consumption.

Maps the VM’s internal fuel accounting to weight consumption:

  • Converts engine fuel units to weight units
  • Updates meter state to match actual VM resource usage
Source

pub fn sync_to_executor(&mut self) -> Gas

Convert meter state to PolkaVM executor fuel units.

Prepares for VM execution by:

  • Computing remaining available weight
  • Converting weight units to VM fuel units and return
Source

pub fn consume_all_weight(&mut self)

Consume all remaining weight in the meter.

Source

pub fn charge_deposit( &mut self, deposit: &StorageDeposit<BalanceOf<T>>, ) -> DispatchResult

Record a storage deposit charge against this meter.

Source

pub fn eth_gas_left(&self) -> Option<BalanceOf<T>>

Get remaining ethereum gas equivalent.

Converts remaining resources to ethereum gas units:

  • For ethereum mode: computes directly from gas accounting
  • For substrate mode: converts weight+deposit to gas equivalent Returns None if resources are exhausted or conversion fails.
Source

pub fn weight_left(&self) -> Option<Weight>

Get remaining weight available.

Computes remaining computational capacity:

  • For ethereum mode: converts from gas to weight units
  • For substrate mode: subtracts consumed from weight limit Returns None if resources are exhausted.
Source

pub fn deposit_left(&self) -> Option<BalanceOf<T>>

Get remaining deposit available.

Computes remaining storage deposit allowance:

  • For ethereum mode: converts from gas to deposit units
  • For substrate mode: subtracts consumed from deposit limit Returns None if resources are exhausted.
Source

pub fn total_consumed_gas(&self) -> BalanceOf<T>

Calculate total gas consumed so far.

Computes the ethereum-gas equivalent of all resource usage:

  • Converts weight and deposit consumption to gas units
  • For ethereum mode: uses direct gas accounting
  • For substrate mode: synthesizes from weight+deposit usage
Source

pub fn weight_consumed(&self) -> Weight

Get total weight consumed

Source

pub fn weight_required(&self) -> Weight

Get total weight required This is the maximum amount of weight consumption that occurred during execution so far This is relevant because consumed weight can decrease in case it is asjusted a posteriori for some operations

Source

pub fn deposit_consumed(&self) -> StorageDeposit<BalanceOf<T>>

Get total storage deposit consumed in the current frame.

Returns the net storage deposit change from this frame,

Source

pub fn deposit_required(&self) -> StorageDeposit<BalanceOf<T>>

Get maximum storage deposit required at any point.

Returns the highest deposit amount needed during execution, accounting for temporary storage spikes before later refunds.

Source

pub fn eth_gas_consumed(&self) -> BalanceOf<T>

Get the Ethereum gas that has been consumed during the lifetime of this meter

Source§

impl<T: Config> ResourceMeter<T, Root>

Source

pub fn new( transaction_limits: TransactionLimits<T>, ) -> Result<Self, DispatchError>

Create a new transaction-level meter with the specified resource limits.

Initializes either:

  • An ethereum-style gas-based meter or
  • A substrate-style meter with explicit weight and deposit limits
Source

pub fn new_from_limits( weight_limit: Weight, deposit_limit: BalanceOf<T>, ) -> Result<Self, DispatchError>

Convenience constructor for substrate-style weight+deposit limits.

Source

pub fn execute_postponed_deposits( &mut self, origin: &Origin<T>, exec_config: &ExecConfig<T>, ) -> Result<StorageDeposit<BalanceOf<T>>, DispatchError>

Execute all postponed storage deposit operations.

Returns Err(Error::StorageDepositNotEnoughFunds) if deposit limit would be exceeded.

Source

pub fn terminate( &mut self, contract_account: T::AccountId, refunded: BalanceOf<T>, )

Mark a contract as terminated

This will signal to the meter to discard all charged and refunds incured by this contract. Furthermore it will record that there was a refund of refunded and adapt the total deposit accordingly

Source§

impl<T: Config> ResourceMeter<T, Nested>

Source

pub fn charge_contract_deposit_and_transfer( &mut self, contract: T::AccountId, amount: StorageDeposit<BalanceOf<T>>, ) -> DispatchResult

Record a contract’s storage deposit and schedule the transfer.

Updates the frame’s deposit accounting and schedules the actual token transfer for later execution – at the end of the transaction execution.

Source

pub fn record_contract_storage_changes(&mut self, diff: &Diff) -> DispatchResult

Record storage changes of a contract.

Source

pub fn finalize(&mut self, info: Option<&mut ContractInfo<T>>) -> DispatchResult

Self::charge_contract_deposit_and_transfer and Self::record_contract_storage_changes does not enforce the storage limit since we want to do this check as late as possible to allow later refunds to offset earlier charges.

Trait Implementations§

Source§

impl<T: Config, S: State> Default for ResourceMeter<T, S>

Source§

fn default() -> Self

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

Auto Trait Implementations§

§

impl<T, S> Freeze for ResourceMeter<T, S>
where <T as Config>::RuntimeEvent: Sized, <T as Config>::Balance: Freeze,

§

impl<T, S> RefUnwindSafe for ResourceMeter<T, S>

§

impl<T, S> Send for ResourceMeter<T, S>
where <T as Config>::RuntimeEvent: Sized, S: Send, T: Send,

§

impl<T, S> Sync for ResourceMeter<T, S>
where <T as Config>::RuntimeEvent: Sized, S: Sync, T: Sync,

§

impl<T, S> Unpin for ResourceMeter<T, S>
where <T as Config>::RuntimeEvent: Sized, <T as Config>::Balance: Unpin, S: Unpin, T: Unpin, <T as Config>::AccountId: Unpin,

§

impl<T, S> UnwindSafe for ResourceMeter<T, S>

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

Source§

fn checked_from<T>(t: T) -> Option<Self>
where Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
Source§

fn checked_into<T>(self) -> Option<T>
where Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
Source§

impl<T> Conv for T

Source§

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

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

impl<T, U> DefensiveTruncateInto<U> for T

Source§

fn defensive_truncate_into(self) -> U

Defensively truncate a value and convert it into its bounded form.
Source§

impl<T> FmtForward for T

Source§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

Source§

impl<T> Instrument for T

Source§

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

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

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.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T, U> IntoKey<U> for T
where U: FromKey<T>,

Source§

fn into_key(self) -> U

Source§

impl<Src, Dest> IntoTuple<Dest> for Src
where Dest: FromTuple<Src>,

Source§

fn into_tuple(self) -> Dest

Source§

impl<T> IsType<T> for T

Source§

fn from_ref(t: &T) -> &T

Cast reference.
Source§

fn into_ref(&self) -> &T

Cast reference.
Source§

fn from_mut(t: &mut T) -> &mut T

Cast mutable reference.
Source§

fn into_mut(&mut self) -> &mut T

Cast mutable reference.
Source§

impl<T, Outer> IsWrappedBy<Outer> for T
where Outer: AsRef<T> + AsMut<T> + From<T>, T: From<Outer>,

Source§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

Source§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

Source§

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

Source§

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

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

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

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

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

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

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

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

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

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> SaturatedConversion for T

Source§

fn saturated_from<T>(t: T) -> Self
where Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
Source§

fn saturated_into<T>(self) -> T
where Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
Source§

impl<T> Tap for T

Source§

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

Immutable access to a value. Read more
Source§

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

Mutable access to a value. Read more
Source§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

impl<T> TryConv for T

Source§

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

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

impl<T, U> TryIntoKey<U> for T
where U: TryFromKey<T>,

Source§

type Error = <U as TryFromKey<T>>::Error

Source§

fn try_into_key(self) -> Result<U, <U as TryFromKey<T>>::Error>

Source§

impl<S, T> UncheckedInto<T> for S
where T: UncheckedFrom<S>,

Source§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
Source§

impl<T, S> UniqueSaturatedInto<T> for S
where T: Bounded, S: TryInto<T>,

Source§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
Source§

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

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<T> JsonSchemaMaybe for T

Source§

impl<T> MaybeRefUnwindSafe for T
where T: RefUnwindSafe,