use crate::MegaSpecId;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct EvmTxRuntimeLimits {
pub tx_data_size_limit: u64,
pub tx_kv_updates_limit: u64,
pub tx_compute_gas_limit: u64,
pub tx_state_growth_limit: u64,
pub block_env_access_compute_gas_limit: u64,
pub oracle_access_compute_gas_limit: u64,
}
impl EvmTxRuntimeLimits {
pub fn from_spec(spec: MegaSpecId) -> Self {
match spec {
MegaSpecId::EQUIVALENCE => Self::equivalence(),
MegaSpecId::MINI_REX => Self::mini_rex(),
MegaSpecId::REX | MegaSpecId::REX1 | MegaSpecId::REX2 => Self::rex(),
MegaSpecId::REX3 => Self::rex3(),
MegaSpecId::REX4 => Self::rex4(),
}
}
pub fn no_limits() -> Self {
Self {
tx_data_size_limit: u64::MAX,
tx_kv_updates_limit: u64::MAX,
tx_compute_gas_limit: u64::MAX,
tx_state_growth_limit: u64::MAX,
block_env_access_compute_gas_limit: u64::MAX,
oracle_access_compute_gas_limit: u64::MAX,
}
}
pub fn equivalence() -> Self {
Self::no_limits()
}
pub fn mini_rex() -> Self {
Self {
tx_data_size_limit: crate::constants::mini_rex::TX_DATA_LIMIT,
tx_kv_updates_limit: crate::constants::mini_rex::TX_KV_UPDATE_LIMIT,
tx_compute_gas_limit: crate::constants::mini_rex::TX_COMPUTE_GAS_LIMIT,
block_env_access_compute_gas_limit:
crate::constants::mini_rex::BLOCK_ENV_ACCESS_COMPUTE_GAS,
oracle_access_compute_gas_limit: crate::constants::mini_rex::ORACLE_ACCESS_COMPUTE_GAS,
..Self::equivalence()
}
}
pub fn rex() -> Self {
Self {
tx_data_size_limit: crate::constants::rex::TX_DATA_LIMIT,
tx_kv_updates_limit: crate::constants::rex::TX_KV_UPDATE_LIMIT,
tx_compute_gas_limit: crate::constants::rex::TX_COMPUTE_GAS_LIMIT,
tx_state_growth_limit: crate::constants::rex::TX_STATE_GROWTH_LIMIT,
block_env_access_compute_gas_limit:
crate::constants::mini_rex::BLOCK_ENV_ACCESS_COMPUTE_GAS,
oracle_access_compute_gas_limit: crate::constants::mini_rex::ORACLE_ACCESS_COMPUTE_GAS,
}
}
fn rex3() -> Self {
Self {
oracle_access_compute_gas_limit: crate::constants::rex3::ORACLE_ACCESS_COMPUTE_GAS,
..Self::rex()
}
}
fn rex4() -> Self {
Self::rex3()
}
}
impl EvmTxRuntimeLimits {
pub fn with_tx_data_size_limit(mut self, tx_data_size_limit: u64) -> Self {
self.tx_data_size_limit = tx_data_size_limit;
self
}
pub fn with_tx_kv_updates_limit(mut self, tx_kv_updates_limit: u64) -> Self {
self.tx_kv_updates_limit = tx_kv_updates_limit;
self
}
pub fn with_tx_compute_gas_limit(mut self, tx_compute_gas_limit: u64) -> Self {
self.tx_compute_gas_limit = tx_compute_gas_limit;
self
}
pub fn with_tx_state_growth_limit(mut self, tx_state_growth_limit: u64) -> Self {
self.tx_state_growth_limit = tx_state_growth_limit;
self
}
pub fn with_block_env_access_compute_gas_limit(
mut self,
block_env_access_compute_gas_limit: u64,
) -> Self {
self.block_env_access_compute_gas_limit = block_env_access_compute_gas_limit;
self
}
pub fn with_oracle_access_compute_gas_limit(
mut self,
oracle_access_compute_gas_limit: u64,
) -> Self {
self.oracle_access_compute_gas_limit = oracle_access_compute_gas_limit;
self
}
}