prysm-pulse/beacon-chain/rpc/validator/proposer_utils.go
Victor Farazdagi c8b91ba7b0
Attestation proposing: more tests (#7267)
* 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
2020-09-18 17:16:31 +00:00

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
}