client

package
v1.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 22, 2021 License: GPL-3.0 Imports: 58 Imported by: 11

Documentation

Overview

Package client represents a gRPC polling-based implementation of an eth2 validator client.

Index

Constants

This section is empty.

Variables

View Source
var (
	// ValidatorStatusesGaugeVec used to track validator statuses by public key.
	ValidatorStatusesGaugeVec = promauto.NewGaugeVec(
		prometheus.GaugeOpts{
			Namespace: "validator",
			Name:      "statuses",
			Help:      "validator statuses: 0 UNKNOWN, 1 DEPOSITED, 2 PENDING, 3 ACTIVE, 4 EXITING, 5 SLASHING, 6 EXITED",
		},
		[]string{
			"pubkey",
		},
	)
	// ValidatorAggSuccessVec used to count successful aggregations.
	ValidatorAggSuccessVec = promauto.NewCounterVec(
		prometheus.CounterOpts{
			Namespace: "validator",
			Name:      "successful_aggregations",
		},
		[]string{
			"pubkey",
		},
	)
	// ValidatorAggFailVec used to count failed aggregations.
	ValidatorAggFailVec = promauto.NewCounterVec(
		prometheus.CounterOpts{
			Namespace: "validator",
			Name:      "failed_aggregations",
		},
		[]string{
			"pubkey",
		},
	)
	// ValidatorProposeSuccessVec used to count successful proposals.
	ValidatorProposeSuccessVec = promauto.NewCounterVec(
		prometheus.CounterOpts{
			Namespace: "validator",
			Name:      "successful_proposals",
		},
		[]string{
			"pubkey",
		},
	)
	// ValidatorProposeFailVec used to count failed proposals.
	ValidatorProposeFailVec = promauto.NewCounterVec(
		prometheus.CounterOpts{
			Namespace: "validator",
			Name:      "failed_proposals",
		},
		[]string{
			"pubkey",
		},
	)
	// ValidatorProposeFailVecSlasher used to count failed proposals by slashing protection.
	ValidatorProposeFailVecSlasher = promauto.NewCounterVec(
		prometheus.CounterOpts{
			Name: "validator_proposals_rejected_total",
			Help: "Count the block proposals rejected by slashing protection.",
		},
		[]string{
			"pubkey",
		},
	)
	// ValidatorBalancesGaugeVec used to keep track of validator balances by public key.
	ValidatorBalancesGaugeVec = promauto.NewGaugeVec(
		prometheus.GaugeOpts{
			Namespace: "validator",
			Name:      "balance",
			Help:      "current validator balance.",
		},
		[]string{
			"pubkey",
		},
	)
	// ValidatorInclusionDistancesGaugeVec used to keep track of validator inclusion distances by public key.
	ValidatorInclusionDistancesGaugeVec = promauto.NewGaugeVec(
		prometheus.GaugeOpts{
			Namespace: "validator",
			Name:      "inclusion_distance",
			Help:      "Inclusion distance of last attestation.",
		},
		[]string{
			"pubkey",
		},
	)
	// ValidatorAttestedSlotsGaugeVec used to keep track of validator attested slots by public key.
	ValidatorAttestedSlotsGaugeVec = promauto.NewGaugeVec(
		prometheus.GaugeOpts{
			Namespace: "validator",
			Name:      "last_attested_slot",
			Help:      "Last attested slot.",
		},
		[]string{
			"pubkey",
		},
	)
	// ValidatorCorrectlyVotedSourceGaugeVec used to keep track of validator's accuracy on voting source by public key.
	ValidatorCorrectlyVotedSourceGaugeVec = promauto.NewGaugeVec(
		prometheus.GaugeOpts{
			Namespace: "validator",
			Name:      "correctly_voted_source",
			Help:      "True if correctly voted source in last attestation.",
		},
		[]string{
			"pubkey",
		},
	)
	// ValidatorCorrectlyVotedTargetGaugeVec used to keep track of validator's accuracy on voting target by public key.
	ValidatorCorrectlyVotedTargetGaugeVec = promauto.NewGaugeVec(
		prometheus.GaugeOpts{
			Namespace: "validator",
			Name:      "correctly_voted_target",
			Help:      "True if correctly voted target in last attestation.",
		},
		[]string{
			"pubkey",
		},
	)
	// ValidatorCorrectlyVotedHeadGaugeVec used to keep track of validator's accuracy on voting head by public key.
	ValidatorCorrectlyVotedHeadGaugeVec = promauto.NewGaugeVec(
		prometheus.GaugeOpts{
			Namespace: "validator",
			Name:      "correctly_voted_head",
			Help:      "True if correctly voted head in last attestation.",
		},
		[]string{
			"pubkey",
		},
	)
	// ValidatorAttestSuccessVec used to count successful attestations.
	ValidatorAttestSuccessVec = promauto.NewCounterVec(
		prometheus.CounterOpts{
			Namespace: "validator",
			Name:      "successful_attestations",
		},
		[]string{
			"pubkey",
		},
	)
	// ValidatorAttestFailVec used to count failed attestations.
	ValidatorAttestFailVec = promauto.NewCounterVec(
		prometheus.CounterOpts{
			Namespace: "validator",
			Name:      "failed_attestations",
		},
		[]string{
			"pubkey",
		},
	)
	// ValidatorAttestFailVecSlasher used to count failed attestations by slashing protection.
	ValidatorAttestFailVecSlasher = promauto.NewCounterVec(
		prometheus.CounterOpts{
			Name: "validator_attestations_rejected_total",
			Help: "Count the attestations rejected by slashing protection.",
		},
		[]string{
			"pubkey",
		},
	)
)

