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