|
1 | | -use blockifier::state::state_api::{State, StateReader}; |
2 | | -use cairo_vm::hint_processor::builtin_hint_processor::hint_utils::{ |
3 | | - get_integer_from_var_name, |
4 | | - insert_value_into_ap, |
5 | | -}; |
6 | | -use cairo_vm::types::relocatable::MaybeRelocatable; |
7 | | -use starknet_api::core::ContractAddress; |
8 | | -use starknet_api::state::StorageKey; |
9 | | -use starknet_types_core::felt::Felt; |
10 | | - |
11 | | -use crate::hint_processor::snos_hint_processor::SnosHintProcessor; |
12 | | -use crate::hints::error::OsHintResult; |
13 | | -use crate::hints::hint_implementation::execution::utils::set_state_entry; |
14 | | -use crate::hints::types::HintArgs; |
15 | | -use crate::hints::vars::{Ids, Scope}; |
16 | | - |
17 | | -pub(crate) fn prepare_state_entry_for_revert( |
18 | | - HintArgs { ids_data, ap_tracking, vm, exec_scopes, .. }: HintArgs<'_>, |
19 | | -) -> OsHintResult { |
20 | | - let contract_address: ContractAddress = |
21 | | - get_integer_from_var_name(Ids::ContractAddress.into(), vm, ids_data, ap_tracking)? |
22 | | - .try_into()?; |
23 | | - set_state_entry(&contract_address, vm, exec_scopes, ids_data, ap_tracking)?; |
24 | | - |
25 | | - // Insert the contract address into the execution scopes instead of the entire storage. |
26 | | - // Later, we use this address to revert the state. |
27 | | - exec_scopes.insert_value(Scope::ContractAddressForRevert.into(), contract_address); |
28 | | - Ok(()) |
29 | | -} |
30 | | - |
31 | | -pub(crate) fn read_storage_key_for_revert<S: StateReader>( |
32 | | - hint_processor: &mut SnosHintProcessor<'_, S>, |
33 | | - HintArgs { exec_scopes, vm, ids_data, ap_tracking, .. }: HintArgs<'_>, |
34 | | -) -> OsHintResult { |
35 | | - let contract_address: &ContractAddress = |
36 | | - exec_scopes.get_ref(Scope::ContractAddressForRevert.into())?; |
37 | | - let storage_key: StorageKey = |
38 | | - get_integer_from_var_name(Ids::StorageKey.into(), vm, ids_data, ap_tracking)?.try_into()?; |
39 | | - let execution_helper = hint_processor.get_mut_current_execution_helper()?; |
40 | | - let storage_value = |
41 | | - execution_helper.cached_state.get_storage_at(*contract_address, storage_key)?; |
42 | | - insert_value_into_ap(vm, storage_value)?; |
43 | | - Ok(()) |
44 | | -} |
45 | | - |
46 | | -pub(crate) fn write_storage_key_for_revert<S: StateReader>( |
47 | | - hint_processor: &mut SnosHintProcessor<'_, S>, |
48 | | - HintArgs { exec_scopes, vm, ids_data, ap_tracking, .. }: HintArgs<'_>, |
49 | | -) -> OsHintResult { |
50 | | - let contract_address: &ContractAddress = |
51 | | - exec_scopes.get_ref(Scope::ContractAddressForRevert.into())?; |
52 | | - let storage_key: StorageKey = |
53 | | - get_integer_from_var_name(Ids::StorageKey.into(), vm, ids_data, ap_tracking)?.try_into()?; |
54 | | - let value = get_integer_from_var_name(Ids::Value.into(), vm, ids_data, ap_tracking)?; |
55 | | - let execution_helper = hint_processor.get_mut_current_execution_helper()?; |
56 | | - execution_helper.cached_state.set_storage_at(*contract_address, storage_key, value)?; |
57 | | - Ok(()) |
58 | | -} |
59 | | - |
60 | | -pub(crate) fn generate_dummy_os_output_segment(HintArgs { vm, .. }: HintArgs<'_>) -> OsHintResult { |
61 | | - let base = vm.add_memory_segment(); |
62 | | - let segment_data = |
63 | | - [MaybeRelocatable::from(vm.add_memory_segment()), MaybeRelocatable::from(Felt::ZERO)]; |
64 | | - vm.load_data(base, &segment_data)?; |
65 | | - insert_value_into_ap(vm, base)?; |
66 | | - Ok(()) |
67 | | -} |
| 1 | +pub(crate) mod implementation; |
0 commit comments