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))
17 .modify_cfg_chained(|c| {
18 c.disable_nonce_check = true;
19 c.tx_gas_limit_cap = Some(u64::MAX);
20 })
21 .build_mainnet()
22 .with_inspector(NoOpInspector {});
23
24 let tx = TxEnv::builder()
25 .caller(BENCH_CALLER)
26 .kind(TxKind::Call(BENCH_TARGET))
27 .data(bytes!("30627b7c"))
28 .gas_limit(1_000_000_000)
29 .build()
30 .unwrap();
31
32 criterion.bench_function("snailtracer", |b| {
33 b.iter_batched(
34 || tx.clone(),
35 |input| evm.transact_one(input).unwrap(),
36 criterion::BatchSize::SmallInput,
37 );
38 });
39
40 criterion.bench_function("snailtracer-inspect", |b| {
41 b.iter_batched(
42 || tx.clone(),
43 |input| evm.inspect_one_tx(input),
44 criterion::BatchSize::SmallInput,
45 );
46 });
47}
48
49const BYTES: &str = include_str!("snailtracer.hex");