diff --git a/beacon/blockchain/deposit.go b/beacon/blockchain/deposit.go index fee4dfb7cb..5cbd221873 100644 --- a/beacon/blockchain/deposit.go +++ b/beacon/blockchain/deposit.go @@ -78,7 +78,7 @@ func (s *Service[ ) } - if err = s.depositStore.EnqueueDeposits(deposits); err != nil { + if err = s.storageBackend.DepositStore().EnqueueDeposits(deposits); err != nil { s.logger.Error("Failed to store deposits", "error", err) s.failedBlocksMu.Lock() s.failedBlocks[blockNum] = struct{}{} diff --git a/beacon/blockchain/finalize_block.go b/beacon/blockchain/finalize_block.go index a749cc1dd0..b9642c191b 100644 --- a/beacon/blockchain/finalize_block.go +++ b/beacon/blockchain/finalize_block.go @@ -97,7 +97,7 @@ func (s *Service[ // store the finalized block in the KVStore. slot := blk.GetSlot() - if err = s.blockStore.Set(blk); err != nil { + if err = s.storageBackend.BlockStore().Set(blk); err != nil { s.logger.Error( "failed to store block", "slot", slot, "error", err, ) diff --git a/beacon/blockchain/init_chain.go b/beacon/blockchain/init_chain.go index 15c68a9bb7..b56f40e68f 100644 --- a/beacon/blockchain/init_chain.go +++ b/beacon/blockchain/init_chain.go @@ -31,10 +31,7 @@ import ( // state. func (s *Service[ _, _, _, _, _, _, GenesisT, _, _, -]) ProcessGenesisData( - ctx context.Context, - bytes []byte, -) (transition.ValidatorUpdates, error) { +]) ProcessGenesisData(ctx context.Context, bytes []byte) (transition.ValidatorUpdates, error) { genesisData := *new(GenesisT) if err := json.Unmarshal(bytes, &genesisData); err != nil { s.logger.Error("Failed to unmarshal genesis data", "error", err) diff --git a/beacon/blockchain/service.go b/beacon/blockchain/service.go index edbccaedbc..499cf212be 100644 --- a/beacon/blockchain/service.go +++ b/beacon/blockchain/service.go @@ -48,23 +48,10 @@ type Service[ ] struct { // homeDir is the directory for config and data" homeDir string - // storageBackend represents the backend storage for beacon states and - // associated sidecars. - storageBackend StorageBackend[ - AvailabilityStoreT, - BeaconStateT, - DepositStoreT, - ] - blobProcessor da.BlobProcessor[ - AvailabilityStoreT, - ConsensusSidecarsT, - BlobSidecarsT, - ] - // store is the block store for the service. - // TODO: Remove this and use the block store from the storage backend. - blockStore BlockStoreT - // depositStore is the deposit store that stores deposits. - depositStore deposit.Store + // storageBackend represents the backend storage for not state-enforced data. + storageBackend StorageBackend[AvailabilityStoreT, BeaconStateT, BlockStoreT, DepositStoreT] + // blobProcessor is used for processing sidecars. + blobProcessor da.BlobProcessor[AvailabilityStoreT, ConsensusSidecarsT, BlobSidecarsT] // depositContract is the contract interface for interacting with the // deposit contract. depositContract deposit.Contract @@ -86,11 +73,7 @@ type Service[ // localBuilder is a local builder for constructing new beacon states. localBuilder LocalBuilder[BeaconStateT] // stateProcessor is the state processor for beacon blocks and states. - stateProcessor StateProcessor[ - BeaconBlockT, - BeaconStateT, - *transition.Context, - ] + stateProcessor StateProcessor[BeaconBlockT, BeaconStateT, *transition.Context] // metrics is the metrics for the service. metrics *chainMetrics // optimisticPayloadBuilds is a flag used when the optimistic payload @@ -113,49 +96,28 @@ func NewService[ BlobSidecarsT BlobSidecars[BlobSidecarsT], ]( homeDir string, - storageBackend StorageBackend[ - AvailabilityStoreT, - BeaconStateT, - DepositStoreT, - ], - blobProcessor da.BlobProcessor[ - AvailabilityStoreT, - ConsensusSidecarsT, - BlobSidecarsT, - ], - blockStore BlockStoreT, - depositStore deposit.Store, + storageBackend StorageBackend[AvailabilityStoreT, BeaconStateT, BlockStoreT, DepositStoreT], + blobProcessor da.BlobProcessor[AvailabilityStoreT, ConsensusSidecarsT, BlobSidecarsT], depositContract deposit.Contract, eth1FollowDistance math.U64, logger log.Logger, chainSpec chain.ChainSpec, executionEngine ExecutionEngine, localBuilder LocalBuilder[BeaconStateT], - stateProcessor StateProcessor[ - BeaconBlockT, - BeaconStateT, - *transition.Context, - ], + stateProcessor StateProcessor[BeaconBlockT, BeaconStateT, *transition.Context], telemetrySink TelemetrySink, optimisticPayloadBuilds bool, ) *Service[ - AvailabilityStoreT, DepositStoreT, - ConsensusBlockT, BeaconBlockT, - BeaconStateT, BlockStoreT, - GenesisT, - ConsensusSidecarsT, BlobSidecarsT, + AvailabilityStoreT, DepositStoreT, ConsensusBlockT, BeaconBlockT, BeaconStateT, + BlockStoreT, GenesisT, ConsensusSidecarsT, BlobSidecarsT, ] { return &Service[ - AvailabilityStoreT, DepositStoreT, - ConsensusBlockT, BeaconBlockT, - BeaconStateT, BlockStoreT, - GenesisT, ConsensusSidecarsT, BlobSidecarsT, + AvailabilityStoreT, DepositStoreT, ConsensusBlockT, BeaconBlockT, + BeaconStateT, BlockStoreT, GenesisT, ConsensusSidecarsT, BlobSidecarsT, ]{ homeDir: homeDir, storageBackend: storageBackend, blobProcessor: blobProcessor, - blockStore: blockStore, - depositStore: depositStore, depositContract: depositContract, eth1FollowDistance: eth1FollowDistance, failedBlocks: make(map[math.Slot]struct{}), diff --git a/beacon/blockchain/types.go b/beacon/blockchain/types.go index 9fdc42cca2..daf5e16177 100644 --- a/beacon/blockchain/types.go +++ b/beacon/blockchain/types.go @@ -202,6 +202,7 @@ type StateProcessor[ type StorageBackend[ AvailabilityStoreT any, BeaconStateT any, + BlockStoreT any, DepositStoreT any, ] interface { // AvailabilityStore returns the availability store for the given context. @@ -210,6 +211,8 @@ type StorageBackend[ StateFromContext(context.Context) BeaconStateT // DepositStore retrieves the deposit store. DepositStore() DepositStoreT + // BlockStore retrieves the block store. + BlockStore() BlockStoreT } // TelemetrySink is an interface for sending metrics to a telemetry backend. diff --git a/cmd/beacond/defaults.go b/cmd/beacond/defaults.go index e70745e508..df9491f97e 100644 --- a/cmd/beacond/defaults.go +++ b/cmd/beacond/defaults.go @@ -43,7 +43,7 @@ func DefaultComponents() []any { *AvailabilityStore, *ConsensusBlock, *BeaconBlock, *BeaconState, *BeaconStateMarshallable, - *BlobSidecar, *BlobSidecars, *ConsensusSidecars, *BlockStore, + *BlobSidecar, *BlobSidecars, *ConsensusSidecars, *DepositStore, *DepositContract, *Genesis, *KVStore, *Logger, *StorageBackend, *BlockStore, diff --git a/node-core/components/chain_service.go b/node-core/components/chain_service.go index 33bb91354b..3beb6faa3f 100644 --- a/node-core/components/chain_service.go +++ b/node-core/components/chain_service.go @@ -43,7 +43,7 @@ type ChainServiceInput[ BeaconStateT any, StorageBackendT any, LoggerT any, - BeaconBlockStoreT BlockStore[BeaconBlockT], + BlockStoreT BlockStore[BeaconBlockT], DepositStoreT any, DepositContractT any, AvailabilityStoreT any, @@ -52,24 +52,18 @@ type ChainServiceInput[ ] struct { depinject.In - AppOpts config.AppOptions - ChainSpec chain.ChainSpec - Cfg *config.Config - EngineClient *client.EngineClient - ExecutionEngine *engine.Engine[PayloadID] - LocalBuilder LocalBuilder[BeaconStateT] - Logger LoggerT - Signer crypto.BLSSigner - StateProcessor StateProcessor[ - BeaconBlockT, BeaconStateT, *Context, - ] - StorageBackend StorageBackendT - BlobProcessor BlobProcessor[ - AvailabilityStoreT, ConsensusSidecarsT, BlobSidecarsT, - ] + AppOpts config.AppOptions + ChainSpec chain.ChainSpec + Cfg *config.Config + EngineClient *client.EngineClient + ExecutionEngine *engine.Engine[PayloadID] + LocalBuilder LocalBuilder[BeaconStateT] + Logger LoggerT + Signer crypto.BLSSigner + StateProcessor StateProcessor[BeaconBlockT, BeaconStateT, *Context] + StorageBackend StorageBackendT + BlobProcessor BlobProcessor[AvailabilityStoreT, ConsensusSidecarsT, BlobSidecarsT] TelemetrySink *metrics.TelemetrySink - BlockStore BeaconBlockStoreT - DepositStore DepositStoreT BeaconDepositContract DepositContractT } @@ -83,29 +77,21 @@ func ProvideChainService[ BlobSidecarT BlobSidecar, BlobSidecarsT BlobSidecars[BlobSidecarsT, BlobSidecarT], ConsensusSidecarsT da.ConsensusSidecars[BlobSidecarsT], - BlockStoreT any, DepositStoreT DepositStore, DepositContractT deposit.Contract, GenesisT Genesis, KVStoreT any, LoggerT log.AdvancedLogger[LoggerT], - StorageBackendT StorageBackend[ - AvailabilityStoreT, BeaconStateT, BlockStoreT, DepositStoreT, - ], - BeaconBlockStoreT BlockStore[BeaconBlockT], + StorageBackendT StorageBackend[AvailabilityStoreT, BeaconStateT, BlockStoreT, DepositStoreT], + BlockStoreT BlockStore[BeaconBlockT], ]( in ChainServiceInput[ - BeaconBlockT, BeaconStateT, - StorageBackendT, LoggerT, - BeaconBlockStoreT, DepositStoreT, DepositContractT, - AvailabilityStoreT, ConsensusSidecarsT, BlobSidecarsT, + BeaconBlockT, BeaconStateT, StorageBackendT, LoggerT, BlockStoreT, DepositStoreT, + DepositContractT, AvailabilityStoreT, ConsensusSidecarsT, BlobSidecarsT, ], ) *blockchain.Service[ - AvailabilityStoreT, DepositStoreT, - ConsensusBlockT, BeaconBlockT, - BeaconStateT, BeaconBlockStoreT, - GenesisT, - ConsensusSidecarsT, BlobSidecarsT, + AvailabilityStoreT, DepositStoreT, ConsensusBlockT, BeaconBlockT, BeaconStateT, + BlockStoreT, GenesisT, ConsensusSidecarsT, BlobSidecarsT, ] { return blockchain.NewService[ AvailabilityStoreT, @@ -113,14 +99,12 @@ func ProvideChainService[ ConsensusBlockT, BeaconBlockT, BeaconStateT, - BeaconBlockStoreT, + BlockStoreT, GenesisT, ]( cast.ToString(in.AppOpts.Get(flags.FlagHome)), in.StorageBackend, in.BlobProcessor, - in.BlockStore, - in.DepositStore, in.BeaconDepositContract, math.U64(in.ChainSpec.Eth1FollowDistance()), in.Logger.With("service", "blockchain"),