@@ -22,6 +22,7 @@ import (
2222 "errors"
2323 "fmt"
2424 "math/big"
25+ "sort"
2526
2627 "github.com/ethereum/go-ethereum/common"
2728 "github.com/ethereum/go-ethereum/core/types"
@@ -30,7 +31,6 @@ import (
3031 "github.com/ethereum/go-ethereum/log"
3132 "github.com/ethereum/go-ethereum/params"
3233 "github.com/ethereum/go-ethereum/rlp"
33- "golang.org/x/exp/slices"
3434)
3535
3636// ReadCanonicalHash retrieves the hash assigned to a canonical block number.
@@ -836,13 +836,23 @@ type badBlock struct {
836836 Body * types.Body
837837}
838838
839+ // badBlockList implements the sort interface to allow sorting a list of
840+ // bad blocks by their number in the reverse order.
841+ type badBlockList []* badBlock
842+
843+ func (s badBlockList ) Len () int { return len (s ) }
844+ func (s badBlockList ) Less (i , j int ) bool {
845+ return s [i ].Header .Number .Uint64 () < s [j ].Header .Number .Uint64 ()
846+ }
847+ func (s badBlockList ) Swap (i , j int ) { s [i ], s [j ] = s [j ], s [i ] }
848+
839849// ReadBadBlock retrieves the bad block with the corresponding block hash.
840850func ReadBadBlock (db ethdb.Reader , hash common.Hash ) * types.Block {
841851 blob , err := db .Get (badBlockKey )
842852 if err != nil {
843853 return nil
844854 }
845- var badBlocks [] * badBlock
855+ var badBlocks badBlockList
846856 if err := rlp .DecodeBytes (blob , & badBlocks ); err != nil {
847857 return nil
848858 }
@@ -861,7 +871,7 @@ func ReadAllBadBlocks(db ethdb.Reader) []*types.Block {
861871 if err != nil {
862872 return nil
863873 }
864- var badBlocks [] * badBlock
874+ var badBlocks badBlockList
865875 if err := rlp .DecodeBytes (blob , & badBlocks ); err != nil {
866876 return nil
867877 }
@@ -879,7 +889,7 @@ func WriteBadBlock(db ethdb.KeyValueStore, block *types.Block) {
879889 if err != nil {
880890 log .Warn ("Failed to load old bad blocks" , "error" , err )
881891 }
882- var badBlocks [] * badBlock
892+ var badBlocks badBlockList
883893 if len (blob ) > 0 {
884894 if err := rlp .DecodeBytes (blob , & badBlocks ); err != nil {
885895 log .Crit ("Failed to decode old bad blocks" , "error" , err )
@@ -895,10 +905,7 @@ func WriteBadBlock(db ethdb.KeyValueStore, block *types.Block) {
895905 Header : block .Header (),
896906 Body : block .Body (),
897907 })
898- slices .SortFunc (badBlocks , func (a , b * badBlock ) bool {
899- // Note: sorting in descending number order.
900- return a .Header .Number .Uint64 () >= b .Header .Number .Uint64 ()
901- })
908+ sort .Sort (sort .Reverse (badBlocks ))
902909 if len (badBlocks ) > badBlockToKeep {
903910 badBlocks = badBlocks [:badBlockToKeep ]
904911 }
0 commit comments