Skip to main content

revme/cmd/bench/
analysis.rs

1use criterion::Criterion;
2use revm::{
3    bytecode::Bytecode,
4    context::TxEnv,
5    database::{BenchmarkDB, BENCH_CALLER, BENCH_TARGET},
6    primitives::{bytes, hex, Bytes, TxKind},
7    Context, ExecuteEvm, MainBuilder, MainContext,
8};
9
10const BYTES: &str = include_str!("analysis.hex");
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    // BenchmarkDB is dummy state that implements Database trait.
16    let context = Context::mainnet()
17        .with_db(BenchmarkDB::new_bytecode(bytecode))
18        .modify_cfg_chained(|c| c.disable_nonce_check = true);
19    let tx = TxEnv::builder()
20        .caller(BENCH_CALLER)
21        .kind(TxKind::Call(BENCH_TARGET))
22        .data(bytes!("8035F0CE"))
23        .build()
24        .unwrap();
25    let mut evm = context.build_mainnet();
26    criterion.bench_function("analysis", |b| {
27        b.iter_batched(
28            || tx.clone(),
29            |input| evm.transact_one(input).unwrap(),
30            criterion::BatchSize::SmallInput,
31        );
32    });
33}