github.com/Finschia/finschia-sdk@v0.48.1/x/upgrade/client/cli/tx.go (about)

     1  package cli
     2  
     3  import (
     4  	"github.com/spf13/cobra"
     5  
     6  	"github.com/Finschia/finschia-sdk/client"
     7  	"github.com/Finschia/finschia-sdk/client/tx"
     8  	sdk "github.com/Finschia/finschia-sdk/types"
     9  	"github.com/Finschia/finschia-sdk/x/gov/client/cli"
    10  	gov "github.com/Finschia/finschia-sdk/x/gov/types"
    11  	"github.com/Finschia/finschia-sdk/x/upgrade/types"
    12  )
    13  
    14  const (
    15  	FlagUpgradeHeight = "upgrade-height"
    16  	FlagUpgradeInfo   = "upgrade-info"
    17  )
    18  
    19  // GetTxCmd returns the transaction commands for this module
    20  func GetTxCmd() *cobra.Command {
    21  	cmd := &cobra.Command{
    22  		Use:   types.ModuleName,
    23  		Short: "Upgrade transaction subcommands",
    24  	}
    25  
    26  	return cmd
    27  }
    28  
    29  // NewCmdSubmitUpgradeProposal implements a command handler for submitting a software upgrade proposal transaction.
    30  func NewCmdSubmitUpgradeProposal() *cobra.Command {
    31  	cmd := &cobra.Command{
    32  		Use:   "software-upgrade [name] (--upgrade-height [height]) (--upgrade-info [info]) [flags]",
    33  		Args:  cobra.ExactArgs(1),
    34  		Short: "Submit a software upgrade proposal",
    35  		Long: "Submit a software upgrade along with an initial deposit.\n" +
    36  			"Please specify a unique name and height for the upgrade to take effect.\n" +
    37  			"You may include info to reference a binary download link, in a format compatible with: https://github.com/Finschia/finschia-sdk/tree/master/cosmovisor",
    38  		RunE: func(cmd *cobra.Command, args []string) error {
    39  			clientCtx, err := client.GetClientTxContext(cmd)
    40  			if err != nil {
    41  				return err
    42  			}
    43  			name := args[0]
    44  			content, err := parseArgsToContent(cmd, name)
    45  			if err != nil {
    46  				return err
    47  			}
    48  
    49  			from := clientCtx.GetFromAddress()
    50  
    51  			depositStr, err := cmd.Flags().GetString(cli.FlagDeposit)
    52  			if err != nil {
    53  				return err
    54  			}
    55  			deposit, err := sdk.ParseCoinsNormalized(depositStr)
    56  			if err != nil {
    57  				return err
    58  			}
    59  
    60  			msg, err := gov.NewMsgSubmitProposal(content, deposit, from)
    61  			if err != nil {
    62  				return err
    63  			}
    64  
    65  			return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)
    66  		},
    67  	}
    68  
    69  	cmd.Flags().String(cli.FlagTitle, "", "title of proposal")
    70  	cmd.Flags().String(cli.FlagDescription, "", "description of proposal")
    71  	cmd.Flags().String(cli.FlagDeposit, "", "deposit of proposal")
    72  	cmd.Flags().Int64(FlagUpgradeHeight, 0, "The height at which the upgrade must happen")
    73  	cmd.Flags().String(FlagUpgradeInfo, "", "Optional info for the planned upgrade such as commit hash, etc.")
    74  
    75  	return cmd
    76  }
    77  
    78  // NewCmdSubmitCancelUpgradeProposal implements a command handler for submitting a software upgrade cancel proposal transaction.
    79  func NewCmdSubmitCancelUpgradeProposal() *cobra.Command {
    80  	cmd := &cobra.Command{
    81  		Use:   "cancel-software-upgrade [flags]",
    82  		Args:  cobra.ExactArgs(0),
    83  		Short: "Cancel the current software upgrade proposal",
    84  		Long:  "Cancel a software upgrade along with an initial deposit.",
    85  		RunE: func(cmd *cobra.Command, args []string) error {
    86  			clientCtx, err := client.GetClientTxContext(cmd)
    87  			if err != nil {
    88  				return err
    89  			}
    90  			from := clientCtx.GetFromAddress()
    91  
    92  			depositStr, err := cmd.Flags().GetString(cli.FlagDeposit)
    93  			if err != nil {
    94  				return err
    95  			}
    96  
    97  			deposit, err := sdk.ParseCoinsNormalized(depositStr)
    98  			if err != nil {
    99  				return err
   100  			}
   101  
   102  			title, err := cmd.Flags().GetString(cli.FlagTitle)
   103  			if err != nil {
   104  				return err
   105  			}
   106  
   107  			description, err := cmd.Flags().GetString(cli.FlagDescription)
   108  			if err != nil {
   109  				return err
   110  			}
   111  
   112  			content := types.NewCancelSoftwareUpgradeProposal(title, description)
   113  
   114  			msg, err := gov.NewMsgSubmitProposal(content, deposit, from)
   115  			if err != nil {
   116  				return err
   117  			}
   118  
   119  			return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)
   120  		},
   121  	}
   122  
   123  	cmd.Flags().String(cli.FlagTitle, "", "title of proposal")
   124  	cmd.Flags().String(cli.FlagDescription, "", "description of proposal")
   125  	cmd.Flags().String(cli.FlagDeposit, "", "deposit of proposal")
   126  	cmd.MarkFlagRequired(cli.FlagTitle)
   127  	cmd.MarkFlagRequired(cli.FlagDescription)
   128  
   129  	return cmd
   130  }
   131  
   132  func parseArgsToContent(cmd *cobra.Command, name string) (gov.Content, error) {
   133  	title, err := cmd.Flags().GetString(cli.FlagTitle)
   134  	if err != nil {
   135  		return nil, err
   136  	}
   137  
   138  	description, err := cmd.Flags().GetString(cli.FlagDescription)
   139  	if err != nil {
   140  		return nil, err
   141  	}
   142  
   143  	height, err := cmd.Flags().GetInt64(FlagUpgradeHeight)
   144  	if err != nil {
   145  		return nil, err
   146  	}
   147  
   148  	info, err := cmd.Flags().GetString(FlagUpgradeInfo)
   149  	if err != nil {
   150  		return nil, err
   151  	}
   152  
   153  	plan := types.Plan{Name: name, Height: height, Info: info}
   154  	content := types.NewSoftwareUpgradeProposal(title, description, plan)
   155  	return content, nil
   156  }