@@ -105,28 +105,12 @@ impl<T: StateReader> StateReader for CachedState<T> {
105105 }
106106
107107 /// Returns storage data for a given storage entry.
108+ /// Returns zero as default value if missing
108109 fn get_storage_at ( & self , storage_entry : & StorageEntry ) -> Result < Felt252 , StateError > {
109- if self . cache . get_storage ( storage_entry) . is_none ( ) {
110- match self . state_reader . get_storage_at ( storage_entry) {
111- Ok ( storage) => {
112- return Ok ( storage) ;
113- }
114- Err (
115- StateError :: EmptyKeyInStorage
116- | StateError :: NoneStoragLeaf ( _)
117- | StateError :: NoneStorage ( _)
118- | StateError :: NoneContractState ( _) ,
119- ) => return Ok ( Felt252 :: zero ( ) ) ,
120- Err ( e) => {
121- return Err ( e) ;
122- }
123- }
124- }
125-
126110 self . cache
127111 . get_storage ( storage_entry)
128- . ok_or_else ( || StateError :: NoneStorage ( storage_entry . clone ( ) ) )
129- . cloned ( )
112+ . map ( |v| Ok ( v . clone ( ) ) )
113+ . unwrap_or_else ( || self . state_reader . get_storage_at ( storage_entry ) )
130114 }
131115
132116 // TODO: check if that the proper way to store it (converting hash to address)
@@ -353,27 +337,20 @@ impl<T: StateReader> State for CachedState<T> {
353337 . clone ( ) )
354338 }
355339
340+ /// Returns storage data for a given storage entry.
341+ /// Returns zero as default value if missing
342+ /// Adds the value to the cache's inital_values if not present
356343 fn get_storage_at ( & mut self , storage_entry : & StorageEntry ) -> Result < Felt252 , StateError > {
357- if self . cache . get_storage ( storage_entry) . is_none ( ) {
358- let value = match self . state_reader . get_storage_at ( storage_entry) {
359- Ok ( value) => value,
360- Err (
361- StateError :: EmptyKeyInStorage
362- | StateError :: NoneStoragLeaf ( _)
363- | StateError :: NoneStorage ( _)
364- | StateError :: NoneContractState ( _) ,
365- ) => Felt252 :: zero ( ) ,
366- Err ( e) => return Err ( e) ,
367- } ;
368- self . cache
369- . storage_initial_values
370- . insert ( storage_entry. clone ( ) , value) ;
344+ match self . cache . get_storage ( storage_entry) {
345+ Some ( value) => Ok ( value. clone ( ) ) ,
346+ None => {
347+ let value = self . state_reader . get_storage_at ( storage_entry) ?;
348+ self . cache
349+ . storage_initial_values
350+ . insert ( storage_entry. clone ( ) , value. clone ( ) ) ;
351+ Ok ( value)
352+ }
371353 }
372-
373- self . cache
374- . get_storage ( storage_entry)
375- . ok_or_else ( || StateError :: NoneStorage ( storage_entry. clone ( ) ) )
376- . cloned ( )
377354 }
378355
379356 // TODO: check if that the proper way to store it (converting hash to address)
0 commit comments