Skip to content

Commit 96de7e7

Browse files
committed
Minor changes.
1 parent 04c6a40 commit 96de7e7

File tree

4 files changed

+148
-145
lines changed

4 files changed

+148
-145
lines changed

beacon-chain/execution/engine_client.go

+8-10
Original file line numberDiff line numberDiff line change
@@ -642,13 +642,13 @@ func (s *Service) ReconstructBlobSidecars(ctx context.Context, block interfaces.
642642
}
643643

644644
// ReconstructDataColumnSidecars reconstructs the verified data column sidecars for a given beacon block.
645-
// It retrieves the KZG commitments from the block body, fetches the associated blobs and cell proofs,
645+
// It retrieves the KZG commitments from the block body, fetches the associated blobs and cell proofs from the EL,
646646
// and constructs the corresponding verified read-only data column sidecars.
647647
func (s *Service) ReconstructDataColumnSidecars(ctx context.Context, block interfaces.ReadOnlySignedBeaconBlock, blockRoot [32]byte) ([]blocks.VerifiedRODataColumn, error) {
648648
blockBody := block.Block().Body()
649649
kzgCommitments, err := blockBody.BlobKzgCommitments()
650650
if err != nil {
651-
return nil, wrapWithBlockRoot(err, blockRoot, "could not get blob KZG commitments")
651+
return nil, wrapWithBlockRoot(err, blockRoot, "blob KZG commitments")
652652
}
653653

654654
// Collect KZG hashes for all blobs
@@ -657,20 +657,18 @@ func (s *Service) ReconstructDataColumnSidecars(ctx context.Context, block inter
657657
kzgHashes = append(kzgHashes, primitives.ConvertKzgCommitmentToVersionedHash(commitment))
658658
}
659659

660-
// Fetch all blobs from EL
661-
blobs, err := s.GetBlobsV2(ctx, kzgHashes)
660+
// Fetch all blobsAndCellsProofs from EL
661+
blobsAndCellsProofs, err := s.GetBlobsV2(ctx, kzgHashes)
662662
if err != nil {
663-
return nil, wrapWithBlockRoot(err, blockRoot, "could not get blobs")
663+
return nil, wrapWithBlockRoot(err, blockRoot, "get blobs V2")
664664
}
665665

666-
for _, blobAndCellProofs := range blobs {
666+
var cellsAndProofs []kzg.CellsAndProofs
667+
for _, blobAndCellProofs := range blobsAndCellsProofs {
667668
if blobAndCellProofs == nil {
668669
return nil, wrapWithBlockRoot(errors.New("unable to reconstruct data column sidecars, did not get all blobs from EL"), blockRoot, "")
669670
}
670-
}
671671

672-
var cellsAndProofs []kzg.CellsAndProofs
673-
for _, blobAndCellProofs := range blobs {
674672
var blob kzg.Blob
675673
copy(blob[:], blobAndCellProofs.Blob)
676674
cells, err := kzg.ComputeCells(&blob)
@@ -713,7 +711,7 @@ func (s *Service) ReconstructDataColumnSidecars(ctx context.Context, block inter
713711
verifiedRODataColumns[i] = blocks.NewVerifiedRODataColumn(roDataColumn)
714712
}
715713

716-
log.WithField("root", fmt.Sprintf("%x", blockRoot)).Debug("Data columns reconstructed successfully")
714+
log.WithField("root", fmt.Sprintf("%x", blockRoot)).Debug("Data columns reconstructed successfully from EL")
717715

718716
return verifiedRODataColumns, nil
719717
}

beacon-chain/execution/engine_client_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -2504,7 +2504,7 @@ func TestReconstructDataColumnSidecars(t *testing.T) {
25042504
ctx := context.Background()
25052505
t.Run("GetBlobsV2 is not supported", func(t *testing.T) {
25062506
_, err := client.ReconstructDataColumnSidecars(ctx, sb, r)
2507-
require.ErrorContains(t, "could not get blobs", err)
2507+
require.ErrorContains(t, "get blobs V2 for block", err)
25082508
})
25092509

25102510
t.Run("receiving all blobs", func(t *testing.T) {

beacon-chain/sync/subscriber_beacon_blocks.go

+10-8
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,14 @@ func (s *Service) beaconBlockSubscriber(ctx context.Context, msg proto.Message)
6363

6464
// reconstructAndBroadcastBlobs processes and broadcasts blob sidecars for a given beacon block.
6565
func (s *Service) reconstructAndBroadcastBlobs(ctx context.Context, block interfaces.ReadOnlySignedBeaconBlock) {
66-
if block.Version() < version.Deneb {
66+
if block.Version() >= version.Fulu {
67+
s.reconstructAndBroadcastBlobsInDataColumn(ctx, block)
6768
return
68-
} else if block.Version() < version.Fulu {
69+
}
70+
71+
if block.Version() >= version.Deneb {
6972
s.reconstructAndBroadcastFullBlobs(ctx, block)
70-
} else {
71-
s.reconstructAndBroadcastBlobsInDataColumn(ctx, block)
73+
return
7274
}
7375
}
7476

@@ -93,15 +95,15 @@ func (s *Service) reconstructAndBroadcastBlobsInDataColumn(ctx context.Context,
9395

9496
nodeID := s.cfg.p2p.NodeID()
9597
s.cfg.custodyInfo.Mut.RLock()
96-
cgc := s.cfg.custodyInfo.CustodyGroupSamplingSize(peerdas.Actual)
97-
s.cfg.custodyInfo.Mut.RUnlock()
98-
info, _, err := peerdas.Info(nodeID, cgc)
98+
defer s.cfg.custodyInfo.Mut.RUnlock()
99+
samplingSize := s.cfg.custodyInfo.CustodyGroupSamplingSize(peerdas.Actual)
100+
info, _, err := peerdas.Info(nodeID, samplingSize)
99101
if err != nil {
100102
log.WithError(err).Error("Failed to get peer info")
101103
return
102104
}
103105

104-
// Broadcast data column and then save to db (if needs to be custodied)
106+
// Broadcast data column and then save to db (if needs to be in custody)
105107
for _, sidecar := range sidecars {
106108
if !info.CustodyColumns[sidecar.ColumnIndex] {
107109
continue

beacon-chain/sync/subscriber_beacon_blocks_test.go

+129-126
Original file line numberDiff line numberDiff line change
@@ -138,145 +138,148 @@ func TestService_BeaconBlockSubscribe_UndefinedEeError(t *testing.T) {
138138
}
139139

140140
func TestReconstructAndBroadcastBlobs(t *testing.T) {
141-
rob, err := blocks.NewROBlob(
142-
&ethpb.BlobSidecar{
143-
SignedBlockHeader: &ethpb.SignedBeaconBlockHeader{
144-
Header: &ethpb.BeaconBlockHeader{
145-
ParentRoot: make([]byte, 32),
146-
BodyRoot: make([]byte, 32),
147-
StateRoot: make([]byte, 32),
141+
t.Run("blobs", func(t *testing.T) {
142+
rob, err := blocks.NewROBlob(
143+
&ethpb.BlobSidecar{
144+
SignedBlockHeader: &ethpb.SignedBeaconBlockHeader{
145+
Header: &ethpb.BeaconBlockHeader{
146+
ParentRoot: make([]byte, 32),
147+
BodyRoot: make([]byte, 32),
148+
StateRoot: make([]byte, 32),
149+
},
150+
Signature: []byte("signature"),
148151
},
149-
Signature: []byte("signature"),
150-
},
151-
})
152-
require.NoError(t, err)
152+
})
153+
require.NoError(t, err)
153154

154-
chainService := &chainMock.ChainService{
155-
Genesis: time.Now(),
156-
}
155+
chainService := &chainMock.ChainService{
156+
Genesis: time.Now(),
157+
}
157158

158-
b := util.NewBeaconBlockDeneb()
159-
sb, err := blocks.NewSignedBeaconBlock(b)
160-
require.NoError(t, err)
159+
b := util.NewBeaconBlockDeneb()
160+
sb, err := blocks.NewSignedBeaconBlock(b)
161+
require.NoError(t, err)
161162

162-
tests := []struct {
163-
name string
164-
blobSidecars []blocks.VerifiedROBlob
165-
expectedBlobCount int
166-
}{
167-
{
168-
name: "Constructed 0 blobs",
169-
blobSidecars: nil,
170-
expectedBlobCount: 0,
171-
},
172-
{
173-
name: "Constructed 6 blobs",
174-
blobSidecars: []blocks.VerifiedROBlob{
175-
{ROBlob: rob}, {ROBlob: rob}, {ROBlob: rob}, {ROBlob: rob}, {ROBlob: rob}, {ROBlob: rob},
163+
tests := []struct {
164+
name string
165+
blobSidecars []blocks.VerifiedROBlob
166+
expectedBlobCount int
167+
}{
168+
{
169+
name: "Constructed 0 blobs",
170+
blobSidecars: nil,
171+
expectedBlobCount: 0,
176172
},
177-
expectedBlobCount: 6,
178-
},
179-
}
173+
{
174+
name: "Constructed 6 blobs",
175+
blobSidecars: []blocks.VerifiedROBlob{
176+
{ROBlob: rob}, {ROBlob: rob}, {ROBlob: rob}, {ROBlob: rob}, {ROBlob: rob}, {ROBlob: rob},
177+
},
178+
expectedBlobCount: 6,
179+
},
180+
}
180181

181-
for _, tt := range tests {
182-
t.Run(tt.name, func(t *testing.T) {
183-
s := Service{
184-
cfg: &config{
185-
p2p: mockp2p.NewTestP2P(t),
186-
chain: chainService,
187-
clock: startup.NewClock(time.Now(), [32]byte{}),
188-
blobStorage: filesystem.NewEphemeralBlobStorage(t),
189-
executionReconstructor: &mockExecution.EngineClient{
190-
BlobSidecars: tt.blobSidecars,
182+
for _, tt := range tests {
183+
t.Run(tt.name, func(t *testing.T) {
184+
s := Service{
185+
cfg: &config{
186+
p2p: mockp2p.NewTestP2P(t),
187+
chain: chainService,
188+
clock: startup.NewClock(time.Now(), [32]byte{}),
189+
blobStorage: filesystem.NewEphemeralBlobStorage(t),
190+
executionReconstructor: &mockExecution.EngineClient{
191+
BlobSidecars: tt.blobSidecars,
192+
},
193+
operationNotifier: &chainMock.MockOperationNotifier{},
191194
},
192-
operationNotifier: &chainMock.MockOperationNotifier{},
193-
},
194-
seenBlobCache: lruwrpr.New(1),
195-
}
196-
s.reconstructAndBroadcastBlobs(context.Background(), sb)
197-
require.Equal(t, tt.expectedBlobCount, len(chainService.Blobs))
198-
})
199-
}
200-
}
195+
seenBlobCache: lruwrpr.New(1),
196+
}
197+
s.reconstructAndBroadcastBlobs(context.Background(), sb)
198+
require.Equal(t, tt.expectedBlobCount, len(chainService.Blobs))
199+
})
200+
}
201+
})
201202

202-
func TestReconstructAndBroadcastDataColumns(t *testing.T) {
203-
// load trusted setup
204-
err := kzg.Start()
205-
require.NoError(t, err)
203+
t.Run("data columns", func(t *testing.T) {
204+
// load trusted setup
205+
err := kzg.Start()
206+
require.NoError(t, err)
206207

207-
// Setup right fork epoch
208-
params.SetupTestConfigCleanup(t)
209-
cfg := params.BeaconConfig().Copy()
210-
cfg.CapellaForkEpoch = 0
211-
cfg.DenebForkEpoch = 0
212-
cfg.ElectraForkEpoch = 0
213-
cfg.FuluForkEpoch = 0
214-
params.OverrideBeaconConfig(cfg)
208+
// Setup right fork epoch
209+
params.SetupTestConfigCleanup(t)
210+
cfg := params.BeaconConfig().Copy()
211+
cfg.CapellaForkEpoch = 0
212+
cfg.DenebForkEpoch = 0
213+
cfg.ElectraForkEpoch = 0
214+
cfg.FuluForkEpoch = 0
215+
params.OverrideBeaconConfig(cfg)
215216

216-
chainService := &chainMock.ChainService{
217-
Genesis: time.Now(),
218-
}
217+
chainService := &chainMock.ChainService{
218+
Genesis: time.Now(),
219+
}
219220

220-
b := util.NewBeaconBlockFulu()
221-
sb, err := blocks.NewSignedBeaconBlock(b)
222-
require.NoError(t, err)
221+
b := util.NewBeaconBlockFulu()
222+
sb, err := blocks.NewSignedBeaconBlock(b)
223+
require.NoError(t, err)
223224

224-
allColumns := make([]blocks.VerifiedRODataColumn, 128)
225-
for i := range allColumns {
226-
rod, err := blocks.NewRODataColumn(
227-
&ethpb.DataColumnSidecar{
228-
SignedBlockHeader: &ethpb.SignedBeaconBlockHeader{
229-
Header: &ethpb.BeaconBlockHeader{
230-
ParentRoot: make([]byte, 32),
231-
BodyRoot: make([]byte, 32),
232-
StateRoot: make([]byte, 32),
233-
ProposerIndex: primitives.ValidatorIndex(123),
234-
Slot: primitives.Slot(123),
225+
allColumns := make([]blocks.VerifiedRODataColumn, 128)
226+
for i := range allColumns {
227+
rod, err := blocks.NewRODataColumn(
228+
&ethpb.DataColumnSidecar{
229+
SignedBlockHeader: &ethpb.SignedBeaconBlockHeader{
230+
Header: &ethpb.BeaconBlockHeader{
231+
ParentRoot: make([]byte, 32),
232+
BodyRoot: make([]byte, 32),
233+
StateRoot: make([]byte, 32),
234+
ProposerIndex: primitives.ValidatorIndex(123),
235+
Slot: primitives.Slot(123),
236+
},
237+
Signature: []byte("signature"),
235238
},
236-
Signature: []byte("signature"),
237-
},
238-
ColumnIndex: uint64(i),
239-
})
240-
require.NoError(t, err)
241-
allColumns[i] = blocks.VerifiedRODataColumn{RODataColumn: rod}
242-
}
243-
tests := []struct {
244-
name string
245-
dataColumnSidecars []blocks.VerifiedRODataColumn
246-
expectedDataColumnCount int
247-
}{
248-
{
249-
name: "Constructed 0 data columns with no blobs",
250-
dataColumnSidecars: nil,
251-
expectedDataColumnCount: 0,
252-
},
253-
{
254-
name: "Constructed 128 data columns with all blobs",
255-
dataColumnSidecars: allColumns,
256-
expectedDataColumnCount: 8, // default is 8
257-
},
258-
}
239+
ColumnIndex: uint64(i),
240+
})
241+
require.NoError(t, err)
242+
allColumns[i] = blocks.VerifiedRODataColumn{RODataColumn: rod}
243+
}
244+
tests := []struct {
245+
name string
246+
dataColumnSidecars []blocks.VerifiedRODataColumn
247+
expectedDataColumnCount int
248+
}{
249+
{
250+
name: "Constructed 0 data columns with no blobs",
251+
dataColumnSidecars: nil,
252+
expectedDataColumnCount: 0,
253+
},
254+
{
255+
name: "Constructed 128 data columns with all blobs",
256+
dataColumnSidecars: allColumns,
257+
expectedDataColumnCount: 8, // default is 8
258+
},
259+
}
259260

260-
for _, tt := range tests {
261-
t.Run(tt.name, func(t *testing.T) {
262-
s := Service{
263-
cfg: &config{
264-
p2p: mockp2p.NewTestP2P(t),
265-
chain: chainService,
266-
clock: startup.NewClock(time.Now(), [32]byte{}),
267-
blobStorage: filesystem.NewEphemeralBlobStorage(t),
268-
executionReconstructor: &mockExecution.EngineClient{
269-
DataColumnSidecars: tt.dataColumnSidecars,
261+
for _, tt := range tests {
262+
t.Run(tt.name, func(t *testing.T) {
263+
s := Service{
264+
cfg: &config{
265+
p2p: mockp2p.NewTestP2P(t),
266+
chain: chainService,
267+
clock: startup.NewClock(time.Now(), [32]byte{}),
268+
blobStorage: filesystem.NewEphemeralBlobStorage(t),
269+
executionReconstructor: &mockExecution.EngineClient{
270+
DataColumnSidecars: tt.dataColumnSidecars,
271+
},
272+
operationNotifier: &chainMock.MockOperationNotifier{},
273+
custodyInfo: &peerdas.CustodyInfo{},
270274
},
271-
operationNotifier: &chainMock.MockOperationNotifier{},
272-
custodyInfo: &peerdas.CustodyInfo{},
273-
},
274-
seenDataColumnCache: lruwrpr.New(1),
275-
receivedDataColumnsFromRoot: gcache.New(1*time.Minute, 2*time.Minute),
276-
storedDataColumnsFromRoot: gcache.New(1*time.Minute, 2*time.Minute),
277-
}
278-
s.reconstructAndBroadcastBlobs(context.Background(), sb)
279-
require.Equal(t, tt.expectedDataColumnCount, len(chainService.DataColumns))
280-
})
281-
}
275+
seenDataColumnCache: lruwrpr.New(1),
276+
receivedDataColumnsFromRoot: gcache.New(1*time.Minute, 2*time.Minute),
277+
storedDataColumnsFromRoot: gcache.New(1*time.Minute, 2*time.Minute),
278+
}
279+
s.reconstructAndBroadcastBlobs(context.Background(), sb)
280+
require.Equal(t, tt.expectedDataColumnCount, len(chainService.DataColumns))
281+
})
282+
}
283+
})
284+
282285
}

0 commit comments

Comments
 (0)