From bf5b1635292f743c9d54a54721016fcbe8faf51f Mon Sep 17 00:00:00 2001 From: Dev Ojha Date: Thu, 23 Jun 2022 14:28:35 -0500 Subject: [PATCH] feat!: bring back the cliff vesting command (#111) (#271) * Bring back the cliff vesting command https://github.com/osmosis-labs/cosmos-sdk/pull/111 * Wrap error --- x/auth/vesting/client/cli/tx.go | 50 +++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/x/auth/vesting/client/cli/tx.go b/x/auth/vesting/client/cli/tx.go index b730c82fe064..9dc4ecab99ac 100644 --- a/x/auth/vesting/client/cli/tx.go +++ b/x/auth/vesting/client/cli/tx.go @@ -5,6 +5,7 @@ import ( "fmt" "io/ioutil" "strconv" + "time" "github.com/spf13/cobra" @@ -12,6 +13,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" ) @@ -36,6 +38,7 @@ func GetTxCmd() *cobra.Command { txCmd.AddCommand( NewMsgCreateVestingAccountCmd(), + NewMsgCreateCliffVestingAccountCmd(), NewMsgCreateClawbackVestingAccountCmd(), NewMsgClawbackCmd(), ) @@ -261,3 +264,50 @@ func NewMsgClawbackCmd() *cobra.Command { flags.AddTxFlagsToCmd(cmd) return cmd } + +// NewMsgCreateDelayedVestingAccountCmd returns a CLI command handler for creating a +// NewMsgCreateDelayedVestingAccountCmd transaction. +// This is hacky, but meant to mitigate the pain of a very specific use case. +// Namely, make it easy to make cliff locks to an address. +func NewMsgCreateCliffVestingAccountCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "create-cliff-vesting-account [to_address] [amount] [cliff_duration]", + Short: "Create a new cliff vesting account funded with an allocation of tokens.", + Long: `Create a new delayed vesting account funded with an allocation of tokens. All vesting accouts created will have their start time +set by the committed block's time. The cliff duration should be specified in hours.`, + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + toAddr, err := sdk.AccAddressFromBech32(args[0]) + if err != nil { + return err + } + + amount, err := sdk.ParseCoinsNormalized(args[1]) + if err != nil { + return err + } + + cliffDuration, err := time.ParseDuration(args[2]) + if err != nil { + err = errors.Wrap(err, "duration incorrectly formatted, see https://pkg.go.dev/time#ParseDuration") + return err + } + cliffVesting := true + + endTime := time.Now().Add(cliffDuration) + endEpochTime := endTime.Unix() + + msg := types.NewMsgCreateVestingAccount(clientCtx.GetFromAddress(), toAddr, amount, endEpochTime, cliffVesting) + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +}