Skip to content

Commit

Permalink
Use db head info for request attestation (#4472)
Browse files Browse the repository at this point in the history
  • Loading branch information
terencechain committed Jan 10, 2020
1 parent 6aa9295 commit 2b6a5aa
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 2 deletions.
11 changes: 9 additions & 2 deletions beacon-chain/rpc/validator/attester.go
Expand Up @@ -56,11 +56,18 @@ func (vs *Server) GetAttestationData(ctx context.Context, req *ethpb.Attestation
}
}()

headState, err := vs.HeadFetcher.HeadState(ctx)
headState, err := vs.BeaconDB.HeadState(ctx)
if err != nil {
return nil, status.Errorf(codes.Internal, "Could not retrieve head state: %v", err)
}
headRoot := vs.HeadFetcher.HeadRoot()
headBlock, err := vs.BeaconDB.HeadBlock(ctx)
if err != nil {
return nil, status.Errorf(codes.Internal, "Could not retrieve head block: %v", err)
}
headRoot, err := ssz.HashTreeRoot(headBlock.Block)
if err != nil {
return nil, status.Errorf(codes.Internal, "Could not hash head block: %v", err)
}

headState, err = state.ProcessSlots(ctx, headState, req.Slot)
if err != nil {
Expand Down
27 changes: 27 additions & 0 deletions beacon-chain/rpc/validator/attester_test.go
Expand Up @@ -114,6 +114,10 @@ func TestProposeAttestation_IncorrectSignature(t *testing.T) {
}

func TestGetAttestationData_OK(t *testing.T) {
ctx := context.Background()
db := dbutil.SetupDB(t)
defer dbutil.TeardownDB(t, db)

block := &ethpb.BeaconBlock{
Slot: 3*params.BeaconConfig().SlotsPerEpoch + 1,
}
Expand Down Expand Up @@ -148,11 +152,21 @@ func TestGetAttestationData_OK(t *testing.T) {
beaconState.BlockRoots[1*params.BeaconConfig().SlotsPerEpoch] = targetRoot[:]
beaconState.BlockRoots[2*params.BeaconConfig().SlotsPerEpoch] = justifiedRoot[:]
attesterServer := &Server{
BeaconDB: db,
P2P: &mockp2p.MockBroadcaster{},
SyncChecker: &mockSync.Sync{IsSyncing: false},
AttestationCache: cache.NewAttestationCache(),
HeadFetcher: &mock.ChainService{State: beaconState, Root: blockRoot[:]},
}
if err := attesterServer.BeaconDB.SaveState(ctx, beaconState, blockRoot); err != nil {
t.Fatal(err)
}
if err := attesterServer.BeaconDB.SaveBlock(ctx, &ethpb.SignedBeaconBlock{Block: block}); err != nil {
t.Fatal(err)
}
if err := attesterServer.BeaconDB.SaveHeadBlockRoot(ctx, blockRoot); err != nil {
t.Fatal(err)
}

req := &ethpb.AttestationDataRequest{
CommitteeIndex: 0,
Expand Down Expand Up @@ -199,6 +213,9 @@ func TestAttestationDataAtSlot_handlesFarAwayJustifiedEpoch(t *testing.T) {
//
// More background: https://github.com/prysmaticlabs/prysm/issues/2153
// This test breaks if it doesnt use mainnet config
db := dbutil.SetupDB(t)
defer dbutil.TeardownDB(t, db)
ctx := context.Background()
params.OverrideBeaconConfig(params.MainnetConfig())
defer params.OverrideBeaconConfig(params.MinimalSpecConfig())

Expand Down Expand Up @@ -240,11 +257,21 @@ func TestAttestationDataAtSlot_handlesFarAwayJustifiedEpoch(t *testing.T) {
beaconState.BlockRoots[1*params.BeaconConfig().SlotsPerEpoch] = epochBoundaryRoot[:]
beaconState.BlockRoots[2*params.BeaconConfig().SlotsPerEpoch] = justifiedBlockRoot[:]
attesterServer := &Server{
BeaconDB: db,
P2P: &mockp2p.MockBroadcaster{},
AttestationCache: cache.NewAttestationCache(),
HeadFetcher: &mock.ChainService{State: beaconState, Root: blockRoot[:]},
SyncChecker: &mockSync.Sync{IsSyncing: false},
}
if err := attesterServer.BeaconDB.SaveState(ctx, beaconState, blockRoot); err != nil {
t.Fatal(err)
}
if err := attesterServer.BeaconDB.SaveBlock(ctx, &ethpb.SignedBeaconBlock{Block: block}); err != nil {
t.Fatal(err)
}
if err := attesterServer.BeaconDB.SaveHeadBlockRoot(ctx, blockRoot); err != nil {
t.Fatal(err)
}

req := &ethpb.AttestationDataRequest{
CommitteeIndex: 0,
Expand Down

0 comments on commit 2b6a5aa

Please sign in to comment.