op_revm/api/
default_ctx.rs

1//! Contains trait [`DefaultOp`] used to create a default context.
2use crate::{L1BlockInfo, OpSpecId, OpTransaction};
3use revm::{
4    context::{BlockEnv, CfgEnv, TxEnv},
5    database_interface::EmptyDB,
6    Context, Journal, MainContext,
7};
8
9/// Type alias for the default context type of the OpEvm.
10pub type OpContext<DB> =
11    Context<BlockEnv, OpTransaction<TxEnv>, CfgEnv<OpSpecId>, DB, Journal<DB>, L1BlockInfo>;
12
13/// Trait that allows for a default context to be created.
14pub trait DefaultOp {
15    /// Create a default context.
16    fn op() -> OpContext<EmptyDB>;
17}
18
19impl DefaultOp for OpContext<EmptyDB> {
20    fn op() -> Self {
21        Context::mainnet()
22            .with_tx(OpTransaction::default())
23            .with_cfg(CfgEnv::new_with_spec(OpSpecId::BEDROCK))
24            .with_chain(L1BlockInfo::default())
25    }
26}
27
28#[cfg(test)]
29mod test {
30    use super::*;
31    use crate::api::builder::OpBuilder;
32    use revm::{
33        inspector::{InspectEvm, NoOpInspector},
34        ExecuteEvm,
35    };
36
37    #[test]
38    fn default_run_op() {
39        let ctx = Context::op();
40        // convert to optimism context
41        let mut evm = ctx.build_op_with_inspector(NoOpInspector {});
42        // execute
43        let _ = evm.transact_finalize(OpTransaction::default());
44        // inspect
45        let _ = evm.inspect_tx(OpTransaction::default());
46    }
47}