gear_core::gas

Struct GasCounter

Source
pub struct GasCounter { /* private fields */ }
Expand description

Gas counter with some predefined maximum gas.

Copy and Clone traits aren’t implemented for the type (however could be) in order to make the data only moveable, preventing explicit and implicit copying.

Implementations§

Source§

impl GasCounter

Source

pub fn new(initial_amount: u64) -> Self

New limited gas counter with initial gas to spend.

Source

pub fn charge<T: Into<u64> + Copy>(&mut self, amount: T) -> ChargeResult

Account for used gas.

If there is no enough gas, then makes saturating charge and returns NotEnough. Else charges gas and returns Enough.

Source

pub fn charge_if_enough<T: Into<u64> + Copy>( &mut self, amount: T, ) -> ChargeResult

Account for used gas.

If there is no enough gas, then does nothing and returns ChargeResult::NotEnough. Else charges gas and returns ChargeResult::Enough.

Source

pub fn increase(&mut self, amount: u64, _token: UnreservedReimbursement) -> bool

Increase left gas by amount.

Called when gas unreservation is occurred. We don’t decrease burn counter because GasTree manipulation is handled by separated function

Source

pub fn reduce(&mut self, amount: u64) -> ChargeResult

Reduce gas by amount.

Called when message is sent to another program, so the gas amount is sent to receiving program. Or called when gas reservation is occurred.

In case of gas reservation: We don’t increase burn counter because GasTree manipulation is handled by separated function

Source

pub fn left(&self) -> u64

Report how much gas is left.

Source

pub fn burned(&self) -> u64

Report how much gas is burned.

Source

pub fn to_amount(&self) -> GasAmount

Get gas amount.

Source

pub unsafe fn clone(&self) -> Self

Clone the counter

§Safety

Use only when it’s absolutely necessary to clone the counter i.e atomic implementation of Ext.

Trait Implementations§

Source§

impl Debug for GasCounter

Source§

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

Formats the value using the given formatter. Read more

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

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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

Source§

type Output = T

Should always be Self
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> JsonSchemaMaybe for T