Skip to content

Commit 54c7c8a

Browse files
committed
refactor(provider): return cached value in the forked db
1 parent 6d6073f commit 54c7c8a

File tree

1 file changed

+37
-15
lines changed
  • crates/storage/provider/provider/src/providers/fork

1 file changed

+37
-15
lines changed

crates/storage/provider/provider/src/providers/fork/state.rs

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,14 @@ impl<Tx1: DbTx> ContractClassProvider for LatestStateProvider<Tx1> {
121121
impl<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

Comments
 (0)