@@ -22,19 +22,70 @@ import (
22
22
23
23
// nodeRewardCmd represents the node reward command
24
24
var nodeRewardCmd = & cobra.Command {
25
- Use : "reward ( ALIAS|DELEGATE_ADDRESS) " ,
26
- Short : "Query unclaimed rewards" ,
27
- Args : cobra .ExactArgs (1 ),
25
+ Use : "reward [ ALIAS|DELEGATE_ADDRESS] " ,
26
+ Short : "Query rewards" ,
27
+ Args : cobra .MaximumNArgs (1 ),
28
28
RunE : func (cmd * cobra.Command , args []string ) error {
29
29
cmd .SilenceUsage = true
30
- output , err := reward (args )
30
+ var output string
31
+ var err error
32
+ if len (args ) == 0 {
33
+ output , err = rewardPool ()
34
+ } else {
35
+ output , err = reward (args )
36
+ }
31
37
if err == nil {
32
38
fmt .Println (output )
33
39
}
34
40
return err
35
41
},
36
42
}
37
43
44
+ func rewardPool () (string , error ) {
45
+ conn , err := util .ConnectToEndpoint ()
46
+ if err != nil {
47
+ return "" , err
48
+ }
49
+ defer conn .Close ()
50
+ cli := iotexapi .NewAPIServiceClient (conn )
51
+ ctx := context .Background ()
52
+ request := & iotexapi.ReadStateRequest {
53
+ ProtocolID : []byte (rewarding .ProtocolID ),
54
+ MethodName : []byte ("AvailableBalance" ),
55
+ }
56
+ response , err := cli .ReadState (ctx , request )
57
+ if err != nil {
58
+ sta , ok := status .FromError (err )
59
+ if ok {
60
+ return "" , fmt .Errorf (sta .Message ())
61
+ }
62
+ return "" , err
63
+ }
64
+ availableRewardRau , ok := big .NewInt (0 ).SetString (string (response .Data ), 10 )
65
+ if ! ok {
66
+ return "" , fmt .Errorf ("failed to convert string into big int" )
67
+ }
68
+ request = & iotexapi.ReadStateRequest {
69
+ ProtocolID : []byte (rewarding .ProtocolID ),
70
+ MethodName : []byte ("TotalBalance" ),
71
+ }
72
+ response , err = cli .ReadState (ctx , request )
73
+ if err != nil {
74
+ sta , ok := status .FromError (err )
75
+ if ok {
76
+ return "" , fmt .Errorf (sta .Message ())
77
+ }
78
+ return "" , err
79
+ }
80
+ totalRewardRau , ok := big .NewInt (0 ).SetString (string (response .Data ), 10 )
81
+ if ! ok {
82
+ return "" , fmt .Errorf ("failed to convert string into big int" )
83
+ }
84
+ return fmt .Sprintf ("Available Reward: %sIOTX Total Reward: %sIOTX" ,
85
+ util .RauToString (availableRewardRau , util .IotxDecimalNum ),
86
+ util .RauToString (totalRewardRau , util .IotxDecimalNum )), nil
87
+ }
88
+
38
89
func reward (args []string ) (string , error ) {
39
90
address , err := alias .Address (args [0 ])
40
91
if err != nil {
0 commit comments