@@ -14,7 +14,7 @@ use ansi_term::Color::{Purple, Red, White, Yellow};
1414use failure:: { bail, Fail } ;
1515use itertools:: Itertools ;
1616use num_format:: { Locale , ToFormattedString } ;
17- use prettytable:: { row, Cell , Row , Table } ;
17+ use prettytable:: { row, Table } ;
1818use qrcode:: render:: unicode;
1919use serde:: { de:: DeserializeOwned , Deserialize , Serialize } ;
2020
@@ -24,7 +24,7 @@ use witnet_crypto::{
2424 key:: { ExtendedPK , ExtendedSK } ,
2525} ;
2626use witnet_data_structures:: {
27- capabilities:: { Capability , ALL_CAPABILITIES } ,
27+ capabilities:: Capability ,
2828 chain:: {
2929 priority:: { PrioritiesEstimate , Priority , PriorityEstimate , TimeToBlock } ,
3030 tapi:: { current_active_wips, ActiveWips } ,
@@ -50,13 +50,12 @@ use witnet_data_structures::{
5050use witnet_node:: actors:: {
5151 chain_manager:: run_dr_locally,
5252 json_rpc:: api:: {
53- AddrType , GetBlockChainParams , GetTransactionOutput , PeersResult , QueryPowersParams ,
54- QueryPowersRecord ,
53+ AddrType , GetBlockChainParams , GetTransactionOutput , PeersResult , QueryStakingPowersRecord ,
5554 } ,
5655 messages:: {
5756 AuthorizeStake , BuildDrt , BuildStakeParams , BuildStakeResponse , BuildUnstakeParams ,
5857 BuildVtt , GetBalanceTarget , GetReputationResult , MagicEither , QueryStakes ,
59- QueryStakesFilter , SignalingInfo , StakeAuthorization ,
58+ QueryStakesFilter , QueryStakingPowers , SignalingInfo , StakeAuthorization ,
6059 } ,
6160} ;
6261use witnet_rad:: types:: RadonTypes ;
@@ -2019,19 +2018,18 @@ pub fn query_stakes(
20192018pub fn query_powers (
20202019 addr : SocketAddr ,
20212020 capability : Option < String > ,
2022- all : bool ,
2021+ distinct : bool ,
20232022) -> Result < ( ) , failure:: Error > {
20242023 let mut stream = start_client ( addr) ?;
2025- let params = if all {
2026- QueryPowersParams :: All ( true )
2027- } else {
2028- match capability {
2029- Some ( c) => match Capability :: from_str ( & c) {
2030- Ok ( c) => QueryPowersParams :: Capability ( c) ,
2031- Err ( _) => QueryPowersParams :: Capability ( Capability :: Mining ) ,
2032- } ,
2033- None => QueryPowersParams :: Capability ( Capability :: Mining ) ,
2034- }
2024+
2025+ let mut params = QueryStakingPowers :: default ( ) ;
2026+ params. distinct = Some ( distinct) ;
2027+ params. order_by = match capability {
2028+ Some ( c) => match Capability :: from_str ( & c) {
2029+ Ok ( c) => c,
2030+ Err ( _) => Capability :: Mining ,
2031+ } ,
2032+ None => Capability :: Mining ,
20352033 } ;
20362034
20372035 let response = send_request (
@@ -2042,42 +2040,22 @@ pub fn query_powers(
20422040 ) ,
20432041 ) ?;
20442042
2045- let mut powers: Vec < QueryPowersRecord > = parse_response ( & response) ?;
2046- powers. sort_by_key ( |power| Reverse ( power. powers [ 0 ] ) ) ;
2043+ let records: Vec < QueryStakingPowersRecord > = parse_response ( & response) ?;
20472044
20482045 let mut powers_table = Table :: new ( ) ;
20492046 powers_table. set_format ( * prettytable:: format:: consts:: FORMAT_NO_BORDER_LINE_SEPARATOR ) ;
2050- if all {
2051- let mut header = vec ! [
2052- Cell :: new( "Validator" ) . style_spec( "c" ) ,
2053- Cell :: new( "Withdrawer" ) . style_spec( "c" ) ,
2054- ] ;
2055- for capability in ALL_CAPABILITIES {
2056- let capability_str: & ' static str = capability. into ( ) ;
2057- header. push ( Cell :: new ( capability_str) . style_spec ( "c" ) ) ;
2058- }
2059- powers_table. set_titles ( Row :: new ( header) ) ;
2060- for power in powers. iter ( ) {
2061- let mut row = vec ! [
2062- Cell :: new( & power. validator. to_string( ) ) ,
2063- Cell :: new( & power. withdrawer. to_string( ) ) ,
2064- ] ;
2065- for p in & power. powers {
2066- row. push ( Cell :: new ( & p. to_formatted_string ( & Locale :: en) ) . style_spec ( "r" ) ) ;
2067- }
2068- powers_table. add_row ( Row :: new ( row) ) ;
2069- }
2070- } else {
2071- let capability_str: & ' static str = params. into ( ) ;
2072- powers_table. set_titles ( row ! [ c->"Validator" , c->"Withdrawer" , c->capability_str] ) ;
2073- for power in powers. iter ( ) {
2074- powers_table. add_row ( row ! [
2075- power. validator,
2076- power. withdrawer,
2077- r->( power. powers[ 0 ] ) . to_formatted_string( & Locale :: en) ,
2078- ] ) ;
2079- }
2047+
2048+ let capability_str: & ' static str = params. order_by . into ( ) ;
2049+ powers_table. set_titles ( row ! [ c->"Ranking" , c->"Validator" , c->"Withdrawer" , c->capability_str] ) ;
2050+ for record in records. iter ( ) {
2051+ powers_table. add_row ( row ! [
2052+ record. ranking,
2053+ record. validator,
2054+ record. withdrawer,
2055+ record. power. to_formatted_string( & Locale :: en) ,
2056+ ] ) ;
20802057 }
2058+
20812059 powers_table. printstd ( ) ;
20822060 println ! ( ) ;
20832061
0 commit comments