Skip to content

Commit e4cae54

Browse files
authored
Remove EIP-4844 backwards-compat structures (#33)
1 parent 948127b commit e4cae54

File tree

18 files changed

+1245
-3032
lines changed

18 files changed

+1245
-3032
lines changed

beacon-chain/rpc/prysm/v1alpha1/validator/proposer_eip4844.go

Lines changed: 4 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"github.com/prysmaticlabs/prysm/v3/encoding/bytesutil"
1313
enginev1 "github.com/prysmaticlabs/prysm/v3/proto/engine/v1"
1414
ethpb "github.com/prysmaticlabs/prysm/v3/proto/prysm/v1alpha1"
15-
"github.com/prysmaticlabs/prysm/v3/runtime/version"
1615
"github.com/sirupsen/logrus"
1716
)
1817

@@ -61,22 +60,11 @@ func (vs *Server) getEip4844BeaconBlock(ctx context.Context, req *ethpb.BlockReq
6160
return nil, errors.New("mismatched blobs and kzgs length")
6261
}
6362

64-
switch execData.Version() {
65-
case version.Bellatrix:
66-
payload, err := execData.PbGenericPayload()
67-
if err != nil {
68-
return nil, err
69-
}
70-
return vs.assembleEip4844CompatBlock(ctx, altairBlk, payload, blobsBundle)
71-
case version.EIP4844:
72-
payload, err := execData.PbEip4844Payload()
73-
if err != nil {
74-
return nil, err
75-
}
76-
return vs.assembleEip4844Block(ctx, altairBlk, payload, blobsBundle)
77-
default:
78-
return nil, errors.New("unknown payload version received from engine")
63+
payload, err := execData.PbEip4844Payload()
64+
if err != nil {
65+
return nil, err
7966
}
67+
return vs.assembleEip4844Block(ctx, altairBlk, payload, blobsBundle)
8068
}
8169

