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