@@ -22,7 +22,6 @@ import (
2222 "errors"
2323 "fmt"
2424 "math/big"
25- "sort"
2625
2726 "github.com/ethereum/go-ethereum/common"
2827 "github.com/ethereum/go-ethereum/core/types"
@@ -31,6 +30,7 @@ import (
3130 "github.com/ethereum/go-ethereum/log"
3231 "github.com/ethereum/go-ethereum/params"
3332 "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,23 +836,13 @@ 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-
849839// ReadBadBlock retrieves the bad block with the corresponding block hash.
850840func ReadBadBlock (db ethdb.Reader , hash common.Hash ) * types.Block {
851841 blob , err := db .Get (badBlockKey )
852842 if err != nil {
853843 return nil
854844 }
855- var badBlocks badBlockList
845+ var badBlocks [] * badBlock
856846 if err := rlp .DecodeBytes (blob , & badBlocks ); err != nil {
857847 return nil
858848 }
@@ -871,7 +861,7 @@ func ReadAllBadBlocks(db ethdb.Reader) []*types.Block {
871861 if err != nil {
872862 return nil
873863 }
874- var badBlocks badBlockList
864+ var badBlocks [] * badBlock
875865 if err := rlp .DecodeBytes (blob , & badBlocks ); err != nil {
876866 return nil
877867 }
@@ -889,7 +879,7 @@ func WriteBadBlock(db ethdb.KeyValueStore, block *types.Block) {
889879 if err != nil {
890880 log .Warn ("Failed to load old bad blocks" , "error" , err )
891881 }
892- var badBlocks badBlockList
882+ var badBlocks [] * badBlock
893883 if len (blob ) > 0 {
894884 if err := rlp .DecodeBytes (blob , & badBlocks ); err != nil {
895885 log .Crit ("Failed to decode old bad blocks" , "error" , err )
@@ -905,7 +895,10 @@ func WriteBadBlock(db ethdb.KeyValueStore, block *types.Block) {
905895 Header : block .Header (),
906896 Body : block .Body (),
907897 })
908- sort .Sort (sort .Reverse (badBlocks ))
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+ })
909902 if len (badBlocks ) > badBlockToKeep {
910903 badBlocks = badBlocks [:badBlockToKeep ]
911904 }
0 commit comments