package iface import ( "context" "errors" "time" types "github.com/prysmaticlabs/eth2-types" "github.com/prysmaticlabs/prysm/validator/keymanager" ) // ErrConnectionIssue represents a connection problem. var ErrConnectionIssue = errors.New("could not connect") // ValidatorRole defines the validator role. type ValidatorRole int8 const ( // RoleUnknown means that the role of the validator cannot be determined. RoleUnknown ValidatorRole = iota // RoleAttester means that the validator should submit an attestation. RoleAttester // RoleAttester means that the validator should propose a block. RoleProposer // RoleAttester means that the validator should submit an aggregation and proof. RoleAggregator ) // Validator interface defines the primary methods of a validator client. type Validator interface { Done() WaitForChainStart(ctx context.Context) error WaitForSync(ctx context.Context) error WaitForActivation(ctx context.Context) error SlasherReady(ctx context.Context) error CanonicalHeadSlot(ctx context.Context) (types.Slot, error) NextSlot() <-chan types.Slot SlotDeadline(slot types.Slot) time.Time LogValidatorGainsAndLosses(ctx context.Context, slot types.Slot) error UpdateDuties(ctx context.Context, slot types.Slot) error RolesAt(ctx context.Context, slot types.Slot) (map[[48]byte][]ValidatorRole, error) // validator pubKey -> roles SubmitAttestation(ctx context.Context, slot types.Slot, pubKey [48]byte) ProposeBlock(ctx context.Context, slot types.Slot, pubKey [48]byte) SubmitAggregateAndProof(ctx context.Context, slot types.Slot, pubKey [48]byte) LogAttestationsSubmitted() LogNextDutyTimeLeft(slot types.Slot) error UpdateDomainDataCaches(ctx context.Context, slot types.Slot) WaitForWalletInitialization(ctx context.Context) error AllValidatorsAreExited(ctx context.Context) (bool, error) GetKeymanager() keymanager.IKeymanager ReceiveBlocks(ctx context.Context, connectionErrorChannel chan<- error) }