11package org .tron .core .store ;
22
33import com .google .common .collect .Streams ;
4+ import com .google .protobuf .ByteString ;
45import java .util .ArrayList ;
56import java .util .Comparator ;
67import java .util .List ;
1112import org .springframework .beans .factory .annotation .Autowired ;
1213import org .springframework .beans .factory .annotation .Value ;
1314import org .springframework .stereotype .Component ;
15+ import org .tron .common .utils .ByteArray ;
1416import org .tron .core .capsule .WitnessCapsule ;
1517import org .tron .core .config .Parameter ;
1618import org .tron .core .db .TronStoreWithRevoking ;
@@ -39,12 +41,10 @@ public WitnessCapsule get(byte[] key) {
3941 return ArrayUtils .isEmpty (value ) ? null : new WitnessCapsule (value );
4042 }
4143
42- public List <WitnessCapsule > getWitnessStandby () {
44+ public List <WitnessCapsule > getWitnessStandby (boolean isSortOpt ) {
4345 List <WitnessCapsule > ret ;
4446 List <WitnessCapsule > all = getAllWitnesses ();
45- all .sort (Comparator .comparingLong (WitnessCapsule ::getVoteCount )
46- .reversed ().thenComparing (Comparator .comparingInt (
47- (WitnessCapsule w ) -> w .getAddress ().hashCode ()).reversed ()));
47+ sortWitnesses (all , isSortOpt );
4848 if (all .size () > Parameter .ChainConstant .WITNESS_STANDBY_LENGTH ) {
4949 ret = new ArrayList <>(all .subList (0 , Parameter .ChainConstant .WITNESS_STANDBY_LENGTH ));
5050 } else {
@@ -55,4 +55,18 @@ public List<WitnessCapsule> getWitnessStandby() {
5555 return ret ;
5656 }
5757
58+ public void sortWitnesses (List <WitnessCapsule > witnesses , boolean isSortOpt ) {
59+ witnesses .sort (Comparator .comparingLong (WitnessCapsule ::getVoteCount ).reversed ()
60+ .thenComparing (isSortOpt
61+ ? Comparator .comparing (WitnessCapsule ::createReadableString ).reversed ()
62+ : Comparator .comparingInt ((WitnessCapsule w ) -> w .getAddress ().hashCode ()).reversed ()));
63+ }
64+
65+ public void sortWitness (List <ByteString > list , boolean isSortOpt ) {
66+ list .sort (Comparator .comparingLong ((ByteString b ) -> get (b .toByteArray ()).getVoteCount ())
67+ .reversed ().thenComparing (isSortOpt
68+ ? Comparator .comparing (
69+ (ByteString b ) -> ByteArray .toHexString (b .toByteArray ())).reversed ()
70+ : Comparator .comparingInt (ByteString ::hashCode ).reversed ()));
71+ }
5872}
0 commit comments