mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2025-01-03 08:37:37 +00:00
5a66807989
* 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>
44 lines
1.7 KiB
Go
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
|
|
}
|