pub struct GasAnalysis {
pub total_gas: u64,
pub breakdown: Vec<(u8, u16)>,
pub optimizations: Vec<String>,
pub warnings: Vec<String>,
}Expand description
Enhanced gas analysis structure for compatibility with existing validation system
Fields§
§total_gas: u64Total base gas cost
breakdown: Vec<(u8, u16)>Gas cost breakdown by opcode
optimizations: Vec<String>Potential optimizations
warnings: Vec<String>Warnings about expensive operations
Implementations§
Source§impl GasAnalysis
impl GasAnalysis
Sourcepub fn efficiency_score(&self) -> u8
pub fn efficiency_score(&self) -> u8
Calculate gas efficiency score (0-100, higher is better)
Examples found in repository?
examples/gas_analysis.rs (line 62)
41fn basic_gas_analysis() -> Result<(), Box<dyn std::error::Error>> {
42 println!("📊 Example 1: Basic Gas Analysis");
43
44 // Create a simple bytecode sequence
45 let opcodes = vec![
46 0x60, 0x10, // PUSH1 0x10
47 0x60, 0x20, // PUSH1 0x20
48 0x01, // ADD
49 0x60, 0x00, // PUSH1 0x00
50 0x52, // MSTORE
51 0x60, 0x20, // PUSH1 0x20
52 0x60, 0x00, // PUSH1 0x00
53 0xf3, // RETURN
54 ];
55
56 // Analyze gas usage using the registry
57 use crate::traits::OpcodeAnalysis;
58 let analysis = OpcodeRegistry::analyze_gas_usage(&opcodes, Fork::London);
59
60 println!("Bytecode analysis:");
61 println!(" Total gas: {} gas", analysis.total_gas);
62 println!(" Efficiency score: {}/100", analysis.efficiency_score());
63 println!(" Opcodes analyzed: {}", analysis.breakdown.len());
64
65 // Show gas breakdown
66 println!("\nGas breakdown:");
67 for (opcode, gas_cost) in &analysis.breakdown {
68 println!(" 0x{:02x}: {} gas", opcode, gas_cost);
69 }
70
71 // Get optimization suggestions
72 let suggestions = OpcodeRegistry::get_optimization_suggestions(&opcodes, Fork::Shanghai);
73 if !suggestions.is_empty() {
74 println!("\nOptimization suggestions:");
75 for (i, suggestion) in suggestions.iter().enumerate() {
76 println!(" {}. {}", i + 1, suggestion);
77 }
78 }
79
80 // Validate the sequence
81 match OpcodeRegistry::validate_opcode_sequence(&opcodes, Fork::London) {
82 Ok(()) => println!("\n✅ Opcode sequence is valid"),
83 Err(e) => println!("\n❌ Validation error: {}", e),
84 }
85
86 Ok(())
87}Sourcepub fn get_optimization_recommendations(&self) -> Vec<String>
pub fn get_optimization_recommendations(&self) -> Vec<String>
Get recommendations for gas optimization
Sourcepub fn is_optimized(&self) -> bool
pub fn is_optimized(&self) -> bool
Check if this represents an optimized gas usage pattern
Sourcepub fn gas_by_category(&self) -> HashMap<GasCostCategory, u64>
pub fn gas_by_category(&self) -> HashMap<GasCostCategory, u64>
Get gas usage by category
Sourcepub fn find_gas_bombs(&self) -> Vec<String>
pub fn find_gas_bombs(&self) -> Vec<String>
Find potential gas bombs (operations that could cause out-of-gas)
Sourcepub fn estimate_optimization_savings(&self) -> u64
pub fn estimate_optimization_savings(&self) -> u64
Estimate gas savings from proposed optimizations
Trait Implementations§
Source§impl Clone for GasAnalysis
impl Clone for GasAnalysis
Source§fn clone(&self) -> GasAnalysis
fn clone(&self) -> GasAnalysis
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for GasAnalysis
impl Debug for GasAnalysis
Auto Trait Implementations§
impl Freeze for GasAnalysis
impl RefUnwindSafe for GasAnalysis
impl Send for GasAnalysis
impl Sync for GasAnalysis
impl Unpin for GasAnalysis
impl UnwindSafe for GasAnalysis
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more