github.com/prysmaticlabs/prysm@v1.4.4/endtoend/evaluators/data.go (about)

     1  package evaluators
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  
     7  	types "github.com/prysmaticlabs/eth2-types"
     8  	e2etypes "github.com/prysmaticlabs/prysm/endtoend/types"
     9  	eth "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
    10  	"google.golang.org/grpc"
    11  )
    12  
    13  const epochToCheck = 50 // must be more than 46 (32 hot states + 16 chkpt interval)
    14  
    15  // ColdStateCheckpoint checks data from the database using cold state storage.
    16  var ColdStateCheckpoint = e2etypes.Evaluator{
    17  	Name: "cold_state_assignments_from_epoch_%d",
    18  	Policy: func(currentEpoch types.Epoch) bool {
    19  		return currentEpoch == epochToCheck
    20  	},
    21  	Evaluation: checkColdStateCheckpoint,
    22  }
    23  
    24  // Checks the first node for an old checkpoint using cold state storage.
    25  func checkColdStateCheckpoint(conns ...*grpc.ClientConn) error {
    26  	ctx := context.Background()
    27  	client := eth.NewBeaconChainClient(conns[0])
    28  
    29  	for i := types.Epoch(0); i < epochToCheck; i++ {
    30  		res, err := client.ListValidatorAssignments(ctx, &eth.ListValidatorAssignmentsRequest{
    31  			QueryFilter: &eth.ListValidatorAssignmentsRequest_Epoch{Epoch: i},
    32  		})
    33  		if err != nil {
    34  			return err
    35  		}
    36  		// A simple check to ensure we received some data.
    37  		if res == nil || res.Epoch != i {
    38  			return errors.New("failed to return a validator assignments response for an old epoch " +
    39  				"using cold state storage from the database")
    40  		}
    41  	}
    42  
    43  	return nil
    44  }