op_revm/api/
default_ctx.rs

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