diff --git a/beacon-chain/blockchain/receive_attestation.go b/beacon-chain/blockchain/receive_attestation.go index 0fa4e1966c..cdfa681d37 100644 --- a/beacon-chain/blockchain/receive_attestation.go +++ b/beacon-chain/blockchain/receive_attestation.go @@ -43,7 +43,7 @@ func (c *ChainService) ReceiveAttestation(ctx context.Context, att *ethpb.Attest } log.WithFields(logrus.Fields{ - "attRoot": hex.EncodeToString(attRoot[:]), + "attRoot": hex.EncodeToString(attRoot[:]), "attDataRoot": hex.EncodeToString(att.Data.BeaconBlockRoot), }).Debug("Broadcasting attestation") diff --git a/beacon-chain/sync/BUILD.bazel b/beacon-chain/sync/BUILD.bazel index 44495403e5..077d4e7dde 100644 --- a/beacon-chain/sync/BUILD.bazel +++ b/beacon-chain/sync/BUILD.bazel @@ -65,6 +65,7 @@ go_test( "rpc_hello_test.go", "rpc_recent_beacon_blocks_test.go", "rpc_test.go", + "subscriber_beacon_blocks_test.go", "subscriber_test.go", "validate_attester_slashing_test.go", "validate_beacon_attestation_test.go", @@ -92,6 +93,7 @@ go_test( "@com_github_libp2p_go_libp2p_core//network:go_default_library", "@com_github_libp2p_go_libp2p_core//protocol:go_default_library", "@com_github_prysmaticlabs_go_ssz//:go_default_library", + "@com_github_sirupsen_logrus//:go_default_library", "@com_github_sirupsen_logrus//hooks/test:go_default_library", ], ) diff --git a/beacon-chain/sync/subscriber_beacon_blocks.go b/beacon-chain/sync/subscriber_beacon_blocks.go index 321e02c047..d28bbe88ee 100644 --- a/beacon-chain/sync/subscriber_beacon_blocks.go +++ b/beacon-chain/sync/subscriber_beacon_blocks.go @@ -24,7 +24,9 @@ func (r *RegularSync) beaconBlockSubscriber(ctx context.Context, msg proto.Messa headState := r.chain.HeadState() // Ignore block older than last finalized checkpoint. - if block.Slot < helpers.StartSlot(headState.FinalizedCheckpoint.Epoch+1) { + if block.Slot < helpers.StartSlot(headState.FinalizedCheckpoint.Epoch) { + log.Debugf("Received a block that's older than finalized checkpoint, %d < %d", + block.Slot, helpers.StartSlot(headState.FinalizedCheckpoint.Epoch)) return nil } diff --git a/beacon-chain/sync/subscriber_beacon_blocks_test.go b/beacon-chain/sync/subscriber_beacon_blocks_test.go new file mode 100644 index 0000000000..a20cbc39ac --- /dev/null +++ b/beacon-chain/sync/subscriber_beacon_blocks_test.go @@ -0,0 +1,50 @@ +package sync + +import ( + "context" + "testing" + + "github.com/prysmaticlabs/go-ssz" + mock "github.com/prysmaticlabs/prysm/beacon-chain/blockchain/testing" + dbtest "github.com/prysmaticlabs/prysm/beacon-chain/db/testing" + pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" + ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1" + "github.com/prysmaticlabs/prysm/shared/params" + "github.com/prysmaticlabs/prysm/shared/testutil" + "github.com/sirupsen/logrus" + logTest "github.com/sirupsen/logrus/hooks/test" +) + +func init() { + logrus.SetLevel(logrus.DebugLevel) +} + +func TestRegularSyncBeaconBlockSubscriber_FilterByFinalizedEpoch(t *testing.T) { + hook := logTest.NewGlobal() + db := dbtest.SetupDB(t) + defer dbtest.TeardownDB(t, db) + + s := &pb.BeaconState{FinalizedCheckpoint: ðpb.Checkpoint{Epoch: 1}} + parent := ðpb.BeaconBlock{} + if err := db.SaveBlock(context.Background(), parent); err != nil { + t.Fatal(err) + } + parentRoot, _ := ssz.SigningRoot(parent) + r := &RegularSync{ + db: db, + chain: &mock.ChainService{State: s}, + } + + b := ðpb.BeaconBlock{Slot: 1, ParentRoot: parentRoot[:]} + if err := r.beaconBlockSubscriber(context.Background(), b); err != nil { + t.Fatal(err) + } + testutil.AssertLogsContain(t, hook, "Received a block that's older than finalized checkpoint, 1 < 64") + + hook.Reset() + b.Slot = params.BeaconConfig().SlotsPerEpoch + if err := r.beaconBlockSubscriber(context.Background(), b); err != nil { + t.Fatal(err) + } + testutil.AssertLogsDoNotContain(t, hook, "Received a block that's older than finalized checkpoint") +}