mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2025-01-07 02:02:18 +00:00
0e043d55b4
* Use VerifiedROBlobs in initial-sync * Update beacon-chain/das/cache.go Co-authored-by: Justin Traglia <95511699+jtraglia@users.noreply.github.com> * Apply suggestions from code review comment fixes Co-authored-by: Justin Traglia <95511699+jtraglia@users.noreply.github.com> * fix lint error from gh web ui * deepsource fixes * more deepsource * fix init wiring * mark blobless blocks verified in batch mode * move sig check after parent checks * validate block commitment length at start of da check * remove vestigial locking * rm more copy-locksta * rm old comment * fail the entire batch if any sidecar fails * lint * skip redundant checks, fix len check * assume sig and proposer checks passed for block * inherits most checks from processed block * Assume block processing handles most checks * lint * cleanup unused call and gaz * more detailed logging for e2e * fix bad refactor breaking non-finalized init-sync * self-review cleanup * gaz * Update beacon-chain/verification/blob.go Co-authored-by: Justin Traglia <95511699+jtraglia@users.noreply.github.com> * terence and justin feedback --------- Co-authored-by: Kasey Kirkham <kasey@users.noreply.github.com> Co-authored-by: Justin Traglia <95511699+jtraglia@users.noreply.github.com>
71 lines
2.2 KiB
Go
71 lines
2.2 KiB
Go
package kzg
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
GoKZG "github.com/crate-crypto/go-kzg-4844"
|
|
"github.com/prysmaticlabs/prysm/v4/consensus-types/blocks"
|
|
ethpb "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1"
|
|
)
|
|
|
|
// IsDataAvailable checks that
|
|
// - all blobs in the block are available
|
|
// - Expected KZG commitments match the number of blobs in the block
|
|
// - That the number of proofs match the number of blobs
|
|
// - That the proofs are verified against the KZG commitments
|
|
func IsDataAvailable(commitments [][]byte, sidecars []*ethpb.DeprecatedBlobSidecar) error {
|
|
if len(commitments) != len(sidecars) {
|
|
return fmt.Errorf("could not check data availability, expected %d commitments, obtained %d",
|
|
len(commitments), len(sidecars))
|
|
}
|
|
if len(commitments) == 0 {
|
|
return nil
|
|
}
|
|
blobs := make([]GoKZG.Blob, len(commitments))
|
|
proofs := make([]GoKZG.KZGProof, len(commitments))
|
|
cmts := make([]GoKZG.KZGCommitment, len(commitments))
|
|
for i, sidecar := range sidecars {
|
|
blobs[i] = bytesToBlob(sidecar.Blob)
|
|
proofs[i] = bytesToKZGProof(sidecar.KzgProof)
|
|
cmts[i] = bytesToCommitment(commitments[i])
|
|
}
|
|
return kzgContext.VerifyBlobKZGProofBatch(blobs, cmts, proofs)
|
|
}
|
|
|
|
// Verify performs single or batch verification of commitments depending on the number of given BlobSidecars.
|
|
func Verify(sidecars ...blocks.ROBlob) error {
|
|
if len(sidecars) == 0 {
|
|
return nil
|
|
}
|
|
if len(sidecars) == 1 {
|
|
return kzgContext.VerifyBlobKZGProof(
|
|
bytesToBlob(sidecars[0].Blob),
|
|
bytesToCommitment(sidecars[0].KzgCommitment),
|
|
bytesToKZGProof(sidecars[0].KzgProof))
|
|
}
|
|
blobs := make([]GoKZG.Blob, len(sidecars))
|
|
cmts := make([]GoKZG.KZGCommitment, len(sidecars))
|
|
proofs := make([]GoKZG.KZGProof, len(sidecars))
|
|
for i, sidecar := range sidecars {
|
|
blobs[i] = bytesToBlob(sidecar.Blob)
|
|
cmts[i] = bytesToCommitment(sidecar.KzgCommitment)
|
|
proofs[i] = bytesToKZGProof(sidecar.KzgProof)
|
|
}
|
|
return kzgContext.VerifyBlobKZGProofBatch(blobs, cmts, proofs)
|
|
}
|
|
|
|
func bytesToBlob(blob []byte) (ret GoKZG.Blob) {
|
|
copy(ret[:], blob)
|
|
return
|
|
}
|
|
|
|
func bytesToCommitment(commitment []byte) (ret GoKZG.KZGCommitment) {
|
|
copy(ret[:], commitment)
|
|
return
|
|
}
|
|
|
|
func bytesToKZGProof(proof []byte) (ret GoKZG.KZGProof) {
|
|
copy(ret[:], proof)
|
|
return
|
|
}
|