diff --git a/beacon-chain/sync/validate_beacon_attestation.go b/beacon-chain/sync/validate_beacon_attestation.go index 12bafa88ab9e..58495a8d31d6 100644 --- a/beacon-chain/sync/validate_beacon_attestation.go +++ b/beacon-chain/sync/validate_beacon_attestation.go @@ -105,35 +105,6 @@ func (s *Service) validateCommitteeIndexBeaconAttestation(ctx context.Context, p } } - preState, err := s.cfg.chain.AttestationTargetState(ctx, data.Target) - if err != nil { - tracing.AnnotateError(span, err) - return pubsub.ValidationIgnore, err - } - committee, err := helpers.BeaconCommitteeFromState(ctx, preState, att.GetData().Slot, committeeIndex) - if err != nil { - tracing.AnnotateError(span, err) - return pubsub.ValidationIgnore, err - } - - var singleAtt *eth.SingleAttestation - if att.Version() >= version.Electra { - singleAtt, ok = att.(*eth.SingleAttestation) - if !ok { - return pubsub.ValidationIgnore, fmt.Errorf("attestation has wrong type (expected %T, got %T)", ð.SingleAttestation{}, att) - } - att = singleAtt.ToAttestationElectra(committee) - } - - // Broadcast the unaggregated attestation on a feed to notify other services in the beacon node - // of a received unaggregated attestation. - s.cfg.attestationNotifier.OperationFeed().Send(&feed.Event{ - Type: operation.UnaggregatedAttReceived, - Data: &operation.UnAggregatedAttReceivedData{ - Attestation: att, - }, - }) - var validationRes pubsub.ValidationResult // Verify the block being voted and the processed state is in beaconDB and the block has passed validation if it's in the beaconDB. @@ -169,6 +140,26 @@ func (s *Service) validateCommitteeIndexBeaconAttestation(ctx context.Context, p return pubsub.ValidationReject, err } + preState, err := s.cfg.chain.AttestationTargetState(ctx, data.Target) + if err != nil { + tracing.AnnotateError(span, err) + return pubsub.ValidationIgnore, err + } + committee, err := helpers.BeaconCommitteeFromState(ctx, preState, att.GetData().Slot, committeeIndex) + if err != nil { + tracing.AnnotateError(span, err) + return pubsub.ValidationIgnore, err + } + + var singleAtt *eth.SingleAttestation + if att.Version() >= version.Electra { + singleAtt, ok = att.(*eth.SingleAttestation) + if !ok { + return pubsub.ValidationIgnore, fmt.Errorf("attestation has wrong type (expected %T, got %T)", ð.SingleAttestation{}, att) + } + att = singleAtt.ToAttestationElectra(committee) + } + validationRes, err = s.validateUnaggregatedAttTopic(ctx, att, preState, *msg.Topic) if validationRes != pubsub.ValidationAccept { return validationRes, err @@ -215,6 +206,15 @@ func (s *Service) validateCommitteeIndexBeaconAttestation(ctx context.Context, p }() } + // Broadcast the unaggregated attestation on a feed to notify other services in the beacon node + // of a received unaggregated attestation. + s.cfg.attestationNotifier.OperationFeed().Send(&feed.Event{ + Type: operation.UnaggregatedAttReceived, + Data: &operation.UnAggregatedAttReceivedData{ + Attestation: att, + }, + }) + s.setSeenCommitteeIndicesSlot(data.Slot, committeeIndex, att.GetAggregationBits()) msg.ValidatorData = att