From db7b699d0facfd10c91d90a7331bf815f7d9bbbe Mon Sep 17 00:00:00 2001 From: Brandon Roberts Date: Tue, 12 Mar 2024 19:36:45 -0500 Subject: [PATCH] Reorder stuff inside update state due merge conflict --- src/appchain.cairo | 43 ++++++++++++++++++++------------------- tests/test_appchain.cairo | 4 +++- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/appchain.cairo b/src/appchain.cairo index b512f08..eaf1043 100644 --- a/src/appchain.cairo +++ b/src/appchain.cairo @@ -98,7 +98,7 @@ mod appchain { #[derive(Drop, starknet::Event)] struct LogStateTransitionFact { - state_transition_fact: felt252, + state_transition_fact: u256, } /// Initializes the contract. @@ -131,37 +131,24 @@ mod appchain { self.reentrancy_guard.start(); self.config.assert_only_owner_or_operator(); - let (current_program_hash, current_config_hash): (felt252, felt252) = self - .config - .program_info - .read(); - - let state_transition_fact: felt252 = 0; // Done in another PR. - let sharp_fact: u256 = keccak::keccak_u256s_be_inputs( - array![current_program_hash.into(), state_transition_fact.into()].span() - ); - assert( - IFactRegistryMockDispatcher { contract_address: self.config.get_facts_registry() } - .is_valid(sharp_fact), - errors::NO_STATE_TRANSITION_PROOF - ); - - self.emit(LogStateTransitionFact { state_transition_fact }); - - // Perform state update - self.state.update(program_output); - // Header size + 2 messages segments len. assert( program_output.len() > snos_output::HEADER_SIZE + 2, errors::SNOS_INVALID_PROGRAM_OUTPUT_SIZE ); + + let (current_program_hash, current_config_hash): (felt252, felt252) = self + .config + .program_info + .read(); + let data_availability_fact: DataAvailabilityFact = DataAvailabilityFact { onchain_data_hash, onchain_data_size }; let state_transition_fact: u256 = encode_fact_with_onchain_data( program_output, data_availability_fact ); + let mut program_output_mut = program_output; let program_output_struct: ProgramOutput = Serde::deserialize(ref program_output_mut) .unwrap(); @@ -170,6 +157,20 @@ mod appchain { errors::SNOS_INVALID_CONFIG_HASH ); + let sharp_fact: u256 = keccak::keccak_u256s_be_inputs( + array![current_program_hash.into(), state_transition_fact].span() + ); + assert( + IFactRegistryMockDispatcher { contract_address: self.config.get_facts_registry() } + .is_valid(sharp_fact), + errors::NO_STATE_TRANSITION_PROOF + ); + + self.emit(LogStateTransitionFact { state_transition_fact }); + + // Perform state update + self.state.update(program_output); + let mut offset = snos_output::HEADER_SIZE; // TODO(#7): We should update SNOS output to have the messages count diff --git a/tests/test_appchain.cairo b/tests/test_appchain.cairo index f4fbe92..0def3e7 100644 --- a/tests/test_appchain.cairo +++ b/tests/test_appchain.cairo @@ -201,7 +201,9 @@ fn update_state_ok() { block_hash: 2885081770536693045243577840233106668867645710434679941076039698247255604327 }; - let expected_state_transition_fact = LogStateTransitionFact { state_transition_fact: 0 }; + let expected_state_transition_fact = LogStateTransitionFact { + state_transition_fact: 46788249717714808102005259149255132333881826766484550864206886746454286005112 + }; _spy .assert_emitted(