Skip to content

Commit 961d8e1

Browse files
authored
Don't use MaxCover for Electra on-chain aggregates (#14925)
* Don't use MaxCover for Electra on-chain aggregates * changelog <3
1 parent d396a99 commit 961d8e1

File tree

3 files changed

+27
-13
lines changed

3 files changed

+27
-13
lines changed

beacon-chain/rpc/prysm/v1alpha1/validator/proposer_attestations.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ package validator
22

33
import (
44
"bytes"
5+
"cmp"
56
"context"
67
"fmt"
8+
"slices"
79
"sort"
810

911
"github.com/pkg/errors"
@@ -277,7 +279,14 @@ func (a proposerAtts) sortOnChainAggregates() (proposerAtts, error) {
277279
return a, nil
278280
}
279281

280-
return a.sortByProfitabilityUsingMaxCover()
282+
// Sort by slot first, then by bit count.
283+
slices.SortFunc(a, func(a, b ethpb.Att) int {
284+
return cmp.Or(
285+
-cmp.Compare(a.GetData().Slot, b.GetData().Slot),
286+
-cmp.Compare(a.GetAggregationBits().Count(), b.GetAggregationBits().Count()))
287+
})
288+
289+
return a, nil
281290
}
282291

283292
// Separate attestations by slot, as slot number takes higher precedence when sorting.

beacon-chain/rpc/prysm/v1alpha1/validator/proposer_attestations_test.go

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -794,17 +794,19 @@ func Test_packAttestations_ElectraOnChainAggregates(t *testing.T) {
794794

795795
require.NoError(t, st.SetSlot(params.BeaconConfig().SlotsPerEpoch+1))
796796

797-
atts, err := s.packAttestations(ctx, st, params.BeaconConfig().SlotsPerEpoch)
798-
require.NoError(t, err)
799-
require.Equal(t, 6, len(atts))
800-
assert.Equal(t, true,
801-
atts[0].GetAggregationBits().Count() >= atts[1].GetAggregationBits().Count() &&
802-
atts[1].GetAggregationBits().Count() >= atts[2].GetAggregationBits().Count() &&
803-
atts[2].GetAggregationBits().Count() >= atts[3].GetAggregationBits().Count() &&
804-
atts[3].GetAggregationBits().Count() >= atts[4].GetAggregationBits().Count() &&
805-
atts[4].GetAggregationBits().Count() >= atts[5].GetAggregationBits().Count(),
806-
"on-chain aggregates are not sorted by aggregation bit count",
807-
)
797+
t.Run("ok", func(t *testing.T) {
798+
atts, err := s.packAttestations(ctx, st, params.BeaconConfig().SlotsPerEpoch)
799+
require.NoError(t, err)
800+
require.Equal(t, 6, len(atts))
801+
assert.Equal(t, true,
802+
atts[0].GetAggregationBits().Count() >= atts[1].GetAggregationBits().Count() &&
803+
atts[1].GetAggregationBits().Count() >= atts[2].GetAggregationBits().Count() &&
804+
atts[2].GetAggregationBits().Count() >= atts[3].GetAggregationBits().Count() &&
805+
atts[3].GetAggregationBits().Count() >= atts[4].GetAggregationBits().Count() &&
806+
atts[4].GetAggregationBits().Count() >= atts[5].GetAggregationBits().Count(),
807+
"on-chain aggregates are not sorted by aggregation bit count",
808+
)
809+
})
808810

809811
t.Run("slot takes precedence", func(t *testing.T) {
810812
moreRecentAtt := &ethpb.AttestationElectra{
@@ -814,7 +816,7 @@ func Test_packAttestations_ElectraOnChainAggregates(t *testing.T) {
814816
Signature: sig.Marshal(),
815817
}
816818
require.NoError(t, pool.SaveUnaggregatedAttestations([]ethpb.Att{moreRecentAtt}))
817-
atts, err = s.packAttestations(ctx, st, params.BeaconConfig().SlotsPerEpoch)
819+
atts, err := s.packAttestations(ctx, st, params.BeaconConfig().SlotsPerEpoch)
818820
require.NoError(t, err)
819821
require.Equal(t, 7, len(atts))
820822
assert.Equal(t, true, atts[0].GetData().Slot == 1)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
### Changed
2+
3+
- Don't use MaxCover for Electra on-chain attestations.

0 commit comments

Comments
 (0)