Skip to content

Commit 1b4545c

Browse files
committed
Remove blob clones in KZG verification (#4852)
## Issue Addressed This PR removes two instances of blob clones during blob verification that may not be necessary.
1 parent a7c46bf commit 1b4545c

File tree

5 files changed

+12
-18
lines changed

5 files changed

+12
-18
lines changed

beacon_node/beacon_chain/src/beacon_chain.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5123,7 +5123,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
51235123
kzg_utils::validate_blobs::<T::EthSpec>(
51245124
kzg,
51255125
expected_kzg_commitments,
5126-
blobs,
5126+
blobs.iter().collect(),
51275127
&kzg_proofs,
51285128
)
51295129
.map_err(BlockProductionError::KzgError)?;

beacon_node/beacon_chain/src/blob_verification.rs

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -502,8 +502,7 @@ pub fn verify_kzg_for_blob<T: EthSpec>(
502502
kzg: &Kzg<T::Kzg>,
503503
) -> Result<KzgVerifiedBlob<T>, AvailabilityCheckError> {
504504
let _timer = crate::metrics::start_timer(&crate::metrics::KZG_VERIFICATION_SINGLE_TIMES);
505-
//TODO(sean) remove clone
506-
if validate_blob::<T>(kzg, blob.blob.clone(), blob.kzg_commitment, blob.kzg_proof)
505+
if validate_blob::<T>(kzg, &blob.blob, blob.kzg_commitment, blob.kzg_proof)
507506
.map_err(AvailabilityCheckError::Kzg)?
508507
{
509508
Ok(KzgVerifiedBlob { blob })
@@ -524,15 +523,10 @@ pub fn verify_kzg_for_blob_list<T: EthSpec>(
524523
let _timer = crate::metrics::start_timer(&crate::metrics::KZG_VERIFICATION_BATCH_TIMES);
525524
let (blobs, (commitments, proofs)): (Vec<_>, (Vec<_>, Vec<_>)) = blob_list
526525
.iter()
527-
.map(|blob| (blob.blob.clone(), (blob.kzg_commitment, blob.kzg_proof)))
526+
.map(|blob| (&blob.blob, (blob.kzg_commitment, blob.kzg_proof)))
528527
.unzip();
529-
if validate_blobs::<T>(
530-
kzg,
531-
commitments.as_slice(),
532-
blobs.as_slice(),
533-
proofs.as_slice(),
534-
)
535-
.map_err(AvailabilityCheckError::Kzg)?
528+
if validate_blobs::<T>(kzg, commitments.as_slice(), blobs, proofs.as_slice())
529+
.map_err(AvailabilityCheckError::Kzg)?
536530
{
537531
Ok(())
538532
} else {

beacon_node/beacon_chain/src/kzg_utils.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ fn ssz_blob_to_crypto_blob<T: EthSpec>(
1212
/// Validate a single blob-commitment-proof triplet from a `BlobSidecar`.
1313
pub fn validate_blob<T: EthSpec>(
1414
kzg: &Kzg<T::Kzg>,
15-
blob: Blob<T>,
15+
blob: &Blob<T>,
1616
kzg_commitment: KzgCommitment,
1717
kzg_proof: KzgProof,
1818
) -> Result<bool, KzgError> {
1919
kzg.verify_blob_kzg_proof(
20-
&ssz_blob_to_crypto_blob::<T>(&blob)?,
20+
&ssz_blob_to_crypto_blob::<T>(blob)?,
2121
kzg_commitment,
2222
kzg_proof,
2323
)
@@ -27,12 +27,12 @@ pub fn validate_blob<T: EthSpec>(
2727
pub fn validate_blobs<T: EthSpec>(
2828
kzg: &Kzg<T::Kzg>,
2929
expected_kzg_commitments: &[KzgCommitment],
30-
blobs: &[Blob<T>],
30+
blobs: Vec<&Blob<T>>,
3131
kzg_proofs: &[KzgProof],
3232
) -> Result<bool, KzgError> {
3333
let blobs = blobs
34-
.iter()
35-
.map(|blob| ssz_blob_to_crypto_blob::<T>(blob)) // Avoid this clone
34+
.into_iter()
35+
.map(|blob| ssz_blob_to_crypto_blob::<T>(blob))
3636
.collect::<Result<Vec<_>, KzgError>>()?;
3737

3838
kzg.verify_blob_kzg_proof_batch(&blobs, expected_kzg_commitments, kzg_proofs)

testing/ef_tests/src/cases/kzg_verify_blob_kzg_proof.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ impl<E: EthSpec> Case for KZGVerifyBlobKZGProof<E> {
9191

9292
let kzg = get_kzg::<E::Kzg>()?;
9393
let result = parse_input(&self.input).and_then(|(blob, commitment, proof)| {
94-
validate_blob::<E>(&kzg, blob, commitment, proof)
94+
validate_blob::<E>(&kzg, &blob, commitment, proof)
9595
.map_err(|e| Error::InternalError(format!("Failed to validate blob: {:?}", e)))
9696
});
9797

testing/ef_tests/src/cases/kzg_verify_blob_kzg_proof_batch.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ impl<E: EthSpec> Case for KZGVerifyBlobKZGProofBatch<E> {
5454

5555
let kzg = get_kzg::<E::Kzg>()?;
5656
let result = parse_input(&self.input).and_then(|(commitments, blobs, proofs)| {
57-
validate_blobs::<E>(&kzg, &commitments, &blobs, &proofs)
57+
validate_blobs::<E>(&kzg, &commitments, blobs.iter().collect(), &proofs)
5858
.map_err(|e| Error::InternalError(format!("Failed to validate blobs: {:?}", e)))
5959
});
6060

0 commit comments

Comments
 (0)