mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-09 23:48:06 -05:00
Add missing Fulu block type in stream handler (grpc StreamBlocksAltair) (#15583)
This commit is contained in:
@@ -248,6 +248,8 @@ func (vs *Server) sendBlocks(stream ethpb.BeaconNodeValidator_StreamBlocksAltair
|
|||||||
b.Block = ðpb.StreamBlocksResponse_DenebBlock{DenebBlock: p}
|
b.Block = ðpb.StreamBlocksResponse_DenebBlock{DenebBlock: p}
|
||||||
case *ethpb.SignedBeaconBlockElectra:
|
case *ethpb.SignedBeaconBlockElectra:
|
||||||
b.Block = ðpb.StreamBlocksResponse_ElectraBlock{ElectraBlock: p}
|
b.Block = ðpb.StreamBlocksResponse_ElectraBlock{ElectraBlock: p}
|
||||||
|
case *ethpb.SignedBeaconBlockFulu:
|
||||||
|
b.Block = ðpb.StreamBlocksResponse_FuluBlock{FuluBlock: p}
|
||||||
default:
|
default:
|
||||||
log.Errorf("Unknown block type %T", p)
|
log.Errorf("Unknown block type %T", p)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -381,3 +381,92 @@ func TestServer_StreamSlotsVerified_OnHeadUpdated(t *testing.T) {
|
|||||||
}
|
}
|
||||||
<-exitRoutine
|
<-exitRoutine
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestServer_StreamBlocksVerified_FuluBlock(t *testing.T) {
|
||||||
|
db := dbTest.SetupDB(t)
|
||||||
|
ctx := t.Context()
|
||||||
|
beaconState, privs := util.DeterministicGenesisStateFulu(t, 32)
|
||||||
|
c, err := altair.NextSyncCommittee(ctx, beaconState)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.NoError(t, beaconState.SetCurrentSyncCommittee(c))
|
||||||
|
|
||||||
|
b, err := util.GenerateFullBlockFulu(beaconState, privs, util.DefaultBlockGenConfig(), 1)
|
||||||
|
require.NoError(t, err)
|
||||||
|
r, err := b.Block.HashTreeRoot()
|
||||||
|
require.NoError(t, err)
|
||||||
|
wrappedBlk := util.SaveBlock(t, ctx, db, b)
|
||||||
|
chainService := &chainMock.ChainService{State: beaconState}
|
||||||
|
server := &Server{
|
||||||
|
Ctx: ctx,
|
||||||
|
StateNotifier: chainService.StateNotifier(),
|
||||||
|
HeadFetcher: chainService,
|
||||||
|
}
|
||||||
|
exitRoutine := make(chan bool)
|
||||||
|
ctrl := gomock.NewController(t)
|
||||||
|
defer ctrl.Finish()
|
||||||
|
mockStream := mock.NewMockBeaconNodeValidatorAltair_StreamBlocksServer(ctrl)
|
||||||
|
mockStream.EXPECT().Send(ðpb.StreamBlocksResponse{Block: ðpb.StreamBlocksResponse_FuluBlock{FuluBlock: b}}).Do(func(arg0 interface{}) {
|
||||||
|
exitRoutine <- true
|
||||||
|
})
|
||||||
|
mockStream.EXPECT().Context().Return(ctx).AnyTimes()
|
||||||
|
|
||||||
|
go func(tt *testing.T) {
|
||||||
|
err := server.StreamBlocksAltair(ðpb.StreamBlocksRequest{VerifiedOnly: true}, mockStream)
|
||||||
|
if s, _ := status.FromError(err); s.Code() != codes.Canceled {
|
||||||
|
assert.NoError(tt, err)
|
||||||
|
}
|
||||||
|
}(t)
|
||||||
|
// Send in a loop to ensure it is delivered (busy wait for the service to subscribe to the state feed).
|
||||||
|
for sent := 0; sent == 0; {
|
||||||
|
sent = server.StateNotifier.StateFeed().Send(&feed.Event{
|
||||||
|
Type: statefeed.BlockProcessed,
|
||||||
|
Data: &statefeed.BlockProcessedData{Slot: b.Block.Slot, BlockRoot: r, SignedBlock: wrappedBlk},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
<-exitRoutine
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestServer_StreamBlocks_FuluBlock(t *testing.T) {
|
||||||
|
params.SetupTestConfigCleanup(t)
|
||||||
|
params.OverrideBeaconConfig(params.BeaconConfig())
|
||||||
|
ctx := t.Context()
|
||||||
|
beaconState, privs := util.DeterministicGenesisStateFulu(t, 64)
|
||||||
|
c, err := altair.NextSyncCommittee(ctx, beaconState)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.NoError(t, beaconState.SetCurrentSyncCommittee(c))
|
||||||
|
|
||||||
|
b, err := util.GenerateFullBlockFulu(beaconState, privs, util.DefaultBlockGenConfig(), 1)
|
||||||
|
require.NoError(t, err)
|
||||||
|
chainService := &chainMock.ChainService{State: beaconState}
|
||||||
|
server := &Server{
|
||||||
|
Ctx: ctx,
|
||||||
|
BlockNotifier: chainService.BlockNotifier(),
|
||||||
|
HeadFetcher: chainService,
|
||||||
|
}
|
||||||
|
exitRoutine := make(chan bool)
|
||||||
|
ctrl := gomock.NewController(t)
|
||||||
|
defer ctrl.Finish()
|
||||||
|
mockStream := mock.NewMockBeaconNodeValidatorAltair_StreamBlocksServer(ctrl)
|
||||||
|
|
||||||
|
mockStream.EXPECT().Send(ðpb.StreamBlocksResponse{Block: ðpb.StreamBlocksResponse_FuluBlock{FuluBlock: b}}).Do(func(arg0 interface{}) {
|
||||||
|
exitRoutine <- true
|
||||||
|
})
|
||||||
|
mockStream.EXPECT().Context().Return(ctx).AnyTimes()
|
||||||
|
|
||||||
|
go func(tt *testing.T) {
|
||||||
|
err := server.StreamBlocksAltair(ðpb.StreamBlocksRequest{}, mockStream)
|
||||||
|
if s, _ := status.FromError(err); s.Code() != codes.Canceled {
|
||||||
|
assert.NoError(tt, err)
|
||||||
|
}
|
||||||
|
}(t)
|
||||||
|
wrappedBlk, err := blocks.NewSignedBeaconBlock(b)
|
||||||
|
require.NoError(t, err)
|
||||||
|
// Send in a loop to ensure it is delivered (busy wait for the service to subscribe to the state feed).
|
||||||
|
for sent := 0; sent == 0; {
|
||||||
|
sent = server.BlockNotifier.BlockFeed().Send(&feed.Event{
|
||||||
|
Type: blockfeed.ReceivedBlock,
|
||||||
|
Data: &blockfeed.ReceivedBlockData{SignedBlock: wrappedBlk},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
<-exitRoutine
|
||||||
|
}
|
||||||
|
|||||||
3
changelog/pvl-fulu-StreamBlocksAltair.md
Normal file
3
changelog/pvl-fulu-StreamBlocksAltair.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
### Added
|
||||||
|
|
||||||
|
- Added fulu block support to StreamBlocksAltair
|
||||||
Reference in New Issue
Block a user