prysm-pulse/beacon-chain/sync/verify/blob.go
terence 5a66807989
Update to V5 (#13622)
* First take at updating everything to v5

* Patch gRPC gateway to use prysm v5

Fix patch

* Update go ssz

---------

Co-authored-by: Preston Van Loon <pvanloon@offchainlabs.com>
2024-02-15 05:46:47 +00:00

44 lines
1.7 KiB
Go

package verify
import (
"github.com/pkg/errors"
fieldparams "github.com/prysmaticlabs/prysm/v5/config/fieldparams"
"github.com/prysmaticlabs/prysm/v5/consensus-types/blocks"
"github.com/prysmaticlabs/prysm/v5/encoding/bytesutil"
"github.com/prysmaticlabs/prysm/v5/runtime/version"
)
var (
errBlobVerification = errors.New("unable to verify blobs")
ErrIncorrectBlobIndex = errors.New("incorrect blob index")
ErrBlobBlockMisaligned = errors.Wrap(errBlobVerification, "root of block header in blob sidecar does not match block root")
ErrMismatchedBlobCommitments = errors.Wrap(errBlobVerification, "commitments at given slot, root and index do not match")
)
// BlobAlignsWithBlock verifies if the blob aligns with the block.
func BlobAlignsWithBlock(blob blocks.ROBlob, block blocks.ROBlock) error {
if block.Version() < version.Deneb {
return nil
}
if blob.Index >= fieldparams.MaxBlobsPerBlock {
return errors.Wrapf(ErrIncorrectBlobIndex, "index %d exceeds MAX_BLOBS_PER_BLOCK %d", blob.Index, fieldparams.MaxBlobsPerBlock)
}
if blob.BlockRoot() != block.Root() {
return ErrBlobBlockMisaligned
}
// Verify commitment byte values match
// TODO: verify commitment inclusion proof - actually replace this with a better rpc blob verification stack altogether.
commits, err := block.Block().Body().BlobKzgCommitments()
if err != nil {
return err
}
blockCommitment := bytesutil.ToBytes48(commits[blob.Index])
blobCommitment := bytesutil.ToBytes48(blob.KzgCommitment)
if blobCommitment != blockCommitment {
return errors.Wrapf(ErrMismatchedBlobCommitments, "commitment %#x != block commitment %#x, at index %d for block root %#x at slot %d ", blobCommitment, blockCommitment, blob.Index, block.Root(), blob.Slot())
}
return nil
}