revme/cmd/bench/
snailtracer.rs

1use context::TxEnv;
2use criterion::Criterion;
3use database::{BenchmarkDB, BENCH_CALLER, BENCH_TARGET};
4use inspector::CountInspector;
5use revm::{
6    bytecode::Bytecode,
7    primitives::{bytes, hex, Bytes, TxKind},
8    Context, ExecuteEvm, InspectEvm, MainBuilder, MainContext,
9};
10
11pub fn run(criterion: &mut Criterion) {
12    let bytecode = Bytecode::new_raw(Bytes::from(hex::decode(BYTES).unwrap()));
13
14    let mut evm = Context::mainnet()
15        .with_db(BenchmarkDB::new_bytecode(bytecode.clone()))
16        .modify_cfg_chained(|c| c.disable_nonce_check = true)
17        .build_mainnet()
18        .with_inspector(CountInspector::new());
19
20    let tx = TxEnv::builder()
21        .caller(BENCH_CALLER)
22        .kind(TxKind::Call(BENCH_TARGET))
23        .data(bytes!("30627b7c"))
24        .gas_limit(1_000_000_000)
25        .build()
26        .unwrap();
27
28    criterion.bench_function("snailtracer", |b| {
29        b.iter_batched(
30            || tx.clone(),
31            |input| evm.transact_one(input).unwrap(),
32            criterion::BatchSize::SmallInput,
33        );
34    });
35
36    criterion.bench_function("snailtracer-inspect", |b| {
37        b.iter_batched(
38            || tx.clone(),
39            |input| evm.inspect_one_tx(input),
40            criterion::BatchSize::SmallInput,
41        );
42    });
43}
44
45const BYTES: &str = include_str!("snailtracer.hex");