mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2024-12-23 11:57:18 +00:00
39c33b82ad
* quick lazy balance cache proof of concept * WIP refactoring to use lazy cache * updating tests to use functional opts * updating the rest of the tests, all passing * use mock stategen where possible reduces the number of test cases that require db setup * rename test opt method for clear link * Update beacon-chain/blockchain/process_block.go Co-authored-by: terence tsao <terence@prysmaticlabs.com> * test assumption that zerohash is in db * remove unused MockDB (mocking stategen instead) * fix cache bug, switch to sync.Mutex * improve test coverage for the state cache * uncomment failing genesis test for discussion * gofmt * remove unused Service struct member * cleanup unused func input * combining type declaration in signature * don't export the state cache constructor * work around blockchain deps w/ new file service_test brings in a ton of dependencies that make bazel rules for blockchain complex, so just sticking these mocks in their own file simplifies things. * gofmt * remove intentionally failing test this test established that the zero root can't be used to look up the state, resulting in a change in another PR to update stategen to use the GenesisState db method instead when the zero root is detected. * fixed error introduced by develop refresh * fix import ordering * appease deepsource * remove unused function * godoc comments on new requires/assert * defensive constructor per terence's PR comment * more differentiated balance cache metric names Co-authored-by: kasey <kasey@users.noreply.github.com> Co-authored-by: terence tsao <terence@prysmaticlabs.com> Co-authored-by: Raul Jordan <raul@prysmaticlabs.com> Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com>
147 lines
3.9 KiB
Go
147 lines
3.9 KiB
Go
package blockchain
|
|
|
|
import (
|
|
"github.com/prysmaticlabs/prysm/async/event"
|
|
"github.com/prysmaticlabs/prysm/beacon-chain/cache/depositcache"
|
|
statefeed "github.com/prysmaticlabs/prysm/beacon-chain/core/feed/state"
|
|
"github.com/prysmaticlabs/prysm/beacon-chain/db"
|
|
"github.com/prysmaticlabs/prysm/beacon-chain/forkchoice"
|
|
"github.com/prysmaticlabs/prysm/beacon-chain/operations/attestations"
|
|
"github.com/prysmaticlabs/prysm/beacon-chain/operations/slashings"
|
|
"github.com/prysmaticlabs/prysm/beacon-chain/operations/voluntaryexits"
|
|
"github.com/prysmaticlabs/prysm/beacon-chain/p2p"
|
|
"github.com/prysmaticlabs/prysm/beacon-chain/powchain"
|
|
"github.com/prysmaticlabs/prysm/beacon-chain/state"
|
|
"github.com/prysmaticlabs/prysm/beacon-chain/state/stategen"
|
|
ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1"
|
|
)
|
|
|
|
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.
|
|
func WithChainStartFetcher(f powchain.ChainStartFetcher) Option {
|
|
return func(s *Service) error {
|
|
s.cfg.ChainStartFetcher = f
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// WithDepositCache for deposit lifecycle after chain inclusion.
|
|
func WithDepositCache(c *depositcache.DepositCache) Option {
|
|
return func(s *Service) error {
|
|
s.cfg.DepositCache = c
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// 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
|
|
}
|
|
}
|
|
|
|
// 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
|
|
}
|
|
}
|
|
|
|
func withStateBalanceCache(c *stateBalanceCache) Option {
|
|
return func(s *Service) error {
|
|
s.justifiedBalances = c
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// 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
|
|
}
|
|
}
|