From de2082577955ec29ed02208737b59c0f6f992448 Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Mon, 16 Jul 2018 19:32:56 +0200 Subject: [PATCH 01/40] Adding cosmos-sdk-cli - initial version --- cmd/cosmos-sdk-cli/cmd/init.go | 76 ++++++++++ cmd/cosmos-sdk-cli/cmd/root.go | 23 +++ cmd/cosmos-sdk-cli/main.go | 9 ++ cmd/cosmos-sdk-cli/template/Gopkg.toml | 58 ++++++++ cmd/cosmos-sdk-cli/template/Makefile | 23 +++ cmd/cosmos-sdk-cli/template/app/app.go | 144 +++++++++++++++++++ cmd/cosmos-sdk-cli/template/cmd/cli/main.go | 77 ++++++++++ cmd/cosmos-sdk-cli/template/cmd/node/main.go | 68 +++++++++ cmd/cosmos-sdk-cli/template/types/account.go | 78 ++++++++++ 9 files changed, 556 insertions(+) create mode 100644 cmd/cosmos-sdk-cli/cmd/init.go create mode 100644 cmd/cosmos-sdk-cli/cmd/root.go create mode 100644 cmd/cosmos-sdk-cli/main.go create mode 100644 cmd/cosmos-sdk-cli/template/Gopkg.toml create mode 100644 cmd/cosmos-sdk-cli/template/Makefile create mode 100644 cmd/cosmos-sdk-cli/template/app/app.go create mode 100644 cmd/cosmos-sdk-cli/template/cmd/cli/main.go create mode 100644 cmd/cosmos-sdk-cli/template/cmd/node/main.go create mode 100644 cmd/cosmos-sdk-cli/template/types/account.go diff --git a/cmd/cosmos-sdk-cli/cmd/init.go b/cmd/cosmos-sdk-cli/cmd/init.go new file mode 100644 index 000000000..eb72f6d94 --- /dev/null +++ b/cmd/cosmos-sdk-cli/cmd/init.go @@ -0,0 +1,76 @@ +package cmd + +import ( + "bufio" + "fmt" + "go/build" + "io/ioutil" + "os" + "strings" + "time" + + "github.com/gobuffalo/packr" + "github.com/pkg/errors" + "github.com/spf13/cobra" +) + +func init() { + rootCmd.AddCommand(initCmd) +} + +func resolveProjectPath(remoteProjectPath string) string { + gopath := os.Getenv("GOPATH") + if gopath == "" { + gopath = build.Default.GOPATH + // Use $HOME/go + } + return gopath + string(os.PathSeparator) + "src" + string(os.PathSeparator) + remoteProjectPath +} + +var initCmd = &cobra.Command{ + Use: "init AwesomeProjectName", + Short: "Initialize your new cosmos zone", + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return errors.New("Project name is required") + } + projectName := args[0] + capitalizedProjectName := strings.Title(projectName) + shortProjectName := strings.ToLower(projectName) + reader := bufio.NewReader(os.Stdin) + fmt.Println("Thank you for using cosmos-zone tool.") + fmt.Println("You are only a few steps away from creating your brand new blockchain project on Cosmos.") + fmt.Print("We will ask you a few more questions to guide you through this process\n\n") + fmt.Print("To configure this project we need a remote project path. If you are unsure you can leave this empty. ") + fmt.Print("Remote project path is usually something like github.com/your_user_name/project_name\n") + fmt.Print("Enter remote project path: ") + remoteProjectPath, _ := reader.ReadString('\n') + remoteProjectPath = strings.ToLower(strings.TrimSpace(remoteProjectPath)) + if remoteProjectPath == "" { + remoteProjectPath = strings.ToLower(shortProjectName) + } + projectPath := resolveProjectPath(remoteProjectPath) + fmt.Print("configuring the project in " + projectPath + "\n\n") + time.Sleep(2 * time.Second) + box := packr.NewBox("../template") + var replacer = strings.NewReplacer("_CAPITALIZED_PROJECT_SHORT_NAME_", capitalizedProjectName, "_PROJECT_SHORT_NAME_", shortProjectName, "_REMOTE_PROJECT_PATH_", remoteProjectPath) + box.Walk(func(path string, file packr.File) error { + actualPath := replacer.Replace(path) + fmt.Println("Creating file: " + actualPath) + contents := box.String(path) + contents = replacer.Replace(contents) + lastIndex := strings.LastIndex(actualPath, string(os.PathSeparator)) + rootDir := "" + if lastIndex != -1 { + rootDir = actualPath[0:lastIndex] + } + // Create directory + os.MkdirAll(projectPath+string(os.PathSeparator)+rootDir, os.ModePerm) + filePath := projectPath + string(os.PathSeparator) + actualPath + ioutil.WriteFile(filePath, []byte(contents), os.ModePerm) + return nil + }) + fmt.Println("Initialized a new project at " + projectPath + ". Happy hacking!") + return nil + }, +} diff --git a/cmd/cosmos-sdk-cli/cmd/root.go b/cmd/cosmos-sdk-cli/cmd/root.go new file mode 100644 index 000000000..c05234701 --- /dev/null +++ b/cmd/cosmos-sdk-cli/cmd/root.go @@ -0,0 +1,23 @@ +package cmd + +import ( + "fmt" + "os" + + "github.com/spf13/cobra" +) + +var rootCmd = &cobra.Command{ + Use: "cosmos-zone", + Short: "Tools to develop on cosmos-sdk", + Run: func(cmd *cobra.Command, args []string) { + // Do Stuff Here + }, +} + +func Execute() { + if err := rootCmd.Execute(); err != nil { + fmt.Println(err) + os.Exit(1) + } +} diff --git a/cmd/cosmos-sdk-cli/main.go b/cmd/cosmos-sdk-cli/main.go new file mode 100644 index 000000000..57dcb505b --- /dev/null +++ b/cmd/cosmos-sdk-cli/main.go @@ -0,0 +1,9 @@ +package main + +import ( + "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/cmd" +) + +func main() { + cmd.Execute() +} diff --git a/cmd/cosmos-sdk-cli/template/Gopkg.toml b/cmd/cosmos-sdk-cli/template/Gopkg.toml new file mode 100644 index 000000000..d4c3b8352 --- /dev/null +++ b/cmd/cosmos-sdk-cli/template/Gopkg.toml @@ -0,0 +1,58 @@ +# Gopkg.toml example +# +# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md +# for detailed Gopkg.toml documentation. +# +# required = ["github.com/user/thing/cmd/thing"] +# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] +# +# [[constraint]] +# name = "github.com/user/project" +# version = "1.0.0" +# +# [[constraint]] +# name = "github.com/user/project2" +# branch = "dev" +# source = "github.com/myfork/project2" +# +# [[override]] +# name = "github.com/x/y" +# version = "2.4.0" +# +# [prune] +# non-go = false +# go-tests = true +# unused-packages = true + +[[constraint]] + name = "github.com/pkg/errors" + version = "~0.8.0" + +[[constraint]] + name = "github.com/spf13/cobra" + version = "~0.0.1" + +[[constraint]] + name = "github.com/spf13/viper" + version = "~1.0.0" + +[[constraint]] + name = "github.com/stretchr/testify" + version = "~1.2.1" + +[[constraint]] + version = "~0.10.0" + source = "github.com/tendermint/go-amino" + name = "github.com/tendermint/go-wire" + +[[constraint]] + version = "~0.20.0" + name = "github.com/cosmos/cosmos-sdk" + +[[override]] + version = "=1.1.0" + name = "github.com/golang/protobuf" + +[prune] + go-tests = true + unused-packages = true diff --git a/cmd/cosmos-sdk-cli/template/Makefile b/cmd/cosmos-sdk-cli/template/Makefile new file mode 100644 index 000000000..33ef7263b --- /dev/null +++ b/cmd/cosmos-sdk-cli/template/Makefile @@ -0,0 +1,23 @@ +PACKAGES=$(shell go list ./... | grep -v '/vendor/') +#BUILD_FLAGS = -ldflags "-X _REMOTE_PROJECT_PATH_/version.GitCommit=`git rev-parse --short HEAD`" + +all: get_tools get_vendor_deps build test + +get_tools: + go get github.com/golang/dep/cmd/dep + +build: + go build -o bin/_PROJECT_SHORT_NAME_cli cmd/cli/main.go && go build -o bin/_PROJECT_SHORT_NAME_d cmd/node/main.go + +get_vendor_deps: + @rm -rf vendor/ + @dep ensure + +test: + @go test $(PACKAGES) + +benchmark: + @go test -bench=. $(PACKAGES) + +.PHONY: all build test benchmark + diff --git a/cmd/cosmos-sdk-cli/template/app/app.go b/cmd/cosmos-sdk-cli/template/app/app.go new file mode 100644 index 000000000..7c2df96f2 --- /dev/null +++ b/cmd/cosmos-sdk-cli/template/app/app.go @@ -0,0 +1,144 @@ +package app + +import ( + "encoding/json" + + abci "github.com/tendermint/tendermint/abci/types" + cmn "github.com/tendermint/tendermint/libs/common" + dbm "github.com/tendermint/tendermint/libs/db" + "github.com/tendermint/tendermint/libs/log" + tmtypes "github.com/tendermint/tendermint/types" + + bam "github.com/cosmos/cosmos-sdk/baseapp" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/wire" + "github.com/cosmos/cosmos-sdk/x/auth" + "github.com/cosmos/cosmos-sdk/x/bank" + + "_REMOTE_PROJECT_PATH_/types" +) + +const ( + appName = "_CAPITALIZED_PROJECT_SHORT_NAME_App" +) + +// Extended ABCI application +type _CAPITALIZED_PROJECT_SHORT_NAME_App struct { + *bam.BaseApp + cdc *wire.Codec + + // keys to access the substores + capKeyMainStore *sdk.KVStoreKey + capKeyAccountStore *sdk.KVStoreKey + + // keepers + feeCollectionKeeper auth.FeeCollectionKeeper + coinKeeper bank.Keeper + + // Manage getting and setting accounts + accountMapper auth.AccountMapper +} + +func New_CAPITALIZED_PROJECT_SHORT_NAME_App(logger log.Logger, db dbm.DB) *_CAPITALIZED_PROJECT_SHORT_NAME_App { + + // Create app-level codec for txs and accounts. + var cdc = MakeCodec() + + // Create your application object. + var app = &_CAPITALIZED_PROJECT_SHORT_NAME_App{ + BaseApp: bam.NewBaseApp(appName, cdc, logger, db), + cdc: cdc, + capKeyMainStore: sdk.NewKVStoreKey("main"), + capKeyAccountStore: sdk.NewKVStoreKey("acc"), + } + + // Define the accountMapper. + app.accountMapper = auth.NewAccountMapper( + cdc, + app.capKeyAccountStore, // target store + types.ProtoAppAccount(), // prototype + ) + + // Add handlers. + app.coinKeeper = bank.NewKeeper(app.accountMapper) + app.Router(). + AddRoute("bank", bank.NewHandler(app.coinKeeper)) + + // Initialize BaseApp. + app.SetInitChainer(app.initChainerFn()) + app.MountStoresIAVL(app.capKeyMainStore, app.capKeyAccountStore) + app.SetAnteHandler(auth.NewAnteHandler(app.accountMapper, app.feeCollectionKeeper)) + err := app.LoadLatestVersion(app.capKeyMainStore) + if err != nil { + cmn.Exit(err.Error()) + } + return app +} + +// custom tx codec +func MakeCodec() *wire.Codec { + var cdc = wire.NewCodec() + wire.RegisterCrypto(cdc) // Register crypto. + sdk.RegisterWire(cdc) // Register Msgs + bank.RegisterWire(cdc) + + // Register AppAccount + cdc.RegisterInterface((*auth.Account)(nil), nil) + cdc.RegisterConcrete(&types.AppAccount{}, "_PROJECT_SHORT_NAME_/Account", nil) + + cdc.Seal() + + return cdc +} + +// custom logic for _PROJECT_SHORT_NAME_ initialization +// nolint: unparam +func (app *_CAPITALIZED_PROJECT_SHORT_NAME_App) initChainerFn() sdk.InitChainer { + return func(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain { + stateJSON := req.AppStateBytes + + genesisState := new(types.GenesisState) + err := app.cdc.UnmarshalJSON(stateJSON, genesisState) + if err != nil { + panic(err) // TODO https://github.com/cosmos/cosmos-sdk/issues/468 + // return sdk.ErrGenesisParse("").TraceCause(err, "") + } + + for _, gacc := range genesisState.Accounts { + acc, err := gacc.ToAppAccount() + if err != nil { + panic(err) // TODO https://github.com/cosmos/cosmos-sdk/issues/468 + // return sdk.ErrGenesisParse("").TraceCause(err, "") + } + app.accountMapper.SetAccount(ctx, acc) + } + + return abci.ResponseInitChain{} + } +} + +// Custom logic for state export +func (app *_CAPITALIZED_PROJECT_SHORT_NAME_App) ExportAppStateAndValidators() (appState json.RawMessage, validators []tmtypes.GenesisValidator, err error) { + ctx := app.NewContext(true, abci.Header{}) + + // iterate to get the accounts + accounts := []*types.GenesisAccount{} + appendAccount := func(acc auth.Account) (stop bool) { + account := &types.GenesisAccount{ + Address: acc.GetAddress(), + Coins: acc.GetCoins(), + } + accounts = append(accounts, account) + return false + } + app.accountMapper.IterateAccounts(ctx, appendAccount) + + genState := types.GenesisState{ + Accounts: accounts, + } + appState, err = wire.MarshalJSONIndent(app.cdc, genState) + if err != nil { + return nil, nil, err + } + return appState, validators, nil +} diff --git a/cmd/cosmos-sdk-cli/template/cmd/cli/main.go b/cmd/cosmos-sdk-cli/template/cmd/cli/main.go new file mode 100644 index 000000000..8d03bf825 --- /dev/null +++ b/cmd/cosmos-sdk-cli/template/cmd/cli/main.go @@ -0,0 +1,77 @@ +package main + +import ( + "os" + + "github.com/spf13/cobra" + + "github.com/tendermint/tendermint/libs/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/client/cli" + bankcmd "github.com/cosmos/cosmos-sdk/x/bank/client/cli" + + "_REMOTE_PROJECT_PATH_/app" + "_REMOTE_PROJECT_PATH_/types" +) + +// rootCmd is the entry point for this binary +var ( + rootCmd = &cobra.Command{ + Use: "_PROJECT_SHORT_NAME_cli", + Short: "_CAPITALIZED_PROJECT_SHORT_NAME_ light-client", + } +) + +func main() { + // disable sorting + cobra.EnableCommandSorting = false + + // 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) + // start with commands common to basecoin + rootCmd.AddCommand( + client.GetCommands( + authcmd.GetAccountCmd("acc", cdc, types.GetAccountDecoder(cdc)), + )...) + rootCmd.AddCommand( + client.PostCommands( + bankcmd.SendTxCmd(cdc), + )...) + // and now _PROJECT_SHORT_NAME_ specific commands here + + // add proxy, version and key info + rootCmd.AddCommand( + client.LineBreak, + lcd.ServeCommand(cdc), + keys.Commands(), + client.LineBreak, + version.VersionCmd, + ) + + // prepare and add flags + executor := cli.PrepareMainCmd(rootCmd, "BC", os.ExpandEnv("$HOME/._PROJECT_SHORT_NAME_cli")) + err := executor.Execute() + if err != nil { + // handle with #870 + panic(err) + } +} diff --git a/cmd/cosmos-sdk-cli/template/cmd/node/main.go b/cmd/cosmos-sdk-cli/template/cmd/node/main.go new file mode 100644 index 000000000..edc20449e --- /dev/null +++ b/cmd/cosmos-sdk-cli/template/cmd/node/main.go @@ -0,0 +1,68 @@ +package main + +import ( + "encoding/json" + "os" + + "github.com/spf13/cobra" + + abci "github.com/tendermint/tendermint/abci/types" + "github.com/tendermint/tendermint/libs/cli" + dbm "github.com/tendermint/tendermint/libs/db" + "github.com/tendermint/tendermint/libs/log" + tmtypes "github.com/tendermint/tendermint/types" + + "_REMOTE_PROJECT_PATH_/app" + + "github.com/cosmos/cosmos-sdk/server" + "github.com/cosmos/cosmos-sdk/wire" +) + +// init parameters +var _CAPITALIZED_PROJECT_SHORT_NAME_AppInit = server.AppInit{ + AppGenState: _CAPITALIZED_PROJECT_SHORT_NAME_AppGenState, + AppGenTx: server.SimpleAppGenTx, +} + +// GenAppParams sets up the app_state, append any other app specific components. +func _CAPITALIZED_PROJECT_SHORT_NAME_AppGenState(cdc *wire.Codec, appGenTxs []json.RawMessage) (appState json.RawMessage, err error) { + appState, err = server.SimpleAppGenState(cdc, appGenTxs) + if err != nil { + return + } + + return +} + +func newApp(logger log.Logger, db dbm.DB) abci.Application { + return app.New_CAPITALIZED_PROJECT_SHORT_NAME_App(logger, db) +} + +func exportAppStateAndTMValidators(logger log.Logger, db dbm.DB) (json.RawMessage, []tmtypes.GenesisValidator, error) { + dapp := app.New_CAPITALIZED_PROJECT_SHORT_NAME_App(logger, db) + return dapp.ExportAppStateAndValidators() +} + +func main() { + cdc := app.MakeCodec() + ctx := server.NewDefaultContext() + + rootCmd := &cobra.Command{ + Use: "_PROJECT_SHORT_NAME_d", + Short: "_CAPITALIZED_PROJECT_SHORT_NAME_ Daemon (server)", + PersistentPreRunE: server.PersistentPreRunEFn(ctx), + } + + server.AddCommands(ctx, cdc, rootCmd, _CAPITALIZED_PROJECT_SHORT_NAME_AppInit, + server.ConstructAppCreator(newApp, "_PROJECT_SHORT_NAME_"), + server.ConstructAppExporter(exportAppStateAndTMValidators, "_PROJECT_SHORT_NAME_")) + + // prepare and add flags + rootDir := os.ExpandEnv("$HOME/._PROJECT_SHORT_NAME_d") + executor := cli.PrepareBaseCmd(rootCmd, "BC", rootDir) + err := executor.Execute() + if err != nil { + // handle with #870 + panic(err) + } +} diff --git a/cmd/cosmos-sdk-cli/template/types/account.go b/cmd/cosmos-sdk-cli/template/types/account.go new file mode 100644 index 000000000..d24ac045f --- /dev/null +++ b/cmd/cosmos-sdk-cli/template/types/account.go @@ -0,0 +1,78 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/wire" + "github.com/cosmos/cosmos-sdk/x/auth" + +) + +var _ auth.Account = (*AppAccount)(nil) + +// Custom extensions for this application. This is just an example of +// extending auth.BaseAccount with custom fields. +// +// This is compatible with the stock auth.AccountStore, since +// auth.AccountStore uses the flexible go-amino library. +type AppAccount struct { + auth.BaseAccount + Name string `json:"name"` +} + +// Constructor for AppAccount +func ProtoAppAccount() auth.Account { + return &AppAccount{} +} + +// nolint +func (acc AppAccount) GetName() string { return acc.Name } +func (acc *AppAccount) SetName(name string) { acc.Name = name } + +// Get the AccountDecoder function for the custom AppAccount +func GetAccountDecoder(cdc *wire.Codec) auth.AccountDecoder { + return func(accBytes []byte) (res auth.Account, err error) { + if len(accBytes) == 0 { + return nil, sdk.ErrTxDecode("accBytes are empty") + } + acct := new(AppAccount) + err = cdc.UnmarshalBinaryBare(accBytes, &acct) + if err != nil { + panic(err) + } + return acct, err + } +} + +//___________________________________________________________________________________ + +// State to Unmarshal +type GenesisState struct { + Accounts []*GenesisAccount `json:"accounts"` +} + +// GenesisAccount doesn't need pubkey or sequence +type GenesisAccount struct { + Name string `json:"name"` + Address sdk.AccAddress `json:"address"` + Coins sdk.Coins `json:"coins"` +} + +func NewGenesisAccount(aa *AppAccount) *GenesisAccount { + return &GenesisAccount{ + Name: aa.Name, + Address: aa.Address, + Coins: aa.Coins.Sort(), + } +} + +// convert GenesisAccount to AppAccount +func (ga *GenesisAccount) ToAppAccount() (acc *AppAccount, err error) { + baseAcc := auth.BaseAccount{ + Address: ga.Address, + Coins: ga.Coins.Sort(), + } + return &AppAccount{ + BaseAccount: baseAcc, + Name: ga.Name, + }, nil +} From 26cf09dfa2caf0ca6e6f08aad2267075c745b99a Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Mon, 16 Jul 2018 20:07:05 +0200 Subject: [PATCH 02/40] Modifying the _REMOTE_PROJECT_PATH, _PROJECT_SHORT_NAME_, _CAPITALIZED_PROJECT_SHORT_NAME_ to actual names and packages --- cmd/cosmos-sdk-cli/cmd/init.go | 2 +- cmd/cosmos-sdk-cli/template/Makefile | 4 ++-- cmd/cosmos-sdk-cli/template/app/app.go | 18 +++++++-------- cmd/cosmos-sdk-cli/template/cmd/cli/main.go | 12 +++++----- cmd/cosmos-sdk-cli/template/cmd/node/main.go | 24 ++++++++++---------- 5 files changed, 30 insertions(+), 30 deletions(-) diff --git a/cmd/cosmos-sdk-cli/cmd/init.go b/cmd/cosmos-sdk-cli/cmd/init.go index eb72f6d94..f5ded2215 100644 --- a/cmd/cosmos-sdk-cli/cmd/init.go +++ b/cmd/cosmos-sdk-cli/cmd/init.go @@ -53,7 +53,7 @@ var initCmd = &cobra.Command{ fmt.Print("configuring the project in " + projectPath + "\n\n") time.Sleep(2 * time.Second) box := packr.NewBox("../template") - var replacer = strings.NewReplacer("_CAPITALIZED_PROJECT_SHORT_NAME_", capitalizedProjectName, "_PROJECT_SHORT_NAME_", shortProjectName, "_REMOTE_PROJECT_PATH_", remoteProjectPath) + var replacer = strings.NewReplacer("MyAwesomeProject", capitalizedProjectName, "myawesomeproject", shortProjectName, "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli", remoteProjectPath) box.Walk(func(path string, file packr.File) error { actualPath := replacer.Replace(path) fmt.Println("Creating file: " + actualPath) diff --git a/cmd/cosmos-sdk-cli/template/Makefile b/cmd/cosmos-sdk-cli/template/Makefile index 33ef7263b..8d7f55706 100644 --- a/cmd/cosmos-sdk-cli/template/Makefile +++ b/cmd/cosmos-sdk-cli/template/Makefile @@ -1,5 +1,5 @@ PACKAGES=$(shell go list ./... | grep -v '/vendor/') -#BUILD_FLAGS = -ldflags "-X _REMOTE_PROJECT_PATH_/version.GitCommit=`git rev-parse --short HEAD`" +#BUILD_FLAGS = -ldflags "-X github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/version.GitCommit=`git rev-parse --short HEAD`" all: get_tools get_vendor_deps build test @@ -7,7 +7,7 @@ get_tools: go get github.com/golang/dep/cmd/dep build: - go build -o bin/_PROJECT_SHORT_NAME_cli cmd/cli/main.go && go build -o bin/_PROJECT_SHORT_NAME_d cmd/node/main.go + go build -o bin/myawesomeprojectcli cmd/cli/main.go && go build -o bin/_PROJECT_SHORT_NAME_d cmd/node/main.go get_vendor_deps: @rm -rf vendor/ diff --git a/cmd/cosmos-sdk-cli/template/app/app.go b/cmd/cosmos-sdk-cli/template/app/app.go index 7c2df96f2..bc536101c 100644 --- a/cmd/cosmos-sdk-cli/template/app/app.go +++ b/cmd/cosmos-sdk-cli/template/app/app.go @@ -15,15 +15,15 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/bank" - "_REMOTE_PROJECT_PATH_/types" + "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/types" ) const ( - appName = "_CAPITALIZED_PROJECT_SHORT_NAME_App" + appName = "MyAwesomeProjectApp" ) // Extended ABCI application -type _CAPITALIZED_PROJECT_SHORT_NAME_App struct { +type MyAwesomeProjectApp struct { *bam.BaseApp cdc *wire.Codec @@ -39,13 +39,13 @@ type _CAPITALIZED_PROJECT_SHORT_NAME_App struct { accountMapper auth.AccountMapper } -func New_CAPITALIZED_PROJECT_SHORT_NAME_App(logger log.Logger, db dbm.DB) *_CAPITALIZED_PROJECT_SHORT_NAME_App { +func NewMyAwesomeProjectApp(logger log.Logger, db dbm.DB) *MyAwesomeProjectApp { // Create app-level codec for txs and accounts. var cdc = MakeCodec() // Create your application object. - var app = &_CAPITALIZED_PROJECT_SHORT_NAME_App{ + var app = &MyAwesomeProjectApp{ BaseApp: bam.NewBaseApp(appName, cdc, logger, db), cdc: cdc, capKeyMainStore: sdk.NewKVStoreKey("main"), @@ -84,16 +84,16 @@ func MakeCodec() *wire.Codec { // Register AppAccount cdc.RegisterInterface((*auth.Account)(nil), nil) - cdc.RegisterConcrete(&types.AppAccount{}, "_PROJECT_SHORT_NAME_/Account", nil) + cdc.RegisterConcrete(&types.AppAccount{}, "myawesomeproject/Account", nil) cdc.Seal() return cdc } -// custom logic for _PROJECT_SHORT_NAME_ initialization +// custom logic for myawesomeproject initialization // nolint: unparam -func (app *_CAPITALIZED_PROJECT_SHORT_NAME_App) initChainerFn() sdk.InitChainer { +func (app *MyAwesomeProjectApp) initChainerFn() sdk.InitChainer { return func(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain { stateJSON := req.AppStateBytes @@ -118,7 +118,7 @@ func (app *_CAPITALIZED_PROJECT_SHORT_NAME_App) initChainerFn() sdk.InitChainer } // Custom logic for state export -func (app *_CAPITALIZED_PROJECT_SHORT_NAME_App) ExportAppStateAndValidators() (appState json.RawMessage, validators []tmtypes.GenesisValidator, err error) { +func (app *MyAwesomeProjectApp) ExportAppStateAndValidators() (appState json.RawMessage, validators []tmtypes.GenesisValidator, err error) { ctx := app.NewContext(true, abci.Header{}) // iterate to get the accounts diff --git a/cmd/cosmos-sdk-cli/template/cmd/cli/main.go b/cmd/cosmos-sdk-cli/template/cmd/cli/main.go index 8d03bf825..33a888f3b 100644 --- a/cmd/cosmos-sdk-cli/template/cmd/cli/main.go +++ b/cmd/cosmos-sdk-cli/template/cmd/cli/main.go @@ -17,15 +17,15 @@ import ( authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli" bankcmd "github.com/cosmos/cosmos-sdk/x/bank/client/cli" - "_REMOTE_PROJECT_PATH_/app" - "_REMOTE_PROJECT_PATH_/types" + "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/app" + "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/types" ) // rootCmd is the entry point for this binary var ( rootCmd = &cobra.Command{ - Use: "_PROJECT_SHORT_NAME_cli", - Short: "_CAPITALIZED_PROJECT_SHORT_NAME_ light-client", + Use: "myawesomeprojectcli", + Short: "MyAwesomeProject light-client", } ) @@ -56,7 +56,7 @@ func main() { client.PostCommands( bankcmd.SendTxCmd(cdc), )...) - // and now _PROJECT_SHORT_NAME_ specific commands here + // and now myawesomeproject specific commands here // add proxy, version and key info rootCmd.AddCommand( @@ -68,7 +68,7 @@ func main() { ) // prepare and add flags - executor := cli.PrepareMainCmd(rootCmd, "BC", os.ExpandEnv("$HOME/._PROJECT_SHORT_NAME_cli")) + executor := cli.PrepareMainCmd(rootCmd, "BC", os.ExpandEnv("$HOME/.myawesomeprojectcli")) err := executor.Execute() if err != nil { // handle with #870 diff --git a/cmd/cosmos-sdk-cli/template/cmd/node/main.go b/cmd/cosmos-sdk-cli/template/cmd/node/main.go index edc20449e..79722ae20 100644 --- a/cmd/cosmos-sdk-cli/template/cmd/node/main.go +++ b/cmd/cosmos-sdk-cli/template/cmd/node/main.go @@ -12,20 +12,20 @@ import ( "github.com/tendermint/tendermint/libs/log" tmtypes "github.com/tendermint/tendermint/types" - "_REMOTE_PROJECT_PATH_/app" + "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/app" "github.com/cosmos/cosmos-sdk/server" "github.com/cosmos/cosmos-sdk/wire" ) // init parameters -var _CAPITALIZED_PROJECT_SHORT_NAME_AppInit = server.AppInit{ - AppGenState: _CAPITALIZED_PROJECT_SHORT_NAME_AppGenState, +var MyAwesomeProjectAppInit = server.AppInit{ + AppGenState: MyAwesomeProjectAppGenState, AppGenTx: server.SimpleAppGenTx, } // GenAppParams sets up the app_state, append any other app specific components. -func _CAPITALIZED_PROJECT_SHORT_NAME_AppGenState(cdc *wire.Codec, appGenTxs []json.RawMessage) (appState json.RawMessage, err error) { +func MyAwesomeProjectAppGenState(cdc *wire.Codec, appGenTxs []json.RawMessage) (appState json.RawMessage, err error) { appState, err = server.SimpleAppGenState(cdc, appGenTxs) if err != nil { return @@ -35,11 +35,11 @@ func _CAPITALIZED_PROJECT_SHORT_NAME_AppGenState(cdc *wire.Codec, appGenTxs []js } func newApp(logger log.Logger, db dbm.DB) abci.Application { - return app.New_CAPITALIZED_PROJECT_SHORT_NAME_App(logger, db) + return app.NewMyAwesomeProjectApp(logger, db) } func exportAppStateAndTMValidators(logger log.Logger, db dbm.DB) (json.RawMessage, []tmtypes.GenesisValidator, error) { - dapp := app.New_CAPITALIZED_PROJECT_SHORT_NAME_App(logger, db) + dapp := app.NewMyAwesomeProjectApp(logger, db) return dapp.ExportAppStateAndValidators() } @@ -48,17 +48,17 @@ func main() { ctx := server.NewDefaultContext() rootCmd := &cobra.Command{ - Use: "_PROJECT_SHORT_NAME_d", - Short: "_CAPITALIZED_PROJECT_SHORT_NAME_ Daemon (server)", + Use: "myawesomeprojectd", + Short: "MyAwesomeProject Daemon (server)", PersistentPreRunE: server.PersistentPreRunEFn(ctx), } - server.AddCommands(ctx, cdc, rootCmd, _CAPITALIZED_PROJECT_SHORT_NAME_AppInit, - server.ConstructAppCreator(newApp, "_PROJECT_SHORT_NAME_"), - server.ConstructAppExporter(exportAppStateAndTMValidators, "_PROJECT_SHORT_NAME_")) + server.AddCommands(ctx, cdc, rootCmd, MyAwesomeProjectAppInit, + server.ConstructAppCreator(newApp, "myawesomeproject"), + server.ConstructAppExporter(exportAppStateAndTMValidators, "myawesomeproject")) // prepare and add flags - rootDir := os.ExpandEnv("$HOME/._PROJECT_SHORT_NAME_d") + rootDir := os.ExpandEnv("$HOME/.myawesomeprojectd") executor := cli.PrepareBaseCmd(rootCmd, "BC", rootDir) err := executor.Execute() if err != nil { From 26aa8719576561afdec7ce094a368a50db4b1db9 Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Mon, 16 Jul 2018 20:11:36 +0200 Subject: [PATCH 03/40] Changing _PROJECT_SHORT_NAME_ to myawesomeproject in Makefile --- cmd/cosmos-sdk-cli/template/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/cosmos-sdk-cli/template/Makefile b/cmd/cosmos-sdk-cli/template/Makefile index 8d7f55706..77e62de8e 100644 --- a/cmd/cosmos-sdk-cli/template/Makefile +++ b/cmd/cosmos-sdk-cli/template/Makefile @@ -7,7 +7,7 @@ get_tools: go get github.com/golang/dep/cmd/dep build: - go build -o bin/myawesomeprojectcli cmd/cli/main.go && go build -o bin/_PROJECT_SHORT_NAME_d cmd/node/main.go + go build -o bin/myawesomeprojectcli cmd/cli/main.go && go build -o bin/myawesomeprojectd cmd/node/main.go get_vendor_deps: @rm -rf vendor/ From 4e1cbb7d516998be8c2e8585879ccc30fbac387d Mon Sep 17 00:00:00 2001 From: Zach Ramsay Date: Mon, 16 Jul 2018 14:19:11 -0400 Subject: [PATCH 04/40] docs: how they're updated --- docs/DOCS_README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 docs/DOCS_README.md diff --git a/docs/DOCS_README.md b/docs/DOCS_README.md new file mode 100644 index 000000000..564a7e955 --- /dev/null +++ b/docs/DOCS_README.md @@ -0,0 +1,17 @@ +# Documentation Maintenance Overview + +The documentation found in this directory is hosted at: + +- https://cosmos.network/docs/ + +and built using [VuePress](https://vuepress.vuejs.org/) from the Cosmos website repo: + +- https://github.com/cosmos/cosmos.network + +which has a [configuration file](https://github.com/cosmos/cosmos.network/blob/develop/docs/.vuepress/config.js) for displaying +the Table of Contents that lists all the documentation. + +Under the hood, Jenkins listens for changes in ./docs then pushes a `docs-staging` branch to the cosmos.network repo with the latest documentation. That branch must be manually PR'd to `develop` then `master` for staging then production. This process should happen in synchrony with a release. + +The `README.md` in this directory is the landing page for +website documentation. From b952331b22ce92a34450793f5ecc7c08b23f43e1 Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Mon, 16 Jul 2018 20:45:56 +0200 Subject: [PATCH 05/40] Including changes to Makefile to build cosmos-sdk-cli and also ignoring linting for cosmos-sdk-cli --- Gopkg.lock | 10 +++++++--- Gopkg.toml | 4 ++++ Makefile | 26 +++++++++++++++++++------- cmd/cosmos-sdk-cli/cmd/root.go | 3 ++- tools/Makefile | 15 +++++++++++++++ 5 files changed, 47 insertions(+), 11 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index 63f53a96f..3d5f74179 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -2,7 +2,6 @@ [[projects]] - branch = "master" name = "github.com/bartekn/go-bip39" packages = ["."] revision = "a05967ea095d81c8fe4833776774cfaff8e5036c" @@ -79,6 +78,12 @@ revision = "259ab82a6cad3992b4e21ff5cac294ccb06474bc" version = "v1.7.0" +[[projects]] + name = "github.com/gobuffalo/packr" + packages = ["."] + revision = "bd47f2894846e32edcf9aa37290fef76c327883f" + version = "v1.11.1" + [[projects]] name = "github.com/gogo/protobuf" packages = [ @@ -135,7 +140,6 @@ ".", "hcl/ast", "hcl/parser", - "hcl/printer", "hcl/scanner", "hcl/strconv", "hcl/token", @@ -503,6 +507,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "94abff3ff321fd150a6e4b95d109297296cdc00693c648c9b2a48171b90e36b0" + inputs-digest = "2a655310c28a7f80cb2cfe5f2969182896aac09293344472de10e9135ddc364c" solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index 3db675ebb..2a8ef4bc7 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -67,6 +67,10 @@ name = "github.com/zondax/ledger-goclient" revision = "39ba4728c137c75718a21f9b4b3280fa31b9139b" +[[constraint]] + name = "github.com/gobuffalo/packr" + version = "1.11.1" + [prune] go-tests = true unused-packages = true diff --git a/Makefile b/Makefile index b6b136f51..25e9f5c87 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ -PACKAGES=$(shell go list ./... | grep -v '/vendor/') -PACKAGES_NOCLITEST=$(shell go list ./... | grep -v '/vendor/' | grep -v github.com/cosmos/cosmos-sdk/cmd/gaia/cli_test) +PACKAGES=$(shell go list ./... | grep -v '/vendor/' | grep -v '/cosmos-sdk-cli/template') +PACKAGES_NOCLITEST=$(shell go list ./... | grep -v '/vendor/' | grep -v '/cosmos-sdk-cli/template' | grep -v github.com/cosmos/cosmos-sdk/cmd/gaia/cli_test) COMMIT_HASH := $(shell git rev-parse --short HEAD) BUILD_TAGS = netgo ledger BUILD_FLAGS = -tags "${BUILD_TAGS}" -ldflags "-X github.com/cosmos/cosmos-sdk/version.GitCommit=${COMMIT_HASH}" @@ -37,6 +37,15 @@ endif build-linux: LEDGER_ENABLED=false GOOS=linux GOARCH=amd64 $(MAKE) build +build_cosmos-sdk-cli: +ifeq ($(OS),Windows_NT) + packr build $(BUILD_FLAGS) -o build/cosmos-sdk-cli.exe ./cmd/cosmos-sdk-cli + packr clean +else + packr build $(BUILD_FLAGS) -o build/cosmos-sdk-cli ./cmd/cosmos-sdk-cli + packr clean +endif + build_examples: ifeq ($(OS),Windows_NT) go build $(BUILD_FLAGS) -o build/basecoind.exe ./examples/basecoin/cmd/basecoind @@ -60,6 +69,9 @@ install_examples: go install $(BUILD_FLAGS) ./examples/democoin/cmd/democoind go install $(BUILD_FLAGS) ./examples/democoin/cmd/democli +install_cosmos-sdk-cli: + go install $(BUILD_FLAGS) ./cmd/cosmos-sdk-cli + install_debug: go install $(BUILD_FLAGS) ./cmd/gaia/cmd/gaiadebug @@ -82,7 +94,7 @@ get_tools: get_vendor_deps: @rm -rf vendor/ @echo "--> Running dep ensure" - @dep ensure -v + @dep ensure -v --vendor-only draw_deps: @# requires brew install graphviz or apt-get install graphviz @@ -116,9 +128,9 @@ test_cover: @bash tests/test_cover.sh test_lint: - gometalinter.v2 --config=tools/gometalinter.json ./... - !(gometalinter.v2 --disable-all --enable='errcheck' --vendor ./... | grep -v "client/") - find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" | xargs gofmt -d -s + gometalinter.v2 --config=tools/gometalinter.json ./... --exclude cmd/cosmos-sdk-cli + !(gometalinter.v2 --disable-all --enable='errcheck' --vendor ./... | grep -v "client/" | grep -v "cosmos-sdk-cli/template/") + find . -name '*.go' -type f -not -path "./vendor*" -not -path "./cmd/cosmos-sdk-cli/*" -not -path "*.git*" | xargs gofmt -d -s dep status >> /dev/null !(grep -n branch Gopkg.toml) @@ -193,7 +205,7 @@ remotenet-status: # To avoid unintended conflicts with file names, always add to .PHONY # unless there is a reason not to. # https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html -.PHONY: build build_examples install install_examples install_debug dist \ +.PHONY: build build_cosmos-sdk-cli build_examples install install_examples install_cosmos-sdk-cli install_debug dist \ check_tools get_tools get_vendor_deps draw_deps test test_cli test_unit \ test_cover test_lint benchmark devdoc_init devdoc devdoc_save devdoc_update \ build-linux build-docker-gaiadnode localnet-start localnet-stop remotenet-start \ diff --git a/cmd/cosmos-sdk-cli/cmd/root.go b/cmd/cosmos-sdk-cli/cmd/root.go index c05234701..ae09169d9 100644 --- a/cmd/cosmos-sdk-cli/cmd/root.go +++ b/cmd/cosmos-sdk-cli/cmd/root.go @@ -8,13 +8,14 @@ import ( ) var rootCmd = &cobra.Command{ - Use: "cosmos-zone", + Use: "cosmos-sdk-cli", Short: "Tools to develop on cosmos-sdk", Run: func(cmd *cobra.Command, args []string) { // Do Stuff Here }, } +// Execute the command func Execute() { if err := rootCmd.Execute(); err != nil { fmt.Println(err) diff --git a/tools/Makefile b/tools/Makefile index d58f52d1b..5dfbd08fa 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -13,6 +13,7 @@ MISSPELL = github.com/client9/misspell/cmd/misspell ERRCHECK = github.com/kisielk/errcheck UNPARAM = mvdan.cc/unparam GOCYCLO = github.com/alecthomas/gocyclo +PACKR = github.com/gobuffalo/packr DEP_CHECK := $(shell command -v dep 2> /dev/null) GOLINT_CHECK := $(shell command -v golint 2> /dev/null) @@ -23,6 +24,7 @@ MISSPELL_CHECK := $(shell command -v misspell 2> /dev/null) ERRCHECK_CHECK := $(shell command -v errcheck 2> /dev/null) UNPARAM_CHECK := $(shell command -v unparam 2> /dev/null) GOCYCLO_CHECK := $(shell command -v gocyclo 2> /dev/null) +PACKR_CHECK := $(shell command -v packr 2> /dev/null) check_tools: ifndef DEP_CHECK @@ -70,6 +72,11 @@ ifndef GOCYCLO_CHECK else @echo "Found gocyclo in path." endif +ifndef PACKR_CHECK + @echo "No packr in path. Install with make get_tools'." +else + @echo "Found packr in path." +endif get_tools: ifdef DEP_CHECK @@ -126,6 +133,12 @@ else @echo "Installing goyclo" go get -v $(GOCYCLO) endif +ifdef PACKR_CHECK + @echo "Packr is already installed. Run 'make update_tools' to update." +else + @echo "$(ansi_grn)Installing packr$(ansi_end)" + go get -v $(PACKR) +endif update_tools: @echo "Updating dep" @@ -146,6 +159,8 @@ update_tools: go get -u -v $(UNPARAM) @echo "Updating goyclo" go get -u -v $(GOCYCLO) + @echo "Updating packr" + go get -u -v $(PACKR) # To avoid unintended conflicts with file names, always add to .PHONY # unless there is a reason not to. From c0cf5952211c39770a0b1cec9df75160ea56f488 Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Mon, 16 Jul 2018 21:16:39 +0200 Subject: [PATCH 06/40] Using packr install instead of go install --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 25e9f5c87..7d452d91a 100644 --- a/Makefile +++ b/Makefile @@ -70,7 +70,8 @@ install_examples: go install $(BUILD_FLAGS) ./examples/democoin/cmd/democli install_cosmos-sdk-cli: - go install $(BUILD_FLAGS) ./cmd/cosmos-sdk-cli + packr install $(BUILD_FLAGS) ./cmd/cosmos-sdk-cli + packr clean install_debug: go install $(BUILD_FLAGS) ./cmd/gaia/cmd/gaiadebug From e3a54f7c2875ab486f49358507edd30cf6336341 Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Mon, 16 Jul 2018 21:23:27 +0200 Subject: [PATCH 07/40] ignoring template directory in cosmos-sdk-cli --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 7d452d91a..d567c9913 100644 --- a/Makefile +++ b/Makefile @@ -129,9 +129,9 @@ test_cover: @bash tests/test_cover.sh test_lint: - gometalinter.v2 --config=tools/gometalinter.json ./... --exclude cmd/cosmos-sdk-cli + gometalinter.v2 --config=tools/gometalinter.json ./... --exclude cmd/cosmos-sdk-cli/template !(gometalinter.v2 --disable-all --enable='errcheck' --vendor ./... | grep -v "client/" | grep -v "cosmos-sdk-cli/template/") - find . -name '*.go' -type f -not -path "./vendor*" -not -path "./cmd/cosmos-sdk-cli/*" -not -path "*.git*" | xargs gofmt -d -s + find . -name '*.go' -type f -not -path "./vendor*" -not -path "./cmd/cosmos-sdk-cli/template" -not -path "*.git*" | xargs gofmt -d -s dep status >> /dev/null !(grep -n branch Gopkg.toml) From 4208c0d2eb699d9d1c7b19eae3e7b107f8325e4f Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Mon, 16 Jul 2018 21:30:19 +0200 Subject: [PATCH 08/40] Formatting go code in template --- cmd/cosmos-sdk-cli/template/app/app.go | 2 +- cmd/cosmos-sdk-cli/template/types/account.go | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/cmd/cosmos-sdk-cli/template/app/app.go b/cmd/cosmos-sdk-cli/template/app/app.go index bc536101c..d73d7df34 100644 --- a/cmd/cosmos-sdk-cli/template/app/app.go +++ b/cmd/cosmos-sdk-cli/template/app/app.go @@ -134,7 +134,7 @@ func (app *MyAwesomeProjectApp) ExportAppStateAndValidators() (appState json.Raw app.accountMapper.IterateAccounts(ctx, appendAccount) genState := types.GenesisState{ - Accounts: accounts, + Accounts: accounts, } appState, err = wire.MarshalJSONIndent(app.cdc, genState) if err != nil { diff --git a/cmd/cosmos-sdk-cli/template/types/account.go b/cmd/cosmos-sdk-cli/template/types/account.go index d24ac045f..211aef2cf 100644 --- a/cmd/cosmos-sdk-cli/template/types/account.go +++ b/cmd/cosmos-sdk-cli/template/types/account.go @@ -4,7 +4,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" "github.com/cosmos/cosmos-sdk/x/auth" - ) var _ auth.Account = (*AppAccount)(nil) @@ -47,7 +46,7 @@ func GetAccountDecoder(cdc *wire.Codec) auth.AccountDecoder { // State to Unmarshal type GenesisState struct { - Accounts []*GenesisAccount `json:"accounts"` + Accounts []*GenesisAccount `json:"accounts"` } // GenesisAccount doesn't need pubkey or sequence From 6f617057f8de706718e0fa646e3e7eabad5d1794 Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Mon, 16 Jul 2018 21:32:34 +0200 Subject: [PATCH 09/40] Formatting cosmos-sdk-cli main.go --- cmd/cosmos-sdk-cli/main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/cosmos-sdk-cli/main.go b/cmd/cosmos-sdk-cli/main.go index 57dcb505b..ee5ac0215 100644 --- a/cmd/cosmos-sdk-cli/main.go +++ b/cmd/cosmos-sdk-cli/main.go @@ -1,9 +1,9 @@ package main import ( - "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/cmd" + "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/cmd" ) func main() { - cmd.Execute() + cmd.Execute() } From 07ddbae7a3ef5a41a2d1970a04b0f24850f11f4f Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Mon, 16 Jul 2018 21:48:16 +0200 Subject: [PATCH 10/40] Adding install_cosmos-sdk-cli to target all --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index d567c9913..d8eab8e86 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ BUILD_TAGS = netgo ledger BUILD_FLAGS = -tags "${BUILD_TAGS}" -ldflags "-X github.com/cosmos/cosmos-sdk/version.GitCommit=${COMMIT_HASH}" GCC := $(shell command -v gcc 2> /dev/null) LEDGER_ENABLED ?= true -all: get_tools get_vendor_deps install install_examples test_lint test +all: get_tools get_vendor_deps install install_examples install_cosmos-sdk-cli test_lint test ######################################## ### CI From bfe160605d5f884032f2aa8aa0d1ecdbc7ccb03b Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Mon, 16 Jul 2018 22:17:18 +0200 Subject: [PATCH 11/40] Modifying Changelog to include features added(cosmos-sdk-cli) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f882c5695..74e0bdc8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## 0.21.2 +*July 16th, 2018* + +Features +* [cosmos-sdk-cli] Added support for cosmos-sdk-cli under cosmos-sdk/cmd + This allows SDK users to init a new project repository with a single command. + ## 0.21.1 *July 14th, 2018* From 0bde720c80d3720881eadb47d6317267e592619d Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Mon, 16 Jul 2018 22:28:21 +0200 Subject: [PATCH 12/40] Adding docs for cosmos-sdk-cli --- docs/sdk/cli.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 docs/sdk/cli.md diff --git a/docs/sdk/cli.md b/docs/sdk/cli.md new file mode 100644 index 000000000..f9778668b --- /dev/null +++ b/docs/sdk/cli.md @@ -0,0 +1,34 @@ +# cosmos-sdk-cli +Create a new blockchain project based on cosmos-sdk with a single command. + +--- + +# Installation + +```shell +go get github.com/cosmos/cosmos-sdk +cd $GOPATH/src/github.com/cosmos/cosmos-sdk +make all +``` + +This will install a binary cosmos-sdk-cli + +# Creating a new project + +**cosmos-sdk-cli init ** _Your-Project-Name_ + +This will initialize a project, the dependencies, directory structures with the specified project name. + +### Example: +```shell +cosmos-sdk-cli init testzone +``` + +This will ask for a remote path for the project - usually github.com/your_user_name/testzone and will create a new testzone application under $GOPATH/src/github.com/your_user_name/testzone along with Makefile + +```shell +cd $GOPATH/src/github.com/your_user_name/testzone +make +``` +This will create two binaries(testzonecli and testzoned) under bin folder. testzoned is the full node of the application which you can run, and testzonecli is your light client. + From dedb2e4278e921787ed0bb463ddd0f7010857b2e Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Mon, 16 Jul 2018 22:30:11 +0200 Subject: [PATCH 13/40] Formatting the command properly --- docs/sdk/cli.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sdk/cli.md b/docs/sdk/cli.md index f9778668b..c71d48e0b 100644 --- a/docs/sdk/cli.md +++ b/docs/sdk/cli.md @@ -15,7 +15,7 @@ This will install a binary cosmos-sdk-cli # Creating a new project -**cosmos-sdk-cli init ** _Your-Project-Name_ +**cosmos-sdk-cli init** _Your-Project-Name_ This will initialize a project, the dependencies, directory structures with the specified project name. From 6410d4da1511d2bead444ffd0cb5b014c8ce98bd Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Mon, 16 Jul 2018 22:53:48 +0200 Subject: [PATCH 14/40] Attempting to fix tests during pull request to master repo --- cmd/cosmos-sdk-cli/cmd/init.go | 2 +- cmd/cosmos-sdk-cli/template/Makefile | 2 +- cmd/cosmos-sdk-cli/template/app/app.go | 2 +- cmd/cosmos-sdk-cli/template/cmd/cli/main.go | 4 ++-- cmd/cosmos-sdk-cli/template/cmd/node/main.go | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmd/cosmos-sdk-cli/cmd/init.go b/cmd/cosmos-sdk-cli/cmd/init.go index f5ded2215..17b048c2b 100644 --- a/cmd/cosmos-sdk-cli/cmd/init.go +++ b/cmd/cosmos-sdk-cli/cmd/init.go @@ -53,7 +53,7 @@ var initCmd = &cobra.Command{ fmt.Print("configuring the project in " + projectPath + "\n\n") time.Sleep(2 * time.Second) box := packr.NewBox("../template") - var replacer = strings.NewReplacer("MyAwesomeProject", capitalizedProjectName, "myawesomeproject", shortProjectName, "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli", remoteProjectPath) + var replacer = strings.NewReplacer("MyAwesomeProject", capitalizedProjectName, "myawesomeproject", shortProjectName, "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/template", remoteProjectPath) box.Walk(func(path string, file packr.File) error { actualPath := replacer.Replace(path) fmt.Println("Creating file: " + actualPath) diff --git a/cmd/cosmos-sdk-cli/template/Makefile b/cmd/cosmos-sdk-cli/template/Makefile index 77e62de8e..87a3d7abe 100644 --- a/cmd/cosmos-sdk-cli/template/Makefile +++ b/cmd/cosmos-sdk-cli/template/Makefile @@ -1,5 +1,5 @@ PACKAGES=$(shell go list ./... | grep -v '/vendor/') -#BUILD_FLAGS = -ldflags "-X github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/version.GitCommit=`git rev-parse --short HEAD`" +#BUILD_FLAGS = -ldflags "-X github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/template/version.GitCommit=`git rev-parse --short HEAD`" all: get_tools get_vendor_deps build test diff --git a/cmd/cosmos-sdk-cli/template/app/app.go b/cmd/cosmos-sdk-cli/template/app/app.go index d73d7df34..da78acf40 100644 --- a/cmd/cosmos-sdk-cli/template/app/app.go +++ b/cmd/cosmos-sdk-cli/template/app/app.go @@ -15,7 +15,7 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/bank" - "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/types" + "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/template/types" ) const ( diff --git a/cmd/cosmos-sdk-cli/template/cmd/cli/main.go b/cmd/cosmos-sdk-cli/template/cmd/cli/main.go index 33a888f3b..9ce51c999 100644 --- a/cmd/cosmos-sdk-cli/template/cmd/cli/main.go +++ b/cmd/cosmos-sdk-cli/template/cmd/cli/main.go @@ -17,8 +17,8 @@ import ( authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli" bankcmd "github.com/cosmos/cosmos-sdk/x/bank/client/cli" - "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/app" - "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/types" + "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/template/app" + "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/template/types" ) // rootCmd is the entry point for this binary diff --git a/cmd/cosmos-sdk-cli/template/cmd/node/main.go b/cmd/cosmos-sdk-cli/template/cmd/node/main.go index 79722ae20..f9f7a5ffe 100644 --- a/cmd/cosmos-sdk-cli/template/cmd/node/main.go +++ b/cmd/cosmos-sdk-cli/template/cmd/node/main.go @@ -12,7 +12,7 @@ import ( "github.com/tendermint/tendermint/libs/log" tmtypes "github.com/tendermint/tendermint/types" - "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/app" + "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/template/app" "github.com/cosmos/cosmos-sdk/server" "github.com/cosmos/cosmos-sdk/wire" From c1553f57e964c4b2063f7ecd3b3b249b3bbe722d Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Mon, 16 Jul 2018 23:06:16 +0200 Subject: [PATCH 15/40] Using func type instead of auth.Account as cosmos-sdk has changed --- cmd/cosmos-sdk-cli/template/app/app.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/cosmos-sdk-cli/template/app/app.go b/cmd/cosmos-sdk-cli/template/app/app.go index da78acf40..465acbf0f 100644 --- a/cmd/cosmos-sdk-cli/template/app/app.go +++ b/cmd/cosmos-sdk-cli/template/app/app.go @@ -56,7 +56,7 @@ func NewMyAwesomeProjectApp(logger log.Logger, db dbm.DB) *MyAwesomeProjectApp { app.accountMapper = auth.NewAccountMapper( cdc, app.capKeyAccountStore, // target store - types.ProtoAppAccount(), // prototype + types.ProtoAppAccount, // prototype ) // Add handlers. From 1e16ba370f9ac5ba487a6ed1e2b664eba83a63e0 Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Mon, 16 Jul 2018 23:25:51 +0200 Subject: [PATCH 16/40] Fixing bugs due to version upgrade of cosmos-sdk --- cmd/cosmos-sdk-cli/template/Gopkg.toml | 2 +- cmd/cosmos-sdk-cli/template/cmd/node/main.go | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/cmd/cosmos-sdk-cli/template/Gopkg.toml b/cmd/cosmos-sdk-cli/template/Gopkg.toml index d4c3b8352..551f1ca7f 100644 --- a/cmd/cosmos-sdk-cli/template/Gopkg.toml +++ b/cmd/cosmos-sdk-cli/template/Gopkg.toml @@ -46,7 +46,7 @@ name = "github.com/tendermint/go-wire" [[constraint]] - version = "~0.20.0" + version = "~0.22.0" name = "github.com/cosmos/cosmos-sdk" [[override]] diff --git a/cmd/cosmos-sdk-cli/template/cmd/node/main.go b/cmd/cosmos-sdk-cli/template/cmd/node/main.go index f9f7a5ffe..8a2774430 100644 --- a/cmd/cosmos-sdk-cli/template/cmd/node/main.go +++ b/cmd/cosmos-sdk-cli/template/cmd/node/main.go @@ -2,6 +2,7 @@ package main import ( "encoding/json" + "io" "os" "github.com/spf13/cobra" @@ -34,11 +35,11 @@ func MyAwesomeProjectAppGenState(cdc *wire.Codec, appGenTxs []json.RawMessage) ( return } -func newApp(logger log.Logger, db dbm.DB) abci.Application { +func newApp(logger log.Logger, db dbm.DB, _ io.Writer) abci.Application { return app.NewMyAwesomeProjectApp(logger, db) } -func exportAppStateAndTMValidators(logger log.Logger, db dbm.DB) (json.RawMessage, []tmtypes.GenesisValidator, error) { +func exportAppStateAndTMValidators(logger log.Logger, db dbm.DB, _ io.Writer) (json.RawMessage, []tmtypes.GenesisValidator, error) { dapp := app.NewMyAwesomeProjectApp(logger, db) return dapp.ExportAppStateAndValidators() } From a463089df1d6ada45149b5554b27349c47214fa0 Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Mon, 16 Jul 2018 23:58:40 +0200 Subject: [PATCH 17/40] Using cosmos-sdk version from the library itself --- cmd/cosmos-sdk-cli/cmd/init.go | 5 +++++ cmd/cosmos-sdk-cli/template/Gopkg.toml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/cmd/cosmos-sdk-cli/cmd/init.go b/cmd/cosmos-sdk-cli/cmd/init.go index 17b048c2b..713f7e81a 100644 --- a/cmd/cosmos-sdk-cli/cmd/init.go +++ b/cmd/cosmos-sdk-cli/cmd/init.go @@ -9,6 +9,7 @@ import ( "strings" "time" + "github.com/cosmos/cosmos-sdk/version" "github.com/gobuffalo/packr" "github.com/pkg/errors" "github.com/spf13/cobra" @@ -59,6 +60,10 @@ var initCmd = &cobra.Command{ fmt.Println("Creating file: " + actualPath) contents := box.String(path) contents = replacer.Replace(contents) + if actualPath == "Gopkg.toml" { + versionReplacer := strings.NewReplacer("_COSMOS_VERSION_", version.Version) + contents = versionReplacer.Replace(contents) + } lastIndex := strings.LastIndex(actualPath, string(os.PathSeparator)) rootDir := "" if lastIndex != -1 { diff --git a/cmd/cosmos-sdk-cli/template/Gopkg.toml b/cmd/cosmos-sdk-cli/template/Gopkg.toml index 551f1ca7f..6b9f23049 100644 --- a/cmd/cosmos-sdk-cli/template/Gopkg.toml +++ b/cmd/cosmos-sdk-cli/template/Gopkg.toml @@ -46,7 +46,7 @@ name = "github.com/tendermint/go-wire" [[constraint]] - version = "~0.22.0" + version = "~_COSMOS_VERSION_" name = "github.com/cosmos/cosmos-sdk" [[override]] From bb32ebdd49a8a614f817cbe1930b86f7164b20b0 Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Tue, 17 Jul 2018 00:17:38 +0200 Subject: [PATCH 18/40] Hardcoding cosmos-sdk version to 0.21.0 as both 0.20.0 and 0.22.0 breaks the resulting project/template --- cmd/cosmos-sdk-cli/template/Gopkg.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/cosmos-sdk-cli/template/Gopkg.toml b/cmd/cosmos-sdk-cli/template/Gopkg.toml index 6b9f23049..b0e7a0fef 100644 --- a/cmd/cosmos-sdk-cli/template/Gopkg.toml +++ b/cmd/cosmos-sdk-cli/template/Gopkg.toml @@ -46,7 +46,7 @@ name = "github.com/tendermint/go-wire" [[constraint]] - version = "~_COSMOS_VERSION_" + version = "~0.21.0" name = "github.com/cosmos/cosmos-sdk" [[override]] From 1603804ca09c6bd6c705d7d34bbf8564d46b0664 Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Tue, 17 Jul 2018 21:18:55 +0200 Subject: [PATCH 19/40] Using basecoin as the template and refactoring the command that creates the workspace setup Removing templates, making changes to makefile to remove dependency on packr --- Gopkg.lock | 8 +- Gopkg.toml | 4 - Makefile | 21 ++- cmd/cosmos-sdk-cli/cmd/init.go | 146 +++++++++++++------ cmd/cosmos-sdk-cli/cmd/root.go | 3 - cmd/cosmos-sdk-cli/template/Gopkg.toml | 58 -------- cmd/cosmos-sdk-cli/template/Makefile | 23 --- cmd/cosmos-sdk-cli/template/app/app.go | 144 ------------------ cmd/cosmos-sdk-cli/template/cmd/cli/main.go | 77 ---------- cmd/cosmos-sdk-cli/template/cmd/node/main.go | 69 --------- cmd/cosmos-sdk-cli/template/types/account.go | 77 ---------- tools/Makefile | 15 -- 12 files changed, 111 insertions(+), 534 deletions(-) delete mode 100644 cmd/cosmos-sdk-cli/template/Gopkg.toml delete mode 100644 cmd/cosmos-sdk-cli/template/Makefile delete mode 100644 cmd/cosmos-sdk-cli/template/app/app.go delete mode 100644 cmd/cosmos-sdk-cli/template/cmd/cli/main.go delete mode 100644 cmd/cosmos-sdk-cli/template/cmd/node/main.go delete mode 100644 cmd/cosmos-sdk-cli/template/types/account.go diff --git a/Gopkg.lock b/Gopkg.lock index 3d5f74179..66f6c0492 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -78,12 +78,6 @@ revision = "259ab82a6cad3992b4e21ff5cac294ccb06474bc" version = "v1.7.0" -[[projects]] - name = "github.com/gobuffalo/packr" - packages = ["."] - revision = "bd47f2894846e32edcf9aa37290fef76c327883f" - version = "v1.11.1" - [[projects]] name = "github.com/gogo/protobuf" packages = [ @@ -507,6 +501,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "2a655310c28a7f80cb2cfe5f2969182896aac09293344472de10e9135ddc364c" + inputs-digest = "71e86b1f1e9ec71901c20d8532dc8477df66eff37a407322379f6a8b03e5d91b" solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index 2a8ef4bc7..3db675ebb 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -67,10 +67,6 @@ name = "github.com/zondax/ledger-goclient" revision = "39ba4728c137c75718a21f9b4b3280fa31b9139b" -[[constraint]] - name = "github.com/gobuffalo/packr" - version = "1.11.1" - [prune] go-tests = true unused-packages = true diff --git a/Makefile b/Makefile index d8eab8e86..69890355c 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ -PACKAGES=$(shell go list ./... | grep -v '/vendor/' | grep -v '/cosmos-sdk-cli/template') -PACKAGES_NOCLITEST=$(shell go list ./... | grep -v '/vendor/' | grep -v '/cosmos-sdk-cli/template' | grep -v github.com/cosmos/cosmos-sdk/cmd/gaia/cli_test) +PACKAGES=$(shell go list ./... | grep -v '/vendor/') +PACKAGES_NOCLITEST=$(shell go list ./... | grep -v '/vendor/' | grep -v github.com/cosmos/cosmos-sdk/cmd/gaia/cli_test) COMMIT_HASH := $(shell git rev-parse --short HEAD) BUILD_TAGS = netgo ledger BUILD_FLAGS = -tags "${BUILD_TAGS}" -ldflags "-X github.com/cosmos/cosmos-sdk/version.GitCommit=${COMMIT_HASH}" @@ -39,11 +39,9 @@ build-linux: build_cosmos-sdk-cli: ifeq ($(OS),Windows_NT) - packr build $(BUILD_FLAGS) -o build/cosmos-sdk-cli.exe ./cmd/cosmos-sdk-cli - packr clean + go build $(BUILD_FLAGS) -o build/cosmos-sdk-cli.exe ./cmd/cosmos-sdk-cli else - packr build $(BUILD_FLAGS) -o build/cosmos-sdk-cli ./cmd/cosmos-sdk-cli - packr clean + go build $(BUILD_FLAGS) -o build/cosmos-sdk-cli ./cmd/cosmos-sdk-cli endif build_examples: @@ -70,8 +68,7 @@ install_examples: go install $(BUILD_FLAGS) ./examples/democoin/cmd/democli install_cosmos-sdk-cli: - packr install $(BUILD_FLAGS) ./cmd/cosmos-sdk-cli - packr clean + go install $(BUILD_FLAGS) ./cmd/cosmos-sdk-cli install_debug: go install $(BUILD_FLAGS) ./cmd/gaia/cmd/gaiadebug @@ -95,7 +92,7 @@ get_tools: get_vendor_deps: @rm -rf vendor/ @echo "--> Running dep ensure" - @dep ensure -v --vendor-only + @dep ensure -v draw_deps: @# requires brew install graphviz or apt-get install graphviz @@ -129,9 +126,9 @@ test_cover: @bash tests/test_cover.sh test_lint: - gometalinter.v2 --config=tools/gometalinter.json ./... --exclude cmd/cosmos-sdk-cli/template - !(gometalinter.v2 --disable-all --enable='errcheck' --vendor ./... | grep -v "client/" | grep -v "cosmos-sdk-cli/template/") - find . -name '*.go' -type f -not -path "./vendor*" -not -path "./cmd/cosmos-sdk-cli/template" -not -path "*.git*" | xargs gofmt -d -s + gometalinter.v2 --config=tools/gometalinter.json ./... + !(gometalinter.v2 --disable-all --enable='errcheck' --vendor ./... | grep -v "client/" ) + find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" | xargs gofmt -d -s dep status >> /dev/null !(grep -n branch Gopkg.toml) diff --git a/cmd/cosmos-sdk-cli/cmd/init.go b/cmd/cosmos-sdk-cli/cmd/init.go index 713f7e81a..2279dc8a1 100644 --- a/cmd/cosmos-sdk-cli/cmd/init.go +++ b/cmd/cosmos-sdk-cli/cmd/init.go @@ -1,21 +1,19 @@ package cmd import ( - "bufio" "fmt" "go/build" "io/ioutil" "os" "strings" - "time" "github.com/cosmos/cosmos-sdk/version" - "github.com/gobuffalo/packr" - "github.com/pkg/errors" "github.com/spf13/cobra" + "path/filepath" ) func init() { + initCmd.Flags().StringVarP(&remoteProjectPath, "project-path", "p", "", "Remote project path. eg: github.com/your_user_name/project_name") rootCmd.AddCommand(initCmd) } @@ -28,54 +26,112 @@ func resolveProjectPath(remoteProjectPath string) string { return gopath + string(os.PathSeparator) + "src" + string(os.PathSeparator) + remoteProjectPath } -var initCmd = &cobra.Command{ - Use: "init AwesomeProjectName", - Short: "Initialize your new cosmos zone", - RunE: func(cmd *cobra.Command, args []string) error { - if len(args) < 1 { - return errors.New("Project name is required") +func check(e error) { + if e != nil { + panic(e) + } +} + +var remoteBasecoinPath = "github.com/cosmos/cosmos-sdk/examples/basecoin" + +func copyBasecoinTemplate(projectName string, projectPath string, remoteProjectPath string) { + basecoinProjectPath := resolveProjectPath(remoteBasecoinPath) + filepath.Walk(basecoinProjectPath, func(path string, f os.FileInfo, err error) error { + if !f.IsDir() { + data, err := ioutil.ReadFile(path) + check(err) + contents := string(data) + // Extract relative file path eg: app/app.go instead of /Users/..../github.com/cosmos/...examples/basecoin/app/app.go + relativeFilePath := path[len(basecoinProjectPath)+1:] + // Evaluating the filepath in the new project folder + projectFilePath := projectPath + string(os.PathSeparator) + relativeFilePath + lengthOfRootDir := strings.LastIndex(projectFilePath, string(os.PathSeparator)) + // Extracting the path of root directory from the filepath + rootDir := projectFilePath[0:lengthOfRootDir] + // Creating the required directory first + os.MkdirAll(rootDir, os.ModePerm) + fmt.Println("Creating " + projectFilePath) + // Writing the contents to a file in the project folder + ioutil.WriteFile(projectFilePath, []byte(contents), os.ModePerm) } + return nil + }) + + //Copy the entire basecoin directory to the project path. + //os.MkdirAll(projectPath+string(os.PathSeparator)+rootDir, os.ModePerm) + //filePath := projectPath + string(os.PathSeparator) + actualPath + //ioutil.WriteFile(filePath, []byte(contents), os.ModePerm) +} + +func createGopkg(projectPath string) { + // Create gopkg.toml file + dependencies := map[string]string{ + "github.com/cosmos/cosmos-sdk": version.Version, + } + overrides := map[string]string{ + "github.com/golang/protobuf": "1.1.0", + } + contents := "" + for dependency, version := range dependencies { + contents += "[[constraint]]\n\tname = \"" + dependency + "\"\n\tversion = \"" + version + "\"\n\n" + } + for dependency, version := range overrides { + contents += "[[override]]\n\tname = \"" + dependency + "\"\n\tversion = \"=" + version + "\"\n\n" + } + contents += "[prune]\n\tgo-tests = true\n\tunused-packages = true" + ioutil.WriteFile(projectPath+"/Gopkg.toml", []byte(contents), os.ModePerm) +} + +func createMakefile(projectPath string) { + // Create makefile + makefileContents := `PACKAGES=$(shell go list ./... | grep -v '/vendor/') + +all: get_tools get_vendor_deps build test + +get_tools: + go get github.com/golang/dep/cmd/dep + +build: + go build -o bin/basecli cmd/basecli/main.go && go build -o bin/basecoind cmd/basecoind/main.go + +get_vendor_deps: + @rm -rf vendor/ + @dep ensure + +test: + @go test $(PACKAGES) + +benchmark: + @go test -bench=. $(PACKAGES) + +.PHONY: all build test benchmark` + ioutil.WriteFile(projectPath+"/Makefile", []byte(makefileContents), os.ModePerm) + +} + +func setupBasecoinWorkspace(projectName string, remoteProjectPath string) { + projectPath := resolveProjectPath(remoteProjectPath) + fmt.Println("Configuring your project in " + projectPath) + copyBasecoinTemplate(projectName, projectPath, remoteProjectPath) + createGopkg(projectPath) + createMakefile(projectPath) + fmt.Println("\nInitialized a new project at " + projectPath + ".\nHappy hacking!") +} + +var remoteProjectPath string +var initCmd = &cobra.Command{ + Use: "init [ProjectName]", + Short: "Initialize your new cosmos zone", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + fmt.Print("Thanks for choosing Cosmos-SDK to build your project.\n\n") projectName := args[0] - capitalizedProjectName := strings.Title(projectName) shortProjectName := strings.ToLower(projectName) - reader := bufio.NewReader(os.Stdin) - fmt.Println("Thank you for using cosmos-zone tool.") - fmt.Println("You are only a few steps away from creating your brand new blockchain project on Cosmos.") - fmt.Print("We will ask you a few more questions to guide you through this process\n\n") - fmt.Print("To configure this project we need a remote project path. If you are unsure you can leave this empty. ") - fmt.Print("Remote project path is usually something like github.com/your_user_name/project_name\n") - fmt.Print("Enter remote project path: ") - remoteProjectPath, _ := reader.ReadString('\n') remoteProjectPath = strings.ToLower(strings.TrimSpace(remoteProjectPath)) if remoteProjectPath == "" { remoteProjectPath = strings.ToLower(shortProjectName) } - projectPath := resolveProjectPath(remoteProjectPath) - fmt.Print("configuring the project in " + projectPath + "\n\n") - time.Sleep(2 * time.Second) - box := packr.NewBox("../template") - var replacer = strings.NewReplacer("MyAwesomeProject", capitalizedProjectName, "myawesomeproject", shortProjectName, "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/template", remoteProjectPath) - box.Walk(func(path string, file packr.File) error { - actualPath := replacer.Replace(path) - fmt.Println("Creating file: " + actualPath) - contents := box.String(path) - contents = replacer.Replace(contents) - if actualPath == "Gopkg.toml" { - versionReplacer := strings.NewReplacer("_COSMOS_VERSION_", version.Version) - contents = versionReplacer.Replace(contents) - } - lastIndex := strings.LastIndex(actualPath, string(os.PathSeparator)) - rootDir := "" - if lastIndex != -1 { - rootDir = actualPath[0:lastIndex] - } - // Create directory - os.MkdirAll(projectPath+string(os.PathSeparator)+rootDir, os.ModePerm) - filePath := projectPath + string(os.PathSeparator) + actualPath - ioutil.WriteFile(filePath, []byte(contents), os.ModePerm) - return nil - }) - fmt.Println("Initialized a new project at " + projectPath + ". Happy hacking!") + setupBasecoinWorkspace(shortProjectName, remoteProjectPath) return nil }, } diff --git a/cmd/cosmos-sdk-cli/cmd/root.go b/cmd/cosmos-sdk-cli/cmd/root.go index ae09169d9..2eddd79b5 100644 --- a/cmd/cosmos-sdk-cli/cmd/root.go +++ b/cmd/cosmos-sdk-cli/cmd/root.go @@ -10,9 +10,6 @@ import ( var rootCmd = &cobra.Command{ Use: "cosmos-sdk-cli", Short: "Tools to develop on cosmos-sdk", - Run: func(cmd *cobra.Command, args []string) { - // Do Stuff Here - }, } // Execute the command diff --git a/cmd/cosmos-sdk-cli/template/Gopkg.toml b/cmd/cosmos-sdk-cli/template/Gopkg.toml deleted file mode 100644 index b0e7a0fef..000000000 --- a/cmd/cosmos-sdk-cli/template/Gopkg.toml +++ /dev/null @@ -1,58 +0,0 @@ -# Gopkg.toml example -# -# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md -# for detailed Gopkg.toml documentation. -# -# required = ["github.com/user/thing/cmd/thing"] -# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] -# -# [[constraint]] -# name = "github.com/user/project" -# version = "1.0.0" -# -# [[constraint]] -# name = "github.com/user/project2" -# branch = "dev" -# source = "github.com/myfork/project2" -# -# [[override]] -# name = "github.com/x/y" -# version = "2.4.0" -# -# [prune] -# non-go = false -# go-tests = true -# unused-packages = true - -[[constraint]] - name = "github.com/pkg/errors" - version = "~0.8.0" - -[[constraint]] - name = "github.com/spf13/cobra" - version = "~0.0.1" - -[[constraint]] - name = "github.com/spf13/viper" - version = "~1.0.0" - -[[constraint]] - name = "github.com/stretchr/testify" - version = "~1.2.1" - -[[constraint]] - version = "~0.10.0" - source = "github.com/tendermint/go-amino" - name = "github.com/tendermint/go-wire" - -[[constraint]] - version = "~0.21.0" - name = "github.com/cosmos/cosmos-sdk" - -[[override]] - version = "=1.1.0" - name = "github.com/golang/protobuf" - -[prune] - go-tests = true - unused-packages = true diff --git a/cmd/cosmos-sdk-cli/template/Makefile b/cmd/cosmos-sdk-cli/template/Makefile deleted file mode 100644 index 87a3d7abe..000000000 --- a/cmd/cosmos-sdk-cli/template/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -PACKAGES=$(shell go list ./... | grep -v '/vendor/') -#BUILD_FLAGS = -ldflags "-X github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/template/version.GitCommit=`git rev-parse --short HEAD`" - -all: get_tools get_vendor_deps build test - -get_tools: - go get github.com/golang/dep/cmd/dep - -build: - go build -o bin/myawesomeprojectcli cmd/cli/main.go && go build -o bin/myawesomeprojectd cmd/node/main.go - -get_vendor_deps: - @rm -rf vendor/ - @dep ensure - -test: - @go test $(PACKAGES) - -benchmark: - @go test -bench=. $(PACKAGES) - -.PHONY: all build test benchmark - diff --git a/cmd/cosmos-sdk-cli/template/app/app.go b/cmd/cosmos-sdk-cli/template/app/app.go deleted file mode 100644 index 465acbf0f..000000000 --- a/cmd/cosmos-sdk-cli/template/app/app.go +++ /dev/null @@ -1,144 +0,0 @@ -package app - -import ( - "encoding/json" - - abci "github.com/tendermint/tendermint/abci/types" - cmn "github.com/tendermint/tendermint/libs/common" - dbm "github.com/tendermint/tendermint/libs/db" - "github.com/tendermint/tendermint/libs/log" - tmtypes "github.com/tendermint/tendermint/types" - - bam "github.com/cosmos/cosmos-sdk/baseapp" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/wire" - "github.com/cosmos/cosmos-sdk/x/auth" - "github.com/cosmos/cosmos-sdk/x/bank" - - "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/template/types" -) - -const ( - appName = "MyAwesomeProjectApp" -) - -// Extended ABCI application -type MyAwesomeProjectApp struct { - *bam.BaseApp - cdc *wire.Codec - - // keys to access the substores - capKeyMainStore *sdk.KVStoreKey - capKeyAccountStore *sdk.KVStoreKey - - // keepers - feeCollectionKeeper auth.FeeCollectionKeeper - coinKeeper bank.Keeper - - // Manage getting and setting accounts - accountMapper auth.AccountMapper -} - -func NewMyAwesomeProjectApp(logger log.Logger, db dbm.DB) *MyAwesomeProjectApp { - - // Create app-level codec for txs and accounts. - var cdc = MakeCodec() - - // Create your application object. - var app = &MyAwesomeProjectApp{ - BaseApp: bam.NewBaseApp(appName, cdc, logger, db), - cdc: cdc, - capKeyMainStore: sdk.NewKVStoreKey("main"), - capKeyAccountStore: sdk.NewKVStoreKey("acc"), - } - - // Define the accountMapper. - app.accountMapper = auth.NewAccountMapper( - cdc, - app.capKeyAccountStore, // target store - types.ProtoAppAccount, // prototype - ) - - // Add handlers. - app.coinKeeper = bank.NewKeeper(app.accountMapper) - app.Router(). - AddRoute("bank", bank.NewHandler(app.coinKeeper)) - - // Initialize BaseApp. - app.SetInitChainer(app.initChainerFn()) - app.MountStoresIAVL(app.capKeyMainStore, app.capKeyAccountStore) - app.SetAnteHandler(auth.NewAnteHandler(app.accountMapper, app.feeCollectionKeeper)) - err := app.LoadLatestVersion(app.capKeyMainStore) - if err != nil { - cmn.Exit(err.Error()) - } - return app -} - -// custom tx codec -func MakeCodec() *wire.Codec { - var cdc = wire.NewCodec() - wire.RegisterCrypto(cdc) // Register crypto. - sdk.RegisterWire(cdc) // Register Msgs - bank.RegisterWire(cdc) - - // Register AppAccount - cdc.RegisterInterface((*auth.Account)(nil), nil) - cdc.RegisterConcrete(&types.AppAccount{}, "myawesomeproject/Account", nil) - - cdc.Seal() - - return cdc -} - -// custom logic for myawesomeproject initialization -// nolint: unparam -func (app *MyAwesomeProjectApp) initChainerFn() sdk.InitChainer { - return func(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain { - stateJSON := req.AppStateBytes - - genesisState := new(types.GenesisState) - err := app.cdc.UnmarshalJSON(stateJSON, genesisState) - if err != nil { - panic(err) // TODO https://github.com/cosmos/cosmos-sdk/issues/468 - // return sdk.ErrGenesisParse("").TraceCause(err, "") - } - - for _, gacc := range genesisState.Accounts { - acc, err := gacc.ToAppAccount() - if err != nil { - panic(err) // TODO https://github.com/cosmos/cosmos-sdk/issues/468 - // return sdk.ErrGenesisParse("").TraceCause(err, "") - } - app.accountMapper.SetAccount(ctx, acc) - } - - return abci.ResponseInitChain{} - } -} - -// Custom logic for state export -func (app *MyAwesomeProjectApp) ExportAppStateAndValidators() (appState json.RawMessage, validators []tmtypes.GenesisValidator, err error) { - ctx := app.NewContext(true, abci.Header{}) - - // iterate to get the accounts - accounts := []*types.GenesisAccount{} - appendAccount := func(acc auth.Account) (stop bool) { - account := &types.GenesisAccount{ - Address: acc.GetAddress(), - Coins: acc.GetCoins(), - } - accounts = append(accounts, account) - return false - } - app.accountMapper.IterateAccounts(ctx, appendAccount) - - genState := types.GenesisState{ - Accounts: accounts, - } - appState, err = wire.MarshalJSONIndent(app.cdc, genState) - if err != nil { - return nil, nil, err - } - return appState, validators, nil -} diff --git a/cmd/cosmos-sdk-cli/template/cmd/cli/main.go b/cmd/cosmos-sdk-cli/template/cmd/cli/main.go deleted file mode 100644 index 9ce51c999..000000000 --- a/cmd/cosmos-sdk-cli/template/cmd/cli/main.go +++ /dev/null @@ -1,77 +0,0 @@ -package main - -import ( - "os" - - "github.com/spf13/cobra" - - "github.com/tendermint/tendermint/libs/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/client/cli" - bankcmd "github.com/cosmos/cosmos-sdk/x/bank/client/cli" - - "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/template/app" - "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/template/types" -) - -// rootCmd is the entry point for this binary -var ( - rootCmd = &cobra.Command{ - Use: "myawesomeprojectcli", - Short: "MyAwesomeProject light-client", - } -) - -func main() { - // disable sorting - cobra.EnableCommandSorting = false - - // 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) - // start with commands common to basecoin - rootCmd.AddCommand( - client.GetCommands( - authcmd.GetAccountCmd("acc", cdc, types.GetAccountDecoder(cdc)), - )...) - rootCmd.AddCommand( - client.PostCommands( - bankcmd.SendTxCmd(cdc), - )...) - // and now myawesomeproject specific commands here - - // add proxy, version and key info - rootCmd.AddCommand( - client.LineBreak, - lcd.ServeCommand(cdc), - keys.Commands(), - client.LineBreak, - version.VersionCmd, - ) - - // prepare and add flags - executor := cli.PrepareMainCmd(rootCmd, "BC", os.ExpandEnv("$HOME/.myawesomeprojectcli")) - err := executor.Execute() - if err != nil { - // handle with #870 - panic(err) - } -} diff --git a/cmd/cosmos-sdk-cli/template/cmd/node/main.go b/cmd/cosmos-sdk-cli/template/cmd/node/main.go deleted file mode 100644 index 8a2774430..000000000 --- a/cmd/cosmos-sdk-cli/template/cmd/node/main.go +++ /dev/null @@ -1,69 +0,0 @@ -package main - -import ( - "encoding/json" - "io" - "os" - - "github.com/spf13/cobra" - - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/libs/cli" - dbm "github.com/tendermint/tendermint/libs/db" - "github.com/tendermint/tendermint/libs/log" - tmtypes "github.com/tendermint/tendermint/types" - - "github.com/cosmos/cosmos-sdk/cmd/cosmos-sdk-cli/template/app" - - "github.com/cosmos/cosmos-sdk/server" - "github.com/cosmos/cosmos-sdk/wire" -) - -// init parameters -var MyAwesomeProjectAppInit = server.AppInit{ - AppGenState: MyAwesomeProjectAppGenState, - AppGenTx: server.SimpleAppGenTx, -} - -// GenAppParams sets up the app_state, append any other app specific components. -func MyAwesomeProjectAppGenState(cdc *wire.Codec, appGenTxs []json.RawMessage) (appState json.RawMessage, err error) { - appState, err = server.SimpleAppGenState(cdc, appGenTxs) - if err != nil { - return - } - - return -} - -func newApp(logger log.Logger, db dbm.DB, _ io.Writer) abci.Application { - return app.NewMyAwesomeProjectApp(logger, db) -} - -func exportAppStateAndTMValidators(logger log.Logger, db dbm.DB, _ io.Writer) (json.RawMessage, []tmtypes.GenesisValidator, error) { - dapp := app.NewMyAwesomeProjectApp(logger, db) - return dapp.ExportAppStateAndValidators() -} - -func main() { - cdc := app.MakeCodec() - ctx := server.NewDefaultContext() - - rootCmd := &cobra.Command{ - Use: "myawesomeprojectd", - Short: "MyAwesomeProject Daemon (server)", - PersistentPreRunE: server.PersistentPreRunEFn(ctx), - } - - server.AddCommands(ctx, cdc, rootCmd, MyAwesomeProjectAppInit, - server.ConstructAppCreator(newApp, "myawesomeproject"), - server.ConstructAppExporter(exportAppStateAndTMValidators, "myawesomeproject")) - - // prepare and add flags - rootDir := os.ExpandEnv("$HOME/.myawesomeprojectd") - executor := cli.PrepareBaseCmd(rootCmd, "BC", rootDir) - err := executor.Execute() - if err != nil { - // handle with #870 - panic(err) - } -} diff --git a/cmd/cosmos-sdk-cli/template/types/account.go b/cmd/cosmos-sdk-cli/template/types/account.go deleted file mode 100644 index 211aef2cf..000000000 --- a/cmd/cosmos-sdk-cli/template/types/account.go +++ /dev/null @@ -1,77 +0,0 @@ -package types - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/wire" - "github.com/cosmos/cosmos-sdk/x/auth" -) - -var _ auth.Account = (*AppAccount)(nil) - -// Custom extensions for this application. This is just an example of -// extending auth.BaseAccount with custom fields. -// -// This is compatible with the stock auth.AccountStore, since -// auth.AccountStore uses the flexible go-amino library. -type AppAccount struct { - auth.BaseAccount - Name string `json:"name"` -} - -// Constructor for AppAccount -func ProtoAppAccount() auth.Account { - return &AppAccount{} -} - -// nolint -func (acc AppAccount) GetName() string { return acc.Name } -func (acc *AppAccount) SetName(name string) { acc.Name = name } - -// Get the AccountDecoder function for the custom AppAccount -func GetAccountDecoder(cdc *wire.Codec) auth.AccountDecoder { - return func(accBytes []byte) (res auth.Account, err error) { - if len(accBytes) == 0 { - return nil, sdk.ErrTxDecode("accBytes are empty") - } - acct := new(AppAccount) - err = cdc.UnmarshalBinaryBare(accBytes, &acct) - if err != nil { - panic(err) - } - return acct, err - } -} - -//___________________________________________________________________________________ - -// State to Unmarshal -type GenesisState struct { - Accounts []*GenesisAccount `json:"accounts"` -} - -// GenesisAccount doesn't need pubkey or sequence -type GenesisAccount struct { - Name string `json:"name"` - Address sdk.AccAddress `json:"address"` - Coins sdk.Coins `json:"coins"` -} - -func NewGenesisAccount(aa *AppAccount) *GenesisAccount { - return &GenesisAccount{ - Name: aa.Name, - Address: aa.Address, - Coins: aa.Coins.Sort(), - } -} - -// convert GenesisAccount to AppAccount -func (ga *GenesisAccount) ToAppAccount() (acc *AppAccount, err error) { - baseAcc := auth.BaseAccount{ - Address: ga.Address, - Coins: ga.Coins.Sort(), - } - return &AppAccount{ - BaseAccount: baseAcc, - Name: ga.Name, - }, nil -} diff --git a/tools/Makefile b/tools/Makefile index 5dfbd08fa..d58f52d1b 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -13,7 +13,6 @@ MISSPELL = github.com/client9/misspell/cmd/misspell ERRCHECK = github.com/kisielk/errcheck UNPARAM = mvdan.cc/unparam GOCYCLO = github.com/alecthomas/gocyclo -PACKR = github.com/gobuffalo/packr DEP_CHECK := $(shell command -v dep 2> /dev/null) GOLINT_CHECK := $(shell command -v golint 2> /dev/null) @@ -24,7 +23,6 @@ MISSPELL_CHECK := $(shell command -v misspell 2> /dev/null) ERRCHECK_CHECK := $(shell command -v errcheck 2> /dev/null) UNPARAM_CHECK := $(shell command -v unparam 2> /dev/null) GOCYCLO_CHECK := $(shell command -v gocyclo 2> /dev/null) -PACKR_CHECK := $(shell command -v packr 2> /dev/null) check_tools: ifndef DEP_CHECK @@ -72,11 +70,6 @@ ifndef GOCYCLO_CHECK else @echo "Found gocyclo in path." endif -ifndef PACKR_CHECK - @echo "No packr in path. Install with make get_tools'." -else - @echo "Found packr in path." -endif get_tools: ifdef DEP_CHECK @@ -133,12 +126,6 @@ else @echo "Installing goyclo" go get -v $(GOCYCLO) endif -ifdef PACKR_CHECK - @echo "Packr is already installed. Run 'make update_tools' to update." -else - @echo "$(ansi_grn)Installing packr$(ansi_end)" - go get -v $(PACKR) -endif update_tools: @echo "Updating dep" @@ -159,8 +146,6 @@ update_tools: go get -u -v $(UNPARAM) @echo "Updating goyclo" go get -u -v $(GOCYCLO) - @echo "Updating packr" - go get -u -v $(PACKR) # To avoid unintended conflicts with file names, always add to .PHONY # unless there is a reason not to. From 8edac192e059ed31db570aaf56471def4310c01c Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Tue, 17 Jul 2018 21:50:25 +0200 Subject: [PATCH 20/40] Moving cli.md to cosmos-sdk-cli.md --- docs/sdk/{cli.md => cosmos-sdk-cli.md} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename docs/sdk/{cli.md => cosmos-sdk-cli.md} (56%) diff --git a/docs/sdk/cli.md b/docs/sdk/cosmos-sdk-cli.md similarity index 56% rename from docs/sdk/cli.md rename to docs/sdk/cosmos-sdk-cli.md index c71d48e0b..548623049 100644 --- a/docs/sdk/cli.md +++ b/docs/sdk/cosmos-sdk-cli.md @@ -21,14 +21,14 @@ This will initialize a project, the dependencies, directory structures with the ### Example: ```shell -cosmos-sdk-cli init testzone +cosmos-sdk-cli init testzone -p github.com/your_user_name/testzone ``` +-p remote project path (optional). If this is not provided, it creates testzone under $GOPATH/src/ -This will ask for a remote path for the project - usually github.com/your_user_name/testzone and will create a new testzone application under $GOPATH/src/github.com/your_user_name/testzone along with Makefile ```shell cd $GOPATH/src/github.com/your_user_name/testzone make ``` -This will create two binaries(testzonecli and testzoned) under bin folder. testzoned is the full node of the application which you can run, and testzonecli is your light client. +This will create two binaries(basecli and basecoind) under bin folder. basecoind is the full node of the application which you can run, and basecli is your light client. From 64729bb48d43a760b3fe6ba777c6e85f99e0637c Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Tue, 17 Jul 2018 21:57:57 +0200 Subject: [PATCH 21/40] Removing unwanted lines in code --- cmd/cosmos-sdk-cli/cmd/init.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/cmd/cosmos-sdk-cli/cmd/init.go b/cmd/cosmos-sdk-cli/cmd/init.go index 2279dc8a1..b32e4b412 100644 --- a/cmd/cosmos-sdk-cli/cmd/init.go +++ b/cmd/cosmos-sdk-cli/cmd/init.go @@ -56,11 +56,6 @@ func copyBasecoinTemplate(projectName string, projectPath string, remoteProjectP } return nil }) - - //Copy the entire basecoin directory to the project path. - //os.MkdirAll(projectPath+string(os.PathSeparator)+rootDir, os.ModePerm) - //filePath := projectPath + string(os.PathSeparator) + actualPath - //ioutil.WriteFile(filePath, []byte(contents), os.ModePerm) } func createGopkg(projectPath string) { From 1da8b25847586b236e5d61e63b6b42477771ca11 Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Wed, 18 Jul 2018 07:58:13 +0200 Subject: [PATCH 22/40] Adding changes to changelog correctly --- CHANGELOG.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6d173a2d..4009dd5b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,14 +2,12 @@ ## PENDING -Features -* [cosmos-sdk-cli] Added support for cosmos-sdk-cli under cosmos-sdk/cmd - This allows SDK users to init a new project repository with a single command. -======= BREAKING CHANGES FEATURES * [lcd] Can now query governance proposals by ProposalStatus +* [cosmos-sdk-cli] Added support for cosmos-sdk-cli under cosmos-sdk/cmd + This allows SDK users to init a new project repository with a single command. IMPROVEMENTS * [baseapp] Allow any alphanumeric character in route From c2e5734c0b310acba874281a92a281dfd3ad3301 Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Wed, 18 Jul 2018 08:01:49 +0200 Subject: [PATCH 23/40] Removing check function and checking for error in usual way --- cmd/cosmos-sdk-cli/cmd/init.go | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/cmd/cosmos-sdk-cli/cmd/init.go b/cmd/cosmos-sdk-cli/cmd/init.go index b32e4b412..2008cb896 100644 --- a/cmd/cosmos-sdk-cli/cmd/init.go +++ b/cmd/cosmos-sdk-cli/cmd/init.go @@ -26,12 +26,6 @@ func resolveProjectPath(remoteProjectPath string) string { return gopath + string(os.PathSeparator) + "src" + string(os.PathSeparator) + remoteProjectPath } -func check(e error) { - if e != nil { - panic(e) - } -} - var remoteBasecoinPath = "github.com/cosmos/cosmos-sdk/examples/basecoin" func copyBasecoinTemplate(projectName string, projectPath string, remoteProjectPath string) { @@ -39,7 +33,9 @@ func copyBasecoinTemplate(projectName string, projectPath string, remoteProjectP filepath.Walk(basecoinProjectPath, func(path string, f os.FileInfo, err error) error { if !f.IsDir() { data, err := ioutil.ReadFile(path) - check(err) + if err != nil { + return err + } contents := string(data) // Extract relative file path eg: app/app.go instead of /Users/..../github.com/cosmos/...examples/basecoin/app/app.go relativeFilePath := path[len(basecoinProjectPath)+1:] From 6cfef643826a896728220f2c884a1367b2c3f769 Mon Sep 17 00:00:00 2001 From: Dev Ojha Date: Wed, 18 Jul 2018 01:20:24 -0700 Subject: [PATCH 24/40] Merge PR #1732: tools: add make {get, update, check}_dev_tools This is so that validators can have a more minimal install, but we can still install linters for developers. (And any other future dev tools) --- .circleci/config.yml | 2 +- CONTRIBUTING.md | 2 +- Makefile | 10 ++++++++-- tools/Makefile | 11 ++++++++++- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a8d42872e..7a77d8d21 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -62,7 +62,7 @@ jobs: name: Get metalinter command: | export PATH="$GOBIN:$PATH" - make get_tools + make get_dev_tools - run: name: Lint source command: | diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b18ef2ea9..de349501c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ # Contributing -Thank you for considering making contributions to Cosmos-SDK and related repositories! Start by taking a look at this [coding repo](https://github.com/tendermint/coding) for overall information on repository workflow and standards. +Thank you for considering making contributions to Cosmos-SDK and related repositories! Start by taking a look at this [coding repo](https://github.com/tendermint/coding) for overall information on repository workflow and standards. Note, we use `make get_dev_tools` and `make update_dev_tools` for installing the linting tools. Please follow standard github best practices: fork the repo, branch from the tip of develop, make some commits, and submit a pull request to develop. See the [open issues](https://github.com/cosmos/cosmos-sdk/issues) for things we need help with! diff --git a/Makefile b/Makefile index b6b136f51..74c25e461 100644 --- a/Makefile +++ b/Makefile @@ -73,11 +73,17 @@ dist: check_tools: cd tools && $(MAKE) check_tools +check_dev_tools: + cd tools && $(MAKE) check_dev_tools + update_tools: cd tools && $(MAKE) update_tools -get_tools: - cd tools && $(MAKE) get_tools +update_dev_tools: + cd tools && $(MAKE) update_dev_tools + +get_dev_tools: + cd tools && $(MAKE) get_dev_tools get_vendor_deps: @rm -rf vendor/ diff --git a/tools/Makefile b/tools/Makefile index d58f52d1b..66ad10f6e 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -30,6 +30,9 @@ ifndef DEP_CHECK else @echo "Found dep in path." endif + +check_dev_tools: + $(MAKE) check_tools ifndef GOLINT_CHECK @echo "No golint in path. Install with 'make get_tools'." else @@ -78,6 +81,9 @@ else @echo "Installing dep" go get -v $(DEP) endif + +get_dev_tools: + $(MAKE) get_tools ifdef GOLINT_CHECK @echo "Golint is already installed. Run 'make update_tools' to update." else @@ -130,6 +136,9 @@ endif update_tools: @echo "Updating dep" go get -u -v $(DEP) + +update_dev_tools: + $(MAKE) update_tools @echo "Updating tendermint/golint" go get -u -v $(GOLINT) @echo "Updating gometalinter.v2" @@ -150,4 +159,4 @@ update_tools: # To avoid unintended conflicts with file names, always add to .PHONY # unless there is a reason not to. # https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html -.PHONY: check_tools get_tools update_tools +.PHONY: check_tools get_tools update_tools check_dev_tools get_dev_tools update_dev_tools From 2c81f4973f2f7fa1b1d41e312213b801bcfe66e3 Mon Sep 17 00:00:00 2001 From: Dev Ojha Date: Wed, 18 Jul 2018 01:21:52 -0700 Subject: [PATCH 25/40] Merge PR #1731: tools: remove `rm -rf vendor/` from `make get_vendor_deps` We now ensure that the Gopkg.lock is correct, and that the toml doesn't depend on any branches, so this is no longer necessary. --- CHANGELOG.md | 1 + Makefile | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef203bbd0..a4f9942dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ FEATURES IMPROVEMENTS * [baseapp] Allow any alphanumeric character in route +* [tools] Remove `rm -rf vendor/` from `make get_vendor_deps` BUG FIXES diff --git a/Makefile b/Makefile index 74c25e461..a606a0ace 100644 --- a/Makefile +++ b/Makefile @@ -86,7 +86,6 @@ get_dev_tools: cd tools && $(MAKE) get_dev_tools get_vendor_deps: - @rm -rf vendor/ @echo "--> Running dep ensure" @dep ensure -v From fcab14435d46666b8ca4f3be44327e80fcfb14bb Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Wed, 18 Jul 2018 10:52:55 +0200 Subject: [PATCH 26/40] Removing extra space that was accidentally added --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 69890355c..7407b23b5 100644 --- a/Makefile +++ b/Makefile @@ -127,7 +127,7 @@ test_cover: test_lint: gometalinter.v2 --config=tools/gometalinter.json ./... - !(gometalinter.v2 --disable-all --enable='errcheck' --vendor ./... | grep -v "client/" ) + !(gometalinter.v2 --disable-all --enable='errcheck' --vendor ./... | grep -v "client/") find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" | xargs gofmt -d -s dep status >> /dev/null !(grep -n branch Gopkg.toml) From 9c5406891eba0e3f66d4e7848aa65a1a21defbdd Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Wed, 18 Jul 2018 12:18:57 +0200 Subject: [PATCH 27/40] Changing docs for cosmos-sdk-cli - including $ before beginning shell command --- docs/sdk/cosmos-sdk-cli.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/sdk/cosmos-sdk-cli.md b/docs/sdk/cosmos-sdk-cli.md index 548623049..2a418534d 100644 --- a/docs/sdk/cosmos-sdk-cli.md +++ b/docs/sdk/cosmos-sdk-cli.md @@ -6,29 +6,29 @@ Create a new blockchain project based on cosmos-sdk with a single command. # Installation ```shell -go get github.com/cosmos/cosmos-sdk -cd $GOPATH/src/github.com/cosmos/cosmos-sdk -make all +$go get github.com/cosmos/cosmos-sdk +$cd $GOPATH/src/github.com/cosmos/cosmos-sdk +$make install_cosmos-sdk-cli ``` This will install a binary cosmos-sdk-cli # Creating a new project -**cosmos-sdk-cli init** _Your-Project-Name_ +**$cosmos-sdk-cli init** _Your-Project-Name_ This will initialize a project, the dependencies, directory structures with the specified project name. ### Example: ```shell -cosmos-sdk-cli init testzone -p github.com/your_user_name/testzone +$cosmos-sdk-cli init testzone -p github.com/your_user_name/testzone ``` -p remote project path (optional). If this is not provided, it creates testzone under $GOPATH/src/ ```shell -cd $GOPATH/src/github.com/your_user_name/testzone -make +$cd $GOPATH/src/github.com/your_user_name/testzone +$make ``` -This will create two binaries(basecli and basecoind) under bin folder. basecoind is the full node of the application which you can run, and basecli is your light client. +This will create two binaries(testzonecli and testzoned) under bin folder. testzoned is the full node of the application which you can run, and testzonecli is your light client. From b97ebef85eb0a9e6ba1e13c281e8e06832fc9221 Mon Sep 17 00:00:00 2001 From: Hendrik Hofstadt Date: Wed, 18 Jul 2018 13:12:49 +0200 Subject: [PATCH 28/40] Fix inflation calculation period check --- x/stake/handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/stake/handler.go b/x/stake/handler.go index b39298ede..14fb4f7bf 100644 --- a/x/stake/handler.go +++ b/x/stake/handler.go @@ -39,7 +39,7 @@ func EndBlocker(ctx sdk.Context, k keeper.Keeper) (ValidatorUpdates []abci.Valid // Process types.Validator Provisions blockTime := ctx.BlockHeader().Time - if pool.InflationLastTime+blockTime >= 3600 { + if blockTime-pool.InflationLastTime >= 3600 { pool.InflationLastTime = blockTime pool = pool.ProcessProvisions(params) } From c01a3d218f2544b00b817942e996e171c397b2a4 Mon Sep 17 00:00:00 2001 From: Hendrik Hofstadt Date: Wed, 18 Jul 2018 13:27:16 +0200 Subject: [PATCH 29/40] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a4f9942dd..e4324e73c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## PENDING BREAKING CHANGES +* [x/stake] Fixed the period check for the inflation calculation FEATURES * [lcd] Can now query governance proposals by ProposalStatus From 56e61e3f5a75d874df677d02dd2a3028bac7fb1f Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Wed, 18 Jul 2018 13:44:29 +0200 Subject: [PATCH 30/40] Adding other dependencies to gopkg, moving code, fixing printf --- cmd/cosmos-sdk-cli/cmd/init.go | 46 ++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/cmd/cosmos-sdk-cli/cmd/init.go b/cmd/cosmos-sdk-cli/cmd/init.go index 2008cb896..b44c2be34 100644 --- a/cmd/cosmos-sdk-cli/cmd/init.go +++ b/cmd/cosmos-sdk-cli/cmd/init.go @@ -8,15 +8,36 @@ import ( "strings" "github.com/cosmos/cosmos-sdk/version" + tmversion "github.com/tendermint/tendermint/version" "github.com/spf13/cobra" "path/filepath" ) +var remoteProjectPath string + func init() { initCmd.Flags().StringVarP(&remoteProjectPath, "project-path", "p", "", "Remote project path. eg: github.com/your_user_name/project_name") rootCmd.AddCommand(initCmd) } +var initCmd = &cobra.Command{ + Use: "init [ProjectName]", + Short: "Initialize your new cosmos zone", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + fmt.Print("Thanks for choosing Cosmos-SDK to build your project.\n\n") + projectName := args[0] + shortProjectName := strings.ToLower(projectName) + remoteProjectPath = strings.ToLower(strings.TrimSpace(remoteProjectPath)) + if remoteProjectPath == "" { + remoteProjectPath = strings.ToLower(shortProjectName) + } + setupBasecoinWorkspace(shortProjectName, remoteProjectPath) + return nil + }, +} + + func resolveProjectPath(remoteProjectPath string) string { gopath := os.Getenv("GOPATH") if gopath == "" { @@ -57,10 +78,14 @@ func copyBasecoinTemplate(projectName string, projectPath string, remoteProjectP func createGopkg(projectPath string) { // Create gopkg.toml file dependencies := map[string]string{ - "github.com/cosmos/cosmos-sdk": version.Version, + "github.com/cosmos/cosmos-sdk": "=" + version.Version, + "github.com/stretchr/testify": "=1.2.1", + "github.com/spf13/cobra": "=0.0.1", + "github.com/spf13/viper": "=1.0.0", } overrides := map[string]string{ "github.com/golang/protobuf": "1.1.0", + "github.com/tendermint/tendermint": tmversion.Version, } contents := "" for dependency, version := range dependencies { @@ -106,23 +131,6 @@ func setupBasecoinWorkspace(projectName string, remoteProjectPath string) { copyBasecoinTemplate(projectName, projectPath, remoteProjectPath) createGopkg(projectPath) createMakefile(projectPath) - fmt.Println("\nInitialized a new project at " + projectPath + ".\nHappy hacking!") + fmt.Printf("\nInitialized a new project at %s.\nHappy hacking!\n", projectPath) } -var remoteProjectPath string -var initCmd = &cobra.Command{ - Use: "init [ProjectName]", - Short: "Initialize your new cosmos zone", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - fmt.Print("Thanks for choosing Cosmos-SDK to build your project.\n\n") - projectName := args[0] - shortProjectName := strings.ToLower(projectName) - remoteProjectPath = strings.ToLower(strings.TrimSpace(remoteProjectPath)) - if remoteProjectPath == "" { - remoteProjectPath = strings.ToLower(shortProjectName) - } - setupBasecoinWorkspace(shortProjectName, remoteProjectPath) - return nil - }, -} From 9bc994b780da7ba89ffbeaf62a8d20435e53b9bd Mon Sep 17 00:00:00 2001 From: gamarin2 Date: Wed, 18 Jul 2018 14:16:10 +0200 Subject: [PATCH 31/40] Update faucet link in gaia-7001 README --- cmd/gaia/testnets/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/gaia/testnets/README.md b/cmd/gaia/testnets/README.md index a76d01921..241cf4928 100644 --- a/cmd/gaia/testnets/README.md +++ b/cmd/gaia/testnets/README.md @@ -337,7 +337,7 @@ gaiacli stake delegate \ While tokens are bonded, they are pooled with all the other bonded tokens in the network. Validators and delegators obtain a percentage of shares that equal their stake in this pool. -> _*NOTE:*_ Don't use more `steak` thank you have! You can always get more by using the [Faucet](https://faucetcosmos.network/)! +> _*NOTE:*_ Don't use more `steak` thank you have! You can always get more by using the [Faucet](https://gaia.faucetcosmos.network/)! ### Unbond Tokens From 0698a9535b1e727bdf849f6afebbdddcf5afcbda Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Wed, 18 Jul 2018 18:36:49 +0200 Subject: [PATCH 32/40] Renaming Basecoin and other base* to projectname --- cmd/cosmos-sdk-cli/cmd/init.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/cmd/cosmos-sdk-cli/cmd/init.go b/cmd/cosmos-sdk-cli/cmd/init.go index b44c2be34..937ada526 100644 --- a/cmd/cosmos-sdk-cli/cmd/init.go +++ b/cmd/cosmos-sdk-cli/cmd/init.go @@ -13,6 +13,8 @@ import ( "path/filepath" ) +var remoteBasecoinPath = "github.com/cosmos/cosmos-sdk/examples/basecoin" +var replacer *strings.Replacer var remoteProjectPath string func init() { @@ -27,11 +29,13 @@ var initCmd = &cobra.Command{ RunE: func(cmd *cobra.Command, args []string) error { fmt.Print("Thanks for choosing Cosmos-SDK to build your project.\n\n") projectName := args[0] + capitalizedProjectName := strings.Title(projectName) shortProjectName := strings.ToLower(projectName) remoteProjectPath = strings.ToLower(strings.TrimSpace(remoteProjectPath)) if remoteProjectPath == "" { remoteProjectPath = strings.ToLower(shortProjectName) } + replacer = strings.NewReplacer("basecli", shortProjectName + "cli", "basecoind", shortProjectName + "d", "BasecoinApp", capitalizedProjectName + "App", "github.com/cosmos/cosmos-sdk/examples/basecoin/", remoteProjectPath + "/", "basecoin", shortProjectName) setupBasecoinWorkspace(shortProjectName, remoteProjectPath) return nil }, @@ -47,8 +51,6 @@ func resolveProjectPath(remoteProjectPath string) string { return gopath + string(os.PathSeparator) + "src" + string(os.PathSeparator) + remoteProjectPath } -var remoteBasecoinPath = "github.com/cosmos/cosmos-sdk/examples/basecoin" - func copyBasecoinTemplate(projectName string, projectPath string, remoteProjectPath string) { basecoinProjectPath := resolveProjectPath(remoteBasecoinPath) filepath.Walk(basecoinProjectPath, func(path string, f os.FileInfo, err error) error { @@ -62,6 +64,7 @@ func copyBasecoinTemplate(projectName string, projectPath string, remoteProjectP relativeFilePath := path[len(basecoinProjectPath)+1:] // Evaluating the filepath in the new project folder projectFilePath := projectPath + string(os.PathSeparator) + relativeFilePath + projectFilePath = replacer.Replace(projectFilePath) lengthOfRootDir := strings.LastIndex(projectFilePath, string(os.PathSeparator)) // Extracting the path of root directory from the filepath rootDir := projectFilePath[0:lengthOfRootDir] @@ -69,6 +72,7 @@ func copyBasecoinTemplate(projectName string, projectPath string, remoteProjectP os.MkdirAll(rootDir, os.ModePerm) fmt.Println("Creating " + projectFilePath) // Writing the contents to a file in the project folder + contents = replacer.Replace(contents) ioutil.WriteFile(projectFilePath, []byte(contents), os.ModePerm) } return nil @@ -121,6 +125,7 @@ benchmark: @go test -bench=. $(PACKAGES) .PHONY: all build test benchmark` + makefileContents = replacer.Replace(makefileContents) ioutil.WriteFile(projectPath+"/Makefile", []byte(makefileContents), os.ModePerm) } From 7255f8260cfe7c64f2203806c8f105c5440bbdc0 Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Wed, 18 Jul 2018 18:39:58 +0200 Subject: [PATCH 33/40] Gofmt init.go --- cmd/cosmos-sdk-cli/cmd/init.go | 42 ++++++++++++++++------------------ 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/cmd/cosmos-sdk-cli/cmd/init.go b/cmd/cosmos-sdk-cli/cmd/init.go index 937ada526..067afb91c 100644 --- a/cmd/cosmos-sdk-cli/cmd/init.go +++ b/cmd/cosmos-sdk-cli/cmd/init.go @@ -8,8 +8,8 @@ import ( "strings" "github.com/cosmos/cosmos-sdk/version" - tmversion "github.com/tendermint/tendermint/version" "github.com/spf13/cobra" + tmversion "github.com/tendermint/tendermint/version" "path/filepath" ) @@ -23,25 +23,24 @@ func init() { } var initCmd = &cobra.Command{ - Use: "init [ProjectName]", - Short: "Initialize your new cosmos zone", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - fmt.Print("Thanks for choosing Cosmos-SDK to build your project.\n\n") - projectName := args[0] + Use: "init [ProjectName]", + Short: "Initialize your new cosmos zone", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + fmt.Print("Thanks for choosing Cosmos-SDK to build your project.\n\n") + projectName := args[0] capitalizedProjectName := strings.Title(projectName) - shortProjectName := strings.ToLower(projectName) - remoteProjectPath = strings.ToLower(strings.TrimSpace(remoteProjectPath)) - if remoteProjectPath == "" { - remoteProjectPath = strings.ToLower(shortProjectName) - } - replacer = strings.NewReplacer("basecli", shortProjectName + "cli", "basecoind", shortProjectName + "d", "BasecoinApp", capitalizedProjectName + "App", "github.com/cosmos/cosmos-sdk/examples/basecoin/", remoteProjectPath + "/", "basecoin", shortProjectName) - setupBasecoinWorkspace(shortProjectName, remoteProjectPath) - return nil - }, + shortProjectName := strings.ToLower(projectName) + remoteProjectPath = strings.ToLower(strings.TrimSpace(remoteProjectPath)) + if remoteProjectPath == "" { + remoteProjectPath = strings.ToLower(shortProjectName) + } + replacer = strings.NewReplacer("basecli", shortProjectName+"cli", "basecoind", shortProjectName+"d", "BasecoinApp", capitalizedProjectName+"App", "github.com/cosmos/cosmos-sdk/examples/basecoin/", remoteProjectPath+"/", "basecoin", shortProjectName) + setupBasecoinWorkspace(shortProjectName, remoteProjectPath) + return nil + }, } - func resolveProjectPath(remoteProjectPath string) string { gopath := os.Getenv("GOPATH") if gopath == "" { @@ -83,12 +82,12 @@ func createGopkg(projectPath string) { // Create gopkg.toml file dependencies := map[string]string{ "github.com/cosmos/cosmos-sdk": "=" + version.Version, - "github.com/stretchr/testify": "=1.2.1", - "github.com/spf13/cobra": "=0.0.1", - "github.com/spf13/viper": "=1.0.0", + "github.com/stretchr/testify": "=1.2.1", + "github.com/spf13/cobra": "=0.0.1", + "github.com/spf13/viper": "=1.0.0", } overrides := map[string]string{ - "github.com/golang/protobuf": "1.1.0", + "github.com/golang/protobuf": "1.1.0", "github.com/tendermint/tendermint": tmversion.Version, } contents := "" @@ -138,4 +137,3 @@ func setupBasecoinWorkspace(projectName string, remoteProjectPath string) { createMakefile(projectPath) fmt.Printf("\nInitialized a new project at %s.\nHappy hacking!\n", projectPath) } - From 95191f5a51333dcf8873a0a213122075cb4ffd75 Mon Sep 17 00:00:00 2001 From: Dev Ojha Date: Wed, 18 Jul 2018 11:25:55 -0700 Subject: [PATCH 34/40] Merge PR #1730: client: On any tx that broadcasts a tx, check that acct exists This subverts the really hard to decipher ABCI error message, with a nice user friendly error message. --- CHANGELOG.md | 1 + Gopkg.lock | 182 ++++++++++++++++++++++++++++++++++---- client/context/helpers.go | 5 ++ client/context/viper.go | 34 +++++++ 4 files changed, 205 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4324e73c..f8fc927c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ FEATURES IMPROVEMENTS * [baseapp] Allow any alphanumeric character in route +* [cli] Improve error messages for all txs when the account doesn't exist * [tools] Remove `rm -rf vendor/` from `make get_vendor_deps` BUG FIXES diff --git a/Gopkg.lock b/Gopkg.lock index 66f6c0492..cf5c97909 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -2,57 +2,76 @@ [[projects]] + digest = "1:09a7f74eb6bb3c0f14d8926610c87f569c5cff68e978d30e9a3540aeb626fdf0" name = "github.com/bartekn/go-bip39" packages = ["."] + pruneopts = "UT" revision = "a05967ea095d81c8fe4833776774cfaff8e5036c" [[projects]] branch = "master" + digest = "1:d6afaeed1502aa28e80a4ed0981d570ad91b2579193404256ce672ed0a609e0d" name = "github.com/beorn7/perks" packages = ["quantile"] + pruneopts = "UT" revision = "3a771d992973f24aa725d07868b467d1ddfceafb" [[projects]] + digest = "1:1343a2963481a305ca4d051e84bc2abd16b601ee22ed324f8d605de1adb291b0" name = "github.com/bgentry/speakeasy" packages = ["."] + pruneopts = "UT" revision = "4aabc24848ce5fd31929f7d1e4ea74d3709c14cd" version = "v0.1.0" [[projects]] branch = "master" + digest = "1:70f6b224a59b2fa453debffa85c77f71063d8754b90c8c4fbad5794e2c382b0f" name = "github.com/brejski/hid" packages = ["."] + pruneopts = "UT" revision = "06112dcfcc50a7e0e4fd06e17f9791e788fdaafc" [[projects]] branch = "master" + digest = "1:6aabc1566d6351115d561d038da82a4c19b46c3b6e17f4a0a2fa60260663dc79" name = "github.com/btcsuite/btcd" packages = ["btcec"] + pruneopts = "UT" revision = "fdfc19097e7ac6b57035062056f5b7b4638b8898" [[projects]] + digest = "1:386de157f7d19259a7f9c81f26ce011223ce0f090353c1152ffdf730d7d10ac2" name = "github.com/btcsuite/btcutil" packages = ["bech32"] + pruneopts = "UT" revision = "d4cc87b860166d00d6b5b9e0d3b3d71d6088d4d4" [[projects]] + digest = "1:a2c1d0e43bd3baaa071d1b9ed72c27d78169b2b269f71c105ac4ba34b1be4a39" name = "github.com/davecgh/go-spew" packages = ["spew"] + pruneopts = "UT" revision = "346938d642f2ec3594ed81d874461961cd0faa76" version = "v1.1.0" [[projects]] + digest = "1:c7644c73a3d23741fdba8a99b1464e021a224b7e205be497271a8003a15ca41b" name = "github.com/ebuchman/fail-test" packages = ["."] + pruneopts = "UT" revision = "95f809107225be108efcf10a3509e4ea6ceef3c4" [[projects]] + digest = "1:abeb38ade3f32a92943e5be54f55ed6d6e3b6602761d74b4aab4c9dd45c18abd" name = "github.com/fsnotify/fsnotify" packages = ["."] + pruneopts = "UT" revision = "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9" version = "v1.4.7" [[projects]] + digest = "1:fa30c0652956e159cdb97dcb2ef8b8db63ed668c02a5c3a40961c8f0641252fe" name = "github.com/go-kit/kit" packages = [ "log", @@ -61,24 +80,30 @@ "metrics", "metrics/discard", "metrics/internal/lv", - "metrics/prometheus" + "metrics/prometheus", ] + pruneopts = "UT" revision = "4dc7be5d2d12881735283bcab7352178e190fc71" version = "v0.6.0" [[projects]] + digest = "1:31a18dae27a29aa074515e43a443abfd2ba6deb6d69309d8d7ce789c45f34659" name = "github.com/go-logfmt/logfmt" packages = ["."] + pruneopts = "UT" revision = "390ab7935ee28ec6b286364bba9b4dd6410cb3d5" version = "v0.3.0" [[projects]] + digest = "1:c4a2528ccbcabf90f9f3c464a5fc9e302d592861bbfd0b7135a7de8a943d0406" name = "github.com/go-stack/stack" packages = ["."] + pruneopts = "UT" revision = "259ab82a6cad3992b4e21ff5cac294ccb06474bc" version = "v1.7.0" [[projects]] + digest = "1:af1306bff89268721ea2550d504413c9487ebfca11e2ff8f39ae79b99a720ff5" name = "github.com/gogo/protobuf" packages = [ "gogoproto", @@ -86,49 +111,61 @@ "proto", "protoc-gen-gogo/descriptor", "sortkeys", - "types" + "types", ] + pruneopts = "UT" revision = "1adfc126b41513cc696b209667c8656ea7aac67c" version = "v1.0.0" [[projects]] + digest = "1:cb22af0ed7c72d495d8be1106233ee553898950f15fd3f5404406d44c2e86888" name = "github.com/golang/protobuf" packages = [ "proto", "ptypes", "ptypes/any", "ptypes/duration", - "ptypes/timestamp" + "ptypes/timestamp", ] + pruneopts = "UT" revision = "b4deda0973fb4c70b50d226b1af49f3da59f5265" version = "v1.1.0" [[projects]] branch = "master" + digest = "1:4a0c6bb4805508a6287675fac876be2ac1182539ca8a32468d8128882e9d5009" name = "github.com/golang/snappy" packages = ["."] + pruneopts = "UT" revision = "2e65f85255dbc3072edf28d6b5b8efc472979f5a" [[projects]] + digest = "1:c79fb010be38a59d657c48c6ba1d003a8aa651fa56b579d959d74573b7dff8e1" name = "github.com/gorilla/context" packages = ["."] + pruneopts = "UT" revision = "08b5f424b9271eedf6f9f0ce86cb9396ed337a42" version = "v1.1.1" [[projects]] + digest = "1:e73f5b0152105f18bc131fba127d9949305c8693f8a762588a82a48f61756f5f" name = "github.com/gorilla/mux" packages = ["."] + pruneopts = "UT" revision = "e3702bed27f0d39777b0b37b664b6280e8ef8fbf" version = "v1.6.2" [[projects]] + digest = "1:43dd08a10854b2056e615d1b1d22ac94559d822e1f8b6fcc92c1a1057e85188e" name = "github.com/gorilla/websocket" packages = ["."] + pruneopts = "UT" revision = "ea4d1f681babbce9545c9c5f3d5194a789c89f5b" version = "v1.2.0" [[projects]] branch = "master" + digest = "1:8951fe6e358876736d8fa1f3992624fdbb2dec6bc49401c1381d1ef8abbb544f" name = "github.com/hashicorp/hcl" packages = [ ".", @@ -139,160 +176,206 @@ "hcl/token", "json/parser", "json/scanner", - "json/token" + "json/token", ] + pruneopts = "UT" revision = "ef8a98b0bbce4a65b5aa4c368430a80ddc533168" [[projects]] + digest = "1:870d441fe217b8e689d7949fef6e43efbc787e50f200cb1e70dbca9204a1d6be" name = "github.com/inconshreveable/mousetrap" packages = ["."] + pruneopts = "UT" revision = "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75" version = "v1.0" [[projects]] branch = "master" + digest = "1:39b27d1381a30421f9813967a5866fba35dc1d4df43a6eefe3b7a5444cb07214" name = "github.com/jmhodges/levigo" packages = ["."] + pruneopts = "UT" revision = "c42d9e0ca023e2198120196f842701bb4c55d7b9" [[projects]] branch = "master" + digest = "1:a64e323dc06b73892e5bb5d040ced475c4645d456038333883f58934abbf6f72" name = "github.com/kr/logfmt" packages = ["."] + pruneopts = "UT" revision = "b84e30acd515aadc4b783ad4ff83aff3299bdfe0" [[projects]] + digest = "1:c568d7727aa262c32bdf8a3f7db83614f7af0ed661474b24588de635c20024c7" name = "github.com/magiconair/properties" packages = ["."] + pruneopts = "UT" revision = "c2353362d570a7bfa228149c62842019201cfb71" version = "v1.8.0" [[projects]] + digest = "1:d4d17353dbd05cb52a2a52b7fe1771883b682806f68db442b436294926bbfafb" name = "github.com/mattn/go-isatty" packages = ["."] + pruneopts = "UT" revision = "0360b2af4f38e8d38c7fce2a9f4e702702d73a39" version = "v0.0.3" [[projects]] + digest = "1:ff5ebae34cfbf047d505ee150de27e60570e8c394b3b8fdbb720ff6ac71985fc" name = "github.com/matttproud/golang_protobuf_extensions" packages = ["pbutil"] + pruneopts = "UT" revision = "c12348ce28de40eed0136aa2b644d0ee0650e56c" version = "v1.0.1" [[projects]] branch = "master" + digest = "1:e730597b38a4d56e2361e0b6236cb800e52c73cace2ff91396f4ff35792ddfa7" name = "github.com/mitchellh/mapstructure" packages = ["."] + pruneopts = "UT" revision = "bb74f1db0675b241733089d5a1faa5dd8b0ef57b" [[projects]] + digest = "1:95741de3af260a92cc5c7f3f3061e85273f5a81b5db20d4bd68da74bd521675e" name = "github.com/pelletier/go-toml" packages = ["."] + pruneopts = "UT" revision = "c01d1270ff3e442a8a57cddc1c92dc1138598194" version = "v1.2.0" [[projects]] + digest = "1:40e195917a951a8bf867cd05de2a46aaf1806c50cf92eebf4c16f78cd196f747" name = "github.com/pkg/errors" packages = ["."] + pruneopts = "UT" revision = "645ef00459ed84a119197bfb8d8205042c6df63d" version = "v0.8.0" [[projects]] + digest = "1:0028cb19b2e4c3112225cd871870f2d9cf49b9b4276531f03438a88e94be86fe" name = "github.com/pmezard/go-difflib" packages = ["difflib"] + pruneopts = "UT" revision = "792786c7400a136282c1664665ae0a8db921c6c2" version = "v1.0.0" [[projects]] + digest = "1:98225904b7abff96c052b669b25788f18225a36673fba022fb93514bb9a2a64e" name = "github.com/prometheus/client_golang" packages = [ "prometheus", - "prometheus/promhttp" + "prometheus/promhttp", ] + pruneopts = "UT" revision = "ae27198cdd90bf12cd134ad79d1366a6cf49f632" [[projects]] branch = "master" + digest = "1:0f37e09b3e92aaeda5991581311f8dbf38944b36a3edec61cc2d1991f527554a" name = "github.com/prometheus/client_model" packages = ["go"] + pruneopts = "UT" revision = "5c3871d89910bfb32f5fcab2aa4b9ec68e65a99f" [[projects]] branch = "master" + digest = "1:4d291d51042ed9de40eef61a3c1b56e969d6e0f8aa5fd3da5e958ec66bee68e4" name = "github.com/prometheus/common" packages = [ "expfmt", "internal/bitbucket.org/ww/goautoneg", - "model" + "model", ] + pruneopts = "UT" revision = "7600349dcfe1abd18d72d3a1770870d9800a7801" [[projects]] branch = "master" + digest = "1:55d7449d6987dabf272b4e81b2f9c449f05b17415c939b68d1e82f57e3374b7f" name = "github.com/prometheus/procfs" packages = [ ".", "internal/util", "nfs", - "xfs" + "xfs", ] + pruneopts = "UT" revision = "ae68e2d4c00fed4943b5f6698d504a5fe083da8a" [[projects]] + digest = "1:c4556a44e350b50a490544d9b06e9fba9c286c21d6c0e47f54f3a9214597298c" name = "github.com/rcrowley/go-metrics" packages = ["."] + pruneopts = "UT" revision = "e2704e165165ec55d062f5919b4b29494e9fa790" [[projects]] + digest = "1:37ace7f35375adec11634126944bdc45a673415e2fcc07382d03b75ec76ea94c" name = "github.com/spf13/afero" packages = [ ".", - "mem" + "mem", ] + pruneopts = "UT" revision = "787d034dfe70e44075ccc060d346146ef53270ad" version = "v1.1.1" [[projects]] + digest = "1:516e71bed754268937f57d4ecb190e01958452336fa73dbac880894164e91c1f" name = "github.com/spf13/cast" packages = ["."] + pruneopts = "UT" revision = "8965335b8c7107321228e3e3702cab9832751bac" version = "v1.2.0" [[projects]] + digest = "1:627ab2f549a6a55c44f46fa24a4307f4d0da81bfc7934ed0473bf38b24051d26" name = "github.com/spf13/cobra" packages = ["."] + pruneopts = "UT" revision = "7b2c5ac9fc04fc5efafb60700713d4fa609b777b" version = "v0.0.1" [[projects]] branch = "master" + digest = "1:080e5f630945ad754f4b920e60b4d3095ba0237ebf88dc462eb28002932e3805" name = "github.com/spf13/jwalterweatherman" packages = ["."] + pruneopts = "UT" revision = "7c0cea34c8ece3fbeb2b27ab9b59511d360fb394" [[projects]] + digest = "1:9424f440bba8f7508b69414634aef3b2b3a877e522d8a4624692412805407bb7" name = "github.com/spf13/pflag" packages = ["."] + pruneopts = "UT" revision = "583c0c0531f06d5278b7d917446061adc344b5cd" version = "v1.0.1" [[projects]] + digest = "1:f8e1a678a2571e265f4bf91a3e5e32aa6b1474a55cb0ea849750cc177b664d96" name = "github.com/spf13/viper" packages = ["."] + pruneopts = "UT" revision = "25b30aa063fc18e48662b86996252eabdcf2f0c7" version = "v1.0.0" [[projects]] + digest = "1:73697231b93fb74a73ebd8384b68b9a60c57ea6b13c56d2425414566a72c8e6d" name = "github.com/stretchr/testify" packages = [ "assert", - "require" + "require", ] + pruneopts = "UT" revision = "12b6f73e6084dad08a7c6e575284b177ecafbc71" version = "v1.2.1" [[projects]] branch = "master" + digest = "1:922191411ad8f61bcd8018ac127589bb489712c1d1a0ab2497aca4b16de417d2" name = "github.com/syndtr/goleveldb" packages = [ "leveldb", @@ -306,33 +389,41 @@ "leveldb/opt", "leveldb/storage", "leveldb/table", - "leveldb/util" + "leveldb/util", ] + pruneopts = "UT" revision = "c4c61651e9e37fa117f53c5a906d3b63090d8445" [[projects]] branch = "master" + digest = "1:203b409c21115233a576f99e8f13d8e07ad82b25500491f7e1cca12588fb3232" name = "github.com/tendermint/ed25519" packages = [ ".", "edwards25519", - "extra25519" + "extra25519", ] + pruneopts = "UT" revision = "d8387025d2b9d158cf4efb07e7ebf814bcce2057" [[projects]] + digest = "1:e9113641c839c21d8eaeb2c907c7276af1eddeed988df8322168c56b7e06e0e1" name = "github.com/tendermint/go-amino" packages = ["."] + pruneopts = "UT" revision = "2106ca61d91029c931fd54968c2bb02dc96b1412" version = "0.10.1" [[projects]] + digest = "1:d4a15d404afbf591e8be16fcda7f5ac87948d5c7531f9d909fd84cc730ab16e2" name = "github.com/tendermint/iavl" packages = ["."] + pruneopts = "UT" revision = "35f66e53d9b01e83b30de68b931f54b2477a94c9" version = "v0.9.2" [[projects]] + digest = "1:5f41a7655812fa5901c71735dc8845f33184e94a2020c770f60a1a80ed228cb3" name = "github.com/tendermint/tendermint" packages = [ "abci/client", @@ -387,18 +478,22 @@ "state/txindex/kv", "state/txindex/null", "types", - "version" + "version", ] + pruneopts = "UT" revision = "c64a3c74c870d725ba1356f75b4afadf0928c297" version = "v0.22.4" [[projects]] + digest = "1:5bd938386bd1f61a581bf8cd6ff2b7b2f79c542929176db4ceb44965440dae07" name = "github.com/zondax/ledger-goclient" packages = ["."] + pruneopts = "UT" revision = "39ba4728c137c75718a21f9b4b3280fa31b9139b" [[projects]] branch = "master" + digest = "1:e8206c1653e050116ec8c9a823a86413fc9f9ee3c2f3ae977c96d6a1747f7325" name = "golang.org/x/crypto" packages = [ "blowfish", @@ -411,11 +506,13 @@ "pbkdf2", "poly1305", "ripemd160", - "salsa20/salsa" + "salsa20/salsa", ] + pruneopts = "UT" revision = "a49355c7e3f8fe157a85be2f77e6e269a0f89602" [[projects]] + digest = "1:04dda8391c3e2397daf254ac68003f30141c069b228d06baec8324a5f81dc1e9" name = "golang.org/x/net" packages = [ "context", @@ -425,17 +522,21 @@ "idna", "internal/timeseries", "netutil", - "trace" + "trace", ] + pruneopts = "UT" revision = "292b43bbf7cb8d35ddf40f8d5100ef3837cced3f" [[projects]] branch = "master" + digest = "1:d773e525476aefa22ea944a5425a9bfb99819b2e67eeb9b1966454fd57522bbf" name = "golang.org/x/sys" packages = ["unix"] + pruneopts = "UT" revision = "1b2967e3c290b7c545b3db0deeda16e9be4f98a2" [[projects]] + digest = "1:7509ba4347d1f8de6ae9be8818b0cd1abc3deeffe28aeaf4be6d4b6b5178d9ca" name = "golang.org/x/text" packages = [ "collate", @@ -451,18 +552,22 @@ "unicode/bidi", "unicode/cldr", "unicode/norm", - "unicode/rangetable" + "unicode/rangetable", ] + pruneopts = "UT" revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" version = "v0.3.0" [[projects]] branch = "master" + digest = "1:601e63e7d4577f907118bec825902505291918859d223bce015539e79f1160e3" name = "google.golang.org/genproto" packages = ["googleapis/rpc/status"] + pruneopts = "UT" revision = "e92b116572682a5b432ddd840aeaba2a559eeff1" [[projects]] + digest = "1:4d7b5d9746840266938cdb21a40f8eba7137d9153c4ed404d6bb2a450d06f690" name = "google.golang.org/grpc" packages = [ ".", @@ -487,20 +592,63 @@ "stats", "status", "tap", - "transport" + "transport", ] + pruneopts = "UT" revision = "d11072e7ca9811b1100b80ca0269ac831f06d024" version = "v1.11.3" [[projects]] + digest = "1:342378ac4dcb378a5448dd723f0784ae519383532f5e70ade24132c4c8693202" name = "gopkg.in/yaml.v2" packages = ["."] + pruneopts = "UT" revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183" version = "v2.2.1" [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "71e86b1f1e9ec71901c20d8532dc8477df66eff37a407322379f6a8b03e5d91b" + input-imports = [ + "github.com/bartekn/go-bip39", + "github.com/bgentry/speakeasy", + "github.com/btcsuite/btcd/btcec", + "github.com/golang/protobuf/proto", + "github.com/gorilla/mux", + "github.com/mattn/go-isatty", + "github.com/pkg/errors", + "github.com/spf13/cobra", + "github.com/spf13/pflag", + "github.com/spf13/viper", + "github.com/stretchr/testify/assert", + "github.com/stretchr/testify/require", + "github.com/tendermint/go-amino", + "github.com/tendermint/iavl", + "github.com/tendermint/tendermint/abci/server", + "github.com/tendermint/tendermint/abci/types", + "github.com/tendermint/tendermint/cmd/tendermint/commands", + "github.com/tendermint/tendermint/config", + "github.com/tendermint/tendermint/crypto", + "github.com/tendermint/tendermint/crypto/merkle", + "github.com/tendermint/tendermint/crypto/tmhash", + "github.com/tendermint/tendermint/libs/bech32", + "github.com/tendermint/tendermint/libs/cli", + "github.com/tendermint/tendermint/libs/cli/flags", + "github.com/tendermint/tendermint/libs/common", + "github.com/tendermint/tendermint/libs/db", + "github.com/tendermint/tendermint/libs/log", + "github.com/tendermint/tendermint/node", + "github.com/tendermint/tendermint/p2p", + "github.com/tendermint/tendermint/privval", + "github.com/tendermint/tendermint/proxy", + "github.com/tendermint/tendermint/rpc/client", + "github.com/tendermint/tendermint/rpc/core/types", + "github.com/tendermint/tendermint/rpc/lib/client", + "github.com/tendermint/tendermint/rpc/lib/server", + "github.com/tendermint/tendermint/types", + "github.com/zondax/ledger-goclient", + "golang.org/x/crypto/blowfish", + "golang.org/x/crypto/ripemd160", + ] solver-name = "gps-cdcl" solver-version = 1 diff --git a/client/context/helpers.go b/client/context/helpers.go index 00ff8a81c..7742dfe03 100644 --- a/client/context/helpers.go +++ b/client/context/helpers.go @@ -186,6 +186,11 @@ func (ctx CoreContext) SignAndBuild(name, passphrase string, msgs []sdk.Msg, cdc // sign and build the transaction from the msg func (ctx CoreContext) ensureSignBuild(name string, msgs []sdk.Msg, cdc *wire.Codec) (tyBytes []byte, err error) { + err = EnsureAccountExists(ctx, name) + if err != nil { + return nil, err + } + ctx, err = EnsureAccountNumber(ctx) if err != nil { return nil, err diff --git a/client/context/viper.go b/client/context/viper.go index 611ad1b92..6c7646079 100644 --- a/client/context/viper.go +++ b/client/context/viper.go @@ -3,6 +3,7 @@ package context import ( "fmt" + "github.com/pkg/errors" "github.com/spf13/viper" tcmd "github.com/tendermint/tendermint/cmd/tendermint/commands" @@ -10,6 +11,9 @@ import ( tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/keys" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/auth" ) // NewCoreContextFromViper - return a new context with parameters from the command line @@ -68,6 +72,36 @@ func defaultChainID() (string, error) { return doc.ChainID, nil } +// EnsureAccountExists - Make sure account exists +func EnsureAccountExists(ctx CoreContext, name string) error { + keybase, err := keys.GetKeyBase() + if err != nil { + return err + } + + if name == "" { + return errors.Errorf("must provide a from address name") + } + + info, err := keybase.Get(name) + if err != nil { + return errors.Errorf("no key for: %s", name) + } + + accAddr := sdk.AccAddress(info.GetPubKey().Address()) + + Acc, err := ctx.QueryStore(auth.AddressStoreKey(accAddr), ctx.AccountStore) + if err != nil { + return err + } + + // Check if account was found + if Acc == nil { + return errors.Errorf("No account with address %s was found in the state.\nAre you sure there has been a transaction involving it?", accAddr) + } + return nil +} + // EnsureAccount - automatically set account number if none provided func EnsureAccountNumber(ctx CoreContext) (CoreContext, error) { // Should be viper.IsSet, but this does not work - https://github.com/spf13/viper/pull/331 From b7783a8a26c47fdb1f7d179a21bbb97813bb6574 Mon Sep 17 00:00:00 2001 From: svaishnavy Date: Wed, 18 Jul 2018 21:20:38 +0200 Subject: [PATCH 35/40] Making suggested changes --- docs/sdk/cosmos-sdk-cli.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/sdk/cosmos-sdk-cli.md b/docs/sdk/cosmos-sdk-cli.md index 2a418534d..2cc0182cf 100644 --- a/docs/sdk/cosmos-sdk-cli.md +++ b/docs/sdk/cosmos-sdk-cli.md @@ -6,9 +6,9 @@ Create a new blockchain project based on cosmos-sdk with a single command. # Installation ```shell -$go get github.com/cosmos/cosmos-sdk -$cd $GOPATH/src/github.com/cosmos/cosmos-sdk -$make install_cosmos-sdk-cli +$ go get github.com/cosmos/cosmos-sdk +$ cd $GOPATH/src/github.com/cosmos/cosmos-sdk +$ make install_cosmos-sdk-cli ``` This will install a binary cosmos-sdk-cli @@ -21,14 +21,14 @@ This will initialize a project, the dependencies, directory structures with the ### Example: ```shell -$cosmos-sdk-cli init testzone -p github.com/your_user_name/testzone +$ cosmos-sdk-cli init testzone -p github.com/your_user_name/testzone ``` --p remote project path (optional). If this is not provided, it creates testzone under $GOPATH/src/ +```-p [remote-project-path]```. If this is not provided, it creates testzone under $GOPATH/src/ ```shell -$cd $GOPATH/src/github.com/your_user_name/testzone -$make +$ cd $GOPATH/src/github.com/your_user_name/testzone +$ make ``` This will create two binaries(testzonecli and testzoned) under bin folder. testzoned is the full node of the application which you can run, and testzonecli is your light client. From 1d9415eae072cd3f1b526de24ca895d9a8119eff Mon Sep 17 00:00:00 2001 From: svaishnavy Date: Wed, 18 Jul 2018 21:37:11 +0200 Subject: [PATCH 36/40] Replacing with a single backtick --- docs/sdk/cosmos-sdk-cli.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sdk/cosmos-sdk-cli.md b/docs/sdk/cosmos-sdk-cli.md index 2cc0182cf..615d72252 100644 --- a/docs/sdk/cosmos-sdk-cli.md +++ b/docs/sdk/cosmos-sdk-cli.md @@ -23,7 +23,7 @@ This will initialize a project, the dependencies, directory structures with the ```shell $ cosmos-sdk-cli init testzone -p github.com/your_user_name/testzone ``` -```-p [remote-project-path]```. If this is not provided, it creates testzone under $GOPATH/src/ +`-p [remote-project-path]`. If this is not provided, it creates testzone under $GOPATH/src/ ```shell From e572513d9102f1b84220fabaaa47fc2a9f1e8f10 Mon Sep 17 00:00:00 2001 From: Sridhar Ganesan Date: Wed, 18 Jul 2018 22:06:08 +0200 Subject: [PATCH 37/40] Adding comments for variables and refactoring how replacer is initialized, adding comment about tools/ structure --- cmd/cosmos-sdk-cli/cmd/init.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/cmd/cosmos-sdk-cli/cmd/init.go b/cmd/cosmos-sdk-cli/cmd/init.go index 067afb91c..5a0f3ddb3 100644 --- a/cmd/cosmos-sdk-cli/cmd/init.go +++ b/cmd/cosmos-sdk-cli/cmd/init.go @@ -14,7 +14,12 @@ import ( ) var remoteBasecoinPath = "github.com/cosmos/cosmos-sdk/examples/basecoin" + +// Replacer to replace all instances of basecoin/basecli/BasecoinApp to project specific names +// Gets initialized when initCmd is executing after getting the project name from user var replacer *strings.Replacer + +// Remote path for the project. var remoteProjectPath string func init() { @@ -35,7 +40,11 @@ var initCmd = &cobra.Command{ if remoteProjectPath == "" { remoteProjectPath = strings.ToLower(shortProjectName) } - replacer = strings.NewReplacer("basecli", shortProjectName+"cli", "basecoind", shortProjectName+"d", "BasecoinApp", capitalizedProjectName+"App", "github.com/cosmos/cosmos-sdk/examples/basecoin/", remoteProjectPath+"/", "basecoin", shortProjectName) + replacer = strings.NewReplacer("basecli", shortProjectName+"cli", + "basecoind", shortProjectName+"d", + "BasecoinApp", capitalizedProjectName+"App", + remoteBasecoinPath, remoteProjectPath, + "basecoin", shortProjectName) setupBasecoinWorkspace(shortProjectName, remoteProjectPath) return nil }, @@ -103,6 +112,7 @@ func createGopkg(projectPath string) { func createMakefile(projectPath string) { // Create makefile + // TODO: Should we use tools/ directory as in Cosmos-SDK to get tools for linting etc. makefileContents := `PACKAGES=$(shell go list ./... | grep -v '/vendor/') all: get_tools get_vendor_deps build test @@ -124,7 +134,10 @@ benchmark: @go test -bench=. $(PACKAGES) .PHONY: all build test benchmark` + + // Replacing instances of base* to project specific names makefileContents = replacer.Replace(makefileContents) + ioutil.WriteFile(projectPath+"/Makefile", []byte(makefileContents), os.ModePerm) } From cfe78027f22fdc9b96e43b8671af07a2e11e0f31 Mon Sep 17 00:00:00 2001 From: Rigel Date: Wed, 18 Jul 2018 16:09:40 -0400 Subject: [PATCH 38/40] Merge PR #1724: R4R: Add Stake Genesis Intra-Tx Counter * add revoked to human-readable validator * changelog * added failing test * add intra-tx counter to the genesis validators * changelog --- CHANGELOG.md | 2 ++ x/stake/genesis.go | 4 ++- x/stake/genesis_test.go | 16 +++++++++-- x/stake/types/validator.go | 55 +++++++++++++++++++------------------- 4 files changed, 47 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8fc927c9..fc69ff9d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,10 +10,12 @@ FEATURES IMPROVEMENTS * [baseapp] Allow any alphanumeric character in route +* [x/stake] Add revoked to human-readable validator * [cli] Improve error messages for all txs when the account doesn't exist * [tools] Remove `rm -rf vendor/` from `make get_vendor_deps` BUG FIXES +* \#1666 Add intra-tx counter to the genesis validators ## 0.22.0 diff --git a/x/stake/genesis.go b/x/stake/genesis.go index e54517fa5..b4ed80e51 100644 --- a/x/stake/genesis.go +++ b/x/stake/genesis.go @@ -17,7 +17,7 @@ func InitGenesis(ctx sdk.Context, keeper Keeper, data types.GenesisState) error keeper.SetNewParams(ctx, data.Params) keeper.InitIntraTxCounter(ctx) - for _, validator := range data.Validators { + for i, validator := range data.Validators { keeper.SetValidator(ctx, validator) if validator.Tokens.IsZero() { @@ -29,6 +29,8 @@ func InitGenesis(ctx sdk.Context, keeper Keeper, data types.GenesisState) error // Manually set indexes for the first time keeper.SetValidatorByPubKeyIndex(ctx, validator) + + validator.BondIntraTxCounter = int16(i) // set the intra-tx counter to the order the validators are presented keeper.SetValidatorByPowerIndex(ctx, validator, data.Pool) if validator.Status == sdk.Bonded { diff --git a/x/stake/genesis_test.go b/x/stake/genesis_test.go index 2faff5bc0..e27c7fed2 100644 --- a/x/stake/genesis_test.go +++ b/x/stake/genesis_test.go @@ -14,23 +14,35 @@ func TestInitGenesis(t *testing.T) { ctx, _, keeper := keep.CreateTestInput(t, false, 1000) pool := keeper.GetPool(ctx) - pool.LooseTokens = sdk.OneRat() + pool.LooseTokens = sdk.NewRat(2) params := keeper.GetParams(ctx) var delegations []Delegation validators := []Validator{ NewValidator(keep.Addrs[0], keep.PKs[0], Description{Moniker: "hoop"}), + NewValidator(keep.Addrs[1], keep.PKs[1], Description{Moniker: "bloop"}), } - genesisState := types.NewGenesisState(pool, params, validators, delegations) err := InitGenesis(ctx, keeper, genesisState) require.Error(t, err) + // initialize the validators validators[0].Tokens = sdk.OneRat() validators[0].DelegatorShares = sdk.OneRat() + validators[1].Tokens = sdk.OneRat() + validators[1].DelegatorShares = sdk.OneRat() genesisState = types.NewGenesisState(pool, params, validators, delegations) err = InitGenesis(ctx, keeper, genesisState) require.NoError(t, err) + + // now make sure the validators are bonded + resVal, found := keeper.GetValidator(ctx, keep.Addrs[0]) + require.True(t, found) + require.Equal(t, sdk.Bonded, resVal.Status) + + resVal, found = keeper.GetValidator(ctx, keep.Addrs[1]) + require.True(t, found) + require.Equal(t, sdk.Bonded, resVal.Status) } diff --git a/x/stake/types/validator.go b/x/stake/types/validator.go index ed109830f..f177c123d 100644 --- a/x/stake/types/validator.go +++ b/x/stake/types/validator.go @@ -147,6 +147,34 @@ func UnmarshalValidator(cdc *wire.Codec, ownerAddr, value []byte) (validator Val }, nil } +// HumanReadableString returns a human readable string representation of a +// validator. An error is returned if the owner or the owner's public key +// cannot be converted to Bech32 format. +func (v Validator) HumanReadableString() (string, error) { + bechVal, err := sdk.Bech32ifyValPub(v.PubKey) + if err != nil { + return "", err + } + + resp := "Validator \n" + resp += fmt.Sprintf("Owner: %s\n", v.Owner) + resp += fmt.Sprintf("Validator: %s\n", bechVal) + resp += fmt.Sprintf("Revoked: %v\n", v.Revoked) + resp += fmt.Sprintf("Status: %s\n", sdk.BondStatusToString(v.Status)) + resp += fmt.Sprintf("Tokens: %s\n", v.Tokens.FloatString()) + resp += fmt.Sprintf("Delegator Shares: %s\n", v.DelegatorShares.FloatString()) + resp += fmt.Sprintf("Description: %s\n", v.Description) + resp += fmt.Sprintf("Bond Height: %d\n", v.BondHeight) + resp += fmt.Sprintf("Proposer Reward Pool: %s\n", v.ProposerRewardPool.String()) + resp += fmt.Sprintf("Commission: %s\n", v.Commission.String()) + resp += fmt.Sprintf("Max Commission Rate: %s\n", v.CommissionMax.String()) + resp += fmt.Sprintf("Commission Change Rate: %s\n", v.CommissionChangeRate.String()) + resp += fmt.Sprintf("Commission Change Today: %s\n", v.CommissionChangeToday.String()) + resp += fmt.Sprintf("Previous Bonded Tokens: %s\n", v.LastBondedTokens.String()) + + return resp, nil +} + //___________________________________________________________________ // validator struct for bech output @@ -408,30 +436,3 @@ func (v Validator) GetPubKey() crypto.PubKey { return v.PubKey } func (v Validator) GetPower() sdk.Rat { return v.BondedTokens() } func (v Validator) GetDelegatorShares() sdk.Rat { return v.DelegatorShares } func (v Validator) GetBondHeight() int64 { return v.BondHeight } - -// HumanReadableString returns a human readable string representation of a -// validator. An error is returned if the owner or the owner's public key -// cannot be converted to Bech32 format. -func (v Validator) HumanReadableString() (string, error) { - bechVal, err := sdk.Bech32ifyValPub(v.PubKey) - if err != nil { - return "", err - } - - resp := "Validator \n" - resp += fmt.Sprintf("Owner: %s\n", v.Owner) - resp += fmt.Sprintf("Validator: %s\n", bechVal) - resp += fmt.Sprintf("Status: %s\n", sdk.BondStatusToString(v.Status)) - resp += fmt.Sprintf("Tokens: %s\n", v.Tokens.FloatString()) - resp += fmt.Sprintf("Delegator Shares: %s\n", v.DelegatorShares.FloatString()) - resp += fmt.Sprintf("Description: %s\n", v.Description) - resp += fmt.Sprintf("Bond Height: %d\n", v.BondHeight) - resp += fmt.Sprintf("Proposer Reward Pool: %s\n", v.ProposerRewardPool.String()) - resp += fmt.Sprintf("Commission: %s\n", v.Commission.String()) - resp += fmt.Sprintf("Max Commission Rate: %s\n", v.CommissionMax.String()) - resp += fmt.Sprintf("Commission Change Rate: %s\n", v.CommissionChangeRate.String()) - resp += fmt.Sprintf("Commission Change Today: %s\n", v.CommissionChangeToday.String()) - resp += fmt.Sprintf("Previous Bonded Tokens: %s\n", v.LastBondedTokens.String()) - - return resp, nil -} From cbf432d34cbd0f6e7271286e782f6bade3de78f9 Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Thu, 19 Jul 2018 02:42:19 +0200 Subject: [PATCH 39/40] Merge PR #1746: Remove ctx.IsCheckTx * Remove ctx.IsCheckTx * Changelog to Pending * Typo * Simulate instead of Check in SignCheckDeliver * Add descriptive comment * Change to 'CheckTx implements ABCI' * Alphabetize changelog --- CHANGELOG.md | 17 ----------------- PENDING.md | 17 +++++++++++++++++ baseapp/baseapp.go | 25 ++++++++++++++----------- examples/democoin/x/cool/handler.go | 4 ---- examples/democoin/x/pow/handler.go | 8 -------- types/context.go | 8 -------- x/mock/test_utils.go | 3 ++- x/slashing/app_test.go | 2 +- x/slashing/handler.go | 4 ---- 9 files changed, 34 insertions(+), 54 deletions(-) create mode 100644 PENDING.md diff --git a/CHANGELOG.md b/CHANGELOG.md index fc69ff9d4..29d753a6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,22 +1,5 @@ # Changelog -## PENDING - -BREAKING CHANGES -* [x/stake] Fixed the period check for the inflation calculation - -FEATURES -* [lcd] Can now query governance proposals by ProposalStatus - -IMPROVEMENTS -* [baseapp] Allow any alphanumeric character in route -* [x/stake] Add revoked to human-readable validator -* [cli] Improve error messages for all txs when the account doesn't exist -* [tools] Remove `rm -rf vendor/` from `make get_vendor_deps` - -BUG FIXES -* \#1666 Add intra-tx counter to the genesis validators - ## 0.22.0 *July 16th, 2018* diff --git a/PENDING.md b/PENDING.md new file mode 100644 index 000000000..3d6d0d92d --- /dev/null +++ b/PENDING.md @@ -0,0 +1,17 @@ +## PENDING + +BREAKING CHANGES +* [baseapp] Msgs are no longer run on CheckTx, removed `ctx.IsCheckTx()` +* [x/stake] Fixed the period check for the inflation calculation + +FEATURES +* [lcd] Can now query governance proposals by ProposalStatus + +IMPROVEMENTS +* [baseapp] Allow any alphanumeric character in route +* [cli] Improve error messages for all txs when the account doesn't exist +* [tools] Remove `rm -rf vendor/` from `make get_vendor_deps` +* [x/stake] Add revoked to human-readable validator + +BUG FIXES +* \#1666 Add intra-tx counter to the genesis validators diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index 40b3c2bc1..da75591a2 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -436,7 +436,11 @@ func (app *BaseApp) BeginBlock(req abci.RequestBeginBlock) (res abci.ResponseBeg return } -// Implements ABCI +// CheckTx implements ABCI +// CheckTx runs the "basic checks" to see whether or not a transaction can possibly be executed, +// first decoding, then the ante handler (which checks signatures/fees/ValidateBasic), +// then finally the route match to see whether a handler exists. CheckTx does not run the actual +// Msg handler function(s). func (app *BaseApp) CheckTx(txBytes []byte) (res abci.ResponseCheckTx) { // Decode the Tx. var result sdk.Result @@ -514,16 +518,11 @@ func (app *BaseApp) getContextForAnte(mode runTxMode, txBytes []byte) (ctx sdk.C ctx = ctx.WithSigningValidators(app.signedValidators) } - // Simulate a DeliverTx for gas calculation - if mode == runTxModeSimulate { - ctx = ctx.WithIsCheckTx(false) - } - return } // Iterates through msgs and executes them -func (app *BaseApp) runMsgs(ctx sdk.Context, msgs []sdk.Msg) (result sdk.Result) { +func (app *BaseApp) runMsgs(ctx sdk.Context, msgs []sdk.Msg, mode runTxMode) (result sdk.Result) { // accumulate results logs := make([]string, 0, len(msgs)) var data []byte // NOTE: we just append them all (?!) @@ -537,7 +536,11 @@ func (app *BaseApp) runMsgs(ctx sdk.Context, msgs []sdk.Msg) (result sdk.Result) return sdk.ErrUnknownRequest("Unrecognized Msg type: " + msgType).Result() } - msgResult := handler(ctx, msg) + var msgResult sdk.Result + // Skip actual execution for CheckTx + if mode != runTxModeCheck { + msgResult = handler(ctx, msg) + } // NOTE: GasWanted is determined by ante handler and // GasUsed by the GasMeter @@ -615,9 +618,9 @@ func (app *BaseApp) runTx(mode runTxMode, txBytes []byte, tx sdk.Tx) (result sdk // run the ante handler if app.anteHandler != nil { - newCtx, anteResult, abort := app.anteHandler(ctx, tx) + newCtx, result, abort := app.anteHandler(ctx, tx) if abort { - return anteResult + return result } if !newCtx.IsZero() { ctx = newCtx @@ -636,7 +639,7 @@ func (app *BaseApp) runTx(mode runTxMode, txBytes []byte, tx sdk.Tx) (result sdk } ctx = ctx.WithMultiStore(msCache) - result = app.runMsgs(ctx, msgs) + result = app.runMsgs(ctx, msgs, mode) result.GasWanted = gasWanted // only update state if all messages pass and we're not in a simulation diff --git a/examples/democoin/x/cool/handler.go b/examples/democoin/x/cool/handler.go index 82247677c..f8c32be81 100644 --- a/examples/democoin/x/cool/handler.go +++ b/examples/democoin/x/cool/handler.go @@ -47,10 +47,6 @@ func handleMsgQuiz(ctx sdk.Context, k Keeper, msg MsgQuiz) sdk.Result { return ErrIncorrectCoolAnswer(k.codespace, msg.CoolAnswer).Result() } - if ctx.IsCheckTx() { - return sdk.Result{} // TODO - } - bonusCoins := sdk.Coins{sdk.NewCoin(msg.CoolAnswer, 69)} _, _, err := k.ck.AddCoins(ctx, msg.Sender, bonusCoins) diff --git a/examples/democoin/x/pow/handler.go b/examples/democoin/x/pow/handler.go index 2dd549bde..e4fa39d1d 100644 --- a/examples/democoin/x/pow/handler.go +++ b/examples/democoin/x/pow/handler.go @@ -26,14 +26,6 @@ func handleMsgMine(ctx sdk.Context, pk Keeper, msg MsgMine) sdk.Result { return err.Result() } - // commented for now, makes testing difficult - // TODO figure out a better test method that allows early CheckTx return - /* - if ctx.IsCheckTx() { - return sdk.Result{} // TODO - } - */ - err = pk.ApplyValid(ctx, msg.Sender, newDiff, newCount) if err != nil { return err.Result() diff --git a/types/context.go b/types/context.go index e55eff1ab..064625028 100644 --- a/types/context.go +++ b/types/context.go @@ -41,7 +41,6 @@ func NewContext(ms MultiStore, header abci.Header, isCheckTx bool, logger log.Lo c = c.WithBlockHeader(header) c = c.WithBlockHeight(header.Height) c = c.WithChainID(header.ChainID) - c = c.WithIsCheckTx(isCheckTx) c = c.WithTxBytes(nil) c = c.WithLogger(logger) c = c.WithSigningValidators(nil) @@ -127,7 +126,6 @@ const ( contextKeyBlockHeader contextKeyBlockHeight contextKeyChainID - contextKeyIsCheckTx contextKeyTxBytes contextKeyLogger contextKeySigningValidators @@ -151,9 +149,6 @@ func (c Context) BlockHeight() int64 { func (c Context) ChainID() string { return c.Value(contextKeyChainID).(string) } -func (c Context) IsCheckTx() bool { - return c.Value(contextKeyIsCheckTx).(bool) -} func (c Context) TxBytes() []byte { return c.Value(contextKeyTxBytes).([]byte) } @@ -179,9 +174,6 @@ func (c Context) WithBlockHeight(height int64) Context { func (c Context) WithChainID(chainID string) Context { return c.withValue(contextKeyChainID, chainID) } -func (c Context) WithIsCheckTx(isCheckTx bool) Context { - return c.withValue(contextKeyIsCheckTx, isCheckTx) -} func (c Context) WithTxBytes(txBytes []byte) Context { return c.withValue(contextKeyTxBytes, txBytes) } diff --git a/x/mock/test_utils.go b/x/mock/test_utils.go index f9e1e8f5e..c3179849d 100644 --- a/x/mock/test_utils.go +++ b/x/mock/test_utils.go @@ -46,7 +46,8 @@ func SignCheckDeliver( seq []int64, expPass bool, priv ...crypto.PrivKey, ) sdk.Result { tx := GenTx(msgs, accNums, seq, priv...) - res := app.Check(tx) + // Must simulate now as CheckTx doesn't run Msgs anymore + res := app.Simulate(tx) if expPass { require.Equal(t, sdk.ABCICodeOK, res.Code, res.Log) diff --git a/x/slashing/app_test.go b/x/slashing/app_test.go index 4531c3882..f5f8c98f8 100644 --- a/x/slashing/app_test.go +++ b/x/slashing/app_test.go @@ -113,6 +113,6 @@ func TestSlashingMsgs(t *testing.T) { checkValidatorSigningInfo(t, mapp, keeper, sdk.ValAddress(addr1), false) // unrevoke should fail with unknown validator - res := mock.CheckGenTx(t, mapp.BaseApp, []sdk.Msg{unrevokeMsg}, []int64{0}, []int64{1}, false, priv1) + res := mock.SignCheckDeliver(t, mapp.BaseApp, []sdk.Msg{unrevokeMsg}, []int64{0}, []int64{1}, false, priv1) require.Equal(t, sdk.ToABCICode(DefaultCodespace, CodeValidatorNotRevoked), res.Code) } diff --git a/x/slashing/handler.go b/x/slashing/handler.go index 3991bc222..19a48b448 100644 --- a/x/slashing/handler.go +++ b/x/slashing/handler.go @@ -43,10 +43,6 @@ func handleMsgUnrevoke(ctx sdk.Context, msg MsgUnrevoke, k Keeper) sdk.Result { return ErrValidatorJailed(k.codespace).Result() } - if ctx.IsCheckTx() { - return sdk.Result{} - } - // Update the starting height (so the validator can't be immediately revoked again) info.StartHeight = ctx.BlockHeight() k.setValidatorSigningInfo(ctx, addr, info) From fab4600c989878fee8a7a665df89767047d24ff7 Mon Sep 17 00:00:00 2001 From: Rigel Date: Wed, 18 Jul 2018 21:32:09 -0400 Subject: [PATCH 40/40] Update PENDING.md --- PENDING.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/PENDING.md b/PENDING.md index 3d6d0d92d..f297e6a4a 100644 --- a/PENDING.md +++ b/PENDING.md @@ -6,6 +6,8 @@ BREAKING CHANGES FEATURES * [lcd] Can now query governance proposals by ProposalStatus +* Added support for cosmos-sdk-cli tool under cosmos-sdk/cmd + * This allows SDK users to init a new project repository with a single command. IMPROVEMENTS * [baseapp] Allow any alphanumeric character in route