pub struct GasParams { /* private fields */ }Expand description
Gas table for dynamic gas constants.
Implementations§
Source§impl GasParams
impl GasParams
Sourcepub fn override_gas(&mut self, values: impl IntoIterator<Item = (GasId, u64)>)
pub fn override_gas(&mut self, values: impl IntoIterator<Item = (GasId, u64)>)
Overrides the gas cost for the given gas id.
It will clone underlying table and override the values.
Use to override default gas cost
use revm_context_interface::cfg::gas_params::{GasParams, GasId};
use primitives::hardfork::SpecId;
let mut gas_table = GasParams::new_spec(SpecId::default());
gas_table.override_gas([(GasId::memory_linear_cost(), 2), (GasId::memory_quadratic_reduction(), 512)].into_iter());
assert_eq!(gas_table.get(GasId::memory_linear_cost()), 2);
assert_eq!(gas_table.get(GasId::memory_quadratic_reduction()), 512);Sourcepub fn selfdestruct_refund(&self) -> i64
pub fn selfdestruct_refund(&self) -> i64
Selfdestruct refund.
Sourcepub fn selfdestruct_cold_cost(&self) -> u64
pub fn selfdestruct_cold_cost(&self) -> u64
Selfdestruct cold cost is calculated differently from other cold costs. and it contains both cold and warm costs.
Sourcepub fn selfdestruct_cost(&self, should_charge_topup: bool, is_cold: bool) -> u64
pub fn selfdestruct_cost(&self, should_charge_topup: bool, is_cold: bool) -> u64
Selfdestruct cost.
Sourcepub fn extcodecopy(&self, len: usize) -> u64
pub fn extcodecopy(&self, len: usize) -> u64
EXTCODECOPY gas cost
Sourcepub fn mcopy_cost(&self, len: usize) -> u64
pub fn mcopy_cost(&self, len: usize) -> u64
MCOPY gas cost
Sourcepub fn sstore_static_gas(&self) -> u64
pub fn sstore_static_gas(&self) -> u64
Static gas cost for SSTORE opcode
Sourcepub fn sstore_set_without_load_cost(&self) -> u64
pub fn sstore_set_without_load_cost(&self) -> u64
SSTORE set cost
Sourcepub fn sstore_reset_without_cold_load_cost(&self) -> u64
pub fn sstore_reset_without_cold_load_cost(&self) -> u64
SSTORE reset cost
Sourcepub fn sstore_clearing_slot_refund(&self) -> u64
pub fn sstore_clearing_slot_refund(&self) -> u64
SSTORE clearing slot refund
Sourcepub fn sstore_dynamic_gas(
&self,
is_istanbul: bool,
vals: &SStoreResult,
is_cold: bool,
) -> u64
pub fn sstore_dynamic_gas( &self, is_istanbul: bool, vals: &SStoreResult, is_cold: bool, ) -> u64
Dynamic gas cost for SSTORE opcode.
Dynamic gas cost is gas that needs input from SSTORE operation to be calculated.
Sourcepub fn sstore_refund(&self, is_istanbul: bool, vals: &SStoreResult) -> i64
pub fn sstore_refund(&self, is_istanbul: bool, vals: &SStoreResult) -> i64
SSTORE refund calculation.
Sourcepub fn keccak256_cost(&self, len: usize) -> u64
pub fn keccak256_cost(&self, len: usize) -> u64
KECCAK256 gas cost per word
Sourcepub fn memory_cost(&self, len: usize) -> u64
pub fn memory_cost(&self, len: usize) -> u64
Memory gas cost
Sourcepub fn initcode_cost(&self, len: usize) -> u64
pub fn initcode_cost(&self, len: usize) -> u64
Initcode word cost
Sourcepub fn create_cost(&self) -> u64
pub fn create_cost(&self) -> u64
Create gas cost
Sourcepub fn create2_cost(&self, len: usize) -> u64
pub fn create2_cost(&self, len: usize) -> u64
Create2 gas cost.
Sourcepub fn call_stipend(&self) -> u64
pub fn call_stipend(&self) -> u64
Call stipend.
Sourcepub fn call_stipend_reduction(&self, gas_limit: u64) -> u64
pub fn call_stipend_reduction(&self, gas_limit: u64) -> u64
Call stipend reduction. Call stipend is reduced by 1/64 of the gas limit.
Sourcepub fn transfer_value_cost(&self) -> u64
pub fn transfer_value_cost(&self) -> u64
Transfer value cost
Sourcepub fn cold_account_additional_cost(&self) -> u64
pub fn cold_account_additional_cost(&self) -> u64
Additional cold cost. Additional cold cost is added to the gas cost if the account is cold loaded.
Sourcepub fn cold_storage_additional_cost(&self) -> u64
pub fn cold_storage_additional_cost(&self) -> u64
Cold storage additional cost.
Sourcepub fn cold_storage_cost(&self) -> u64
pub fn cold_storage_cost(&self) -> u64
Cold storage cost.
Sourcepub fn new_account_cost(
&self,
is_spurious_dragon: bool,
transfers_value: bool,
) -> u64
pub fn new_account_cost( &self, is_spurious_dragon: bool, transfers_value: bool, ) -> u64
New account cost. New account cost is added to the gas cost if the account is empty.
Sourcepub fn new_account_cost_for_selfdestruct(&self) -> u64
pub fn new_account_cost_for_selfdestruct(&self) -> u64
New account cost for selfdestruct.
Sourcepub fn warm_storage_read_cost(&self) -> u64
pub fn warm_storage_read_cost(&self) -> u64
Warm storage read cost. Warm storage read cost is added to the gas cost if the account is warm loaded.
Sourcepub fn copy_per_word_cost(&self, word_num: usize) -> u64
pub fn copy_per_word_cost(&self, word_num: usize) -> u64
Copy per word cost
Sourcepub fn code_deposit_cost(&self, len: usize) -> u64
pub fn code_deposit_cost(&self, len: usize) -> u64
Code deposit cost, calculated per byte as len * code_deposit_cost.
Sourcepub fn tx_eip7702_per_empty_account_cost(&self) -> u64
pub fn tx_eip7702_per_empty_account_cost(&self) -> u64
Used in GasParams::initial_tx_gas to calculate the eip7702 per empty account cost.
Sourcepub fn tx_token_non_zero_byte_multiplier(&self) -> u64
pub fn tx_token_non_zero_byte_multiplier(&self) -> u64
Used in GasParams::initial_tx_gas to calculate the token non zero byte multiplier.
Sourcepub fn tx_token_cost(&self) -> u64
pub fn tx_token_cost(&self) -> u64
Used in GasParams::initial_tx_gas to calculate the token cost for input data.
Sourcepub fn tx_floor_cost_per_token(&self) -> u64
pub fn tx_floor_cost_per_token(&self) -> u64
Used in GasParams::initial_tx_gas to calculate the floor gas per token.
Sourcepub fn tx_floor_cost(&self, tokens_in_calldata: u64) -> u64
pub fn tx_floor_cost(&self, tokens_in_calldata: u64) -> u64
Used GasParams::initial_tx_gas to calculate the floor gas.
Floor gas is introduced in EIP-7623.
Sourcepub fn tx_floor_cost_base_gas(&self) -> u64
pub fn tx_floor_cost_base_gas(&self) -> u64
Used in GasParams::initial_tx_gas to calculate the floor gas base gas.
Sourcepub fn tx_access_list_address_cost(&self) -> u64
pub fn tx_access_list_address_cost(&self) -> u64
Used in GasParams::initial_tx_gas to calculate the access list address cost.
Sourcepub fn tx_access_list_storage_key_cost(&self) -> u64
pub fn tx_access_list_storage_key_cost(&self) -> u64
Used in GasParams::initial_tx_gas to calculate the access list storage key cost.
Sourcepub fn tx_base_stipend(&self) -> u64
pub fn tx_base_stipend(&self) -> u64
Used in GasParams::initial_tx_gas to calculate the base transaction stipend.
Sourcepub fn tx_create_cost(&self) -> u64
pub fn tx_create_cost(&self) -> u64
Used in GasParams::initial_tx_gas to calculate the create cost.
Similar to the Self::create_cost method but it got activated in different fork,
Sourcepub fn tx_initcode_cost(&self, len: usize) -> u64
pub fn tx_initcode_cost(&self, len: usize) -> u64
Used in GasParams::initial_tx_gas to calculate the initcode cost per word of len.
Sourcepub fn initial_tx_gas(
&self,
input: &[u8],
is_create: bool,
access_list_accounts: u64,
access_list_storages: u64,
authorization_list_num: u64,
) -> InitialAndFloorGas
pub fn initial_tx_gas( &self, input: &[u8], is_create: bool, access_list_accounts: u64, access_list_storages: u64, authorization_list_num: u64, ) -> InitialAndFloorGas
Initial gas that is deducted for transaction to be included. Initial gas contains initial stipend gas, gas for access list and input data.
§Returns
- Intrinsic gas
- Number of tokens in calldata
Trait Implementations§
Source§impl<'de> Deserialize<'de> for GasParams
impl<'de> Deserialize<'de> for GasParams
Source§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>,
impl Eq for GasParams
impl Send for GasParams
Pointer points to Arc so it is safe to send across threads
impl Sync for GasParams
Pointer points to Arc so it is safe to access
Auto Trait Implementations§
impl Freeze for GasParams
impl RefUnwindSafe for GasParams
impl Unpin for GasParams
impl UnwindSafe for GasParams
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
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) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
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
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.