diff --git a/beacon-chain/rpc/eth/beacon/handlers.go b/beacon-chain/rpc/eth/beacon/handlers.go index 9649302544d..d7d0377aa82 100644 --- a/beacon-chain/rpc/eth/beacon/handlers.go +++ b/beacon-chain/rpc/eth/beacon/handlers.go @@ -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 } diff --git a/beacon-chain/rpc/prysm/v1alpha1/validator/proposer.go b/beacon-chain/rpc/prysm/v1alpha1/validator/proposer.go index 53e11be8e8f..406a93d3384 100644 --- a/beacon-chain/rpc/prysm/v1alpha1/validator/proposer.go +++ b/beacon-chain/rpc/prysm/v1alpha1/validator/proposer.go @@ -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) @@ -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. diff --git a/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_deneb.go b/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_deneb.go index 2f57f409bd8..22f60478653 100644 --- a/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_deneb.go +++ b/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_deneb.go @@ -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] = ðpb.BlobSidecar{ Index: uint64(i), Blob: blobs[i], - KzgCommitment: commits[i], + KzgCommitment: kzgCommitments[i], KzgProof: kzgProofs[i], SignedBlockHeader: header, CommitmentInclusionProof: proof, diff --git a/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_deneb_test.go b/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_deneb_test.go index a9f83e7ab38..06bcdb799b6 100644 --- a/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_deneb_test.go +++ b/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_deneb_test.go @@ -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))