@@ -121,8 +121,14 @@ impl<Tx1: DbTx> ContractClassProvider for LatestStateProvider<Tx1> {
121121impl < Tx1 : DbTx > StateProvider for LatestStateProvider < Tx1 > {
122122 fn nonce ( & self , address : ContractAddress ) -> ProviderResult < Option < Nonce > > {
123123 if let res @ Some ( ..) = self . local_provider . nonce ( address) ? {
124- Ok ( res)
125- } else if let Some ( nonce) =
124+ return Ok ( res) ;
125+ }
126+
127+ if let res @ Some ( ..) = self . fork_provider . db ( ) . provider ( ) . latest ( ) ?. nonce ( address) ? {
128+ return Ok ( res) ;
129+ }
130+
131+ if let Some ( nonce) =
126132 self . fork_provider . backend . get_nonce ( address, self . fork_provider . block_id ) ?
127133 {
128134 let class_hash = self
@@ -137,19 +143,27 @@ impl<Tx1: DbTx> StateProvider for LatestStateProvider<Tx1> {
137143 provider_mut. tx ( ) . put :: < tables:: ContractInfo > ( address, entry) ?;
138144 provider_mut. commit ( ) ?;
139145
140- Ok ( Some ( nonce) )
141- } else {
142- Ok ( None )
146+ return Ok ( Some ( nonce) ) ;
143147 }
148+
149+ Ok ( None )
144150 }
145151
146152 fn class_hash_of_contract (
147153 & self ,
148154 address : ContractAddress ,
149155 ) -> ProviderResult < Option < ClassHash > > {
150156 if let res @ Some ( ..) = self . local_provider . class_hash_of_contract ( address) ? {
151- Ok ( res)
152- } else if let Some ( class_hash) =
157+ return Ok ( res) ;
158+ }
159+
160+ if let res @ Some ( ..) =
161+ self . fork_provider . db ( ) . provider ( ) . latest ( ) ?. class_hash_of_contract ( address) ?
162+ {
163+ return Ok ( res) ;
164+ }
165+
166+ if let Some ( class_hash) =
153167 self . fork_provider . backend . get_class_hash_at ( address, self . fork_provider . block_id ) ?
154168 {
155169 let nonce = self
@@ -164,10 +178,10 @@ impl<Tx1: DbTx> StateProvider for LatestStateProvider<Tx1> {
164178 provider_mut. tx ( ) . put :: < tables:: ContractInfo > ( address, entry) ?;
165179 provider_mut. commit ( ) ?;
166180
167- Ok ( Some ( class_hash) )
168- } else {
169- Ok ( None )
181+ return Ok ( Some ( class_hash) ) ;
170182 }
183+
184+ Ok ( None )
171185 }
172186
173187 fn storage (
@@ -176,8 +190,16 @@ impl<Tx1: DbTx> StateProvider for LatestStateProvider<Tx1> {
176190 key : StorageKey ,
177191 ) -> ProviderResult < Option < StorageValue > > {
178192 if let res @ Some ( ..) = self . local_provider . storage ( address, key) ? {
179- Ok ( res)
180- } else if let Some ( value) =
193+ return Ok ( res) ;
194+ }
195+
196+ if let res @ Some ( ..) =
197+ self . fork_provider . db ( ) . provider ( ) . latest ( ) ?. storage ( address, key) ?
198+ {
199+ return Ok ( res) ;
200+ }
201+
202+ if let Some ( value) =
181203 self . fork_provider . backend . get_storage ( address, key, self . fork_provider . block_id ) ?
182204 {
183205 let entry = StorageEntry { key, value } ;
@@ -186,10 +208,10 @@ impl<Tx1: DbTx> StateProvider for LatestStateProvider<Tx1> {
186208 provider_mut. tx ( ) . put :: < tables:: ContractStorage > ( address, entry) ?;
187209 provider_mut. commit ( ) ?;
188210
189- Ok ( Some ( value) )
190- } else {
191- Ok ( None )
211+ return Ok ( Some ( value) ) ;
192212 }
213+
214+ Ok ( None )
193215 }
194216}
195217
0 commit comments