tx.go 3.75 KiB
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 }