gas_analysis/
gas_analysis.rs1use eot::gas::{
6 DynamicGasCalculator, ExecutionContext, GasAnalyzer, GasComparator, GasOptimizationAdvisor,
7};
8use eot::Fork;
9
10fn main() {
11 println!("EOT - Gas Analysis Example\n");
12
13 println!("== Dynamic Gas (Berlin) ==");
15 let calc = DynamicGasCalculator::new(Fork::Berlin);
16 let mut ctx = ExecutionContext::new();
17
18 let cold = calc.calculate_gas_cost(0x54, &ctx, &[0x100]).unwrap();
19 println!("SLOAD cold: {cold} gas");
20
21 let key = {
23 let mut k = [0u8; 32];
24 k[24..32].copy_from_slice(&0x100u64.to_be_bytes());
25 k
26 };
27 let addr = ctx.current_address;
28 ctx.mark_storage_accessed(&addr, &key);
29 let warm = calc.calculate_gas_cost(0x54, &ctx, &[0x100]).unwrap();
30 println!("SLOAD warm: {warm} gas");
31 println!();
32
33 println!("== Sequence Analysis ==");
35 let seq = [0x60, 0x54, 0x54, 0x01, 0x55];
36 let analysis = GasAnalyzer::analyze_gas_usage(&seq, Fork::London);
37 println!("Total gas: {}", analysis.total_gas);
38 println!("Efficiency: {}%", analysis.efficiency_score());
39 for opt in analysis.get_optimization_recommendations() {
40 println!(" Tip: {opt}");
41 }
42 println!();
43
44 println!("== Istanbul -> Berlin Changes ==");
46 let report = GasComparator::generate_comparison_report(Fork::Istanbul, Fork::Berlin);
47 report.print_report();
48 println!();
49
50 println!("== Cancun Optimizations ==");
52 for tip in GasOptimizationAdvisor::get_fork_optimizations(Fork::Cancun) {
53 println!(" - {tip}");
54 }
55}