monad-revm 0.2.0

Monad-specific REVM implementation
Documentation
// Default Monad context type and factory.

use crate::MonadCfgEnv;
use revm::{
    context::{BlockEnv, TxEnv},
    database_interface::EmptyDB,
    Context, Journal, MainContext,
};

/// Type alias for the default Monad context.
///
/// Uses standard Ethereum types since Monad doesn't need custom tx/block types.
/// The key difference is:
/// - Using `MonadSpecId` instead of `SpecId`
/// - Using `MonadCfgEnv` which has Monad-specific defaults (128KB code size limit)
pub type MonadContext<DB> = Context<BlockEnv, TxEnv, MonadCfgEnv, DB, Journal<DB>, ()>;

/// Trait for creating a default Monad context.
pub trait DefaultMonad {
    /// Creates a new Monad context with default settings and an empty database.
    fn monad() -> MonadContext<EmptyDB>;
}

impl DefaultMonad for MonadContext<EmptyDB> {
    fn monad() -> Self {
        Context::mainnet().with_cfg(MonadCfgEnv::new())
    }
}

#[cfg(test)]
mod test {
    use super::*;
    use crate::api::builder::MonadBuilder;
    use revm::{inspector::NoOpInspector, ExecuteEvm};

    #[test]
    fn default_run_monad() {
        let ctx = Context::monad();
        let mut evm = ctx.build_monad_with_inspector(NoOpInspector {});
        let tx = TxEnv::default();
        let _ = evm.transact(tx);
    }
}