github.com/lino-network/lino@v0.6.11/x/validator/client/cli/tx.go (about) 1 package cli 2 3 import ( 4 "os/user" 5 "strings" 6 7 "github.com/cosmos/cosmos-sdk/codec" 8 "github.com/spf13/cobra" 9 "github.com/spf13/viper" 10 cfg "github.com/tendermint/tendermint/config" 11 "github.com/tendermint/tendermint/crypto" 12 cmn "github.com/tendermint/tendermint/libs/common" 13 pvm "github.com/tendermint/tendermint/privval" 14 15 "github.com/lino-network/lino/client" 16 linotypes "github.com/lino-network/lino/types" 17 types "github.com/lino-network/lino/x/validator/types" 18 ) 19 20 const ( 21 FlagUser = "user" 22 FlagAmount = "amount" 23 FlagLink = "link" 24 FlagValidators = "validators" 25 ) 26 27 func GetTxCmd(cdc *codec.Codec) *cobra.Command { 28 cmd := &cobra.Command{ 29 Use: types.ModuleName, 30 Short: "validator tx subcommands", 31 DisableFlagParsing: true, 32 SuggestionsMinimumDistance: 2, 33 RunE: client.ValidateCmd, 34 } 35 36 cmd.AddCommand(client.PostCommands( 37 GetCmdRegister(cdc), 38 GetCmdRevoke(cdc), 39 GetCmdVote(cdc), 40 GetCmdUpdate(cdc), 41 )...) 42 43 return cmd 44 45 } 46 47 // GetCmdRegister - 48 func GetCmdRegister(cdc *codec.Codec) *cobra.Command { 49 cmd := &cobra.Command{ 50 Use: "register", 51 Short: "register user --link <link>", 52 Args: cobra.ExactArgs(1), 53 RunE: func(cmd *cobra.Command, args []string) error { 54 ctx := client.NewCoreContextFromViper().WithTxEncoder(linotypes.TxEncoder(cdc)) 55 validator := args[0] 56 link := viper.GetString(FlagLink) 57 pubKey, err := getLocalUserPubKey() 58 if err != nil { 59 return err 60 } 61 msg := types.NewValidatorRegisterMsg(validator, pubKey, link) 62 return ctx.DoTxPrintResponse(msg) 63 }, 64 } 65 cmd.Flags().String(FlagLink, "", "link of the validator") 66 return cmd 67 } 68 69 func getLocalUserPubKey() (crypto.PubKey, error) { 70 usr, err := user.Current() 71 if err != nil { 72 return nil, err 73 } 74 root := usr.HomeDir + "/.lino/" 75 76 tmConfig := cfg.DefaultConfig() 77 tmConfig = tmConfig.SetRoot(root) 78 79 privValFile := tmConfig.PrivValidatorKeyFile() 80 privValStateFile := tmConfig.PrivValidatorStateFile() 81 82 var privValidator *pvm.FilePV 83 if cmn.FileExists(privValFile) { 84 privValidator = pvm.LoadFilePV(privValFile, privValStateFile) 85 } else { 86 privValidator = pvm.GenFilePV(privValFile, privValStateFile) 87 privValidator.Save() 88 } 89 pubKey := privValidator.GetPubKey() 90 return pubKey, nil 91 } 92 93 // GetCmdRevoke - 94 func GetCmdRevoke(cdc *codec.Codec) *cobra.Command { 95 cmd := &cobra.Command{ 96 Use: "revoke", 97 Short: "revoke <username>", 98 Args: cobra.ExactArgs(1), 99 RunE: func(cmd *cobra.Command, args []string) error { 100 ctx := client.NewCoreContextFromViper().WithTxEncoder(linotypes.TxEncoder(cdc)) 101 user := args[0] 102 msg := types.NewValidatorRevokeMsg(user) 103 return ctx.DoTxPrintResponse(msg) 104 }, 105 } 106 return cmd 107 } 108 109 // GetCmdVote - 110 func GetCmdVote(cdc *codec.Codec) *cobra.Command { 111 cmd := &cobra.Command{ 112 Use: "vote", 113 Short: "vote voter --validators val1,val,...", 114 Args: cobra.ExactArgs(1), 115 RunE: func(cmd *cobra.Command, args []string) error { 116 ctx := client.NewCoreContextFromViper().WithTxEncoder(linotypes.TxEncoder(cdc)) 117 voter := args[0] 118 validators := strings.Split(viper.GetString(FlagValidators), ",") 119 msg := types.NewVoteValidatorMsg(voter, validators) 120 return ctx.DoTxPrintResponse(msg) 121 }, 122 } 123 cmd.Flags().String(FlagValidators, "", "a comma-separated string, the list of validators") 124 _ = cmd.MarkFlagRequired(FlagValidators) 125 return cmd 126 } 127 128 // GetCmdRegister - 129 func GetCmdUpdate(cdc *codec.Codec) *cobra.Command { 130 cmd := &cobra.Command{ 131 Use: "update", 132 Short: "update user --link <link>", 133 Args: cobra.ExactArgs(1), 134 RunE: func(cmd *cobra.Command, args []string) error { 135 ctx := client.NewCoreContextFromViper().WithTxEncoder(linotypes.TxEncoder(cdc)) 136 validator := args[0] 137 link := viper.GetString(FlagLink) 138 msg := types.NewValidatorUpdateMsg(validator, link) 139 return ctx.DoTxPrintResponse(msg) 140 }, 141 } 142 cmd.Flags().String(FlagLink, "", "link of the validator") 143 return cmd 144 }