@@ -16,6 +16,7 @@ use crate::blockifier::transaction_executor::{
1616} ;
1717use crate :: blockifier_versioned_constants:: { BuiltinGasCosts , VersionedConstants } ;
1818use crate :: execution:: call_info:: {
19+ cairo_primitive_counter_map,
1920 BuiltinCounterMap ,
2021 CairoPrimitiveCounterMap ,
2122 CairoPrimitiveName ,
@@ -688,11 +689,15 @@ fn proving_gas_from_builtins_and_sierra_gas(
688689 proving_builtin_gas_costs : & BuiltinGasCosts ,
689690 sierra_builtin_gas_costs : & BuiltinGasCosts ,
690691) -> GasAmount {
691- let builtins_proving_gas = builtins_to_gas ( builtin_counters, proving_builtin_gas_costs) ;
692+ // TODO(AvivG): To support opcodes in the computation, pass cairo_primitive_counter_map to this
693+ // function
694+ let cairo_primitives_counters = cairo_primitive_counter_map ( builtin_counters. clone ( ) ) ;
695+ let cairo_primitives_proving_gas =
696+ cairo_primitives_to_gas ( & cairo_primitives_counters, proving_builtin_gas_costs) ;
692697 let steps_proving_gas =
693- sierra_gas_to_steps_gas ( sierra_gas, builtin_counters , sierra_builtin_gas_costs) ;
698+ sierra_gas_to_steps_gas ( sierra_gas, & cairo_primitives_counters , sierra_builtin_gas_costs) ;
694699
695- steps_proving_gas. checked_add_panic_on_overflow ( builtins_proving_gas )
700+ steps_proving_gas. checked_add_panic_on_overflow ( cairo_primitives_proving_gas )
696701}
697702
698703/// Generic function to convert VM resources to gas with configurable builtin gas calculation
@@ -701,7 +706,11 @@ pub fn vm_resources_to_gas(
701706 builtin_gas_cost : & BuiltinGasCosts ,
702707 versioned_constants : & VersionedConstants ,
703708) -> GasAmount {
704- let builtins_gas_cost = builtins_to_gas ( & resources. prover_builtins ( ) , builtin_gas_cost) ;
709+ // TODO(AvivG): To support opcodes in the computation, resources should include opcode counters.
710+ let builtins_gas_cost = cairo_primitives_to_gas (
711+ & cairo_primitive_counter_map ( resources. prover_builtins ( ) ) ,
712+ builtin_gas_cost,
713+ ) ;
705714 let n_steps_gas_cost = n_steps_to_gas ( resources. total_n_steps ( ) , versioned_constants) ;
706715 let n_memory_holes_gas_cost =
707716 memory_holes_to_gas ( resources. n_memory_holes , versioned_constants) ;
@@ -714,38 +723,45 @@ pub fn vm_resources_to_gas(
714723/// Computes the steps gas by subtracting the builtins' contribution from the Sierra gas.
715724pub fn sierra_gas_to_steps_gas (
716725 sierra_gas : GasAmount ,
717- builtin_counters : & BuiltinCounterMap ,
726+ cairo_primitives_counters : & CairoPrimitiveCounterMap ,
718727 sierra_builtin_gas_costs : & BuiltinGasCosts ,
719728) -> GasAmount {
720- let builtins_gas_cost = builtins_to_gas ( builtin_counters, sierra_builtin_gas_costs) ;
729+ let cairo_primitives_gas =
730+ cairo_primitives_to_gas ( cairo_primitives_counters, sierra_builtin_gas_costs) ;
721731
722- sierra_gas. checked_sub ( builtins_gas_cost ) . unwrap_or_else ( || {
732+ sierra_gas. checked_sub ( cairo_primitives_gas ) . unwrap_or_else ( || {
723733 log:: debug!(
724- "Sierra gas underflow: builtins gas exceeds total. Sierra gas: {sierra_gas:?}, \
725- Builtins gas: {builtins_gas_cost:?}, Builtins: {builtin_counters:?}"
734+ "Sierra gas underflow: cairo primitives gas exceeds total. Sierra gas: \
735+ {sierra_gas:?}, Cairo primitives gas: {cairo_primitives_gas:?}, Cairo primitives: \
736+ {cairo_primitives_counters:?}"
726737 ) ;
727738 GasAmount :: ZERO
728739 } )
729740}
730741
731- pub fn builtins_to_gas (
732- builtin_counters : & BuiltinCounterMap ,
733- builtin_gas_costs : & BuiltinGasCosts ,
742+ pub fn cairo_primitives_to_gas (
743+ cairo_primitives_counters : & CairoPrimitiveCounterMap ,
744+ // NOTE: 'blake' is currently the only supported opcode, by being included in the
745+ // builtin_gas_costs.
746+ cairo_primitives_gas_costs : & BuiltinGasCosts ,
734747) -> GasAmount {
735- let builtin_gas = builtin_counters. iter ( ) . fold ( 0u64 , |accumulated_gas, ( name, & count) | {
736- let builtin_weight = builtin_gas_costs. get_builtin_gas_cost ( name) . unwrap ( ) ;
737- builtin_weight
738- . checked_mul ( u64_from_usize ( count) )
739- . and_then ( |builtin_gas| accumulated_gas. checked_add ( builtin_gas) )
740- . unwrap_or_else ( || {
741- panic ! (
742- "Overflow while converting builtin counters to gas.\n Builtin: {name}, Weight: \
743- {builtin_weight}, Count: {count}, Accumulated gas: {accumulated_gas}"
744- )
745- } )
746- } ) ;
748+ let cairo_primitives_gas =
749+ cairo_primitives_counters. iter ( ) . fold ( 0u64 , |accumulated_gas, ( name, & count) | {
750+ let cairo_primitive_weight =
751+ cairo_primitives_gas_costs. get_cairo_primitive_gas_cost ( name) . unwrap ( ) ;
752+ cairo_primitive_weight
753+ . checked_mul ( u64_from_usize ( count) )
754+ . and_then ( |builtin_gas| accumulated_gas. checked_add ( builtin_gas) )
755+ . unwrap_or_else ( || {
756+ panic ! (
757+ "Overflow while converting cairo primitives counters to gas.\n Cairo \
758+ primitive: {name:?}, Weight: {cairo_primitive_weight}, Count: {count}, \
759+ Accumulated gas: {accumulated_gas}"
760+ )
761+ } )
762+ } ) ;
747763
748- GasAmount ( builtin_gas )
764+ GasAmount ( cairo_primitives_gas )
749765}
750766
751767fn add_casm_hash_computation_gas_cost (
0 commit comments