mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2025-01-05 17:22:18 +00:00
c8b91ba7b0
* refactors test * Merge branch 'master' into optimize-proposals * more filtering and sorting proposer atts * Merge branch 'master' into optimize-att-proposer * Merge branch 'master' into optimize-att-proposer * revert * Terence's suggestion on naming
52 lines
1.7 KiB
Go
52 lines
1.7 KiB
Go
package validator
|
|
|
|
import (
|
|
"context"
|
|
"sort"
|
|
|
|
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
|
|
"github.com/prysmaticlabs/prysm/beacon-chain/core/blocks"
|
|
stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state"
|
|
"github.com/prysmaticlabs/prysm/shared/params"
|
|
)
|
|
|
|
type proposerAtts []*ethpb.Attestation
|
|
|
|
// filter separates attestation list into two groups: valid and invalid attestations.
|
|
// The first group passes the all the required checks for attestation to be considered for proposing.
|
|
// And attestations from the second group should be deleted.
|
|
func (al proposerAtts) filter(ctx context.Context, state *stateTrie.BeaconState) (proposerAtts, proposerAtts) {
|
|
validAtts := make([]*ethpb.Attestation, 0, len(al))
|
|
invalidAtts := make([]*ethpb.Attestation, 0, len(al))
|
|
for _, att := range al {
|
|
if _, err := blocks.ProcessAttestation(ctx, state, att); err == nil {
|
|
validAtts = append(validAtts, att)
|
|
continue
|
|
}
|
|
invalidAtts = append(invalidAtts, att)
|
|
}
|
|
return validAtts, invalidAtts
|
|
}
|
|
|
|
// sortByProfitability orders attestations by highest slot and by highest aggregation bit count.
|
|
func (al proposerAtts) sortByProfitability() proposerAtts {
|
|
if len(al) < 2 {
|
|
return al
|
|
}
|
|
sort.Slice(al, func(i, j int) bool {
|
|
if al[i].Data.Slot == al[j].Data.Slot {
|
|
return al[i].AggregationBits.Count() > al[j].AggregationBits.Count()
|
|
}
|
|
return al[i].Data.Slot > al[j].Data.Slot
|
|
})
|
|
return al
|
|
}
|
|
|
|
// limitToMaxAttestations limits attestations to maximum attestations per block.
|
|
func (al proposerAtts) limitToMaxAttestations() proposerAtts {
|
|
if uint64(len(al)) > params.BeaconConfig().MaxAttestations {
|
|
return al[:params.BeaconConfig().MaxAttestations]
|
|
}
|
|
return al
|
|
}
|