revme/cmd/bench/
snailtracer.rs

1use database::{BenchmarkDB, BENCH_CALLER, BENCH_TARGET};
2use revm::{
3    bytecode::Bytecode,
4    primitives::{bytes, hex, Bytes, TxKind},
5    Context, ExecuteEvm, MainBuilder, MainContext,
6};
7
8pub fn simple_example(bytecode: Bytecode) {
9    let mut evm = Context::mainnet()
10        .with_db(BenchmarkDB::new_bytecode(bytecode.clone()))
11        .modify_tx_chained(|tx| {
12            // Execution globals block hash/gas_limit/coinbase/timestamp..
13            tx.caller = BENCH_CALLER;
14            tx.kind = TxKind::Call(BENCH_TARGET);
15            tx.data = bytes!("30627b7c");
16            tx.gas_limit = 1_000_000_000;
17        })
18        .build_mainnet();
19    let _ = evm.transact_previous().unwrap();
20}
21
22pub fn run() {
23    println!("Running snailtracer example!");
24    let bytecode = Bytecode::new_raw(Bytes::from(hex::decode(BYTES).unwrap()));
25    let start = std::time::Instant::now();
26    simple_example(bytecode);
27    let elapsed = start.elapsed();
28    println!("elapsed: {:?}", elapsed);
29}
30
31const BYTES: &str = include_str!("snailtracer.hex");