Functions

func ConstructDialOptions added in v1.0.0

func ConstructDialOptions(
	maxCallRecvMsgSize int,
	withCert string,
	grpcRetries uint,
	grpcRetryDelay time.Duration,
	extraOpts ...grpc.DialOption,
) []grpc.DialOption

ConstructDialOptions constructs a list of grpc dial options

func ProposeExit added in v1.0.0

func ProposeExit(
	ctx context.Context,
	validatorClient ethpb.BeaconNodeValidatorClient,
	nodeClient ethpb.NodeClient,
	signer signingFunc,
	pubKey []byte,
) error

ProposeExit performs a voluntary exit on a validator. The exit is signed by the validator before being sent to the beacon node for broadcasting.

Types

type Config

type Config struct {
	UseWeb                     bool
	LogValidatorBalances       bool
	EmitAccountMetrics         bool
	LogDutyCountDown           bool
	WalletInitializedFeed      *event.Feed
	GrpcRetriesFlag            uint
	GrpcRetryDelay             time.Duration
	GrpcMaxCallRecvMsgSizeFlag int
	Protector                  iface.Protector
	Endpoint                   string
	Validator                  Validator
	ValDB                      db.Database
	KeyManager                 keymanager.IKeymanager
	GraffitiFlag               string
	CertFlag                   string
	DataDir                    string
	GrpcHeadersFlag            string
	GraffitiStruct             *graffiti.Graffiti
}

Config for the validator service.

type FakeValidator added in v1.0.0

type FakeValidator struct {
	DoneCalled                        bool
	WaitForWalletInitializationCalled bool
	SlasherReadyCalled                bool
	NextSlotCalled                    bool
	UpdateDutiesCalled                bool
	UpdateProtectionsCalled           bool
	RoleAtCalled                      bool
	AttestToBlockHeadCalled           bool
	ProposeBlockCalled                bool
	LogValidatorGainsAndLossesCalled  bool
	SaveProtectionsCalled             bool
	DeleteProtectionCalled            bool
	SlotDeadlineCalled                bool
	WaitForChainStartCalled           int
	WaitForSyncCalled                 int
	WaitForActivationCalled           int
	CanonicalHeadSlotCalled           int
	ReceiveBlocksCalled               int
	RetryTillSuccess                  int
	ProposeBlockArg1                  uint64
	AttestToBlockHeadArg1             uint64
	RoleAtArg1                        uint64
	UpdateDutiesArg1                  uint64
	NextSlotRet                       <-chan types.Slot
	PublicKey                         string
	UpdateDutiesRet                   error
	RolesAtRet                        []ValidatorRole
	Balances                          map[[48]byte]uint64
	IndexToPubkeyMap                  map[uint64][48]byte
	PubkeyToIndexMap                  map[[48]byte]uint64
	PubkeysToStatusesMap              map[[48]byte]ethpb.ValidatorStatus
	Keymanager                        keymanager.IKeymanager
}

