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 }