diff --git a/CHANGELOG.md b/CHANGELOG.md index 19c315607c..52feff7fc3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,12 @@ BREAKING CHANGES * Remove go-wire, use go-amino +## 0.14.1 (April 9, 2018) + +BUG FIXES + +* [gaiacli] Fix all commands (just a duplicate of basecli for now) + ## 0.14.0 (April 9, 2018) BREAKING CHANGES: diff --git a/cmd/gaiacli/client.go b/cmd/gaiacli/client.go deleted file mode 100644 index 682a571e6e..0000000000 --- a/cmd/gaiacli/client.go +++ /dev/null @@ -1,131 +0,0 @@ -package main - -import "github.com/spf13/cobra" - -const ( - // these are needed for every init - flagChainID = "chain-id" - flagNode = "node" - - // one of the following should be provided to verify the connection - flagGenesis = "genesis" - flagCommit = "commit" - flagValHash = "validator-set" - - flagSelect = "select" - flagTags = "tag" - flagAny = "any" - - flagBind = "bind" - flagCORS = "cors" - flagTrustNode = "trust-node" - - // this is for signing - flagName = "name" -) - -var ( - statusCmd = &cobra.Command{ - Use: "status", - Short: "Query remote node for status", - RunE: todoNotImplemented, - } -) - -// AddClientCommands returns a sub-tree of all basic client commands -// -// Call AddGetCommand and AddPostCommand to add custom txs and queries -func AddClientCommands(cmd *cobra.Command) { - cmd.AddCommand( - initClientCommand(), - statusCmd, - blockCommand(), - validatorCommand(), - lineBreak, - txSearchCommand(), - txCommand(), - lineBreak, - ) -} - -// GetCommands adds common flags to query commands -func GetCommands(cmds ...*cobra.Command) []*cobra.Command { - for _, c := range cmds { - c.Flags().Bool(flagTrustNode, false, "Don't verify proofs for responses") - } - return cmds -} - -// PostCommands adds common flags for commands to post tx -func PostCommands(cmds ...*cobra.Command) []*cobra.Command { - for _, c := range cmds { - c.Flags().String(flagName, "", "Name of private key with which to sign") - c.Flags().String(flagPassword, "", "Password to use the named private key") - } - return cmds -} - -func initClientCommand() *cobra.Command { - cmd := &cobra.Command{ - Use: "init", - Short: "Initialize light client", - RunE: todoNotImplemented, - } - cmd.Flags().StringP(flagChainID, "c", "", "ID of chain we connect to") - cmd.Flags().StringP(flagNode, "n", "tcp://localhost:46657", "Node to connect to") - cmd.Flags().String(flagGenesis, "", "Genesis file to verify header validity") - cmd.Flags().String(flagCommit, "", "File with trusted and signed header") - cmd.Flags().String(flagValHash, "", "Hash of trusted validator set (hex-encoded)") - return cmd -} - -func blockCommand() *cobra.Command { - cmd := &cobra.Command{ - Use: "block ", - Short: "Get verified data for a the block at given height", - RunE: todoNotImplemented, - } - cmd.Flags().StringSlice(flagSelect, []string{"header", "tx"}, "Fields to return (header|txs|results)") - return cmd -} - -func validatorCommand() *cobra.Command { - cmd := &cobra.Command{ - Use: "validatorset ", - Short: "Get the full validator set at given height", - RunE: todoNotImplemented, - } - return cmd -} - -func serveCommand() *cobra.Command { - cmd := &cobra.Command{ - Use: "serve", - Short: "Start LCD (light-client daemon), a local REST server", - RunE: todoNotImplemented, - } - // TODO: handle unix sockets also? - cmd.Flags().StringP(flagBind, "b", "localhost:1317", "Interface and port that server binds to") - cmd.Flags().String(flagCORS, "", "Set to domains that can make CORS requests (* for all)") - return cmd -} - -func txSearchCommand() *cobra.Command { - cmd := &cobra.Command{ - Use: "txs", - Short: "Search for all transactions that match the given tags", - RunE: todoNotImplemented, - } - cmd.Flags().StringSlice(flagTags, nil, "Tags that must match (may provide multiple)") - cmd.Flags().Bool(flagAny, false, "Return transactions that match ANY tag, rather than ALL") - return cmd -} - -func txCommand() *cobra.Command { - cmd := &cobra.Command{ - Use: "tx ", - Short: "Matches this txhash over all committed blocks", - RunE: todoNotImplemented, - } - return cmd -} diff --git a/cmd/gaiacli/key.go b/cmd/gaiacli/key.go deleted file mode 100644 index b3ffa323ae..0000000000 --- a/cmd/gaiacli/key.go +++ /dev/null @@ -1,77 +0,0 @@ -package main - -import "github.com/spf13/cobra" - -const ( - flagPassword = "password" - flagNewPassword = "new-password" - flagType = "type" - flagSeed = "seed" - flagDryRun = "dry-run" -) - -var ( - listKeysCmd = &cobra.Command{ - Use: "list", - Short: "List all locally availably keys", - RunE: todoNotImplemented, - } - - showKeysCmd = &cobra.Command{ - Use: "show ", - Short: "Show key info for the given name", - RunE: todoNotImplemented, - } -) - -// KeyCommands registers a sub-tree of commands to interact with -// local private key storage. -func KeyCommands() *cobra.Command { - cmd := &cobra.Command{ - Use: "keys", - Short: "Add or view local private keys", - } - cmd.AddCommand( - addKeyCommand(), - listKeysCmd, - showKeysCmd, - lineBreak, - deleteKeyCommand(), - updateKeyCommand(), - ) - return cmd -} - -func addKeyCommand() *cobra.Command { - cmd := &cobra.Command{ - Use: "add ", - Short: "Create a new key, or import from seed", - RunE: todoNotImplemented, - } - cmd.Flags().StringP(flagPassword, "p", "", "Password to encrypt private key") - cmd.Flags().StringP(flagType, "t", "ed25519", "Type of private key (ed25519|secp256k1|ledger)") - cmd.Flags().StringP(flagSeed, "s", "", "Provide seed phrase to recover existing key instead of creating") - cmd.Flags().Bool(flagDryRun, false, "Perform action, but don't add key to local keystore") - return cmd -} - -func updateKeyCommand() *cobra.Command { - cmd := &cobra.Command{ - Use: "update ", - Short: "Change the password used to protect private key", - RunE: todoNotImplemented, - } - cmd.Flags().StringP(flagPassword, "p", "", "Current password to decrypt key") - cmd.Flags().String(flagNewPassword, "", "New password to use to protect key") - return cmd -} - -func deleteKeyCommand() *cobra.Command { - cmd := &cobra.Command{ - Use: "delete ", - Short: "Delete the given key", - RunE: todoNotImplemented, - } - cmd.Flags().StringP(flagPassword, "p", "", "Password of existing key to delete") - return cmd -} diff --git a/cmd/gaiacli/main.go b/cmd/gaiacli/main.go index 0eb29c19ce..1c71d78291 100644 --- a/cmd/gaiacli/main.go +++ b/cmd/gaiacli/main.go @@ -1,21 +1,29 @@ package main import ( - "errors" "os" "github.com/spf13/cobra" "github.com/tendermint/tmlibs/cli" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/keys" + "github.com/cosmos/cosmos-sdk/client/lcd" + "github.com/cosmos/cosmos-sdk/client/rpc" + "github.com/cosmos/cosmos-sdk/client/tx" + "github.com/cosmos/cosmos-sdk/version" + authcmd "github.com/cosmos/cosmos-sdk/x/auth/commands" + bankcmd "github.com/cosmos/cosmos-sdk/x/bank/commands" + ibccmd "github.com/cosmos/cosmos-sdk/x/ibc/commands" + simplestakingcmd "github.com/cosmos/cosmos-sdk/x/simplestake/commands" + + "github.com/cosmos/cosmos-sdk/examples/basecoin/app" + "github.com/cosmos/cosmos-sdk/examples/basecoin/types" ) -const ( - flagTo = "to" - flagAmount = "amount" - flagFee = "fee" -) +// TODO: distinguish from basecli // rootCmd is the entry point for this binary var ( @@ -23,55 +31,58 @@ var ( Use: "gaiacli", Short: "Gaia light-client", } - - lineBreak = &cobra.Command{Run: func(*cobra.Command, []string) {}} - - getAccountCmd = &cobra.Command{ - Use: "account
", - Short: "Query account balance", - RunE: todoNotImplemented, - } ) -func todoNotImplemented(_ *cobra.Command, _ []string) error { - return errors.New("TODO: Command not yet implemented") -} - -func postSendCommand() *cobra.Command { - cmd := &cobra.Command{ - Use: "send", - Short: "Create and sign a send tx", - RunE: todoNotImplemented, - } - cmd.Flags().String(flagTo, "", "Address to send coins") - cmd.Flags().String(flagAmount, "", "Amount of coins to send") - cmd.Flags().String(flagFee, "", "Fee to pay along with transaction") - return cmd -} - func main() { // disable sorting cobra.EnableCommandSorting = false - // generic client commands - AddClientCommands(rootCmd) - // query commands (custom to binary) + // get the codec + cdc := app.MakeCodec() + + // TODO: setup keybase, viper object, etc. to be passed into + // the below functions and eliminate global vars, like we do + // with the cdc + + // add standard rpc, and tx commands + rpc.AddCommands(rootCmd) + rootCmd.AddCommand(client.LineBreak) + tx.AddCommands(rootCmd, cdc) + rootCmd.AddCommand(client.LineBreak) + + // add query/post commands (custom to binary) rootCmd.AddCommand( - GetCommands(getAccountCmd)...) - // post tx commands (custom to binary) + client.GetCommands( + authcmd.GetAccountCmd("main", cdc, types.GetAccountDecoder(cdc)), + )...) rootCmd.AddCommand( - PostCommands(postSendCommand())...) + client.PostCommands( + bankcmd.SendTxCmd(cdc), + )...) + rootCmd.AddCommand( + client.PostCommands( + ibccmd.IBCTransferCmd(cdc), + )...) + rootCmd.AddCommand( + client.PostCommands( + ibccmd.IBCRelayCmd(cdc), + simplestakingcmd.BondTxCmd(cdc), + )...) + rootCmd.AddCommand( + client.PostCommands( + simplestakingcmd.UnbondTxCmd(cdc), + )...) // add proxy, version and key info rootCmd.AddCommand( - lineBreak, - serveCommand(), - KeyCommands(), - lineBreak, + client.LineBreak, + lcd.ServeCommand(cdc), + keys.Commands(), + client.LineBreak, version.VersionCmd, ) // prepare and add flags - executor := cli.PrepareBaseCmd(rootCmd, "GA", os.ExpandEnv("$HOME/.gaiacli")) + executor := cli.PrepareMainCmd(rootCmd, "BC", os.ExpandEnv("$HOME/.gaiacli")) executor.Execute() }