Add more kzg validations

This commit is contained in:
Pawan Dhananjay
2022-11-29 16:04:16 +05:30
parent 0ed3f7474c
commit 8b56446b64
6 changed files with 67 additions and 16 deletions

View File

@@ -1,4 +1,4 @@
use kzg::Kzg;
use kzg::{Error as KzgError, Kzg};
use types::{Blob, BlobsSidecar, EthSpec, Hash256, KzgCommitment, KzgProof, Slot};
// TODO(pawan): make this generic over blob size
@@ -18,7 +18,7 @@ pub fn validate_blobs_sidecar<T: EthSpec>(
beacon_block_root: Hash256,
expected_kzg_commitments: &[KzgCommitment],
blobs_sidecar: &BlobsSidecar<T>,
) -> Result<bool, String> {
) -> Result<bool, KzgError> {
if slot != blobs_sidecar.beacon_block_slot
|| beacon_block_root != blobs_sidecar.beacon_block_root
|| blobs_sidecar.blobs.len() != expected_kzg_commitments.len()
@@ -31,27 +31,26 @@ pub fn validate_blobs_sidecar<T: EthSpec>(
.into_iter()
.map(|blob| ssz_blob_to_crypto_blob::<T>(blob.clone())) // TODO(pawan): avoid this clone
.collect::<Option<Vec<_>>>()
.ok_or_else(|| "Invalid blobs in sidecar".to_string())?;
.ok_or_else(|| KzgError::InvalidBlob("Invalid blobs in sidecar".to_string()))?;
kzg.verify_aggregate_kzg_proof(
&blobs,
expected_kzg_commitments,
blobs_sidecar.kzg_aggregated_proof,
)
.map_err(|e| format!("Failed to verify kzg proof: {:?}", e))
}
pub fn compute_aggregate_kzg_proof<T: EthSpec>(
kzg: &Kzg,
blobs: &[Blob<T>],
) -> Result<KzgProof, String> {
) -> Result<KzgProof, KzgError> {
let blobs = blobs
.into_iter()
.map(|blob| ssz_blob_to_crypto_blob::<T>(blob.clone())) // TODO(pawan): avoid this clone
.collect::<Option<Vec<_>>>()
.ok_or_else(|| "Invalid blobs in sidecar".to_string())?;
.ok_or_else(|| KzgError::InvalidBlob("Invalid blobs".to_string()))?;
kzg.compute_aggregate_kzg_proof(&blobs)
.map_err(|e| format!("Failed to compute kzg proof: {:?}", e))
}
pub fn blob_to_kzg_commitment<T: EthSpec>(kzg: &Kzg, blob: Blob<T>) -> Option<KzgCommitment> {