-
ValarDragon authored0a2c23c1
package cli
import (
"errors"
"fmt"
"strconv"
"time"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/cosmos/cosmos-sdk/client/tx"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/osmosis-labs/osmosis/x/incentives/types"
lockuptypes "github.com/osmosis-labs/osmosis/x/lockup/types"
"github.com/spf13/cobra"
)
// GetTxCmd returns the transaction commands for this module
func GetTxCmd() *cobra.Command {
cmd := &cobra.Command{
Use: types.ModuleName,
Short: fmt.Sprintf("%s transactions subcommands", types.ModuleName),
DisableFlagParsing: true,
SuggestionsMinimumDistance: 2,
RunE: client.ValidateCmd,
}
cmd.AddCommand(
NewCreateGaugeCmd(),
NewAddToGaugeCmd(),
)
return cmd
}
// NewCreateGaugeCmd broadcast MsgCreateGauge
func NewCreateGaugeCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "create-gauge [lockup_denom] [reward] [flags]",
Short: "create a gauge to distribute rewards to users",
Args: cobra.ExactArgs(2),
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientTxContext(cmd)
if err != nil {
return err
}
denom := args[0]
txf := tx.NewFactoryCLI(clientCtx, cmd.Flags()).WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever)
coins, err := sdk.ParseCoinsNormalized(args[1])
if err != nil {
return err
}
startTime := time.Time{}
timeStr, err := cmd.Flags().GetString(FlagStartTime)
if err != nil {
return err
}
if timeStr == "" { // empty start time
startTime = time.Unix(0, 0)
} else if timeUnix, err := strconv.ParseInt(timeStr, 10, 64); err == nil { // unix time
startTime = time.Unix(timeUnix, 0)
} else if timeRFC, err := time.Parse(time.RFC3339, timeStr); err == nil { // RFC time
startTime = timeRFC
} else { // invalid input
return errors.New("Invalid start time format")
}
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
epochs, err := cmd.Flags().GetUint64(FlagEpochs)
if err != nil {
return err
}
perpetual, err := cmd.Flags().GetBool(FlagPerpetual)
if err != nil {
return err
}
if perpetual {
epochs = 1
}
duration, err := cmd.Flags().GetDuration(FlagDuration)
if err != nil {
return err
}
distributeTo := lockuptypes.QueryCondition{
LockQueryType: lockuptypes.ByDuration,
Denom: denom,
Duration: duration,
Timestamp: time.Unix(0, 0), // XXX check
}
msg := types.NewMsgCreateGauge(
epochs == 1,
clientCtx.GetFromAddress(),
distributeTo,
coins,
startTime,
epochs,
)
return tx.GenerateOrBroadcastTxWithFactory(clientCtx, txf, msg)
},
}
cmd.Flags().AddFlagSet(FlagSetCreateGauge())
flags.AddTxFlagsToCmd(cmd)
return cmd
}
// NewAddToGaugeCmd broadcast MsgAddToGauge
func NewAddToGaugeCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "add-to-gauge [gauge_id] [rewards] [flags]",
Short: "add coins to gauge to distribute more rewards to users",
Args: cobra.ExactArgs(2),
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientTxContext(cmd)
if err != nil {
return err
}
txf := tx.NewFactoryCLI(clientCtx, cmd.Flags()).WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever)
gaugeId, err := strconv.ParseUint(args[1], 10, 64)
if err != nil {
return err
}
rewards, err := sdk.ParseCoinsNormalized(args[1])
if err != nil {
return err
}
msg := types.NewMsgAddToGauge(
clientCtx.GetFromAddress(),
141142143144145146147148149150151152153
gaugeId,
rewards,
)
return tx.GenerateOrBroadcastTxWithFactory(clientCtx, txf, msg)
},
}
cmd.Flags().AddFlagSet(FlagSetCreateGauge())
flags.AddTxFlagsToCmd(cmd)
return cmd
}