Skip to content

Commit e9e6ef3

Browse files
blockifier: convert builtins_to_gas to cairo_primitives_to_gas
1 parent 48bc7b3 commit e9e6ef3

File tree

2 files changed

+45
-22
lines changed

2 files changed

+45
-22
lines changed

crates/blockifier/src/bouncer.rs

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use crate::blockifier::transaction_executor::{
1616
};
1717
use crate::blockifier_versioned_constants::{BuiltinGasCosts, VersionedConstants};
1818
use crate::execution::call_info::{
19+
cairo_primitive_counter_map,
1920
BuiltinCounterMap,
2021
CairoPrimitiveCounterMap,
2122
CairoPrimitiveName,
@@ -688,7 +689,12 @@ 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 builtins_proving_gas = cairo_primitives_to_gas(
695+
&cairo_primitive_counter_map(builtin_counters.iter().map(|(k, v)| (*k, *v))),
696+
proving_builtin_gas_costs,
697+
);
692698
let steps_proving_gas =
693699
sierra_gas_to_steps_gas(sierra_gas, builtin_counters, sierra_builtin_gas_costs);
694700

@@ -701,7 +707,12 @@ pub fn vm_resources_to_gas(
701707
builtin_gas_cost: &BuiltinGasCosts,
702708
versioned_constants: &VersionedConstants,
703709
) -> GasAmount {
704-
let builtins_gas_cost = builtins_to_gas(&resources.prover_builtins(), builtin_gas_cost);
710+
// TODO(AvivG): To support opcodes in the computation, pass cairo_primitive_counter_map to this
711+
// function
712+
let builtins_gas_cost = cairo_primitives_to_gas(
713+
&cairo_primitive_counter_map(resources.prover_builtins()),
714+
builtin_gas_cost,
715+
);
705716
let n_steps_gas_cost = n_steps_to_gas(resources.total_n_steps(), versioned_constants);
706717
let n_memory_holes_gas_cost =
707718
memory_holes_to_gas(resources.n_memory_holes, versioned_constants);
@@ -717,7 +728,12 @@ pub fn sierra_gas_to_steps_gas(
717728
builtin_counters: &BuiltinCounterMap,
718729
sierra_builtin_gas_costs: &BuiltinGasCosts,
719730
) -> GasAmount {
720-
let builtins_gas_cost = builtins_to_gas(builtin_counters, sierra_builtin_gas_costs);
731+
// TODO(AvivG): To support opcodes in the computation, pass cairo_primitive_counter_map to this
732+
// function
733+
let builtins_gas_cost = cairo_primitives_to_gas(
734+
&cairo_primitive_counter_map(builtin_counters.clone()),
735+
sierra_builtin_gas_costs,
736+
);
721737

722738
sierra_gas.checked_sub(builtins_gas_cost).unwrap_or_else(|| {
723739
log::debug!(
@@ -728,24 +744,29 @@ pub fn sierra_gas_to_steps_gas(
728744
})
729745
}
730746

731-
pub fn builtins_to_gas(
732-
builtin_counters: &BuiltinCounterMap,
733-
builtin_gas_costs: &BuiltinGasCosts,
747+
pub fn cairo_primitives_to_gas(
748+
cairo_primitives_counters: &CairoPrimitiveCounterMap,
749+
// NOTE: 'blake' is currently the only supported opcode, by being included in the
750+
// builtin_gas_costs.
751+
cairo_primitives_gas_costs: &BuiltinGasCosts,
734752
) -> 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.\nBuiltin: {name}, Weight: \
743-
{builtin_weight}, Count: {count}, Accumulated gas: {accumulated_gas}"
744-
)
745-
})
746-
});
753+
let cairo_primitives_gas =
754+
cairo_primitives_counters.iter().fold(0u64, |accumulated_gas, (name, &count)| {
755+
let cairo_primitive_weight =
756+
cairo_primitives_gas_costs.get_cairo_primitive_gas_cost(&name).unwrap();
757+
cairo_primitive_weight
758+
.checked_mul(u64_from_usize(count))
759+
.and_then(|builtin_gas| accumulated_gas.checked_add(builtin_gas))
760+
.unwrap_or_else(|| {
761+
panic!(
762+
"Overflow while converting cairo primitives counters to gas.\nCairo \
763+
primitive: {name}, Weight: {cairo_primitive_weight}, Count: {count}, \
764+
Accumulated gas: {accumulated_gas}"
765+
)
766+
})
767+
});
747768

748-
GasAmount(builtin_gas)
769+
GasAmount(cairo_primitives_gas)
749770
}
750771

751772
fn add_casm_hash_computation_gas_cost(

crates/blockifier/src/bouncer_test.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use starknet_api::{class_hash, contract_address, felt, storage_key};
1616
use super::BouncerConfig;
1717
use crate::blockifier::transaction_executor::TransactionExecutorError;
1818
use crate::bouncer::{
19-
builtins_to_gas,
19+
cairo_primitives_to_gas,
2020
get_patricia_update_resources,
2121
get_tx_weights,
2222
map_class_hash_to_casm_hash_computation_resources,
@@ -299,8 +299,10 @@ fn test_bouncer_try_update_gas_based(#[case] scenario: &'static str, block_conte
299299
_ => panic!("Unexpected scenario: {scenario}"),
300300
};
301301

302-
let proving_gas_max_capacity =
303-
builtins_to_gas(&max_capacity_builtin_counters, &builtin_weights.gas_costs);
302+
let proving_gas_max_capacity = cairo_primitives_to_gas(
303+
&cairo_primitive_counter_map(max_capacity_builtin_counters),
304+
&builtin_weights.gas_costs,
305+
);
304306

305307
let block_max_capacity = BouncerWeights {
306308
l1_gas: 20,

0 commit comments

Comments
 (0)