Update forkchoice justified on init sync (#10801)

* Update forkchoice justified on init sync

* handle err

* add regression test

Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com>
This commit is contained in:
Potuz 2022-06-01 11:13:47 -03:00 committed by GitHub
parent 2cc62cdf40
commit 8f18920ac7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 4 deletions

View File

@ -518,6 +518,9 @@ func (s *Service) handleBlockAfterBatchVerify(ctx context.Context, signed interf
return err return err
} }
s.store.SetFinalizedCheckptAndPayloadHash(fCheckpoint, h) s.store.SetFinalizedCheckptAndPayloadHash(fCheckpoint, h)
if err := s.cfg.ForkChoiceStore.UpdateFinalizedCheckpoint(fCheckpoint); err != nil {
return err
}
if err := s.cfg.ForkChoiceStore.Prune(ctx, bytesutil.ToBytes32(fCheckpoint.Root)); err != nil { if err := s.cfg.ForkChoiceStore.Prune(ctx, bytesutil.ToBytes32(fCheckpoint.Root)); err != nil {
return errors.Wrap(err, "could not prune proto array fork choice nodes") return errors.Wrap(err, "could not prune proto array fork choice nodes")
} }

View File

@ -242,8 +242,7 @@ func (s *Service) updateJustifiedInitSync(ctx context.Context, cp *ethpb.Checkpo
return err return err
} }
s.store.SetJustifiedCheckptAndPayloadHash(cp, h) s.store.SetJustifiedCheckptAndPayloadHash(cp, h)
return s.cfg.ForkChoiceStore.UpdateJustifiedCheckpoint(cp)
return nil
} }
func (s *Service) updateFinalized(ctx context.Context, cp *ethpb.Checkpoint) error { func (s *Service) updateFinalized(ctx context.Context, cp *ethpb.Checkpoint) error {

View File

@ -305,7 +305,7 @@ func TestStore_OnBlockBatch_ProtoArray(t *testing.T) {
var blks []interfaces.SignedBeaconBlock var blks []interfaces.SignedBeaconBlock
var blkRoots [][32]byte var blkRoots [][32]byte
var firstState state.BeaconState var firstState state.BeaconState
for i := 1; i < 10; i++ { for i := 1; i < 97; i++ {
b, err := util.GenerateFullBlock(bState, keys, util.DefaultBlockGenConfig(), types.Slot(i)) b, err := util.GenerateFullBlock(bState, keys, util.DefaultBlockGenConfig(), types.Slot(i))
require.NoError(t, err) require.NoError(t, err)
wsb, err := wrapper.WrappedSignedBeaconBlock(b) wsb, err := wrapper.WrappedSignedBeaconBlock(b)
@ -335,6 +335,11 @@ func TestStore_OnBlockBatch_ProtoArray(t *testing.T) {
require.ErrorIs(t, errWrongBlockCount, err) require.ErrorIs(t, errWrongBlockCount, err)
err = service.onBlockBatch(ctx, blks[1:], blkRoots[1:]) err = service.onBlockBatch(ctx, blks[1:], blkRoots[1:])
require.NoError(t, err) require.NoError(t, err)
jcp, err := service.store.JustifiedCheckpt()
require.NoError(t, err)
jroot := bytesutil.ToBytes32(jcp.Root)
require.Equal(t, blkRoots[63], jroot)
require.Equal(t, types.Epoch(2), service.cfg.ForkChoiceStore.JustifiedEpoch())
} }
func TestStore_OnBlockBatch_DoublyLinkedTree(t *testing.T) { func TestStore_OnBlockBatch_DoublyLinkedTree(t *testing.T) {
@ -370,7 +375,7 @@ func TestStore_OnBlockBatch_DoublyLinkedTree(t *testing.T) {
var blks []interfaces.SignedBeaconBlock var blks []interfaces.SignedBeaconBlock
var blkRoots [][32]byte var blkRoots [][32]byte
var firstState state.BeaconState var firstState state.BeaconState
for i := 1; i < 10; i++ { for i := 1; i < 97; i++ {
b, err := util.GenerateFullBlock(bState, keys, util.DefaultBlockGenConfig(), types.Slot(i)) b, err := util.GenerateFullBlock(bState, keys, util.DefaultBlockGenConfig(), types.Slot(i))
require.NoError(t, err) require.NoError(t, err)
wsb, err = wrapper.WrappedSignedBeaconBlock(b) wsb, err = wrapper.WrappedSignedBeaconBlock(b)
@ -400,6 +405,11 @@ func TestStore_OnBlockBatch_DoublyLinkedTree(t *testing.T) {
require.ErrorIs(t, errWrongBlockCount, err) require.ErrorIs(t, errWrongBlockCount, err)
err = service.onBlockBatch(ctx, blks[1:], blkRoots[1:]) err = service.onBlockBatch(ctx, blks[1:], blkRoots[1:])
require.NoError(t, err) require.NoError(t, err)
jcp, err := service.store.JustifiedCheckpt()
require.NoError(t, err)
jroot := bytesutil.ToBytes32(jcp.Root)
require.Equal(t, blkRoots[63], jroot)
require.Equal(t, types.Epoch(2), service.cfg.ForkChoiceStore.JustifiedEpoch())
} }
func TestStore_OnBlockBatch_NotifyNewPayload(t *testing.T) { func TestStore_OnBlockBatch_NotifyNewPayload(t *testing.T) {