Skip to content

Commit 410c515

Browse files
committed
removing blinded bundle from builder api
1 parent cd8d499 commit 410c515

35 files changed

+1012
-2597
lines changed

api/client/builder/bid.go

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
consensus_types "github.com/prysmaticlabs/prysm/v4/consensus-types"
77
"github.com/prysmaticlabs/prysm/v4/consensus-types/blocks"
88
"github.com/prysmaticlabs/prysm/v4/consensus-types/interfaces"
9-
enginev1 "github.com/prysmaticlabs/prysm/v4/proto/engine/v1"
109
ethpb "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1"
1110
"github.com/prysmaticlabs/prysm/v4/runtime/version"
1211
)
@@ -22,7 +21,7 @@ type SignedBid interface {
2221
// Bid is an interface describing the method set of a builder bid.
2322
type Bid interface {
2423
Header() (interfaces.ExecutionData, error)
25-
BlindedBlobsBundle() (*enginev1.BlindedBlobsBundle, error)
24+
BlobKzgCommitments() ([][]byte, error)
2625
Value() []byte
2726
Pubkey() []byte
2827
Version() int
@@ -115,9 +114,9 @@ func (b builderBid) Header() (interfaces.ExecutionData, error) {
115114
return blocks.WrappedExecutionPayloadHeader(b.p.Header)
116115
}
117116

118-
// BlindedBlobsBundle --
119-
func (b builderBid) BlindedBlobsBundle() (*enginev1.BlindedBlobsBundle, error) {
120-
return nil, errors.New("blinded blobs bundle not available before Deneb")
117+
// BlobKzgCommitments --
118+
func (b builderBid) BlobKzgCommitments() ([][]byte, error) {
119+
return [][]byte{}, errors.New("blob kzg commitments not available before Deneb")
121120
}
122121

123122
// Version --
@@ -169,9 +168,9 @@ func (b builderBidCapella) Header() (interfaces.ExecutionData, error) {
169168
return blocks.WrappedExecutionPayloadHeaderCapella(b.p.Header, blocks.PayloadValueToGwei(b.p.Value))
170169
}
171170

172-
// BlindedBlobsBundle --
173-
func (b builderBidCapella) BlindedBlobsBundle() (*enginev1.BlindedBlobsBundle, error) {
174-
return nil, errors.New("blinded blobs bundle not available before Deneb")
171+
// BlobKzgCommitments --
172+
func (b builderBidCapella) BlobKzgCommitments() ([][]byte, error) {
173+
return [][]byte{}, errors.New("blob kzg commitments not available before Deneb")
175174
}
176175

177176
// Version --
@@ -253,9 +252,9 @@ func (b builderBidDeneb) Header() (interfaces.ExecutionData, error) {
253252
return blocks.WrappedExecutionPayloadHeaderDeneb(b.p.Header, blocks.PayloadValueToGwei(b.p.Value))
254253
}
255254

256-
// BlindedBlobsBundle --
257-
func (b builderBidDeneb) BlindedBlobsBundle() (*enginev1.BlindedBlobsBundle, error) {
258-
return b.p.BlindedBlobsBundle, nil
255+
// BlobKzgCommitments --
256+
func (b builderBidDeneb) BlobKzgCommitments() ([][]byte, error) {
257+
return b.p.BlobKzgCommitments, nil
259258
}
260259

261260
type signedBuilderBidDeneb struct {

api/client/builder/client.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ type BuilderClient interface {
8989
NodeURL() string
9090
GetHeader(ctx context.Context, slot primitives.Slot, parentHash [32]byte, pubkey [48]byte) (SignedBid, error)
9191
RegisterValidator(ctx context.Context, svr []*ethpb.SignedValidatorRegistrationV1) error
92-
SubmitBlindedBlock(ctx context.Context, sb interfaces.ReadOnlySignedBeaconBlock, blobs []*ethpb.SignedBlindedBlobSidecar) (interfaces.ExecutionData, *v1.BlobsBundle, error)
92+
SubmitBlindedBlock(ctx context.Context, sb interfaces.ReadOnlySignedBeaconBlock) (interfaces.ExecutionData, *v1.BlobsBundle, error)
9393
Status(ctx context.Context) error
9494
}
9595

@@ -291,7 +291,7 @@ func (c *Client) RegisterValidator(ctx context.Context, svr []*ethpb.SignedValid
291291

292292
// SubmitBlindedBlock calls the builder API endpoint that binds the validator to the builder and submits the block.
293293
// The response is the full execution payload used to create the blinded block.
294-
func (c *Client) SubmitBlindedBlock(ctx context.Context, sb interfaces.ReadOnlySignedBeaconBlock, blobs []*ethpb.SignedBlindedBlobSidecar) (interfaces.ExecutionData, *v1.BlobsBundle, error) {
294+
func (c *Client) SubmitBlindedBlock(ctx context.Context, sb interfaces.ReadOnlySignedBeaconBlock) (interfaces.ExecutionData, *v1.BlobsBundle, error) {
295295
if !sb.IsBlinded() {
296296
return nil, nil, errNotBlinded
297297
}
@@ -375,9 +375,9 @@ func (c *Client) SubmitBlindedBlock(ctx context.Context, sb interfaces.ReadOnlyS
375375
if err != nil {
376376
return nil, nil, errors.Wrapf(err, "could not get protobuf block")
377377
}
378-
b, err := shared.SignedBlindedBeaconBlockContentsDenebFromConsensus(&ethpb.SignedBlindedBeaconBlockAndBlobsDeneb{SignedBlindedBlock: psb, SignedBlindedBlobSidecars: blobs})
378+
b, err := shared.SignedBlindedBeaconBlockDenebFromConsensus(&ethpb.SignedBlindedBeaconBlockDeneb{Message: psb.Message, Signature: bytesutil.SafeCopyBytes(psb.Signature)})
379379
if err != nil {
380-
return nil, nil, errors.Wrapf(err, "could not convert SignedBlindedBeaconBlockContentsDeneb to json marshalable type")
380+
return nil, nil, errors.Wrapf(err, "could not convert SignedBlindedBeaconBlockDeneb to json marshalable type")
381381
}
382382
body, err := json.Marshal(b)
383383
if err != nil {

api/client/builder/client_test.go

Lines changed: 9 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -270,55 +270,12 @@ func TestClient_GetHeader(t *testing.T) {
270270
bidValue := bytesutil.ReverseByteOrder(bid.Value())
271271
require.DeepEqual(t, bidValue, value.Bytes())
272272
require.DeepEqual(t, big.NewInt(0).SetBytes(bidValue), value.Int)
273-
bundle, err := bid.BlindedBlobsBundle()
273+
kcgCommitments, err := bid.BlobKzgCommitments()
274274
require.NoError(t, err)
275-
require.Equal(t, len(bundle.BlobRoots) <= fieldparams.MaxBlobsPerBlock && len(bundle.BlobRoots) > 0, true)
276-
for i := range bundle.BlobRoots {
277-
require.Equal(t, len(bundle.BlobRoots[i]) == fieldparams.RootLength, true)
275+
require.Equal(t, len(kcgCommitments) > 0, true)
276+
for i := range kcgCommitments {
277+
require.Equal(t, len(kcgCommitments[i]) == 48, true)
278278
}
279-
require.Equal(t, len(bundle.KzgCommitments) > 0, true)
280-
for i := range bundle.KzgCommitments {
281-
require.Equal(t, len(bundle.KzgCommitments[i]) == 48, true)
282-
}
283-
require.Equal(t, len(bundle.Proofs) > 0, true)
284-
for i := range bundle.Proofs {
285-
require.Equal(t, len(bundle.Proofs[i]) == 48, true)
286-
}
287-
})
288-
t.Run("deneb, no bundle", func(t *testing.T) {
289-
hc := &http.Client{
290-
Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
291-
require.Equal(t, expectedPath, r.URL.Path)
292-
return &http.Response{
293-
StatusCode: http.StatusOK,
294-
Body: io.NopCloser(bytes.NewBufferString(testExampleHeaderResponseDenebNoBundle)),
295-
Request: r.Clone(ctx),
296-
}, nil
297-
}),
298-
}
299-
c := &Client{
300-
hc: hc,
301-
baseURL: &url.URL{Host: "localhost:3500", Scheme: "http"},
302-
}
303-
h, err := c.GetHeader(ctx, slot, bytesutil.ToBytes32(parentHash), bytesutil.ToBytes48(pubkey))
304-
require.NoError(t, err)
305-
expectedWithdrawalsRoot := ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2")
306-
bid, err := h.Message()
307-
require.NoError(t, err)
308-
bidHeader, err := bid.Header()
309-
require.NoError(t, err)
310-
withdrawalsRoot, err := bidHeader.WithdrawalsRoot()
311-
require.NoError(t, err)
312-
require.Equal(t, true, bytes.Equal(expectedWithdrawalsRoot, withdrawalsRoot))
313-
value, err := stringToUint256("652312848583266388373324160190187140051835877600158453279131187530910662656")
314-
require.NoError(t, err)
315-
require.Equal(t, fmt.Sprintf("%#x", value.SSZBytes()), fmt.Sprintf("%#x", bid.Value()))
316-
bidValue := bytesutil.ReverseByteOrder(bid.Value())
317-
require.DeepEqual(t, bidValue, value.Bytes())
318-
require.DeepEqual(t, big.NewInt(0).SetBytes(bidValue), value.Int)
319-
bundle, err := bid.BlindedBlobsBundle()
320-
require.NoError(t, err)
321-
require.Equal(t, (*v1.BlindedBlobsBundle)(nil), bundle)
322279
})
323280

324281
t.Run("unsupported version", func(t *testing.T) {
@@ -362,7 +319,7 @@ func TestSubmitBlindedBlock(t *testing.T) {
362319
}
363320
sbbb, err := blocks.NewSignedBeaconBlock(testSignedBlindedBeaconBlockBellatrix(t))
364321
require.NoError(t, err)
365-
ep, _, err := c.SubmitBlindedBlock(ctx, sbbb, nil)
322+
ep, _, err := c.SubmitBlindedBlock(ctx, sbbb)
366323
require.NoError(t, err)
367324
require.Equal(t, true, bytes.Equal(ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"), ep.ParentHash()))
368325
bfpg, err := stringToUint256("452312848583266388373324160190187140051835877600158453279131187530910662656")
@@ -388,7 +345,7 @@ func TestSubmitBlindedBlock(t *testing.T) {
388345
}
389346
sbb, err := blocks.NewSignedBeaconBlock(testSignedBlindedBeaconBlockCapella(t))
390347
require.NoError(t, err)
391-
ep, _, err := c.SubmitBlindedBlock(ctx, sbb, nil)
348+
ep, _, err := c.SubmitBlindedBlock(ctx, sbb)
392349
require.NoError(t, err)
393350
withdrawals, err := ep.Withdrawals()
394351
require.NoError(t, err)
@@ -426,7 +383,7 @@ func TestSubmitBlindedBlock(t *testing.T) {
426383
sbb, err := blocks.NewSignedBeaconBlock(test.SignedBlindedBlock)
427384
require.NoError(t, err)
428385

429-
ep, blobBundle, err := c.SubmitBlindedBlock(ctx, sbb, test.SignedBlindedBlobSidecars)
386+
ep, blobBundle, err := c.SubmitBlindedBlock(ctx, sbb)
430387
require.NoError(t, err)
431388
withdrawals, err := ep.Withdrawals()
432389
require.NoError(t, err)
@@ -457,13 +414,13 @@ func TestSubmitBlindedBlock(t *testing.T) {
457414
}
458415
sbbb, err := blocks.NewSignedBeaconBlock(testSignedBlindedBeaconBlockBellatrix(t))
459416
require.NoError(t, err)
460-
_, _, err = c.SubmitBlindedBlock(ctx, sbbb, nil)
417+
_, _, err = c.SubmitBlindedBlock(ctx, sbbb)
461418
require.ErrorContains(t, "not a bellatrix payload", err)
462419
})
463420
t.Run("not blinded", func(t *testing.T) {
464421
sbb, err := blocks.NewSignedBeaconBlock(&eth.SignedBeaconBlockBellatrix{Block: &eth.BeaconBlockBellatrix{Body: &eth.BeaconBlockBodyBellatrix{}}})
465422
require.NoError(t, err)
466-
_, _, err = (&Client{}).SubmitBlindedBlock(ctx, sbb, nil)
423+
_, _, err = (&Client{}).SubmitBlindedBlock(ctx, sbb)
467424
require.ErrorIs(t, err, errNotBlinded)
468425
})
469426
}

api/client/builder/testing/mock.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func (m MockClient) RegisterValidator(_ context.Context, svr []*ethpb.SignedVali
4141
}
4242

4343
// SubmitBlindedBlock --
44-
func (MockClient) SubmitBlindedBlock(_ context.Context, _ interfaces.ReadOnlySignedBeaconBlock, _ []*ethpb.SignedBlindedBlobSidecar) (interfaces.ExecutionData, *v1.BlobsBundle, error) {
44+
func (MockClient) SubmitBlindedBlock(_ context.Context, _ interfaces.ReadOnlySignedBeaconBlock) (interfaces.ExecutionData, *v1.BlobsBundle, error) {
4545
return nil, nil, nil
4646
}
4747

api/client/builder/types.go

Lines changed: 7 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -869,16 +869,16 @@ func (bb *BuilderBidDeneb) ToProto() (*eth.BuilderBidDeneb, error) {
869869
if err != nil {
870870
return nil, err
871871
}
872-
var bundle *v1.BlindedBlobsBundle
873-
if bb.BlindedBlobsBundle != nil {
874-
bundle, err = bb.BlindedBlobsBundle.ToProto()
875-
if err != nil {
876-
return nil, err
872+
kzgCommitments := make([][]byte, len(bb.BlobKzgCommitments))
873+
for i, commit := range bb.BlobKzgCommitments {
874+
if len(commit) != fieldparams.BLSPubkeyLength {
875+
return nil, fmt.Errorf("commitment length %d is not %d", len(commit), fieldparams.BLSPubkeyLength)
877876
}
877+
kzgCommitments[i] = bytesutil.SafeCopyBytes(commit)
878878
}
879879
return &eth.BuilderBidDeneb{
880880
Header: header,
881-
BlindedBlobsBundle: bundle,
881+
BlobKzgCommitments: kzgCommitments,
882882
Value: bytesutil.SafeCopyBytes(bb.Value.SSZBytes()),
883883
Pubkey: bytesutil.SafeCopyBytes(bb.Pubkey),
884884
}, nil
@@ -887,42 +887,11 @@ func (bb *BuilderBidDeneb) ToProto() (*eth.BuilderBidDeneb, error) {
887887
// BuilderBidDeneb is a field of ExecHeaderResponseDeneb.
888888
type BuilderBidDeneb struct {
889889
Header *ExecutionPayloadHeaderDeneb `json:"header"`
890-
BlindedBlobsBundle *BlindedBlobsBundle `json:"blinded_blobs_bundle"`
890+
BlobKzgCommitments []hexutil.Bytes `json:"blob_kzg_commitments"`
891891
Value Uint256 `json:"value"`
892892
Pubkey hexutil.Bytes `json:"pubkey"`
893893
}
894894

895-
// BlindedBlobsBundle is a field of BuilderBidDeneb and represents the blinded blobs of the associated header.
896-
type BlindedBlobsBundle struct {
897-
KzgCommitments []hexutil.Bytes `json:"commitments"`
898-
Proofs []hexutil.Bytes `json:"proofs"`
899-
BlobRoots []hexutil.Bytes `json:"blob_roots"`
900-
}
901-
902-
// ToProto creates a BlindedBlobsBundle Proto from BlindedBlobsBundle.
903-
func (r *BlindedBlobsBundle) ToProto() (*v1.BlindedBlobsBundle, error) {
904-
kzg := make([][]byte, len(r.KzgCommitments))
905-
for i := range kzg {
906-
kzg[i] = bytesutil.SafeCopyBytes(r.KzgCommitments[i])
907-
}
908-
909-
proofs := make([][]byte, len(r.Proofs))
910-
for i := range proofs {
911-
proofs[i] = bytesutil.SafeCopyBytes(r.Proofs[i])
912-
}
913-
914-
blobRoots := make([][]byte, len(r.BlobRoots))
915-
for i := range blobRoots {
916-
blobRoots[i] = bytesutil.SafeCopyBytes(r.BlobRoots[i])
917-
}
918-
919-
return &v1.BlindedBlobsBundle{
920-
KzgCommitments: kzg,
921-
Proofs: proofs,
922-
BlobRoots: blobRoots,
923-
}, nil
924-
}
925-
926895
// ExecutionPayloadHeaderDeneb a field part of the BuilderBidDeneb.
927896
type ExecutionPayloadHeaderDeneb struct {
928897
ParentHash hexutil.Bytes `json:"parent_hash"`

api/client/builder/types_test.go

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -142,17 +142,9 @@ var testExampleHeaderResponseDeneb = `{
142142
"blob_gas_used": "1",
143143
"excess_blob_gas": "2"
144144
},
145-
"blinded_blobs_bundle": {
146-
"commitments": [
145+
"blob_kzg_commitments": [
147146
"0x8dab030c51e16e84be9caab84ee3d0b8bbec1db4a0e4de76439da8424d9b957370a10a78851f97e4b54d2ce1ab0d686f"
148-
],
149-
"proofs": [
150-
"0xb4021b0de10f743893d4f71e1bf830c019e832958efd6795baf2f83b8699a9eccc5dc99015d8d4d8ec370d0cc333c06a"
151-
],
152-
"blob_roots": [
153-
"0x24564723180fcb3d994104538d351c8dcbde12d541676bb736cf678018ca4739"
154-
]
155-
},
147+
],
156148
"value": "652312848583266388373324160190187140051835877600158453279131187530910662656",
157149
"pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"
158150
},

beacon-chain/builder/BUILD.bazel

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ go_library(
1515
"//beacon-chain/cache:go_default_library",
1616
"//beacon-chain/db:go_default_library",
1717
"//cmd/beacon-chain/flags:go_default_library",
18-
"//config/fieldparams:go_default_library",
1918
"//consensus-types/interfaces:go_default_library",
2019
"//consensus-types/primitives:go_default_library",
2120
"//encoding/bytesutil:go_default_library",

beacon-chain/builder/service.go

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package builder
22

33
import (
44
"context"
5-
"fmt"
65
"reflect"
76
"time"
87

@@ -11,7 +10,6 @@ import (
1110
"github.com/prysmaticlabs/prysm/v4/beacon-chain/blockchain"
1211
"github.com/prysmaticlabs/prysm/v4/beacon-chain/cache"
1312
"github.com/prysmaticlabs/prysm/v4/beacon-chain/db"
14-
fieldparams "github.com/prysmaticlabs/prysm/v4/config/fieldparams"
1513
"github.com/prysmaticlabs/prysm/v4/consensus-types/interfaces"
1614
"github.com/prysmaticlabs/prysm/v4/consensus-types/primitives"
1715
"github.com/prysmaticlabs/prysm/v4/encoding/bytesutil"
@@ -27,7 +25,7 @@ var ErrNoBuilder = errors.New("builder endpoint not configured")
2725

2826
// BlockBuilder defines the interface for interacting with the block builder
2927
type BlockBuilder interface {
30-
SubmitBlindedBlock(ctx context.Context, block interfaces.ReadOnlySignedBeaconBlock, blobs []*ethpb.SignedBlindedBlobSidecar) (interfaces.ExecutionData, *v1.BlobsBundle, error)
28+
SubmitBlindedBlock(ctx context.Context, block interfaces.ReadOnlySignedBeaconBlock) (interfaces.ExecutionData, *v1.BlobsBundle, error)
3129
GetHeader(ctx context.Context, slot primitives.Slot, parentHash [32]byte, pubKey [48]byte) (builder.SignedBid, error)
3230
RegisterValidator(ctx context.Context, reg []*ethpb.SignedValidatorRegistrationV1) error
3331
RegistrationByValidatorID(ctx context.Context, id primitives.ValidatorIndex) (*ethpb.ValidatorRegistrationV1, error)
@@ -90,7 +88,7 @@ func (s *Service) Stop() error {
9088
}
9189

9290
// SubmitBlindedBlock submits a blinded block to the builder relay network.
93-
func (s *Service) SubmitBlindedBlock(ctx context.Context, b interfaces.ReadOnlySignedBeaconBlock, blobs []*ethpb.SignedBlindedBlobSidecar) (interfaces.ExecutionData, *v1.BlobsBundle, error) {
91+
func (s *Service) SubmitBlindedBlock(ctx context.Context, b interfaces.ReadOnlySignedBeaconBlock) (interfaces.ExecutionData, *v1.BlobsBundle, error) {
9492
ctx, span := trace.StartSpan(ctx, "builder.SubmitBlindedBlock")
9593
defer span.End()
9694
start := time.Now()
@@ -100,11 +98,8 @@ func (s *Service) SubmitBlindedBlock(ctx context.Context, b interfaces.ReadOnlyS
10098
if s.c == nil {
10199
return nil, nil, ErrNoBuilder
102100
}
103-
if uint64(len(blobs)) > fieldparams.MaxBlobsPerBlock {
104-
return nil, nil, fmt.Errorf("blob count %d beyond max limit of %d", len(blobs), fieldparams.MaxBlobsPerBlock)
105-
}
106101

107-
return s.c.SubmitBlindedBlock(ctx, b, blobs)
102+
return s.c.SubmitBlindedBlock(ctx, b)
108103
}
109104

110105
// GetHeader retrieves the header for a given slot and parent hash from the builder relay network.

beacon-chain/builder/service_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func Test_BuilderMethodsWithouClient(t *testing.T) {
6262
_, err = s.GetHeader(context.Background(), 0, [32]byte{}, [48]byte{})
6363
assert.ErrorContains(t, ErrNoBuilder.Error(), err)
6464

65-
_, _, err = s.SubmitBlindedBlock(context.Background(), nil, nil)
65+
_, _, err = s.SubmitBlindedBlock(context.Background(), nil)
6666
assert.ErrorContains(t, ErrNoBuilder.Error(), err)
6767

6868
err = s.RegisterValidator(context.Background(), nil)

beacon-chain/builder/testing/mock.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func (s *MockBuilderService) Configured() bool {
4545
}
4646

4747
// SubmitBlindedBlock for mocking.
48-
func (s *MockBuilderService) SubmitBlindedBlock(_ context.Context, b interfaces.ReadOnlySignedBeaconBlock, _ []*ethpb.SignedBlindedBlobSidecar) (interfaces.ExecutionData, *v1.BlobsBundle, error) {
48+
func (s *MockBuilderService) SubmitBlindedBlock(_ context.Context, b interfaces.ReadOnlySignedBeaconBlock) (interfaces.ExecutionData, *v1.BlobsBundle, error) {
4949
switch b.Version() {
5050
case version.Bellatrix:
5151
w, err := blocks.WrappedExecutionPayload(s.Payload)

0 commit comments

Comments
 (0)