diff --git a/crates/cairo-lang-starknet-classes/src/casm_contract_class.rs b/crates/cairo-lang-starknet-classes/src/casm_contract_class.rs index 1c419768606..0a555784ce4 100644 --- a/crates/cairo-lang-starknet-classes/src/casm_contract_class.rs +++ b/crates/cairo-lang-starknet-classes/src/casm_contract_class.rs @@ -197,12 +197,14 @@ fn bytecode_hash_node( } NestedIntList::Node(nodes) => { // Compute `1 + poseidon(len0, hash0, len1, hash1, ...)`. - let inner_nodes = - nodes.iter().map(|node| bytecode_hash_node::(iter, node)).collect_vec(); - let hash = H::hash_array( - &inner_nodes.iter().flat_map(|(len, hash)| [(*len).into(), *hash]).collect_vec(), - ) + 1; - (inner_nodes.iter().map(|(len, _)| len).sum(), hash) + let mut total_len = 0usize; + let mut hash_elements = Vec::with_capacity(nodes.len() * 2); + for node in nodes { + let (len, hash) = bytecode_hash_node::(iter, node); + total_len += len; + hash_elements.extend([len.into(), hash]); + } + (total_len, H::hash_array(&hash_elements) + 1) } } }