trevm 0.34.2

A typestate API wrapper for the revm EVM implementation
Documentation
mod layer;
pub use layer::Layered;

mod timeout;
pub use timeout::TimeLimit;

#[cfg(feature = "tracing-inspectors")]
mod tracing;
#[cfg(feature = "tracing-inspectors")]
pub use tracing::TracingInspectorOutput;

mod set;
pub use set::InspectorSet;

mod spanning;
pub use spanning::SpanningInspector;

mod with_output;
pub use with_output::InspectorWithOutput;

#[cfg(test)]
mod test {
    use super::*;
    use crate::{test_utils::TestInspector, NoopBlock, NoopCfg};
    use revm::{database::InMemoryDB, inspector::InspectorEvmTr, primitives::B256};
    use std::time::Duration;

    #[test]
    fn test_timeout() {
        let inspector =
            Layered::new(TimeLimit::new(Duration::from_micros(10)), SpanningInspector::at_info())
                .wrap_around(TestInspector::default());

        let mut trevm = crate::TrevmBuilder::new()
            .with_db(InMemoryDB::default())
            .with_insp(inspector)
            .build_trevm()
            .fill_cfg(&NoopCfg)
            .fill_block(&NoopBlock);

        let err = trevm.apply_eip4788(B256::repeat_byte(0xaa)).unwrap_err();
        assert!(matches!(err, revm::context::result::EVMError::Custom(_)));
        assert!(format!("{err}").contains("timeout during evm execution"));

        assert!(trevm.inner_mut_unchecked().inspector().outer().outer().has_elapsed());
    }
}