Skip to content

Commit 2ebbf3d

Browse files
blockifier: blake estimation use mutable resources
1 parent d249605 commit 2ebbf3d

File tree

1 file changed

+17
-19
lines changed

1 file changed

+17
-19
lines changed

crates/blockifier/src/execution/contract_class.rs

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -442,16 +442,21 @@ pub fn estimate_casm_poseidon_hash_computation_resources(
442442
}
443443

444444
/// Cost to hash a single flat segment of `len` felts.
445-
fn leaf_cost(len: usize) -> (ExecutionResources, usize) {
445+
fn leaf_cost(len: usize, resources: &mut ExecutionResources, blake_opcodes: &mut usize) {
446446
// All `len` inputs treated as “big” felts; no small-felt optimization here.
447-
cost_of_encode_felt252_data_and_calc_blake_hash(len, 0)
447+
let (added_resources, added_blake_opcode_count) =
448+
cost_of_encode_felt252_data_and_calc_blake_hash(len, 0);
449+
*resources += &added_resources;
450+
*blake_opcodes += added_blake_opcode_count;
448451
}
449452

450453
/// Cost to hash a multi-segment contract:
451-
fn node_cost(segs: &[NestedIntList]) -> (ExecutionResources, usize) {
454+
fn node_cost(
455+
segs: &[NestedIntList],
456+
resources: &mut ExecutionResources,
457+
blake_opcodes: &mut usize,
458+
) {
452459
// TODO(AvivG): Add base estimation for node.
453-
let mut resources = ExecutionResources::default();
454-
let mut blake_opcodes = 0;
455460

456461
// TODO(AvivG): Add base estimation of each segment. Could this be part of 'leaf_cost'?
457462
let segment_overhead = ExecutionResources::default();
@@ -460,10 +465,8 @@ fn node_cost(segs: &[NestedIntList]) -> (ExecutionResources, usize) {
460465
for seg in segs {
461466
match seg {
462467
NestedIntList::Leaf(len) => {
463-
let (leaf_resources, blake_opcode_count) = leaf_cost(*len);
464-
resources += &leaf_resources;
465-
resources += &segment_overhead;
466-
blake_opcodes += blake_opcode_count;
468+
leaf_cost(*len, resources, blake_opcodes);
469+
*resources += &segment_overhead;
467470
}
468471
_ => panic!("Estimating hash cost only supports at most one level of segmentation."),
469472
}
@@ -473,10 +476,8 @@ fn node_cost(segs: &[NestedIntList]) -> (ExecutionResources, usize) {
473476
// and one segment length (“small” felt) per segment.
474477
let (node_hash_resources, node_blake_opcode_count) =
475478
cost_of_encode_felt252_data_and_calc_blake_hash(segs.len(), segs.len());
476-
resources += &node_hash_resources;
477-
blake_opcodes += node_blake_opcode_count;
478-
479-
(resources, blake_opcodes)
479+
*resources += &node_hash_resources;
480+
*blake_opcodes += node_blake_opcode_count;
480481
}
481482

482483
/// Estimates the VM resources to compute the CASM Blake hash for a Cairo-1 contract.
@@ -530,15 +531,12 @@ pub fn estimate_casm_blake_hash_computation_resources_inner(
530531
let mut blake_opcodes = 0;
531532

532533
// Add leaf vs node cost
533-
let (bytecode_resources, bytecode_blake_opcode_count) = match bytecode_segment_lengths {
534+
match bytecode_segment_lengths {
534535
// Single-segment contract (e.g., older Sierra contracts).
535-
NestedIntList::Leaf(len) => leaf_cost(*len),
536-
NestedIntList::Node(segs) => node_cost(segs),
536+
NestedIntList::Leaf(len) => leaf_cost(*len, &mut resources, &mut blake_opcodes),
537+
NestedIntList::Node(segs) => node_cost(segs, &mut resources, &mut blake_opcodes),
537538
};
538539

539-
resources += &bytecode_resources;
540-
blake_opcodes += bytecode_blake_opcode_count;
541-
542540
(resources, blake_opcodes)
543541
}
544542

0 commit comments

Comments
 (0)