FakeValidator for mocking.

func (*FakeValidator) AllValidatorsAreExited added in v1.0.0

func (fv *FakeValidator) AllValidatorsAreExited(ctx context.Context) (bool, error)

AllValidatorsAreExited for mocking

func (*FakeValidator) BalancesByPubkeys added in v1.0.0

func (fv *FakeValidator) BalancesByPubkeys(_ context.Context) map[[48]byte]uint64

BalancesByPubkeys for mocking.

func (*FakeValidator) CanonicalHeadSlot added in v1.0.0

func (fv *FakeValidator) CanonicalHeadSlot(_ context.Context) (types.Slot, error)

CanonicalHeadSlot for mocking.

func (*FakeValidator) Done added in v1.0.0

func (fv *FakeValidator) Done()

Done for mocking.

func (*FakeValidator) GetKeymanager added in v1.2.0

func (fv *FakeValidator) GetKeymanager() keymanager.IKeymanager

GetKeymanager for mocking

func (*FakeValidator) IndicesToPubkeys added in v1.0.0

func (fv *FakeValidator) IndicesToPubkeys(_ context.Context) map[uint64][48]byte

IndicesToPubkeys for mocking.

func (*FakeValidator) LogAttestationsSubmitted added in v1.0.0

func (fv *FakeValidator) LogAttestationsSubmitted()

LogAttestationsSubmitted for mocking.

func (*FakeValidator) LogNextDutyTimeLeft added in v1.0.5

func (fv *FakeValidator) LogNextDutyTimeLeft(slot types.Slot) error

LogNextDutyCountDown for mocking.

func (*FakeValidator) LogValidatorGainsAndLosses added in v1.0.0

func (fv *FakeValidator) LogValidatorGainsAndLosses(_ context.Context, _ types.Slot) error

LogValidatorGainsAndLosses for mocking.

func (*FakeValidator) NextSlot added in v1.0.0

func (fv *FakeValidator) NextSlot() <-chan types.Slot

NextSlot for mocking.

func (*FakeValidator) ProposeBlock added in v1.0.0

func (fv *FakeValidator) ProposeBlock(_ context.Context, slot types.Slot, _ [48]byte)

ProposeBlock for mocking.

func (*FakeValidator) PubkeysToIndices added in v1.0.0

func (fv *FakeValidator) PubkeysToIndices(_ context.Context) map[[48]byte]uint64

PubkeysToIndices for mocking.

func (*FakeValidator) PubkeysToStatuses added in v1.0.0

func (fv *FakeValidator) PubkeysToStatuses(_ context.Context) map[[48]byte]ethpb.ValidatorStatus

PubkeysToStatuses for mocking.

func (*FakeValidator) ReceiveBlocks added in v1.1.0

func (fv *FakeValidator) ReceiveBlocks(ctx context.Context, connectionErrorChannel chan<- error)

ReceiveBlocks for mocking

func (*FakeValidator) ResetAttesterProtectionData added in v1.0.0

func (fv *FakeValidator) ResetAttesterProtectionData()

ResetAttesterProtectionData for mocking.

func (*FakeValidator) RolesAt added in v1.0.0

func (fv *FakeValidator) RolesAt(_ context.Context, slot types.Slot) (map[[48]byte][]ValidatorRole, error)

RolesAt for mocking.

func (*FakeValidator) SlasherReady added in v1.0.0

func (fv *FakeValidator) SlasherReady(_ context.Context) error

