renamed OptimismBlockExecutionError to OpBlockExecutionError (#12383)

This commit is contained in:
Steven
2024-11-07 10:30:54 -06:00
committed by GitHub
parent b1642f966f
commit e911fe9ff0
5 changed files with 29 additions and 29 deletions

View File

@ -5,7 +5,7 @@ use reth_evm::execute::BlockExecutionError;
/// Optimism Block Executor Errors /// Optimism Block Executor Errors
#[derive(Debug, Clone, PartialEq, Eq, derive_more::Display)] #[derive(Debug, Clone, PartialEq, Eq, derive_more::Display)]
pub enum OptimismBlockExecutionError { pub enum OpBlockExecutionError {
/// Error when trying to parse L1 block info /// Error when trying to parse L1 block info
#[display("could not get L1 block info from L2 block: {message}")] #[display("could not get L1 block info from L2 block: {message}")]
L1BlockInfoError { L1BlockInfoError {
@ -23,10 +23,10 @@ pub enum OptimismBlockExecutionError {
AccountLoadFailed(alloy_primitives::Address), AccountLoadFailed(alloy_primitives::Address),
} }
impl core::error::Error for OptimismBlockExecutionError {} impl core::error::Error for OpBlockExecutionError {}
impl From<OptimismBlockExecutionError> for BlockExecutionError { impl From<OpBlockExecutionError> for BlockExecutionError {
fn from(err: OptimismBlockExecutionError) -> Self { fn from(err: OpBlockExecutionError) -> Self {
Self::other(err) Self::other(err)
} }
} }

View File

@ -1,6 +1,6 @@
//! Optimism block execution strategy. //! Optimism block execution strategy.
use crate::{l1::ensure_create2_deployer, OpEvmConfig, OptimismBlockExecutionError}; use crate::{l1::ensure_create2_deployer, OpBlockExecutionError, OpEvmConfig};
use alloc::{boxed::Box, sync::Arc, vec::Vec}; use alloc::{boxed::Box, sync::Arc, vec::Vec};
use alloy_consensus::Transaction as _; use alloy_consensus::Transaction as _;
use alloy_eips::eip7685::Requests; use alloy_eips::eip7685::Requests;
@ -144,7 +144,7 @@ where
// so we can safely assume that this will always be triggered upon the transition and that // so we can safely assume that this will always be triggered upon the transition and that
// the above check for empty blocks will never be hit on OP chains. // the above check for empty blocks will never be hit on OP chains.
ensure_create2_deployer(self.chain_spec.clone(), block.timestamp, evm.db_mut()) ensure_create2_deployer(self.chain_spec.clone(), block.timestamp, evm.db_mut())
.map_err(|_| OptimismBlockExecutionError::ForceCreate2DeployerFail)?; .map_err(|_| OpBlockExecutionError::ForceCreate2DeployerFail)?;
Ok(()) Ok(())
} }
@ -178,7 +178,7 @@ where
// An optimism block should never contain blob transactions. // An optimism block should never contain blob transactions.
if matches!(transaction.tx_type(), TxType::Eip4844) { if matches!(transaction.tx_type(), TxType::Eip4844) {
return Err(OptimismBlockExecutionError::BlobTransactionRejected.into()) return Err(OpBlockExecutionError::BlobTransactionRejected.into())
} }
// Cache the depositor account prior to the state transition for the deposit nonce. // Cache the depositor account prior to the state transition for the deposit nonce.
@ -193,7 +193,7 @@ where
.map(|acc| acc.account_info().unwrap_or_default()) .map(|acc| acc.account_info().unwrap_or_default())
}) })
.transpose() .transpose()
.map_err(|_| OptimismBlockExecutionError::AccountLoadFailed(*sender))?; .map_err(|_| OpBlockExecutionError::AccountLoadFailed(*sender))?;
self.evm_config.fill_tx_env(evm.tx_mut(), transaction, *sender); self.evm_config.fill_tx_env(evm.tx_mut(), transaction, *sender);

View File

