anvil/eth/error/
optimism.rs1use super::{BlockchainError, InvalidTransactionError};
5use op_revm::OpTransactionError;
6use revm::context_interface::result::{EVMError, InvalidHeader};
7
8impl<T> From<EVMError<T, OpTransactionError>> for BlockchainError
9where
10 T: Into<Self>,
11{
12 fn from(err: EVMError<T, OpTransactionError>) -> Self {
13 match err {
14 EVMError::Transaction(err) => match err {
15 OpTransactionError::Base(err) => InvalidTransactionError::from(err).into(),
16 OpTransactionError::DepositSystemTxPostRegolith => {
17 Self::DepositTransactionUnsupported
18 }
19 OpTransactionError::HaltedDepositPostRegolith => {
20 Self::DepositTransactionUnsupported
21 }
22 OpTransactionError::MissingEnvelopedTx => Self::InvalidTransaction(err.into()),
23 },
24 EVMError::Header(err) => match err {
25 InvalidHeader::ExcessBlobGasNotSet => Self::ExcessBlobGasNotSet,
26 InvalidHeader::PrevrandaoNotSet => Self::PrevrandaoNotSet,
27 },
28 EVMError::Database(err) => err.into(),
29 EVMError::Custom(err) => Self::Message(err),
30 EVMError::CustomAny(err) => Self::Message(err.to_string()),
31 }
32 }
33}
34
35impl<T> From<EVMError<T, alloy_op_evm::OpTxError>> for BlockchainError
36where
37 T: Into<Self>,
38{
39 fn from(err: EVMError<T, alloy_op_evm::OpTxError>) -> Self {
40 match err {
41 EVMError::Transaction(err) => {
42 let op_err: OpTransactionError = err.0;
43 EVMError::<T, OpTransactionError>::Transaction(op_err).into()
44 }
45 EVMError::Header(err) => EVMError::<T, OpTransactionError>::Header(err).into(),
46 EVMError::Database(err) => err.into(),
47 EVMError::Custom(err) => Self::Message(err),
48 EVMError::CustomAny(err) => Self::Message(err.to_string()),
49 }
50 }
51}
52
53impl From<OpTransactionError> for InvalidTransactionError {
54 fn from(value: OpTransactionError) -> Self {
55 match value {
56 OpTransactionError::Base(err) => err.into(),
57 OpTransactionError::DepositSystemTxPostRegolith
58 | OpTransactionError::HaltedDepositPostRegolith => Self::DepositTxErrorPostRegolith,
59 OpTransactionError::MissingEnvelopedTx => Self::MissingEnvelopedTx,
60 }
61 }
62}