use alloc::string::String;
use kona_mpt::TrieNodeError;
use revm::primitives::EVMError;
#[derive(derive_more::Display, Debug)]
pub enum ExecutorError {
#[display("Gas limit not provided in payload attributes")]
MissingGasLimit,
#[display("Transactions not provided in payload attributes")]
MissingTransactions,
#[display("Missing EIP-1559 parameters in execution payload post-Holocene")]
MissingEIP1559Params,
#[display("Parent beacon block root not provided in payload attributes")]
MissingParentBeaconBlockRoot,
#[display("Invalid `extraData` field in the block header")]
InvalidExtraData,
#[display("Block gas limit exceeded")]
BlockGasLimitExceeded,
#[display("Unsupported transaction type: {_0}")]
UnsupportedTransactionType(u8),
#[display("Trie error: {_0}")]
TrieDBError(TrieDBError),
#[display("Execution error: {_0}")]
ExecutionError(EVMError<TrieDBError>),
#[display("Signature error: {_0}")]
SignatureError(alloy_primitives::SignatureError),
#[display("RLP error: {_0}")]
RLPError(alloy_eips::eip2718::Eip2718Error),
}
impl From<TrieDBError> for ExecutorError {
fn from(err: TrieDBError) -> Self {
Self::TrieDBError(err)
}
}
impl From<TrieNodeError> for ExecutorError {
fn from(err: TrieNodeError) -> Self {
Self::TrieDBError(TrieDBError::TrieNode(err))
}
}
impl core::error::Error for ExecutorError {
fn source(&self) -> Option<&(dyn core::error::Error + 'static)> {
match self {
Self::TrieDBError(err) => Some(err),
_ => None,
}
}
}
pub type ExecutorResult<T> = Result<T, ExecutorError>;
pub type TrieDBResult<T> = Result<T, TrieDBError>;
#[derive(derive_more::Display, Debug, PartialEq, Eq)]
pub enum TrieDBError {
#[display("Trie root node has not been blinded")]
RootNotBlinded,
#[display("Missing account info for bundle account.")]
MissingAccountInfo,
#[display("Trie node error: {_0}")]
TrieNode(TrieNodeError),
#[display("Trie provider error: {_0}")]
Provider(String),
}
impl core::error::Error for TrieDBError {
fn source(&self) -> Option<&(dyn core::error::Error + 'static)> {
match self {
Self::TrieNode(err) => Some(err),
_ => None,
}
}
}
impl From<TrieNodeError> for TrieDBError {
fn from(err: TrieNodeError) -> Self {
Self::TrieNode(err)
}
}