@ -1,6 +1,6 @@
//! Optimism-specific implementation and utilities for the executor //! Optimism-specific implementation and utilities for the executor
use crate::OptimismBlockExecutionError; use crate::OpBlockExecutionError;
use alloc::{string::ToString, sync::Arc}; use alloc::{string::ToString, sync::Arc};
use alloy_primitives::{address, b256, hex, Address, Bytes, B256, U256}; use alloy_primitives::{address, b256, hex, Address, Bytes, B256, U256};
use reth_chainspec::ChainSpec; use reth_chainspec::ChainSpec;
@ -31,17 +31,17 @@ const L1_BLOCK_ECOTONE_SELECTOR: [u8; 4] = hex!("440a5e20");
/// transaction in the L2 block. /// transaction in the L2 block.
/// ///
/// Returns an error if the L1 info transaction is not found, if the block is empty. /// Returns an error if the L1 info transaction is not found, if the block is empty.
pub fn extract_l1_info(body: &BlockBody) -> Result<L1BlockInfo, OptimismBlockExecutionError> { pub fn extract_l1_info(body: &BlockBody) -> Result<L1BlockInfo, OpBlockExecutionError> {
let l1_info_tx_data = body let l1_info_tx_data = body
.transactions .transactions
.first() .first()
.ok_or_else(|| OptimismBlockExecutionError::L1BlockInfoError { .ok_or_else(|| OpBlockExecutionError::L1BlockInfoError {
message: "could not find l1 block info tx in the L2 block".to_string(), message: "could not find l1 block info tx in the L2 block".to_string(),
}) })
.map(|tx| tx.input())?; .map(|tx| tx.input())?;
if l1_info_tx_data.len() < 4 { if l1_info_tx_data.len() < 4 {
return Err(OptimismBlockExecutionError::L1BlockInfoError { return Err(OpBlockExecutionError::L1BlockInfoError {
message: "invalid l1 block info transaction calldata in the L2 block".to_string(), message: "invalid l1 block info transaction calldata in the L2 block".to_string(),
}) })
} }
@ -52,7 +52,7 @@ pub fn extract_l1_info(body: &BlockBody) -> Result<L1BlockInfo, OptimismBlockExe
/// Parses the input of the first transaction in the L2 block, into [`L1BlockInfo`]. /// Parses the input of the first transaction in the L2 block, into [`L1BlockInfo`].
/// ///
/// Returns an error if data is incorrect length. /// Returns an error if data is incorrect length.
pub fn parse_l1_info(input: &[u8]) -> Result<L1BlockInfo, OptimismBlockExecutionError> { pub fn parse_l1_info(input: &[u8]) -> Result<L1BlockInfo, OpBlockExecutionError> {
// If the first 4 bytes of the calldata are the L1BlockInfoEcotone selector, then we parse the // If the first 4 bytes of the calldata are the L1BlockInfoEcotone selector, then we parse the
// calldata as an Ecotone hardfork L1BlockInfo transaction. Otherwise, we parse it as a // calldata as an Ecotone hardfork L1BlockInfo transaction. Otherwise, we parse it as a
// Bedrock hardfork L1BlockInfo transaction. // Bedrock hardfork L1BlockInfo transaction.
@ -64,7 +64,7 @@ pub fn parse_l1_info(input: &[u8]) -> Result<L1BlockInfo, OptimismBlockExecution
} }
/// Parses the calldata of the [`L1BlockInfo`] transaction pre-Ecotone hardfork. /// Parses the calldata of the [`L1BlockInfo`] transaction pre-Ecotone hardfork.
pub fn parse_l1_info_tx_bedrock(data: &[u8]) -> Result<L1BlockInfo, OptimismBlockExecutionError> { pub fn parse_l1_info_tx_bedrock(data: &[u8]) -> Result<L1BlockInfo, OpBlockExecutionError> {
// The setL1BlockValues tx calldata must be exactly 260 bytes long, considering that // The setL1BlockValues tx calldata must be exactly 260 bytes long, considering that
// we already removed the first 4 bytes (the function selector). Detailed breakdown: // we already removed the first 4 bytes (the function selector). Detailed breakdown:
// 32 bytes for the block number // 32 bytes for the block number
@ -76,23 +76,23 @@ pub fn parse_l1_info_tx_bedrock(data: &[u8]) -> Result<L1BlockInfo, OptimismBloc
// + 32 bytes for the fee overhead // + 32 bytes for the fee overhead
// + 32 bytes for the fee scalar // + 32 bytes for the fee scalar
if data.len() != 256 { if data.len() != 256 {
return Err(OptimismBlockExecutionError::L1BlockInfoError { return Err(OpBlockExecutionError::L1BlockInfoError {
message: "unexpected l1 block info tx calldata length found".to_string(), message: "unexpected l1 block info tx calldata length found".to_string(),
}) })
} }
let l1_base_fee = U256::try_from_be_slice(&data[64..96]).ok_or_else(|| { let l1_base_fee = U256::try_from_be_slice(&data[64..96]).ok_or_else(|| {
OptimismBlockExecutionError::L1BlockInfoError { OpBlockExecutionError::L1BlockInfoError {
message: "could not convert l1 base fee".to_string(), message: "could not convert l1 base fee".to_string(),
} }
})?; })?;
let l1_fee_overhead = U256::try_from_be_slice(&data[192..224]).ok_or_else(|| { let l1_fee_overhead = U256::try_from_be_slice(&data[192..224]).ok_or_else(|| {
OptimismBlockExecutionError::L1BlockInfoError { OpBlockExecutionError::L1BlockInfoError {
message: "could not convert l1 fee overhead".to_string(), message: "could not convert l1 fee overhead".to_string(),
} }
})?; })?;
let l1_fee_scalar = U256::try_from_be_slice(&data[224..256]).ok_or_else(|| { let l1_fee_scalar = U256::try_from_be_slice(&data[224..256]).ok_or_else(|| {
OptimismBlockExecutionError::L1BlockInfoError { OpBlockExecutionError::L1BlockInfoError {
message: "could not convert l1 fee scalar".to_string(), message: "could not convert l1 fee scalar".to_string(),
} }
})?; })?;
@ -119,9 +119,9 @@ pub fn parse_l1_info_tx_bedrock(data: &[u8]) -> Result<L1BlockInfo, OptimismBloc
/// 9. _batcherHash Versioned hash to authenticate batcher by. /// 9. _batcherHash Versioned hash to authenticate batcher by.
/// ///
/// <https://github.com/ethereum-optimism/optimism/blob/957e13dd504fb336a4be40fb5dd0d8ba0276be34/packages/contracts-bedrock/src/L2/L1Block.sol#L136> /// <https://github.com/ethereum-optimism/optimism/blob/957e13dd504fb336a4be40fb5dd0d8ba0276be34/packages/contracts-bedrock/src/L2/L1Block.sol#L136>
pub fn parse_l1_info_tx_ecotone(data: &[u8]) -> Result<L1BlockInfo, OptimismBlockExecutionError> { pub fn parse_l1_info_tx_ecotone(data: &[u8]) -> Result<L1BlockInfo, OpBlockExecutionError> {
if data.len() != 160 { if data.len() != 160 {
return Err(OptimismBlockExecutionError::L1BlockInfoError { return Err(OpBlockExecutionError::L1BlockInfoError {
message: "unexpected l1 block info tx calldata length found".to_string(), message: "unexpected l1 block info tx calldata length found".to_string(),
}) })
} }
@ -142,22 +142,22 @@ pub fn parse_l1_info_tx_ecotone(data: &[u8]) -> Result<L1BlockInfo, OptimismBloc
// 132 bytes32 _batcherHash, // 132 bytes32 _batcherHash,
let l1_base_fee_scalar = U256::try_from_be_slice(&data[..4]).ok_or_else(|| { let l1_base_fee_scalar = U256::try_from_be_slice(&data[..4]).ok_or_else(|| {
OptimismBlockExecutionError::L1BlockInfoError { OpBlockExecutionError::L1BlockInfoError {
message: "could not convert l1 base fee scalar".to_string(), message: "could not convert l1 base fee scalar".to_string(),
} }
})?; })?;
let l1_blob_base_fee_scalar = U256::try_from_be_slice(&data[4..8]).ok_or_else(|| { let l1_blob_base_fee_scalar = U256::try_from_be_slice(&data[4..8]).ok_or_else(|| {
OptimismBlockExecutionError::L1BlockInfoError { OpBlockExecutionError::L1BlockInfoError {
message: "could not convert l1 blob base fee scalar".to_string(), message: "could not convert l1 blob base fee scalar".to_string(),
} }
})?; })?;
let l1_base_fee = U256::try_from_be_slice(&data[32..64]).ok_or_else(|| { let l1_base_fee = U256::try_from_be_slice(&data[32..64]).ok_or_else(|| {
OptimismBlockExecutionError::L1BlockInfoError { OpBlockExecutionError::L1BlockInfoError {
message: "could not convert l1 blob base fee".to_string(), message: "could not convert l1 blob base fee".to_string(),
} }
})?; })?;
let l1_blob_base_fee = U256::try_from_be_slice(&data[64..96]).ok_or_else(|| { let l1_blob_base_fee = U256::try_from_be_slice(&data[64..96]).ok_or_else(|| {
OptimismBlockExecutionError::L1BlockInfoError { OpBlockExecutionError::L1BlockInfoError {
message: "could not convert l1 blob base fee".to_string(), message: "could not convert l1 blob base fee".to_string(),
} }
})?; })?;
@ -225,7 +225,7 @@ impl RethL1BlockInfo for L1BlockInfo {
} else if chain_spec.is_fork_active_at_timestamp(OptimismHardfork::Bedrock, timestamp) { } else if chain_spec.is_fork_active_at_timestamp(OptimismHardfork::Bedrock, timestamp) {
SpecId::BEDROCK SpecId::BEDROCK
} else { } else {
return Err(OptimismBlockExecutionError::L1BlockInfoError { return Err(OpBlockExecutionError::L1BlockInfoError {
message: "Optimism hardforks are not active".to_string(), message: "Optimism hardforks are not active".to_string(),
} }
.into()) .into())
@ -247,7 +247,7 @@ impl RethL1BlockInfo for L1BlockInfo {
} else if chain_spec.is_fork_active_at_timestamp(OptimismHardfork::Bedrock, timestamp) { } else if chain_spec.is_fork_active_at_timestamp(OptimismHardfork::Bedrock, timestamp) {
SpecId::BEDROCK SpecId::BEDROCK
} else { } else {
return Err(OptimismBlockExecutionError::L1BlockInfoError { return Err(OpBlockExecutionError::L1BlockInfoError {
message: "Optimism hardforks are not active".to_string(), message: "Optimism hardforks are not active".to_string(),
} }
.into()) .into())

View File

@ -31,7 +31,7 @@ pub mod l1;
pub use l1::*; pub use l1::*;
mod error; mod error;
pub use error::OptimismBlockExecutionError; pub use error::OpBlockExecutionError;
use revm_primitives::{ use revm_primitives::{
BlobExcessGasAndPrice, BlockEnv, Bytes, CfgEnv, Env, HandlerCfg, OptimismFields, SpecId, TxKind, BlobExcessGasAndPrice, BlockEnv, Bytes, CfgEnv, Env, HandlerCfg, OptimismFields, SpecId, TxKind,
}; };

View File

@ -2,7 +2,7 @@
use alloy_rpc_types::error::EthRpcErrorCode; use alloy_rpc_types::error::EthRpcErrorCode;
use jsonrpsee_types::error::INTERNAL_ERROR_CODE; use jsonrpsee_types::error::INTERNAL_ERROR_CODE;
use reth_optimism_evm::OptimismBlockExecutionError; use reth_optimism_evm::OpBlockExecutionError;
use reth_primitives::revm_primitives::{InvalidTransaction, OptimismInvalidTransaction}; use reth_primitives::revm_primitives::{InvalidTransaction, OptimismInvalidTransaction};
use reth_rpc_eth_api::AsEthApiError; use reth_rpc_eth_api::AsEthApiError;
use reth_rpc_eth_types::EthApiError; use reth_rpc_eth_types::EthApiError;
@ -16,7 +16,7 @@ pub enum OpEthApiError {
Eth(#[from] EthApiError), Eth(#[from] EthApiError),
/// EVM error originating from invalid optimism data. /// EVM error originating from invalid optimism data.
#[error(transparent)] #[error(transparent)]
Evm(#[from] OptimismBlockExecutionError), Evm(#[from] OpBlockExecutionError),
/// Thrown when calculating L1 gas fee. /// Thrown when calculating L1 gas fee.
#[error("failed to calculate l1 gas fee")] #[error("failed to calculate l1 gas fee")]
L1BlockFeeError, L1BlockFeeError,