revme/cmd/bench/
snailtracer.rs

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