8270
func (vs *Server) assembleEip4844Block(ctx context.Context, altairBlk *ethpb.BeaconBlockAltair, payload *enginev1.ExecutionPayload4844, blobsBundle *enginev1.BlobsBundle) (*ethpb.GenericBeaconBlock, error) {
@@ -118,9 +106,6 @@ func (vs *Server) assembleEip4844Block(ctx context.Context, altairBlk *ethpb.Bea
118106
return nil, err
119107
}
120108

121-
// TOOD(EIP-4844): Upgrade Hazard. If only the CL supports new payloads, how should the beacon block root be computed? Right now the spec says
122-
// it should use the new payload regardless. But then validators will have to be careful and detect this to use the post-4844 block when voting/attesting.
123-
124109
var sideCar *ethpb.BlobsSidecar
125110
if len(blobsBundle.Blobs) != 0 {
126111
sideCar = &ethpb.BlobsSidecar{
@@ -136,58 +121,3 @@ func (vs *Server) assembleEip4844Block(ctx context.Context, altairBlk *ethpb.Bea
136121
Sidecar: sideCar,
137122
}, nil
138123
}
139-
140-
func (vs *Server) assembleEip4844CompatBlock(ctx context.Context, altairBlk *ethpb.BeaconBlockAltair, payload *enginev1.ExecutionPayload, blobsBundle *enginev1.BlobsBundle) (*ethpb.GenericBeaconBlock, error) {
141-
blk := &ethpb.BeaconBlockWithBlobKZGsCompat{
142-
Slot: altairBlk.Slot,
143-
ProposerIndex: altairBlk.ProposerIndex,
144-
ParentRoot: altairBlk.ParentRoot,
145-
StateRoot: params.BeaconConfig().ZeroHash[:],
146-
Body: &ethpb.BeaconBlockBodyWithBlobKZGsCompat{
147-
RandaoReveal: altairBlk.Body.RandaoReveal,
148-
Eth1Data: altairBlk.Body.Eth1Data,
149-
Graffiti: altairBlk.Body.Graffiti,
150-
ProposerSlashings: altairBlk.Body.ProposerSlashings,
151-
AttesterSlashings: altairBlk.Body.AttesterSlashings,
152-
Attestations: altairBlk.Body.Attestations,
153-
Deposits: altairBlk.Body.Deposits,
154-
VoluntaryExits: altairBlk.Body.VoluntaryExits,
155-
SyncAggregate: altairBlk.Body.SyncAggregate,
156-
ExecutionPayload: payload,
157-
BlobKzgs: blobsBundle.Kzgs,
158-
},
159-
}
160-
161-
// Compute state root with the newly constructed block.
162-
signedBlk := &ethpb.SignedBeaconBlockWithBlobKZGsCompat{Block: blk, Signature: make([]byte, 96)}
163-
wsb, err := consensusblocks.NewSignedBeaconBlock(signedBlk)
164-
if err != nil {
165-
return nil, err
166-
}
167-
stateRoot, err := vs.computeStateRoot(ctx, wsb)
168-
if err != nil {
169-
interop.WriteBlockToDisk(wsb, true /*failed*/)
170-
return nil, fmt.Errorf("could not compute state root: %v", err)
171-
}
172-
blk.StateRoot = stateRoot
173-
174-
r, err := wsb.Block().HashTreeRoot()
175-
if err != nil {
176-
return nil, err
177-
}
178-
179-
var sideCar *ethpb.BlobsSidecar
180-
if len(blobsBundle.Blobs) != 0 {
181-
sideCar = &ethpb.BlobsSidecar{
182-
BeaconBlockRoot: r[:],
183-
BeaconBlockSlot: wsb.Block().Slot(),
184-
Blobs: blobsBundle.Blobs,
185-
AggregatedProof: blobsBundle.AggregatedProof,
186-
}
187-
}
188-
189-
return &ethpb.GenericBeaconBlock{
190-
Block: &ethpb.GenericBeaconBlock_Eip4844Compat{Eip4844Compat: blk},
191-
Sidecar: sideCar,
192-
}, nil
193-
}

beacon-chain/sync/initial-sync/BUILD.bazel

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ go_library(
2626
"//beacon-chain/core/transition:go_default_library",
2727
"//beacon-chain/db:go_default_library",
2828
"//beacon-chain/p2p:go_default_library",
29-
"//beacon-chain/core/blob:go_default_library",
30-
"//beacon-chain/core/blocks:go_default_library",
3129
"//beacon-chain/p2p/peers/scorers:go_default_library",
3230
"//beacon-chain/p2p/types:go_default_library",
3331
"//beacon-chain/sync:go_default_library",

consensus-types/blocks/factory.go

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,6 @@ func NewSignedBeaconBlock(i interface{}) (interfaces.SignedBeaconBlock, error) {
5353
return initSignedBlockFromProtoEip4844(b.Eip4844)
5454
case *eth.SignedBeaconBlockWithBlobKZGs:
5555
return initSignedBlockFromProtoEip4844(b)
56-
case *eth.SignedBeaconBlockWithBlobKZGsCompat:
57-
return initSignedBlockFromProtoEip4844Compat(b)
58-
case *eth.GenericSignedBeaconBlock_Eip4844Compat:
59-
return initSignedBlockFromProtoEip4844Compat(b.Eip4844Compat)
6056
default:
6157
return nil, errors.Wrapf(ErrUnsupportedSignedBeaconBlock, "unable to create block from type %T", i)
6258
}
@@ -87,10 +83,6 @@ func NewBeaconBlock(i interface{}) (interfaces.BeaconBlock, error) {
8783
return initBlockFromProtoEip4844(b.Eip4844)
8884
case *eth.BeaconBlockWithBlobKZGs:
8985
return initBlockFromProtoEip4844(b)
90-
case *eth.GenericBeaconBlock_Eip4844Compat:
91-
return initBlockFromProtoEip4844Compat(b.Eip4844Compat)
92-
case *eth.BeaconBlockWithBlobKZGsCompat:
93-
return initBlockFromProtoEip4844Compat(b)
9486
default:
9587
return nil, errors.Wrapf(errUnsupportedBeaconBlock, "unable to create block from type %T", i)
9688
}
@@ -111,8 +103,6 @@ func NewBeaconBlockBody(i interface{}) (interfaces.BeaconBlockBody, error) {
111103
return initBlindedBlockBodyFromProtoBellatrix(b)
112104
case *eth.BeaconBlockBodyWithBlobKZGs:
113105
return initBlockBodyFromProtoEip4844(b)
114-
case *eth.BeaconBlockBodyWithBlobKZGsCompat:
115-
return initBlockBodyFromProtoEip4844Compat(b)
116106
default:
117107
return nil, errors.Wrapf(errUnsupportedBeaconBlockBody, "unable to create block body from type %T", i)
118108
}
@@ -154,14 +144,11 @@ func BuildSignedBeaconBlock(blk interfaces.BeaconBlock, signature []byte) (inter
154144
}
155145
return NewSignedBeaconBlock(&eth.SignedBeaconBlockBellatrix{Block: pb, Signature: signature})
156146
case version.EIP4844:
157-
switch b := pb.(type) {
158-
case *eth.BeaconBlockWithBlobKZGs:
159-
return NewSignedBeaconBlock(&eth.SignedBeaconBlockWithBlobKZGs{Block: b, Signature: signature})
160-
case *eth.BeaconBlockWithBlobKZGsCompat:
161-
return NewSignedBeaconBlock(&eth.SignedBeaconBlockWithBlobKZGsCompat{Block: b, Signature: signature})
162-
default:
147+
pb, ok := pb.(*eth.BeaconBlockWithBlobKZGs)
148+
if !ok {
163149
return nil, errIncorrectBlockVersion
164150
}
151+
return NewSignedBeaconBlock(&eth.SignedBeaconBlockWithBlobKZGs{Block: pb, Signature: signature})
165152
default:
166153
return nil, errUnsupportedBeaconBlock
167154
}

consensus-types/blocks/factory_test.go

Lines changed: 0 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -114,31 +114,6 @@ func Test_NewSignedBeaconBlock(t *testing.T) {
114114
require.NoError(t, err)
115115
assert.Equal(t, version.EIP4844, exec.Version())
116116
})
117-
t.Run("GenericSignedBeaconBlock_Eip4844Compat", func(t *testing.T) {
118-
pb := &eth.GenericSignedBeaconBlock_Eip4844Compat{
119-
Eip4844Compat: &eth.SignedBeaconBlockWithBlobKZGsCompat{
120-
Block: &eth.BeaconBlockWithBlobKZGsCompat{
121-
Body: &eth.BeaconBlockBodyWithBlobKZGsCompat{
122-
ExecutionPayload: &enginev1.ExecutionPayload{}}}}}
123-
b, err := NewSignedBeaconBlock(pb)
124-
require.NoError(t, err)
125-
assert.Equal(t, version.EIP4844, b.Version())
126-
exec, err := b.Block().Body().Execution()
127-
require.NoError(t, err)
128-
assert.Equal(t, version.Bellatrix, exec.Version())
129-
})
130-
t.Run("SignedBeaconBlockWithBlobKZGsCompat", func(t *testing.T) {
131-
pb := &eth.SignedBeaconBlockWithBlobKZGsCompat{
132-
Block: &eth.BeaconBlockWithBlobKZGsCompat{
133-
Body: &eth.BeaconBlockBodyWithBlobKZGsCompat{
134-
ExecutionPayload: &enginev1.ExecutionPayload{}}}}
135-
b, err := NewSignedBeaconBlock(pb)
136-
require.NoError(t, err)
137-
assert.Equal(t, version.EIP4844, b.Version())
138-
exec, err := b.Block().Body().Execution()
139-
require.NoError(t, err)
140-
assert.Equal(t, version.Bellatrix, exec.Version())
141-
})
142117

143118
t.Run("nil", func(t *testing.T) {
144119
_, err := NewSignedBeaconBlock(nil)
@@ -219,24 +194,6 @@ func Test_NewBeaconBlock(t *testing.T) {
219194
require.NoError(t, err)
220195
assert.Equal(t, version.EIP4844, e.Version())
221196
})
222-
t.Run("GenericBeaconBlock_Eip4844Compat", func(t *testing.T) {
223-
pb := &eth.GenericBeaconBlock_Eip4844Compat{Eip4844Compat: &eth.BeaconBlockWithBlobKZGsCompat{Body: &eth.BeaconBlockBodyWithBlobKZGsCompat{ExecutionPayload: &enginev1.ExecutionPayload{}}}}
224-
b, err := NewBeaconBlock(pb)
225-
require.NoError(t, err)
226-
assert.Equal(t, version.EIP4844, b.Version())
227-
e, err := b.Body().Execution()
228-
require.NoError(t, err)
229-
assert.Equal(t, version.Bellatrix, e.Version())
230-
})
231-
t.Run("BeaconBlockWithBlobKZGsCompat", func(t *testing.T) {
232-
pb := &eth.BeaconBlockWithBlobKZGsCompat{Body: &eth.BeaconBlockBodyWithBlobKZGsCompat{ExecutionPayload: &enginev1.ExecutionPayload{}}}
233-
b, err := NewBeaconBlock(pb)
234-
require.NoError(t, err)
235-
assert.Equal(t, version.EIP4844, b.Version())
236-
e, err := b.Body().Execution()
237-
require.NoError(t, err)
238-
assert.Equal(t, version.Bellatrix, e.Version())
239-
})
240197
t.Run("nil", func(t *testing.T) {
241198
_, err := NewBeaconBlock(nil)
242199
assert.ErrorContains(t, "received nil object", err)
@@ -290,15 +247,6 @@ func Test_NewBeaconBlockBody(t *testing.T) {
290247
assert.Equal(t, version.EIP4844, b.version)
291248
assert.Equal(t, version.EIP4844, b.executionData.Version())
292249
})
293-
t.Run("BeaconBlockBodyWithBlobKZGsCompat", func(t *testing.T) {
294-
pb := &eth.BeaconBlockBodyWithBlobKZGsCompat{ExecutionPayload: &enginev1.ExecutionPayload{}}
295-
i, err := NewBeaconBlockBody(pb)
296-
require.NoError(t, err)
297-
b, ok := i.(*BeaconBlockBody)
298-
require.Equal(t, true, ok)
299-
assert.Equal(t, version.EIP4844, b.version)
300-
assert.Equal(t, version.Bellatrix, b.executionData.Version())
301-
})
302250
t.Run("nil", func(t *testing.T) {
303251
_, err := NewBeaconBlockBody(nil)
304252
assert.ErrorContains(t, "received nil object", err)
@@ -353,15 +301,6 @@ func Test_BuildSignedBeaconBlock(t *testing.T) {
353301
assert.DeepEqual(t, sig, sb.Signature())
354302
assert.Equal(t, version.EIP4844, sb.Version())
355303
})
356-
t.Run("Eip4844Compat", func(t *testing.T) {
357-
payload, err := NewExecutionData(&enginev1.ExecutionPayload{})
358-
require.NoError(t, err)
359-
b := &BeaconBlock{version: version.EIP4844, body: &BeaconBlockBody{version: version.EIP4844, executionData: payload}}
360-
sb, err := BuildSignedBeaconBlock(b, sig[:])
361-
require.NoError(t, err)
362-
assert.DeepEqual(t, sig, sb.Signature())
363-
assert.Equal(t, version.EIP4844, sb.Version())
364-
})
365304
}
366305

367306
func TestBuildSignedBeaconBlockFromExecutionPayload(t *testing.T) {
@@ -445,6 +384,4 @@ func TestBuildSignedBeaconBlockFromExecutionPayload(t *testing.T) {
445384
require.NoError(t, err)
446385
require.DeepEqual(t, payload, gotProto)
447386
})
448-
449-
// TODO(EIP-4844): Test eip4844 compat against Bellatrix payloads
450387
}

consensus-types/blocks/getters.go

Lines changed: 8 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -61,16 +61,8 @@ func (b *SignedBeaconBlock) Copy() (interfaces.SignedBeaconBlock, error) {
6161
cp := eth.CopySignedBeaconBlockBellatrix(pb.(*eth.SignedBeaconBlockBellatrix))
6262
return initSignedBlockFromProtoBellatrix(cp)
6363
case version.EIP4844:
64-
switch p := pb.(type) {
65-
case *eth.SignedBeaconBlockWithBlobKZGs:
66-
cp := eth.CopySignedBeaconBlockWithBlobKZGs(p)
67-
return initSignedBlockFromProtoEip4844(cp)
68-
case *eth.SignedBeaconBlockWithBlobKZGsCompat:
69-
cp := eth.CopySignedBeaconBlockWithBlobKZGsCompat(p)
70-
return initSignedBlockFromProtoEip4844Compat(cp)
71-
default:
72-
return nil, errIncorrectBlockVersion
73-
}
64+
cp := eth.CopySignedBeaconBlockWithBlobKZGs(pb.(*eth.SignedBeaconBlockWithBlobKZGs))
65+
return initSignedBlockFromProtoEip4844(cp)
7466
default:
7567
return nil, errIncorrectBlockVersion
7668
}
@@ -101,7 +93,6 @@ func (b *SignedBeaconBlock) PbGenericBlock() (*eth.GenericSignedBeaconBlock, err
10193
Block: &eth.GenericSignedBeaconBlock_Bellatrix{Bellatrix: pb.(*eth.SignedBeaconBlockBellatrix)},
10294
}, nil
10395
case version.EIP4844:
104-
// TODO(EIP-4844): What does it mean to propose a Eip4844Compat block?
10596
return &eth.GenericSignedBeaconBlock{
10697
Block: &eth.GenericSignedBeaconBlock_Eip4844{Eip4844: pb.(*eth.SignedBeaconBlockWithBlobKZGs)},
10798
}, nil
@@ -445,14 +436,7 @@ func (b *BeaconBlock) HashTreeRoot() ([field_params.RootLength]byte, error) {
445436
}
446437
return pb.(*eth.BeaconBlockBellatrix).HashTreeRoot()
447438
case version.EIP4844:
448-
switch p := pb.(type) {
449-
case *eth.BeaconBlockWithBlobKZGs:
450-
return p.HashTreeRoot()
451-
case *eth.BeaconBlockWithBlobKZGsCompat:
452-
return p.HashTreeRoot()
453-
default:
454-
return [field_params.RootLength]byte{}, errIncorrectBlockVersion
455-
}
439+
return pb.(*eth.BeaconBlockWithBlobKZGs).HashTreeRoot()
456440
default:
457441
return [field_params.RootLength]byte{}, errIncorrectBlockVersion
458442
}
@@ -475,14 +459,7 @@ func (b *BeaconBlock) HashTreeRootWith(h *ssz.Hasher) error {
475459
}
476460
return pb.(*eth.BeaconBlockBellatrix).HashTreeRootWith(h)
477461
case version.EIP4844:
478-
switch p := pb.(type) {
479-
case *eth.BeaconBlockWithBlobKZGs:
480-
return p.HashTreeRootWith(h)
481-
case *eth.BeaconBlockWithBlobKZGsCompat:
482-
return p.HashTreeRootWith(h)
483-
default:
484-
return errIncorrectBlockVersion
485-
}
462+
return pb.(*eth.BeaconBlockBodyWithBlobKZGs).HashTreeRootWith(h)
486463
default:
487464
return errIncorrectBlockVersion
488465
}
@@ -506,14 +483,7 @@ func (b *BeaconBlock) MarshalSSZ() ([]byte, error) {
506483
}
507484
return pb.(*eth.BeaconBlockBellatrix).MarshalSSZ()
508485
case version.EIP4844:
509-
switch p := pb.(type) {
510-
case *eth.BeaconBlockWithBlobKZGs:
511-
return p.MarshalSSZ()
512-
case *eth.BeaconBlockWithBlobKZGsCompat:
513-
return p.MarshalSSZ()
514-
default:
515-
return []byte{}, errIncorrectBlockVersion
516-
}
486+
return pb.(*eth.BeaconBlockWithBlobKZGs).MarshalSSZ()
517487
default:
518488
return []byte{}, errIncorrectBlockVersion
519489
}
@@ -537,14 +507,7 @@ func (b *BeaconBlock) MarshalSSZTo(dst []byte) ([]byte, error) {
537507
}
538508
return pb.(*eth.BeaconBlockBellatrix).MarshalSSZTo(dst)
539509
case version.EIP4844:
540-
switch p := pb.(type) {
541-
case *eth.BeaconBlockWithBlobKZGs:
542-
return p.MarshalSSZTo(dst)
543-
case *eth.BeaconBlockWithBlobKZGsCompat:
544-
return p.MarshalSSZTo(dst)
545-
default:
546-
return []byte{}, errIncorrectBlockVersion
547-
}
510+
return pb.(*eth.BeaconBlockWithBlobKZGs).MarshalSSZTo(dst)
548511
default:
549512
return []byte{}, errIncorrectBlockVersion
550513
}
@@ -572,14 +535,7 @@ func (b *BeaconBlock) SizeSSZ() int {
572535
}
573536
return pb.(*eth.BeaconBlockBellatrix).SizeSSZ()
574537
case version.EIP4844:
575-
switch p := pb.(type) {
576-
case *eth.BeaconBlockWithBlobKZGs:
577-
return p.SizeSSZ()
578-
case *eth.BeaconBlockWithBlobKZGsCompat:
579-
return p.SizeSSZ()
580-
default:
581-
panic(incorrectBodyVersion)
582-
}
538+
return pb.(*eth.BeaconBlockWithBlobKZGs).SizeSSZ()
583539
default:
584540
panic(incorrectBodyVersion)
585541
}
@@ -632,7 +588,6 @@ func (b *BeaconBlock) UnmarshalSSZ(buf []byte) error {
632588
}
633589
}
634590
case version.EIP4844:
635-
// TODO(EIP-4844): This needs to be compatible with pre-4844 payloads
636591
pb := &eth.BeaconBlockWithBlobKZGs{}
637592
if err := pb.UnmarshalSSZ(buf); err != nil {
638593
return err
@@ -666,14 +621,7 @@ func (b *BeaconBlock) AsSignRequestObject() (validatorpb.SignRequestObject, erro
666621
}
667622
return &validatorpb.SignRequest_BlockBellatrix{BlockBellatrix: pb.(*eth.BeaconBlockBellatrix)}, nil
668623
case version.EIP4844:
669-
switch b := pb.(type) {
670-
case *eth.BeaconBlockWithBlobKZGs:
671-
return &validatorpb.SignRequest_BlockEip4844{BlockEip4844: b}, nil
672-
case *eth.BeaconBlockWithBlobKZGsCompat:
673-
return &validatorpb.SignRequest_BlockEip4844Compat{BlockEip4844Compat: b}, nil
674-
default:
675-
return nil, errIncorrectBlockVersion
676-
}
624+
return &validatorpb.SignRequest_BlockEip4844{BlockEip4844: pb.(*eth.BeaconBlockWithBlobKZGs)}, nil
677625
default:
678626
return nil, errIncorrectBlockVersion
679627
}

0 commit comments

Comments
 (0)