2021-10-18 17:48:05 +00:00
|
|
|
package blockchain
|
|
|
|
|
|
|
|
import (
|
2023-03-17 18:52:56 +00:00
|
|
|
"github.com/prysmaticlabs/prysm/v4/async/event"
|
|
|
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/cache"
|
|
|
|
statefeed "github.com/prysmaticlabs/prysm/v4/beacon-chain/core/feed/state"
|
|
|
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/db"
|
2023-11-21 18:44:38 +00:00
|
|
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/db/filesystem"
|
2023-03-17 18:52:56 +00:00
|
|
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/execution"
|
|
|
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/forkchoice"
|
|
|
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/operations/attestations"
|
|
|
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/operations/blstoexec"
|
|
|
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/operations/slashings"
|
|
|
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/operations/voluntaryexits"
|
|
|
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/p2p"
|
2023-05-03 04:34:01 +00:00
|
|
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/startup"
|
2023-03-17 18:52:56 +00:00
|
|
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/state"
|
|
|
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/state/stategen"
|
|
|
|
ethpb "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1"
|
2021-10-18 17:48:05 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type Option func(s *Service) error
|
|
|
|
|
|
|
|
// WithMaxGoroutines to control resource use of the blockchain service.
|
|
|
|
func WithMaxGoroutines(x int) Option {
|
|
|
|
return func(s *Service) error {
|
|
|
|
s.cfg.MaxRoutines = x
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithWeakSubjectivityCheckpoint for checkpoint sync.
|
|
|
|
func WithWeakSubjectivityCheckpoint(c *ethpb.Checkpoint) Option {
|
|
|
|
return func(s *Service) error {
|
|
|
|
s.cfg.WeakSubjectivityCheckpt = c
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithDatabase for head access.
|
|
|
|
func WithDatabase(beaconDB db.HeadAccessDatabase) Option {
|
|
|
|
return func(s *Service) error {
|
|
|
|
s.cfg.BeaconDB = beaconDB
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithChainStartFetcher to retrieve information about genesis.
|
2022-08-01 14:43:47 +00:00
|
|
|
func WithChainStartFetcher(f execution.ChainStartFetcher) Option {
|
2021-10-18 17:48:05 +00:00
|
|
|
return func(s *Service) error {
|
|
|
|
s.cfg.ChainStartFetcher = f
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-03-07 19:47:08 +00:00
|
|
|
// WithExecutionEngineCaller to call execution engine.
|
2022-08-01 14:43:47 +00:00
|
|
|
func WithExecutionEngineCaller(c execution.EngineCaller) Option {
|
2022-03-07 19:47:08 +00:00
|
|
|
return func(s *Service) error {
|
|
|
|
s.cfg.ExecutionEngineCaller = c
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-10-18 17:48:05 +00:00
|
|
|
// WithDepositCache for deposit lifecycle after chain inclusion.
|
2023-09-07 03:19:32 +00:00
|
|
|
func WithDepositCache(c cache.DepositCache) Option {
|
2021-10-18 17:48:05 +00:00
|
|
|
return func(s *Service) error {
|
|
|
|
s.cfg.DepositCache = c
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-12-22 18:47:51 +00:00
|
|
|
// WithPayloadIDCache for payload ID cache.
|
|
|
|
func WithPayloadIDCache(c *cache.PayloadIDCache) Option {
|
2022-04-06 23:36:52 +00:00
|
|
|
return func(s *Service) error {
|
2023-12-22 18:47:51 +00:00
|
|
|
s.cfg.PayloadIDCache = c
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithTrackedValidatorsCache for tracked validators cache.
|
|
|
|
func WithTrackedValidatorsCache(c *cache.TrackedValidatorsCache) Option {
|
|
|
|
return func(s *Service) error {
|
|
|
|
s.cfg.TrackedValidatorsCache = c
|
2022-04-06 23:36:52 +00:00
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-10-18 17:48:05 +00:00
|
|
|
// WithAttestationPool for attestation lifecycle after chain inclusion.
|
|
|
|
func WithAttestationPool(p attestations.Pool) Option {
|
|
|
|
return func(s *Service) error {
|
|
|
|
s.cfg.AttPool = p
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithExitPool for exits lifecycle after chain inclusion.
|
|
|
|
func WithExitPool(p voluntaryexits.PoolManager) Option {
|
|
|
|
return func(s *Service) error {
|
|
|
|
s.cfg.ExitPool = p
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithSlashingPool for slashings lifecycle after chain inclusion.
|
|
|
|
func WithSlashingPool(p slashings.PoolManager) Option {
|
|
|
|
return func(s *Service) error {
|
|
|
|
s.cfg.SlashingPool = p
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-02 06:04:45 +00:00
|
|
|
// WithBLSToExecPool to keep track of BLS to Execution address changes.
|
|
|
|
func WithBLSToExecPool(p blstoexec.PoolManager) Option {
|
|
|
|
return func(s *Service) error {
|
|
|
|
s.cfg.BLSToExecPool = p
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-10-18 17:48:05 +00:00
|
|
|
// WithP2PBroadcaster to broadcast messages after appropriate processing.
|
|
|
|
func WithP2PBroadcaster(p p2p.Broadcaster) Option {
|
|
|
|
return func(s *Service) error {
|
|
|
|
s.cfg.P2p = p
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithStateNotifier to notify an event feed of state processing.
|
|
|
|
func WithStateNotifier(n statefeed.Notifier) Option {
|
|
|
|
return func(s *Service) error {
|
|
|
|
s.cfg.StateNotifier = n
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithForkChoiceStore to update an optimized fork-choice representation.
|
|
|
|
func WithForkChoiceStore(f forkchoice.ForkChoicer) Option {
|
|
|
|
return func(s *Service) error {
|
|
|
|
s.cfg.ForkChoiceStore = f
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithAttestationService for dealing with attestation lifecycles.
|
|
|
|
func WithAttestationService(srv *attestations.Service) Option {
|
|
|
|
return func(s *Service) error {
|
|
|
|
s.cfg.AttService = srv
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithStateGen for managing state regeneration and replay.
|
|
|
|
func WithStateGen(g *stategen.State) Option {
|
|
|
|
return func(s *Service) error {
|
|
|
|
s.cfg.StateGen = g
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithSlasherAttestationsFeed to forward attestations into slasher if enabled.
|
|
|
|
func WithSlasherAttestationsFeed(f *event.Feed) Option {
|
|
|
|
return func(s *Service) error {
|
|
|
|
s.cfg.SlasherAttestationsFeed = f
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
2021-11-06 13:45:16 +00:00
|
|
|
|
|
|
|
// WithFinalizedStateAtStartUp to store finalized state at start up.
|
|
|
|
func WithFinalizedStateAtStartUp(st state.BeaconState) Option {
|
|
|
|
return func(s *Service) error {
|
|
|
|
s.cfg.FinalizedStateAtStartUp = st
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
2023-05-03 04:34:01 +00:00
|
|
|
|
2023-12-13 15:54:00 +00:00
|
|
|
// WithClockSynchronizer sets the ClockSetter/ClockWaiter values to be used by services that need to block until
|
2023-11-21 18:44:38 +00:00
|
|
|
// the genesis timestamp is known (ClockWaiter) or which determine the genesis timestamp (ClockSetter).
|
2023-05-03 04:34:01 +00:00
|
|
|
func WithClockSynchronizer(gs *startup.ClockSynchronizer) Option {
|
|
|
|
return func(s *Service) error {
|
|
|
|
s.clockSetter = gs
|
|
|
|
s.clockWaiter = gs
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
2023-06-16 13:47:19 +00:00
|
|
|
|
2023-11-21 18:44:38 +00:00
|
|
|
// WithSyncComplete sets a channel that is used to notify blockchain service that the node has synced to head.
|
2023-06-16 13:47:19 +00:00
|
|
|
func WithSyncComplete(c chan struct{}) Option {
|
|
|
|
return func(s *Service) error {
|
|
|
|
s.syncComplete = c
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
2023-11-21 18:44:38 +00:00
|
|
|
|
|
|
|
// WithBlobStorage sets the blob storage backend for the blockchain service.
|
|
|
|
func WithBlobStorage(b *filesystem.BlobStorage) Option {
|
|
|
|
return func(s *Service) error {
|
|
|
|
s.blobStorage = b
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|