Skip to content

Commit

Permalink
Add proposer blobs for epbs
Browse files Browse the repository at this point in the history
  • Loading branch information
terencechain committed Feb 8, 2025
1 parent b19a181 commit 18b71d1
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 14 deletions.
6 changes: 5 additions & 1 deletion beacon-chain/rpc/eth/beacon/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -1764,7 +1764,11 @@ func (s *Server) broadcastSeenBlockSidecars(
b interfaces.SignedBeaconBlock,
blobs [][]byte,
kzgProofs [][]byte) error {
scs, err := validator.BuildBlobSidecars(b, blobs, kzgProofs)
kzgCommitments, err := b.Block().Body().BlobKzgCommitments()
if err != nil {
return err
}
scs, err := validator.BuildBlobSidecars(b, blobs, kzgProofs, kzgCommitments, blocks.MerkleProofKZGCommitment)
if err != nil {
return err
}
Expand Down
12 changes: 11 additions & 1 deletion beacon-chain/rpc/prysm/v1alpha1/validator/proposer.go
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,12 @@ func (vs *Server) ProposeBeaconBlock(ctx context.Context, req *ethpb.GenericSign
block, sidecars, err = vs.handleBlindedBlock(ctx, block)
} else if block.Version() >= version.Deneb && block.Version() < version.EPBS {
sidecars, err = vs.blobSidecarsFromUnblindedBlock(block, req)
} else {
// TODO: Replace this with real merkle proof generation for epbs.
merkleProofEpbs := func(body interfaces.ReadOnlyBeaconBlockBody, index int) ([][]byte, error) {
return [][]byte{}, nil
}
sidecars, err = BuildBlobSidecars(block, vs.blobsBundle.Blobs, vs.blobsBundle.Proofs, vs.blobsBundle.Blobs, merkleProofEpbs)
}
if err != nil {
return nil, status.Errorf(codes.Internal, "%s: %v", "handle block failed", err)
Expand Down Expand Up @@ -380,7 +386,11 @@ func (vs *Server) blobSidecarsFromUnblindedBlock(block interfaces.SignedBeaconBl
if err != nil {
return nil, err
}
return BuildBlobSidecars(block, rawBlobs, proofs)
kzgCommitments, err := block.Block().Body().BlobKzgCommitments()
if err != nil {
return nil, err
}
return BuildBlobSidecars(block, rawBlobs, proofs, kzgCommitments, blocks.MerkleProofKZGCommitment)
}

// broadcastReceiveBlock broadcasts a block and handles its reception.
Expand Down
22 changes: 11 additions & 11 deletions beacon-chain/rpc/prysm/v1alpha1/validator/proposer_deneb.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,40 +3,40 @@ package validator
import (
"errors"

"github.com/prysmaticlabs/prysm/v5/consensus-types/blocks"
"github.com/prysmaticlabs/prysm/v5/consensus-types/interfaces"
ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1"
"github.com/prysmaticlabs/prysm/v5/runtime/version"
)

// BuildBlobSidecars given a block, builds the blob sidecars for the block.
func BuildBlobSidecars(blk interfaces.SignedBeaconBlock, blobs [][]byte, kzgProofs [][]byte) ([]*ethpb.BlobSidecar, error) {
func BuildBlobSidecars(
blk interfaces.SignedBeaconBlock,
blobs [][]byte,
kzgProofs [][]byte,
kzgCommitments [][]byte,
merkleProof func(body interfaces.ReadOnlyBeaconBlockBody, index int) ([][]byte, error)) ([]*ethpb.BlobSidecar, error) {
if blk.Version() < version.Deneb {
return nil, nil // No blobs before deneb.
}
commits, err := blk.Block().Body().BlobKzgCommitments()
if err != nil {
return nil, err
}
cLen := len(commits)
if cLen != len(blobs) || cLen != len(kzgProofs) {

if len(kzgCommitments) != len(blobs) || len(kzgCommitments) != len(kzgProofs) {
return nil, errors.New("blob KZG commitments don't match number of blobs or KZG proofs")
}
blobSidecars := make([]*ethpb.BlobSidecar, cLen)
blobSidecars := make([]*ethpb.BlobSidecar, len(kzgCommitments))
header, err := blk.Header()
if err != nil {
return nil, err
}
body := blk.Block().Body()
for i := range blobSidecars {
proof, err := blocks.MerkleProofKZGCommitment(body, i)
proof, err := merkleProof(body, i)
if err != nil {
return nil, err
}
blobSidecars[i] = &ethpb.BlobSidecar{
Index: uint64(i),
Blob: blobs[i],
KzgCommitment: commits[i],
KzgCommitment: kzgCommitments[i],
KzgProof: kzgProofs[i],
SignedBlockHeader: header,
CommitmentInclusionProof: proof,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ func TestServer_buildBlobSidecars(t *testing.T) {
make([]byte, fieldparams.BlobLength), make([]byte, fieldparams.BlobLength),
}, [][]byte{
proof, proof,
})
}, kzgCommitments, blocks.MerkleProofKZGCommitment)
require.NoError(t, err)
require.Equal(t, 2, len(scs))

Expand Down

0 comments on commit 18b71d1

Please sign in to comment.