diff --git a/slasher/detection/listeners.go b/slasher/detection/listeners.go index 89a519300fee..2bf2939a8e5a 100644 --- a/slasher/detection/listeners.go +++ b/slasher/detection/listeners.go @@ -26,13 +26,18 @@ func (ds *Service) detectIncomingBlocks(ctx context.Context, ch chan *ethpb.Sign defer sub.Unsubscribe() for { select { - case sblk := <-ch: + case signedBlock := <-ch: log.Debug("Running detection on block...") - sbh, err := signedBeaconBlockHeaderFromBlock(sblk) + signedBlkHdr, err := signedBeaconBlockHeaderFromBlock(signedBlock) if err != nil { - log.WithError(err) + log.WithError(err).Error("Could not get block header from block") + continue + } + slashing, err := ds.proposalsDetector.DetectDoublePropose(ctx, signedBlkHdr) + if err != nil { + log.WithError(err).Error("Could not perform detection on block header") + continue } - slashing, err := ds.proposalsDetector.DetectDoublePropose(ctx, sbh) ds.submitProposerSlashing(ctx, slashing) case <-sub.Err(): log.Error("Subscriber closed, exiting goroutine") @@ -80,7 +85,7 @@ func (ds *Service) detectIncomingAttestations(ctx context.Context, ch chan *ethp func signedBeaconBlockHeaderFromBlock(block *ethpb.SignedBeaconBlock) (*ethpb.SignedBeaconBlockHeader, error) { bodyRoot, err := ssz.HashTreeRoot(block.Block.Body) if err != nil { - return nil, errors.Wrap(err, "Failed to get signing root of block") + return nil, errors.Wrap(err, "failed to get body root of block") } return ðpb.SignedBeaconBlockHeader{ Header: ðpb.BeaconBlockHeader{ diff --git a/slasher/detection/proposals/detector.go b/slasher/detection/proposals/detector.go index 7a6820089671..9fa058ca6dfb 100644 --- a/slasher/detection/proposals/detector.go +++ b/slasher/detection/proposals/detector.go @@ -32,17 +32,16 @@ func (dd *ProposeDetector) DetectDoublePropose( ) (*ethpb.ProposerSlashing, error) { ctx, span := trace.StartSpan(ctx, "detector.DetectDoublePropose") defer span.End() - bha, err := dd.slasherDB.BlockHeaders(ctx, incomingBlk.Header.Slot, incomingBlk.Header.ProposerIndex) + headersFromIdx, err := dd.slasherDB.BlockHeaders(ctx, incomingBlk.Header.Slot, incomingBlk.Header.ProposerIndex) if err != nil { return nil, err } - for _, bh := range bha { - if bytes.Equal(bh.Signature, incomingBlk.Signature) { + for _, blockHeader := range headersFromIdx { + if bytes.Equal(blockHeader.Signature, incomingBlk.Signature) { continue } - ps := ðpb.ProposerSlashing{Header_1: incomingBlk, Header_2: bh} - err := dd.slasherDB.SaveProposerSlashing(ctx, status.Active, ps) - if err != nil { + ps := ðpb.ProposerSlashing{Header_1: incomingBlk, Header_2: blockHeader} + if err := dd.slasherDB.SaveProposerSlashing(ctx, status.Active, ps); err != nil { return nil, err } return ps, nil diff --git a/slasher/detection/service.go b/slasher/detection/service.go index 683e869b5d38..657a1d719324 100644 --- a/slasher/detection/service.go +++ b/slasher/detection/service.go @@ -87,13 +87,12 @@ func (ds *Service) Start() { // The detection service runs detection on all historical // chain data since genesis. - // TODO(#5030): Re-enable after issue is resolved. + go ds.detectHistoricalChainData(ds.ctx) // We subscribe to incoming blocks from the beacon node via // our gRPC client to keep detecting slashable offenses. go ds.detectIncomingBlocks(ds.ctx, ds.blocksChan) go ds.detectIncomingAttestations(ds.ctx, ds.attsChan) - go ds.detectHistoricalChainData(ds.ctx) } func (ds *Service) detectHistoricalChainData(ctx context.Context) {