perf: query bytecodes with &B256 to avoid copying code hash (#13559)

This commit is contained in:
Hai | RISE
2024-12-26 21:58:56 +07:00
committed by GitHub
parent 951e2fd641
commit 56ce046317
13 changed files with 23 additions and 23 deletions

View File

@ -210,9 +210,9 @@ impl<SP: StateProvider, EDP: ExecutionDataProvider> StateProvider for BundleStat
self.state_provider.storage(account, storage_key)
}
fn bytecode_by_hash(&self, code_hash: B256) -> ProviderResult<Option<Bytecode>> {
fn bytecode_by_hash(&self, code_hash: &B256) -> ProviderResult<Option<Bytecode>> {
if let Some(bytecode) =
self.block_execution_data_provider.execution_outcome().bytecode(&code_hash)
self.block_execution_data_provider.execution_outcome().bytecode(code_hash)
{
return Ok(Some(bytecode))
}

View File

@ -438,8 +438,8 @@ impl<Provider: DBProvider + BlockNumReader + BlockHashReader + StateCommitmentPr
}
/// Get account code by its hash
fn bytecode_by_hash(&self, code_hash: B256) -> ProviderResult<Option<Bytecode>> {
self.tx().get::<tables::Bytecodes>(code_hash).map_err(Into::into)
fn bytecode_by_hash(&self, code_hash: &B256) -> ProviderResult<Option<Bytecode>> {
self.tx().get_by_encoded_key::<tables::Bytecodes>(code_hash).map_err(Into::into)
}
}

View File

@ -184,8 +184,8 @@ impl<Provider: DBProvider + BlockHashReader + StateCommitmentProvider> StateProv
}
/// Get account code by its hash
fn bytecode_by_hash(&self, code_hash: B256) -> ProviderResult<Option<Bytecode>> {
self.tx().get::<tables::Bytecodes>(code_hash).map_err(Into::into)
fn bytecode_by_hash(&self, code_hash: &B256) -> ProviderResult<Option<Bytecode>> {
self.tx().get_by_encoded_key::<tables::Bytecodes>(code_hash).map_err(Into::into)
}
}

View File

@ -39,7 +39,7 @@ macro_rules! delegate_provider_impls {
}
StateProvider $(where [$($generics)*])? {
fn storage(&self, account: alloy_primitives::Address, storage_key: alloy_primitives::StorageKey) -> reth_storage_errors::provider::ProviderResult<Option<alloy_primitives::StorageValue>>;
fn bytecode_by_hash(&self, code_hash: alloy_primitives::B256) -> reth_storage_errors::provider::ProviderResult<Option<reth_primitives::Bytecode>>;
fn bytecode_by_hash(&self, code_hash: &alloy_primitives::B256) -> reth_storage_errors::provider::ProviderResult<Option<reth_primitives::Bytecode>>;
}
StateRootProvider $(where [$($generics)*])? {
fn state_root(&self, state: reth_trie::HashedPostState) -> reth_storage_errors::provider::ProviderResult<alloy_primitives::B256>;

View File

@ -693,11 +693,11 @@ impl StateProvider for MockEthProvider {
Ok(lock.get(&account).and_then(|account| account.storage.get(&storage_key)).copied())
}
fn bytecode_by_hash(&self, code_hash: B256) -> ProviderResult<Option<Bytecode>> {
fn bytecode_by_hash(&self, code_hash: &B256) -> ProviderResult<Option<Bytecode>> {
let lock = self.accounts.lock();
Ok(lock.values().find_map(|account| {
match (account.account.bytecode_hash.as_ref(), account.bytecode.as_ref()) {
(Some(bytecode_hash), Some(bytecode)) if *bytecode_hash == code_hash => {
(Some(bytecode_hash), Some(bytecode)) if bytecode_hash == code_hash => {
Some(bytecode.clone())
}
_ => None,

View File

@ -465,7 +465,7 @@ impl<C: Send + Sync, N: NodePrimitives> StateProvider for NoopProvider<C, N> {
Ok(None)
}
fn bytecode_by_hash(&self, _code_hash: B256) -> ProviderResult<Option<Bytecode>> {
fn bytecode_by_hash(&self, _code_hash: &B256) -> ProviderResult<Option<Bytecode>> {
Ok(None)
}
}

View File

@ -35,7 +35,7 @@ pub trait StateProvider:
) -> ProviderResult<Option<StorageValue>>;
/// Get account code by its hash
fn bytecode_by_hash(&self, code_hash: B256) -> ProviderResult<Option<Bytecode>>;
fn bytecode_by_hash(&self, code_hash: &B256) -> ProviderResult<Option<Bytecode>>;
/// Get account code by its address.
///
@ -53,7 +53,7 @@ pub trait StateProvider:
return Ok(None)
}
// Get the code from the code hash
return self.bytecode_by_hash(code_hash)
return self.bytecode_by_hash(&code_hash)
}
// Return `None` if no code hash is set