diff --git a/crates/transaction-pool/src/blobstore/disk.rs b/crates/transaction-pool/src/blobstore/disk.rs index cec7e50900..c14a0491a9 100644 --- a/crates/transaction-pool/src/blobstore/disk.rs +++ b/crates/transaction-pool/src/blobstore/disk.rs @@ -75,7 +75,7 @@ impl DiskFileBlobStore { // we must return the blobs in order but we don't necessarily find them in the requested // order let mut result = vec![None; versioned_hashes.len()]; - + let mut missing_count = result.len(); // first scan all cached full sidecars for (_tx_hash, blob_sidecar) in self.inner.blob_cache.lock().iter() { if let Some(blob_sidecar) = blob_sidecar.as_eip7594() { @@ -83,12 +83,16 @@ impl DiskFileBlobStore { blob_sidecar.match_versioned_hashes(versioned_hashes) { result[hash_idx] = Some(match_result); + missing_count -= 1; } } // return early if all blobs are found. - if result.iter().all(|blob| blob.is_some()) { - return Ok(result); + if missing_count == 0 { + // since versioned_hashes may have duplicates, we double check here + if result.iter().all(|blob| blob.is_some()) { + return Ok(result); + } } } diff --git a/crates/transaction-pool/src/blobstore/mem.rs b/crates/transaction-pool/src/blobstore/mem.rs index 41afa244d4..1a3fef8cea 100644 --- a/crates/transaction-pool/src/blobstore/mem.rs +++ b/crates/transaction-pool/src/blobstore/mem.rs @@ -24,18 +24,23 @@ impl InMemoryBlobStore { versioned_hashes: &[B256], ) -> Vec> { let mut result = vec![None; versioned_hashes.len()]; + let mut missing_count = result.len(); for (_tx_hash, blob_sidecar) in self.inner.store.read().iter() { if let Some(blob_sidecar) = blob_sidecar.as_eip7594() { for (hash_idx, match_result) in blob_sidecar.match_versioned_hashes(versioned_hashes) { result[hash_idx] = Some(match_result); + missing_count -= 1; } } // Return early if all blobs are found. - if result.iter().all(|blob| blob.is_some()) { - break; + if missing_count == 0 { + // since versioned_hashes may have duplicates, we double check here + if result.iter().all(|blob| blob.is_some()) { + break; + } } } result