Skip to content

Commit

Permalink
New collect reward command (#102)
Browse files Browse the repository at this point in the history
miner collect rewards

Co-authored-by: dabasov <yuderbasov@gmail.com>
  • Loading branch information
Sriep and dabasov authored May 17, 2022
1 parent 3fadc7e commit 4400bfe
Show file tree
Hide file tree
Showing 5 changed files with 151 additions and 40 deletions.
107 changes: 107 additions & 0 deletions cmd/collect_reward.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package cmd

import (
"fmt"
"github.com/0chain/gosdk/zcncore"
"github.com/spf13/cobra"
"log"
"strconv"
"strings"
"sync"
)

var minerScPayReward = &cobra.Command{
Use: "collect-reward",
Short: "Pay accrued rewards for a stake pool.",
Long: "Pay accrued rewards for a stake pool.",
Args: cobra.MinimumNArgs(0),
Run: func(cmd *cobra.Command, args []string) {
flags := cmd.Flags()
if !flags.Changed("pool_id") && !flags.Changed("provider_id") {
log.Fatal("must have pool id or provider id")
}

var poolId, providerId string
var err error

if flags.Changed("pool_id") {
poolId, err = flags.GetString("pool_id")
if err != nil {
log.Fatal(err)
}
}

if flags.Changed("provider_id") {
providerId, err = flags.GetString("provider_id")
if err != nil {
log.Fatal(err)
}
}

providerName, err := flags.GetString("provider_type")
if err != nil {
log.Fatal(err)
}

var (
wg sync.WaitGroup
statusBar = &ZCNStatus{wg: &wg}
)
txn, err := zcncore.NewTransaction(statusBar, 0, 0)
if err != nil {
log.Fatal(err)
}
wg.Add(1)
switch providerName {
case "miner":
err = txn.MinerSCCollectReward(providerId, poolId, zcncore.ProviderMiner)
case "sharder":
err = txn.MinerSCCollectReward(providerId, poolId, zcncore.ProviderSharder)
case "authorizer":
log.Fatal("not implemented yet")
default:
log.Fatal("unknown provider type")
}
if err != nil {
log.Fatal(err)
}
wg.Wait()

if !statusBar.success {
log.Fatal("fatal:", statusBar.errMsg)
}

statusBar.success = false
wg.Add(1)
if err = txn.Verify(); err != nil {
log.Fatal(err)
}
wg.Wait()

if statusBar.success {
switch txn.GetVerifyConfirmationStatus() {
case zcncore.ChargeableError:
ExitWithError("\n", strings.Trim(txn.GetVerifyOutput(), "\""))
case zcncore.Success:
fmt.Println("locked with:", txn.GetTransactionHash())
default:
ExitWithError("\nExecute global settings update smart contract failed. Unknown status code: " +
strconv.Itoa(int(txn.GetVerifyConfirmationStatus())))
}
return
} else {
log.Fatal("fatal:", statusBar.errMsg)
}
},
}

func init() {
rootCmd.AddCommand(minerScPayReward)

minerScPayReward.PersistentFlags().String("pool_id", "", "stake pool id")
minerScPayReward.MarkFlagRequired("pool_id")
minerScPayReward.PersistentFlags().String("provider_id", "", "miner or sharder id")
minerScPayReward.MarkFlagRequired("provider_id")
minerScPayReward.PersistentFlags().String("provider_type", "miner", "provider type, miner or sharder")
minerScPayReward.MarkFlagRequired("provider_type")
}
54 changes: 27 additions & 27 deletions cmd/minersc.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,17 +57,21 @@ var minerscUpdateSettings = &cobra.Command{
log.Fatal(err)
}

// remove not settings fields
miner = &zcncore.MinerSCMinerInfo{SimpleMinerSCMinerInfo: &zcncore.SimpleMinerSCMinerInfo{
NumberOfDelegates: miner.NumberOfDelegates,
MinStake: miner.MinStake,
MaxStake: miner.MaxStake,
ID: id,
},
miner = &zcncore.MinerSCMinerInfo{
SimpleMiner: zcncore.SimpleMiner{
ID: id,
},
MinerSCDelegatePool: zcncore.MinerSCDelegatePool{
Settings: zcncore.StakePoolSettings{
NumDelegates: miner.Settings.NumDelegates,
MinStake: miner.Settings.MinStake,
MaxStake: miner.Settings.MaxStake,
},
},
}

if flags.Changed("num_delegates") {
miner.NumberOfDelegates, err = flags.GetInt("num_delegates")
miner.Settings.NumDelegates, err = flags.GetInt("num_delegates")
if err != nil {
log.Fatal(err)
}
Expand All @@ -78,15 +82,15 @@ var minerscUpdateSettings = &cobra.Command{
if min, err = flags.GetFloat64("min_stake"); err != nil {
log.Fatal(err)
}
miner.MinStake = common.Balance(zcncore.ConvertToValue(min))
miner.Settings.MinStake = common.Balance(zcncore.ConvertToValue(min))
}

if flags.Changed("max_stake") {
var max float64
if max, err = flags.GetFloat64("max_stake"); err != nil {
log.Fatal(err)
}
miner.MaxStake = common.Balance(zcncore.ConvertToValue(max))
miner.Settings.MaxStake = common.Balance(zcncore.ConvertToValue(max))
}

txn, err := zcncore.NewTransaction(statusBar, 0, nonce)
Expand Down Expand Up @@ -328,26 +332,22 @@ var minerscUserInfo = &cobra.Command{
}

var total common.Balance
for _, nodes := range info.Pools {
for _, pools := range nodes {
for _, pool := range pools {
total += pool.Balance
}
for _, delegates := range info.Pools {
for _, pool := range delegates {
total += pool.Balance
}
}

for key, nodes := range info.Pools {
for nit, pools := range nodes {
fmt.Println("- node:", nit+" ("+key+")")
for _, pool := range pools {
fmt.Println(" - pool_id: ", pool.ID)
fmt.Println(" balance: ", pool.Balance)
fmt.Println(" interests paid:", pool.InterestPaid)
fmt.Println(" rewards paid: ", pool.RewardPaid)
fmt.Println(" status: ", strings.ToLower(pool.Status))
fmt.Println(" stake %: ",
float64(pool.Balance)/float64(total)*100.0, "%")
}
for key, delegates := range info.Pools {
for _, pool := range delegates {
fmt.Println("- delegates:", "("+key+")")
fmt.Println(" - pool_id: ", pool.ID)
fmt.Println(" balance: ", pool.Balance)
fmt.Println(" rewards uncollected:", pool.Reward)
fmt.Println(" rewards paid: ", pool.RewardPaid)
fmt.Println(" status: ", strings.ToLower(pool.Status))
fmt.Println(" stake %: ",
float64(pool.Balance)/float64(total)*100.0, "%")
}
}
},
Expand Down
24 changes: 14 additions & 10 deletions cmd/updatenode.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,17 +59,21 @@ var minerscUpdateNodeSettings = &cobra.Command{
log.Fatal(err)
}

// remove not settings fields
miner = &zcncore.MinerSCMinerInfo{SimpleMinerSCMinerInfo: &zcncore.SimpleMinerSCMinerInfo{
NumberOfDelegates: miner.NumberOfDelegates,
MinStake: miner.MinStake,
MaxStake: miner.MaxStake,
ID: id,
},
miner = &zcncore.MinerSCMinerInfo{
SimpleMiner: zcncore.SimpleMiner{
ID: id,
},
MinerSCDelegatePool: zcncore.MinerSCDelegatePool{
Settings: zcncore.StakePoolSettings{
NumDelegates: miner.Settings.NumDelegates,
MinStake: miner.Settings.MinStake,
MaxStake: miner.Settings.MaxStake,
},
},
}

if flags.Changed("num_delegates") {
miner.NumberOfDelegates, err = flags.GetInt("num_delegates")
miner.Settings.NumDelegates, err = flags.GetInt("num_delegates")
if err != nil {
log.Fatal(err)
}
Expand All @@ -80,15 +84,15 @@ var minerscUpdateNodeSettings = &cobra.Command{
if min, err = flags.GetFloat64("min_stake"); err != nil {
log.Fatal(err)
}
miner.MinStake = common.Balance(zcncore.ConvertToValue(min))
miner.Settings.MinStake = common.Balance(zcncore.ConvertToValue(min))
}

if flags.Changed("max_stake") {
var max float64
if max, err = flags.GetFloat64("max_stake"); err != nil {
log.Fatal(err)
}
miner.MaxStake = common.Balance(zcncore.ConvertToValue(max))
miner.Settings.MaxStake = common.Balance(zcncore.ConvertToValue(max))
}

txn, err := zcncore.NewTransaction(statusBar, 0, nonce)
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module github.com/0chain/zwalletcli

require (
github.com/0chain/gosdk v1.8.3
github.com/0chain/gosdk v1.8.4-0.20220515212159-26ec78b6bf82
github.com/icza/bitio v1.1.0
github.com/olekukonko/tablewriter v0.0.5
github.com/spf13/cobra v1.4.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/0chain/errors v1.0.3 h1:QQZPFxTfnMcRdt32DXbzRQIfGWmBsKoEdszKQDb0rRM=
github.com/0chain/errors v1.0.3/go.mod h1:xymD6nVgrbgttWwkpSCfLLEJbFO6iHGQwk/yeSuYkIc=
github.com/0chain/gosdk v1.8.3 h1:L0H0TZcQY561RIVKpuB36FDFEyS/l6AzO7BNoYSVtB0=
github.com/0chain/gosdk v1.8.3/go.mod h1:z7QHQwcdgAi8lhfdYCWkwKiZc1zOFre3x/jxnNgzh/M=
github.com/0chain/gosdk v1.8.4-0.20220515212159-26ec78b6bf82 h1:JybWdhxNQ5dzjkBhSAfD6Vo2FBUt+/x2MPOAelWkE4o=
github.com/0chain/gosdk v1.8.4-0.20220515212159-26ec78b6bf82/go.mod h1:z7QHQwcdgAi8lhfdYCWkwKiZc1zOFre3x/jxnNgzh/M=
github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM=
github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I=
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo=
Expand Down

0 comments on commit 4400bfe

Please sign in to comment.