Skip to content

Commit

Permalink
fix: handle contract commitments for contract without data items (#388)
Browse files Browse the repository at this point in the history
* fix: handle contract commitments for contract without data items

Problem: reexecution panics when a contract doesnt have data items

Solution: handle the edge case to prevent panics

* fix: only one commitment return
  • Loading branch information
whichqua authored Oct 2, 2024
1 parent b1588d9 commit 0c13f1c
Showing 1 changed file with 16 additions and 12 deletions.
28 changes: 16 additions & 12 deletions crates/bin/prove_block/src/reexecute.rs
Original file line number Diff line number Diff line change
Expand Up @@ -146,22 +146,26 @@ pub(crate) fn format_commitment_facts<H: HashFunctionType>(

impl PerContractStorage for ProverPerContractStorage {
async fn compute_commitment(&mut self) -> Result<CommitmentInfo, CommitmentInfoError> {
// TODO: error code
let contract_data =
self.storage_proof.contract_data.as_ref().expect("storage proof should have a contract_data field");
let updated_root = contract_data.root;

let commitment_facts = format_commitment_facts::<PedersenHash>(&contract_data.storage_proofs);
let (updated_root, commitment_facts) = match self.storage_proof.contract_data.as_ref() {
Some(contract_data) => {
let updated_root = contract_data.root;
let commitment_facts = format_commitment_facts::<PedersenHash>(&contract_data.storage_proofs);

let previous_commitment_facts = match &self.previous_storage_proof.contract_data {
None => HashMap::default(),
Some(previous_contract_data) => {
format_commitment_facts::<PedersenHash>(&previous_contract_data.storage_proofs)
}
};

let previous_commitment_facts = match &self.previous_storage_proof.contract_data {
None => HashMap::default(),
Some(previous_contract_data) => {
format_commitment_facts::<PedersenHash>(&previous_contract_data.storage_proofs)
let commitment_facts =
commitment_facts.into_iter().chain(previous_commitment_facts.into_iter()).collect();
(updated_root, commitment_facts)
}
// Defaults when no contract data is available
None => (Felt252::ZERO, HashMap::default()),
};

let commitment_facts = commitment_facts.into_iter().chain(previous_commitment_facts.into_iter()).collect();

Ok(CommitmentInfo {
previous_root: self.previous_tree_root,
updated_root,
Expand Down

0 comments on commit 0c13f1c

Please sign in to comment.