SlasherReady for mocking.

func (*FakeValidator) SlotDeadline added in v1.0.0

func (fv *FakeValidator) SlotDeadline(_ types.Slot) time.Time

SlotDeadline for mocking.

func (*FakeValidator) SubmitAggregateAndProof added in v1.0.0

func (fv *FakeValidator) SubmitAggregateAndProof(_ context.Context, _ types.Slot, _ [48]byte)

SubmitAggregateAndProof for mocking.

func (*FakeValidator) SubmitAttestation added in v1.0.0

func (fv *FakeValidator) SubmitAttestation(_ context.Context, slot types.Slot, _ [48]byte)

SubmitAttestation for mocking.

func (*FakeValidator) UpdateDomainDataCaches added in v1.0.0

func (fv *FakeValidator) UpdateDomainDataCaches(context.Context, types.Slot)

UpdateDomainDataCaches for mocking.

func (*FakeValidator) UpdateDuties added in v1.0.0

func (fv *FakeValidator) UpdateDuties(_ context.Context, slot types.Slot) error

UpdateDuties for mocking.

func (*FakeValidator) UpdateProtections added in v1.0.0

func (fv *FakeValidator) UpdateProtections(_ context.Context, _ uint64) error

UpdateProtections for mocking.

func (*FakeValidator) WaitForActivation added in v1.0.0

func (fv *FakeValidator) WaitForActivation(_ context.Context, _ <-chan struct{}) error

WaitForActivation for mocking.

func (*FakeValidator) WaitForChainStart added in v1.0.0

func (fv *FakeValidator) WaitForChainStart(_ context.Context) error

WaitForChainStart for mocking.

func (*FakeValidator) WaitForSync added in v1.0.0

func (fv *FakeValidator) WaitForSync(_ context.Context) error

WaitForSync for mocking.

func (*FakeValidator) WaitForWalletInitialization added in v1.0.0

func (fv *FakeValidator) WaitForWalletInitialization(_ context.Context) error

WaitForWalletInitialization for mocking.

type GenesisFetcher added in v1.0.0

type GenesisFetcher interface {
	GenesisInfo(ctx context.Context) (*ethpb.Genesis, error)
}

GenesisFetcher can retrieve genesis information such as the genesis time and the validator deposit contract address.

type SyncChecker added in v1.0.0

type SyncChecker interface {
	Syncing(ctx context.Context) (bool, error)
}

SyncChecker is able to determine if a beacon node is currently going through chain synchronization.

type Validator

type Validator interface {
	Done()
	WaitForChainStart(ctx context.Context) error
	WaitForSync(ctx context.Context) error
	WaitForActivation(ctx context.Context, accountsChangedChan <-chan struct{}) 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)
}

Validator interface defines the primary methods of a validator client.

type ValidatorRole added in v1.0.0

type ValidatorRole int8

ValidatorRole defines the validator role.

type ValidatorService

type ValidatorService struct {
	// contains filtered or unexported fields
}

ValidatorService represents a service to manage the validator client routine.

func NewValidatorService

func NewValidatorService(ctx context.Context, cfg *Config) (*ValidatorService, error)

NewValidatorService creates a new validator service for the service registry.

func (*ValidatorService) GenesisInfo added in v1.0.0

func (v *ValidatorService) GenesisInfo(ctx context.Context) (*ethpb.Genesis, error)

GenesisInfo queries the beacon node for the chain genesis info containing the genesis time along with the validator deposit contract address.

func (*ValidatorService) Start

func (v *ValidatorService) Start()

Start the validator service. Launches the main go routine for the validator client.

func (*ValidatorService) Status

func (v *ValidatorService) Status() error

Status of the validator service.

func (*ValidatorService) Stop

func (v *ValidatorService) Stop() error

Stop the validator service.

func (*ValidatorService) Syncing added in v1.0.0

func (v *ValidatorService) Syncing(ctx context.Context) (bool, error)

Syncing returns whether or not the beacon node is currently synchronizing the chain.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL