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, ð.ListValidatorAssignmentsRequest{ 31 QueryFilter: ð.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 }