From 720b37c6f27bc006638c14e6388b0de18845a64b Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Fri, 30 Mar 2018 13:27:58 +0200 Subject: [PATCH 01/14] Rename client/builder to client/core (ref #721) --- client/{builder/builder.go => core/core.go} | 2 +- client/tx/broadcast.go | 4 ++-- examples/democoin/x/cool/commands/tx.go | 10 +++++----- x/auth/commands/account.go | 4 ++-- x/auth/rest/query.go | 4 ++-- x/bank/commands/sendtx.go | 6 +++--- x/bank/rest/sendtx.go | 6 +++--- x/ibc/commands/ibctx.go | 6 +++--- x/ibc/commands/relay.go | 16 ++++++++-------- x/ibc/rest/transfer.go | 6 +++--- x/simplestake/commands/commands.go | 8 ++++---- x/stake/commands/query.go | 10 +++++----- x/stake/commands/tx.go | 10 +++++----- 13 files changed, 46 insertions(+), 46 deletions(-) rename client/{builder/builder.go => core/core.go} (99%) diff --git a/client/builder/builder.go b/client/core/core.go similarity index 99% rename from client/builder/builder.go rename to client/core/core.go index ce8ad04958..0295ae5abd 100644 --- a/client/builder/builder.go +++ b/client/core/core.go @@ -1,4 +1,4 @@ -package builder +package core import ( "fmt" diff --git a/client/tx/broadcast.go b/client/tx/broadcast.go index b9367645fe..709364173a 100644 --- a/client/tx/broadcast.go +++ b/client/tx/broadcast.go @@ -4,7 +4,7 @@ import ( "encoding/json" "net/http" - "github.com/cosmos/cosmos-sdk/client/builder" + "github.com/cosmos/cosmos-sdk/client/core" ) type BroadcastTxBody struct { @@ -22,7 +22,7 @@ func BroadcastTxRequestHandler(w http.ResponseWriter, r *http.Request) { return } - res, err := builder.BroadcastTx([]byte(m.TxBytes)) + res, err := core.BroadcastTx([]byte(m.TxBytes)) if err != nil { w.WriteHeader(500) w.Write([]byte(err.Error())) diff --git a/examples/democoin/x/cool/commands/tx.go b/examples/democoin/x/cool/commands/tx.go index ab817309cf..d195071dbd 100644 --- a/examples/democoin/x/cool/commands/tx.go +++ b/examples/democoin/x/cool/commands/tx.go @@ -8,7 +8,7 @@ import ( "github.com/spf13/viper" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/builder" + "github.com/cosmos/cosmos-sdk/client/core" "github.com/cosmos/cosmos-sdk/wire" "github.com/cosmos/cosmos-sdk/examples/democoin/x/cool" @@ -25,7 +25,7 @@ func QuizTxCmd(cdc *wire.Codec) *cobra.Command { } // get the from address from the name flag - from, err := builder.GetFromAddress() + from, err := core.GetFromAddress() if err != nil { return err } @@ -37,7 +37,7 @@ func QuizTxCmd(cdc *wire.Codec) *cobra.Command { name := viper.GetString(client.FlagName) // build and sign the transaction, then broadcast to Tendermint - res, err := builder.SignBuildBroadcast(name, msg, cdc) + res, err := core.SignBuildBroadcast(name, msg, cdc) if err != nil { return err } @@ -59,7 +59,7 @@ func SetTrendTxCmd(cdc *wire.Codec) *cobra.Command { } // get the from address from the name flag - from, err := builder.GetFromAddress() + from, err := core.GetFromAddress() if err != nil { return err } @@ -71,7 +71,7 @@ func SetTrendTxCmd(cdc *wire.Codec) *cobra.Command { msg := cool.NewSetTrendMsg(from, args[0]) // build and sign the transaction, then broadcast to Tendermint - res, err := builder.SignBuildBroadcast(name, msg, cdc) + res, err := core.SignBuildBroadcast(name, msg, cdc) if err != nil { return err } diff --git a/x/auth/commands/account.go b/x/auth/commands/account.go index 02af73f167..49d6ec2ab6 100644 --- a/x/auth/commands/account.go +++ b/x/auth/commands/account.go @@ -8,7 +8,7 @@ import ( "github.com/pkg/errors" "github.com/spf13/cobra" - "github.com/cosmos/cosmos-sdk/client/builder" + "github.com/cosmos/cosmos-sdk/client/core" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" "github.com/cosmos/cosmos-sdk/x/auth" @@ -64,7 +64,7 @@ func (c commander) getAccountCmd(cmd *cobra.Command, args []string) error { } key := sdk.Address(bz) - res, err := builder.Query(key, c.storeName) + res, err := core.Query(key, c.storeName) if err != nil { return err } diff --git a/x/auth/rest/query.go b/x/auth/rest/query.go index 22c364ccda..0e73ea02d3 100644 --- a/x/auth/rest/query.go +++ b/x/auth/rest/query.go @@ -8,7 +8,7 @@ import ( "github.com/gorilla/mux" - "github.com/cosmos/cosmos-sdk/client/builder" + "github.com/cosmos/cosmos-sdk/client/core" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" ) @@ -33,7 +33,7 @@ func QueryAccountRequestHandler(storeName string, cdc *wire.Codec, decoder sdk.A } key := sdk.Address(bz) - res, err := builder.Query(key, c.storeName) + res, err := core.Query(key, c.storeName) if err != nil { w.WriteHeader(http.StatusInternalServerError) w.Write([]byte(fmt.Sprintf("Could't query account. Error: %s", err.Error()))) diff --git a/x/bank/commands/sendtx.go b/x/bank/commands/sendtx.go index 5619b4d0f3..9dc2daa7df 100644 --- a/x/bank/commands/sendtx.go +++ b/x/bank/commands/sendtx.go @@ -8,7 +8,7 @@ import ( "github.com/spf13/viper" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/builder" + "github.com/cosmos/cosmos-sdk/client/core" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" "github.com/cosmos/cosmos-sdk/x/bank" @@ -39,7 +39,7 @@ type Commander struct { func (c Commander) sendTxCmd(cmd *cobra.Command, args []string) error { // get the from address - from, err := builder.GetFromAddress() + from, err := core.GetFromAddress() if err != nil { return err } @@ -66,7 +66,7 @@ func (c Commander) sendTxCmd(cmd *cobra.Command, args []string) error { msg := BuildMsg(from, to, coins) // build and sign the transaction, then broadcast to Tendermint - res, err := builder.SignBuildBroadcast(name, msg, c.Cdc) + res, err := core.SignBuildBroadcast(name, msg, c.Cdc) if err != nil { return err } diff --git a/x/bank/rest/sendtx.go b/x/bank/rest/sendtx.go index 85b9dc4d50..c496fc818a 100644 --- a/x/bank/rest/sendtx.go +++ b/x/bank/rest/sendtx.go @@ -11,7 +11,7 @@ import ( "github.com/tendermint/go-crypto/keys" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/builder" + "github.com/cosmos/cosmos-sdk/client/core" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" "github.com/cosmos/cosmos-sdk/x/bank/commands" @@ -75,7 +75,7 @@ func SendRequestHandler(cdc *wire.Codec, kb keys.Keybase) func(http.ResponseWrit // sign // XXX: OMG viper.Set(client.FlagSequence, m.Sequence) - txBytes, err := builder.SignAndBuild(m.LocalAccountName, m.Password, msg, c.Cdc) + txBytes, err := core.SignAndBuild(m.LocalAccountName, m.Password, msg, c.Cdc) if err != nil { w.WriteHeader(http.StatusUnauthorized) w.Write([]byte(err.Error())) @@ -83,7 +83,7 @@ func SendRequestHandler(cdc *wire.Codec, kb keys.Keybase) func(http.ResponseWrit } // send - res, err := builder.BroadcastTx(txBytes) + res, err := core.BroadcastTx(txBytes) if err != nil { w.WriteHeader(http.StatusInternalServerError) w.Write([]byte(err.Error())) diff --git a/x/ibc/commands/ibctx.go b/x/ibc/commands/ibctx.go index 4d8476ff16..e063b82b2d 100644 --- a/x/ibc/commands/ibctx.go +++ b/x/ibc/commands/ibctx.go @@ -8,7 +8,7 @@ import ( "github.com/spf13/viper" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/builder" + "github.com/cosmos/cosmos-sdk/client/core" sdk "github.com/cosmos/cosmos-sdk/types" wire "github.com/cosmos/cosmos-sdk/wire" @@ -40,7 +40,7 @@ type sendCommander struct { func (c sendCommander) sendIBCTransfer(cmd *cobra.Command, args []string) error { // get the from address - from, err := builder.GetFromAddress() + from, err := core.GetFromAddress() if err != nil { return err } @@ -54,7 +54,7 @@ func (c sendCommander) sendIBCTransfer(cmd *cobra.Command, args []string) error // get password name := viper.GetString(client.FlagName) - res, err := builder.SignBuildBroadcast(name, msg, c.cdc) + res, err := core.SignBuildBroadcast(name, msg, c.cdc) if err != nil { return err } diff --git a/x/ibc/commands/relay.go b/x/ibc/commands/relay.go index 9170248118..305b09d877 100644 --- a/x/ibc/commands/relay.go +++ b/x/ibc/commands/relay.go @@ -10,7 +10,7 @@ import ( "github.com/tendermint/tmlibs/log" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/builder" + "github.com/cosmos/cosmos-sdk/client/core" sdk "github.com/cosmos/cosmos-sdk/types" wire "github.com/cosmos/cosmos-sdk/wire" @@ -74,7 +74,7 @@ func (c relayCommander) runIBCRelay(cmd *cobra.Command, args []string) { fromChainNode := viper.GetString(FlagFromChainNode) toChainID := viper.GetString(FlagToChainID) toChainNode := viper.GetString(FlagToChainNode) - address, err := builder.GetFromAddress() + address, err := core.GetFromAddress() if err != nil { panic(err) } @@ -86,7 +86,7 @@ func (c relayCommander) runIBCRelay(cmd *cobra.Command, args []string) { func (c relayCommander) loop(fromChainID, fromChainNode, toChainID, toChainNode string) { // get password name := viper.GetString(client.FlagName) - passphrase, err := builder.GetPassphraseFromStdin(name) + passphrase, err := core.GetPassphraseFromStdin(name) if err != nil { panic(err) } @@ -150,16 +150,16 @@ OUTER: func query(node string, key []byte, storeName string) (res []byte, err error) { orig := viper.GetString(client.FlagNode) viper.Set(client.FlagNode, node) - res, err = builder.Query(key, storeName) + res, err = core.Query(key, storeName) viper.Set(client.FlagNode, orig) return res, err } func (c relayCommander) broadcastTx(node string, tx []byte) error { - orig := viper.GetString(client.FlagNode) viper.Set(client.FlagNode, node) - _, err := builder.BroadcastTx(tx) - viper.Set(client.FlagNode, orig) + seq := c.getSequence(node) + 1 + viper.Set(client.FlagSequence, seq) + _, err := core.BroadcastTx(tx) return err } @@ -194,7 +194,7 @@ func (c relayCommander) refine(bz []byte, sequence int64, passphrase string) []b } name := viper.GetString(client.FlagName) - res, err := builder.SignAndBuild(name, passphrase, msg, c.cdc) + res, err := core.SignAndBuild(name, passphrase, msg, c.cdc) if err != nil { panic(err) } diff --git a/x/ibc/rest/transfer.go b/x/ibc/rest/transfer.go index f47159160e..974b6edd90 100644 --- a/x/ibc/rest/transfer.go +++ b/x/ibc/rest/transfer.go @@ -11,7 +11,7 @@ import ( "github.com/tendermint/go-crypto/keys" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/builder" + "github.com/cosmos/cosmos-sdk/client/core" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" "github.com/cosmos/cosmos-sdk/x/bank/commands" @@ -73,7 +73,7 @@ func TransferRequestHandler(cdc *wire.Codec, kb keys.Keybase) func(http.Response // sign // XXX: OMG viper.Set(client.FlagSequence, m.Sequence) - txBytes, err := builder.SignAndBuild(m.LocalAccountName, m.Password, msg, c.Cdc) + txBytes, err := core.SignAndBuild(m.LocalAccountName, m.Password, msg, c.Cdc) if err != nil { w.WriteHeader(http.StatusUnauthorized) w.Write([]byte(err.Error())) @@ -81,7 +81,7 @@ func TransferRequestHandler(cdc *wire.Codec, kb keys.Keybase) func(http.Response } // send - res, err := builder.BroadcastTx(txBytes) + res, err := core.BroadcastTx(txBytes) if err != nil { w.WriteHeader(http.StatusInternalServerError) w.Write([]byte(err.Error())) diff --git a/x/simplestake/commands/commands.go b/x/simplestake/commands/commands.go index 19d6cddbf9..bf35f545a1 100644 --- a/x/simplestake/commands/commands.go +++ b/x/simplestake/commands/commands.go @@ -10,7 +10,7 @@ import ( crypto "github.com/tendermint/go-crypto" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/builder" + "github.com/cosmos/cosmos-sdk/client/core" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" "github.com/cosmos/cosmos-sdk/x/simplestake" @@ -48,7 +48,7 @@ type commander struct { } func (co commander) bondTxCmd(cmd *cobra.Command, args []string) error { - from, err := builder.GetFromAddress() + from, err := core.GetFromAddress() if err != nil { return err } @@ -82,7 +82,7 @@ func (co commander) bondTxCmd(cmd *cobra.Command, args []string) error { } func (co commander) unbondTxCmd(cmd *cobra.Command, args []string) error { - from, err := builder.GetFromAddress() + from, err := core.GetFromAddress() if err != nil { return err } @@ -94,7 +94,7 @@ func (co commander) unbondTxCmd(cmd *cobra.Command, args []string) error { func (co commander) sendMsg(msg sdk.Msg) error { name := viper.GetString(client.FlagName) - res, err := builder.SignBuildBroadcast(name, msg, co.cdc) + res, err := core.SignBuildBroadcast(name, msg, co.cdc) if err != nil { return err } diff --git a/x/stake/commands/query.go b/x/stake/commands/query.go index ed436305c3..474f5438ba 100644 --- a/x/stake/commands/query.go +++ b/x/stake/commands/query.go @@ -11,7 +11,7 @@ import ( crypto "github.com/tendermint/go-crypto" - "github.com/cosmos/cosmos-sdk/client/builder" + "github.com/cosmos/cosmos-sdk/client/core" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" // XXX fix "github.com/cosmos/cosmos-sdk/x/stake" @@ -47,7 +47,7 @@ func GetCmdQueryCandidates(cdc *wire.Codec, storeName string) *cobra.Command { key := PrefixedKey(stake.MsgType, stake.CandidatesKey) - res, err := builder.Query(key, storeName) + res, err := core.Query(key, storeName) if err != nil { return err } @@ -87,7 +87,7 @@ func GetCmdQueryCandidate(cdc *wire.Codec, storeName string) *cobra.Command { key := PrefixedKey(stake.MsgType, stake.GetCandidateKey(addr)) - res, err := builder.Query(key, storeName) + res, err := core.Query(key, storeName) if err != nil { return err } @@ -133,7 +133,7 @@ func GetCmdQueryDelegatorBond(cdc *wire.Codec, storeName string) *cobra.Command key := PrefixedKey(stake.MsgType, stake.GetDelegatorBondKey(delegator, addr, cdc)) - res, err := builder.Query(key, storeName) + res, err := core.Query(key, storeName) if err != nil { return err } @@ -175,7 +175,7 @@ func GetCmdQueryDelegatorBonds(cdc *wire.Codec, storeName string) *cobra.Command key := PrefixedKey(stake.MsgType, stake.GetDelegatorBondsKey(delegator, cdc)) - res, err := builder.Query(key, storeName) + res, err := core.Query(key, storeName) if err != nil { return err } diff --git a/x/stake/commands/tx.go b/x/stake/commands/tx.go index 90b289de79..732743dda7 100644 --- a/x/stake/commands/tx.go +++ b/x/stake/commands/tx.go @@ -11,7 +11,7 @@ import ( crypto "github.com/tendermint/go-crypto" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/builder" + "github.com/cosmos/cosmos-sdk/client/core" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" "github.com/cosmos/cosmos-sdk/x/stake" @@ -93,7 +93,7 @@ func GetCmdDeclareCandidacy(cdc *wire.Codec) *cobra.Command { // build and sign the transaction, then broadcast to Tendermint name := viper.GetString(client.FlagName) - res, err := builder.SignBuildBroadcast(name, msg, cdc) + res, err := core.SignBuildBroadcast(name, msg, cdc) if err != nil { return err } @@ -130,7 +130,7 @@ func GetCmdEditCandidacy(cdc *wire.Codec) *cobra.Command { // build and sign the transaction, then broadcast to Tendermint name := viper.GetString(client.FlagName) - res, err := builder.SignBuildBroadcast(name, msg, cdc) + res, err := core.SignBuildBroadcast(name, msg, cdc) if err != nil { return err } @@ -166,7 +166,7 @@ func GetCmdDelegate(cdc *wire.Codec) *cobra.Command { // build and sign the transaction, then broadcast to Tendermint name := viper.GetString(client.FlagName) - res, err := builder.SignBuildBroadcast(name, msg, cdc) + res, err := core.SignBuildBroadcast(name, msg, cdc) if err != nil { return err } @@ -213,7 +213,7 @@ func GetCmdUnbond(cdc *wire.Codec) *cobra.Command { // build and sign the transaction, then broadcast to Tendermint name := viper.GetString(client.FlagName) - res, err := builder.SignBuildBroadcast(name, msg, cdc) + res, err := core.SignBuildBroadcast(name, msg, cdc) if err != nil { return err } From 579e5d4cdccd02f29a8f31668a803d6ab80e33b3 Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Fri, 30 Mar 2018 14:57:53 +0200 Subject: [PATCH 02/14] Add CoreContext for CLI/REST options --- client/core/context.go | 30 +++++++++++++++++ client/core/core.go | 45 ++++++++++++++----------- client/helpers.go | 17 ---------- client/rpc/block.go | 6 ++-- client/rpc/status.go | 3 +- client/rpc/validators.go | 3 +- client/tx/broadcast.go | 2 +- client/tx/query.go | 3 +- client/tx/search.go | 3 +- examples/democoin/x/cool/commands/tx.go | 12 ++++--- x/auth/commands/account.go | 4 ++- x/auth/rest/query.go | 2 +- x/bank/commands/sendtx.go | 6 ++-- x/bank/rest/sendtx.go | 5 +-- x/ibc/commands/ibctx.go | 6 ++-- x/ibc/commands/relay.go | 14 ++++---- x/ibc/rest/transfer.go | 5 +-- x/simplestake/commands/commands.go | 8 +++-- x/stake/commands/query.go | 15 ++++++--- x/stake/commands/tx.go | 12 ++++--- 20 files changed, 125 insertions(+), 76 deletions(-) create mode 100644 client/core/context.go delete mode 100644 client/helpers.go diff --git a/client/core/context.go b/client/core/context.go new file mode 100644 index 0000000000..5a35ea533d --- /dev/null +++ b/client/core/context.go @@ -0,0 +1,30 @@ +package core + +import ( + // "fmt" + + // "github.com/pkg/errors" + "github.com/spf13/viper" + + "github.com/cosmos/cosmos-sdk/client" +) + +type CoreContext struct { + ChainID string + Height int64 + TrustNode bool + NodeURI string + FromAddressName string + Sequence int64 +} + +func NewCoreContextFromViper() CoreContext { + return CoreContext{ + ChainID: viper.GetString(client.FlagChainID), + Height: viper.GetInt64(client.FlagHeight), + TrustNode: viper.GetBool(client.FlagTrustNode), + NodeURI: viper.GetString(client.FlagNode), + FromAddressName: viper.GetString(client.FlagName), + Sequence: viper.GetInt64(client.FlagSequence), + } +} diff --git a/client/core/core.go b/client/core/core.go index 0295ae5abd..e8b8c19fb0 100644 --- a/client/core/core.go +++ b/client/core/core.go @@ -4,7 +4,6 @@ import ( "fmt" "github.com/pkg/errors" - "github.com/spf13/viper" "github.com/cosmos/cosmos-sdk/wire" rpcclient "github.com/tendermint/tendermint/rpc/client" @@ -17,9 +16,9 @@ import ( ) // Broadcast the transaction bytes to Tendermint -func BroadcastTx(tx []byte) (*ctypes.ResultBroadcastTxCommit, error) { +func (ctx CoreContext) BroadcastTx(tx []byte) (*ctypes.ResultBroadcastTxCommit, error) { - node, err := client.GetNode() + node, err := ctx.GetNode() if err != nil { return nil, err } @@ -43,17 +42,17 @@ func BroadcastTx(tx []byte) (*ctypes.ResultBroadcastTxCommit, error) { } // Query from Tendermint with the provided key and storename -func Query(key cmn.HexBytes, storeName string) (res []byte, err error) { +func (ctx CoreContext) Query(key cmn.HexBytes, storeName string) (res []byte, err error) { path := fmt.Sprintf("/%s/key", storeName) - node, err := client.GetNode() + node, err := ctx.GetNode() if err != nil { return res, err } opts := rpcclient.ABCIQueryOptions{ - Height: viper.GetInt64(client.FlagHeight), - Trusted: viper.GetBool(client.FlagTrustNode), + Height: ctx.Height, + Trusted: ctx.TrustNode, } result, err := node.ABCIQueryWithOptions(path, key, opts) if err != nil { @@ -67,16 +66,16 @@ func Query(key cmn.HexBytes, storeName string) (res []byte, err error) { } // Get the from address from the name flag -func GetFromAddress() (from sdk.Address, err error) { +func (ctx CoreContext) GetFromAddress() (from sdk.Address, err error) { keybase, err := keys.GetKeyBase() if err != nil { return nil, err } - name := viper.GetString(client.FlagName) + name := ctx.FromAddressName if name == "" { - return nil, errors.Errorf("must provide a name using --name") + return nil, errors.Errorf("must provide a from address name") } info, err := keybase.Get(name) @@ -88,11 +87,11 @@ func GetFromAddress() (from sdk.Address, err error) { } // sign and build the transaction from the msg -func SignAndBuild(name, passphrase string, msg sdk.Msg, cdc *wire.Codec) ([]byte, error) { +func (ctx CoreContext) SignAndBuild(name, passphrase string, msg sdk.Msg, cdc *wire.Codec) ([]byte, error) { // build the Sign Messsage from the Standard Message - chainID := viper.GetString(client.FlagChainID) - sequence := int64(viper.GetInt(client.FlagSequence)) + chainID := ctx.ChainID + sequence := ctx.Sequence signMsg := sdk.StdSignMsg{ ChainID: chainID, Sequences: []int64{sequence}, @@ -114,7 +113,7 @@ func SignAndBuild(name, passphrase string, msg sdk.Msg, cdc *wire.Codec) ([]byte sigs := []sdk.StdSignature{{ PubKey: pubkey, Signature: sig, - Sequence: viper.GetInt64(client.FlagSequence), + Sequence: sequence, }} // marshal bytes @@ -124,23 +123,31 @@ func SignAndBuild(name, passphrase string, msg sdk.Msg, cdc *wire.Codec) ([]byte } // sign and build the transaction from the msg -func SignBuildBroadcast(name string, msg sdk.Msg, cdc *wire.Codec) (*ctypes.ResultBroadcastTxCommit, error) { - passphrase, err := GetPassphraseFromStdin(name) +func (ctx CoreContext) SignBuildBroadcast(name string, msg sdk.Msg, cdc *wire.Codec) (*ctypes.ResultBroadcastTxCommit, error) { + passphrase, err := ctx.GetPassphraseFromStdin(name) if err != nil { return nil, err } - txBytes, err := SignAndBuild(name, passphrase, msg, cdc) + txBytes, err := ctx.SignAndBuild(name, passphrase, msg, cdc) if err != nil { return nil, err } - return BroadcastTx(txBytes) + return ctx.BroadcastTx(txBytes) } // get passphrase from std input -func GetPassphraseFromStdin(name string) (pass string, err error) { +func (ctx CoreContext) GetPassphraseFromStdin(name string) (pass string, err error) { buf := client.BufferStdin() prompt := fmt.Sprintf("Password to sign with '%s':", name) return client.GetPassword(prompt, buf) } + +// GetNode prepares a simple rpc.Client +func (ctx CoreContext) GetNode() (rpcclient.Client, error) { + if ctx.NodeURI == "" { + return nil, errors.New("Must define node URI") + } + return rpcclient.NewHTTP(ctx.NodeURI, "/websocket"), nil +} diff --git a/client/helpers.go b/client/helpers.go deleted file mode 100644 index f383b95f7d..0000000000 --- a/client/helpers.go +++ /dev/null @@ -1,17 +0,0 @@ -package client - -import ( - "github.com/pkg/errors" - "github.com/spf13/viper" - - rpcclient "github.com/tendermint/tendermint/rpc/client" -) - -// GetNode prepares a simple rpc.Client from the flags -func GetNode() (rpcclient.Client, error) { - uri := viper.GetString(FlagNode) - if uri == "" { - return nil, errors.New("Must define node using --node") - } - return rpcclient.NewHTTP(uri, "/websocket"), nil -} diff --git a/client/rpc/block.go b/client/rpc/block.go index 7f197051a9..cb39113d33 100644 --- a/client/rpc/block.go +++ b/client/rpc/block.go @@ -10,6 +10,7 @@ import ( "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/core" ) const ( @@ -31,7 +32,8 @@ func blockCommand() *cobra.Command { func getBlock(height *int64) ([]byte, error) { // get the node - node, err := client.GetNode() + ctx := core.NewCoreContextFromViper() + node, err := ctx.GetNode() if err != nil { return nil, err } @@ -55,7 +57,7 @@ func getBlock(height *int64) ([]byte, error) { } func GetChainHeight() (int64, error) { - node, err := client.GetNode() + node, err := core.NewCoreContextFromViper().GetNode() if err != nil { return -1, err } diff --git a/client/rpc/status.go b/client/rpc/status.go index e5da948692..0c79d0763d 100644 --- a/client/rpc/status.go +++ b/client/rpc/status.go @@ -10,6 +10,7 @@ import ( wire "github.com/tendermint/go-wire" "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/core" ctypes "github.com/tendermint/tendermint/rpc/core/types" ) @@ -25,7 +26,7 @@ func statusCommand() *cobra.Command { func getNodeStatus() (*ctypes.ResultStatus, error) { // get the node - node, err := client.GetNode() + node, err := core.NewCoreContextFromViper().GetNode() if err != nil { return &ctypes.ResultStatus{}, err } diff --git a/client/rpc/validators.go b/client/rpc/validators.go index 15c3230e3e..5fbc044b22 100644 --- a/client/rpc/validators.go +++ b/client/rpc/validators.go @@ -10,6 +10,7 @@ import ( "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/core" ) func validatorCommand() *cobra.Command { @@ -26,7 +27,7 @@ func validatorCommand() *cobra.Command { func GetValidators(height *int64) ([]byte, error) { // get the node - node, err := client.GetNode() + node, err := core.NewCoreContextFromViper().GetNode() if err != nil { return nil, err } diff --git a/client/tx/broadcast.go b/client/tx/broadcast.go index 709364173a..44fb12544e 100644 --- a/client/tx/broadcast.go +++ b/client/tx/broadcast.go @@ -22,7 +22,7 @@ func BroadcastTxRequestHandler(w http.ResponseWriter, r *http.Request) { return } - res, err := core.BroadcastTx([]byte(m.TxBytes)) + res, err := core.NewCoreContextFromViper().BroadcastTx([]byte(m.TxBytes)) if err != nil { w.WriteHeader(500) w.Write([]byte(err.Error())) diff --git a/client/tx/query.go b/client/tx/query.go index 7c8c4d124f..f64fba8017 100644 --- a/client/tx/query.go +++ b/client/tx/query.go @@ -15,6 +15,7 @@ import ( ctypes "github.com/tendermint/tendermint/rpc/core/types" "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/core" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" ) @@ -39,7 +40,7 @@ func (c commander) queryTx(hashHexStr string, trustNode bool) ([]byte, error) { } // get the node - node, err := client.GetNode() + node, err := core.NewCoreContextFromViper().GetNode() if err != nil { return nil, err } diff --git a/client/tx/search.go b/client/tx/search.go index 2790750ebe..d5cc642f14 100644 --- a/client/tx/search.go +++ b/client/tx/search.go @@ -12,6 +12,7 @@ import ( ctypes "github.com/tendermint/tendermint/rpc/core/types" "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/core" "github.com/cosmos/cosmos-sdk/wire" ) @@ -43,7 +44,7 @@ func (c commander) searchTx(tags []string) ([]byte, error) { query := strings.Join(tags, " AND ") // get the node - node, err := client.GetNode() + node, err := core.NewCoreContextFromViper().GetNode() if err != nil { return nil, err } diff --git a/examples/democoin/x/cool/commands/tx.go b/examples/democoin/x/cool/commands/tx.go index d195071dbd..710a225586 100644 --- a/examples/democoin/x/cool/commands/tx.go +++ b/examples/democoin/x/cool/commands/tx.go @@ -24,8 +24,10 @@ func QuizTxCmd(cdc *wire.Codec) *cobra.Command { return errors.New("You must provide an answer") } + ctx := core.NewCoreContextFromViper() + // get the from address from the name flag - from, err := core.GetFromAddress() + from, err := ctx.GetFromAddress() if err != nil { return err } @@ -37,7 +39,7 @@ func QuizTxCmd(cdc *wire.Codec) *cobra.Command { name := viper.GetString(client.FlagName) // build and sign the transaction, then broadcast to Tendermint - res, err := core.SignBuildBroadcast(name, msg, cdc) + res, err := ctx.SignBuildBroadcast(name, msg, cdc) if err != nil { return err } @@ -58,8 +60,10 @@ func SetTrendTxCmd(cdc *wire.Codec) *cobra.Command { return errors.New("You must provide an answer") } + ctx := core.NewCoreContextFromViper() + // get the from address from the name flag - from, err := core.GetFromAddress() + from, err := ctx.GetFromAddress() if err != nil { return err } @@ -71,7 +75,7 @@ func SetTrendTxCmd(cdc *wire.Codec) *cobra.Command { msg := cool.NewSetTrendMsg(from, args[0]) // build and sign the transaction, then broadcast to Tendermint - res, err := core.SignBuildBroadcast(name, msg, cdc) + res, err := ctx.SignBuildBroadcast(name, msg, cdc) if err != nil { return err } diff --git a/x/auth/commands/account.go b/x/auth/commands/account.go index 49d6ec2ab6..470aa0eeac 100644 --- a/x/auth/commands/account.go +++ b/x/auth/commands/account.go @@ -64,7 +64,9 @@ func (c commander) getAccountCmd(cmd *cobra.Command, args []string) error { } key := sdk.Address(bz) - res, err := core.Query(key, c.storeName) + ctx := core.NewCoreContextFromViper() + + res, err := ctx.Query(key, c.storeName) if err != nil { return err } diff --git a/x/auth/rest/query.go b/x/auth/rest/query.go index 0e73ea02d3..d30af45071 100644 --- a/x/auth/rest/query.go +++ b/x/auth/rest/query.go @@ -33,7 +33,7 @@ func QueryAccountRequestHandler(storeName string, cdc *wire.Codec, decoder sdk.A } key := sdk.Address(bz) - res, err := core.Query(key, c.storeName) + res, err := core.NewCoreContextFromViper().Query(key, c.storeName) if err != nil { w.WriteHeader(http.StatusInternalServerError) w.Write([]byte(fmt.Sprintf("Could't query account. Error: %s", err.Error()))) diff --git a/x/bank/commands/sendtx.go b/x/bank/commands/sendtx.go index 9dc2daa7df..67b600787a 100644 --- a/x/bank/commands/sendtx.go +++ b/x/bank/commands/sendtx.go @@ -38,8 +38,10 @@ type Commander struct { } func (c Commander) sendTxCmd(cmd *cobra.Command, args []string) error { + ctx := core.NewCoreContextFromViper() + // get the from address - from, err := core.GetFromAddress() + from, err := ctx.GetFromAddress() if err != nil { return err } @@ -66,7 +68,7 @@ func (c Commander) sendTxCmd(cmd *cobra.Command, args []string) error { msg := BuildMsg(from, to, coins) // build and sign the transaction, then broadcast to Tendermint - res, err := core.SignBuildBroadcast(name, msg, c.Cdc) + res, err := ctx.SignBuildBroadcast(name, msg, c.Cdc) if err != nil { return err } diff --git a/x/bank/rest/sendtx.go b/x/bank/rest/sendtx.go index c496fc818a..faa82f0186 100644 --- a/x/bank/rest/sendtx.go +++ b/x/bank/rest/sendtx.go @@ -75,7 +75,8 @@ func SendRequestHandler(cdc *wire.Codec, kb keys.Keybase) func(http.ResponseWrit // sign // XXX: OMG viper.Set(client.FlagSequence, m.Sequence) - txBytes, err := core.SignAndBuild(m.LocalAccountName, m.Password, msg, c.Cdc) + ctx := core.NewCoreContextFromViper() + txBytes, err := ctx.SignAndBuild(m.LocalAccountName, m.Password, msg, c.Cdc) if err != nil { w.WriteHeader(http.StatusUnauthorized) w.Write([]byte(err.Error())) @@ -83,7 +84,7 @@ func SendRequestHandler(cdc *wire.Codec, kb keys.Keybase) func(http.ResponseWrit } // send - res, err := core.BroadcastTx(txBytes) + res, err := ctx.BroadcastTx(txBytes) if err != nil { w.WriteHeader(http.StatusInternalServerError) w.Write([]byte(err.Error())) diff --git a/x/ibc/commands/ibctx.go b/x/ibc/commands/ibctx.go index e063b82b2d..bff7515451 100644 --- a/x/ibc/commands/ibctx.go +++ b/x/ibc/commands/ibctx.go @@ -39,8 +39,10 @@ type sendCommander struct { } func (c sendCommander) sendIBCTransfer(cmd *cobra.Command, args []string) error { + ctx := core.NewCoreContextFromViper() + // get the from address - from, err := core.GetFromAddress() + from, err := ctx.GetFromAddress() if err != nil { return err } @@ -54,7 +56,7 @@ func (c sendCommander) sendIBCTransfer(cmd *cobra.Command, args []string) error // get password name := viper.GetString(client.FlagName) - res, err := core.SignBuildBroadcast(name, msg, c.cdc) + res, err := ctx.SignBuildBroadcast(name, msg, c.cdc) if err != nil { return err } diff --git a/x/ibc/commands/relay.go b/x/ibc/commands/relay.go index 305b09d877..c3000df8d8 100644 --- a/x/ibc/commands/relay.go +++ b/x/ibc/commands/relay.go @@ -74,7 +74,7 @@ func (c relayCommander) runIBCRelay(cmd *cobra.Command, args []string) { fromChainNode := viper.GetString(FlagFromChainNode) toChainID := viper.GetString(FlagToChainID) toChainNode := viper.GetString(FlagToChainNode) - address, err := core.GetFromAddress() + address, err := core.NewCoreContextFromViper().GetFromAddress() if err != nil { panic(err) } @@ -84,9 +84,10 @@ func (c relayCommander) runIBCRelay(cmd *cobra.Command, args []string) { } func (c relayCommander) loop(fromChainID, fromChainNode, toChainID, toChainNode string) { + ctx := core.NewCoreContextFromViper() // get password name := viper.GetString(client.FlagName) - passphrase, err := core.GetPassphraseFromStdin(name) + passphrase, err := ctx.GetPassphraseFromStdin(name) if err != nil { panic(err) } @@ -150,16 +151,13 @@ OUTER: func query(node string, key []byte, storeName string) (res []byte, err error) { orig := viper.GetString(client.FlagNode) viper.Set(client.FlagNode, node) - res, err = core.Query(key, storeName) + res, err = core.NewCoreContextFromViper().Query(key, storeName) viper.Set(client.FlagNode, orig) return res, err } func (c relayCommander) broadcastTx(node string, tx []byte) error { - viper.Set(client.FlagNode, node) - seq := c.getSequence(node) + 1 - viper.Set(client.FlagSequence, seq) - _, err := core.BroadcastTx(tx) + _, err := core.NewCoreContextFromViper().WithSequence(c.getSequence(node) + 1).WithNodeURI(node).BroadcastTx(tx) return err } @@ -194,7 +192,7 @@ func (c relayCommander) refine(bz []byte, sequence int64, passphrase string) []b } name := viper.GetString(client.FlagName) - res, err := core.SignAndBuild(name, passphrase, msg, c.cdc) + res, err := core.NewCoreContextFromViper().SignAndBuild(name, passphrase, msg, c.cdc) if err != nil { panic(err) } diff --git a/x/ibc/rest/transfer.go b/x/ibc/rest/transfer.go index 974b6edd90..308e7c0a6c 100644 --- a/x/ibc/rest/transfer.go +++ b/x/ibc/rest/transfer.go @@ -73,7 +73,8 @@ func TransferRequestHandler(cdc *wire.Codec, kb keys.Keybase) func(http.Response // sign // XXX: OMG viper.Set(client.FlagSequence, m.Sequence) - txBytes, err := core.SignAndBuild(m.LocalAccountName, m.Password, msg, c.Cdc) + ctx := core.NewCoreContextFromViper() + txBytes, err := ctx.SignAndBuild(m.LocalAccountName, m.Password, msg, c.Cdc) if err != nil { w.WriteHeader(http.StatusUnauthorized) w.Write([]byte(err.Error())) @@ -81,7 +82,7 @@ func TransferRequestHandler(cdc *wire.Codec, kb keys.Keybase) func(http.Response } // send - res, err := core.BroadcastTx(txBytes) + res, err := ctx.BroadcastTx(txBytes) if err != nil { w.WriteHeader(http.StatusInternalServerError) w.Write([]byte(err.Error())) diff --git a/x/simplestake/commands/commands.go b/x/simplestake/commands/commands.go index bf35f545a1..b1ef72aa81 100644 --- a/x/simplestake/commands/commands.go +++ b/x/simplestake/commands/commands.go @@ -48,7 +48,9 @@ type commander struct { } func (co commander) bondTxCmd(cmd *cobra.Command, args []string) error { - from, err := core.GetFromAddress() + ctx := core.NewCoreContextFromViper() + + from, err := ctx.GetFromAddress() if err != nil { return err } @@ -82,7 +84,7 @@ func (co commander) bondTxCmd(cmd *cobra.Command, args []string) error { } func (co commander) unbondTxCmd(cmd *cobra.Command, args []string) error { - from, err := core.GetFromAddress() + from, err := core.NewCoreContextFromViper().GetFromAddress() if err != nil { return err } @@ -94,7 +96,7 @@ func (co commander) unbondTxCmd(cmd *cobra.Command, args []string) error { func (co commander) sendMsg(msg sdk.Msg) error { name := viper.GetString(client.FlagName) - res, err := core.SignBuildBroadcast(name, msg, co.cdc) + res, err := core.NewCoreContextFromViper().SignBuildBroadcast(name, msg, co.cdc) if err != nil { return err } diff --git a/x/stake/commands/query.go b/x/stake/commands/query.go index 474f5438ba..2fedcfc4ad 100644 --- a/x/stake/commands/query.go +++ b/x/stake/commands/query.go @@ -47,7 +47,8 @@ func GetCmdQueryCandidates(cdc *wire.Codec, storeName string) *cobra.Command { key := PrefixedKey(stake.MsgType, stake.CandidatesKey) - res, err := core.Query(key, storeName) + ctx := core.NewCoreContextFromViper() + res, err := ctx.Query(key, storeName) if err != nil { return err } @@ -87,7 +88,9 @@ func GetCmdQueryCandidate(cdc *wire.Codec, storeName string) *cobra.Command { key := PrefixedKey(stake.MsgType, stake.GetCandidateKey(addr)) - res, err := core.Query(key, storeName) + ctx := core.NewCoreContextFromViper() + + res, err := ctx.Query(key, storeName) if err != nil { return err } @@ -133,7 +136,9 @@ func GetCmdQueryDelegatorBond(cdc *wire.Codec, storeName string) *cobra.Command key := PrefixedKey(stake.MsgType, stake.GetDelegatorBondKey(delegator, addr, cdc)) - res, err := core.Query(key, storeName) + ctx := core.NewCoreContextFromViper() + + res, err := ctx.Query(key, storeName) if err != nil { return err } @@ -175,7 +180,9 @@ func GetCmdQueryDelegatorBonds(cdc *wire.Codec, storeName string) *cobra.Command key := PrefixedKey(stake.MsgType, stake.GetDelegatorBondsKey(delegator, cdc)) - res, err := core.Query(key, storeName) + ctx := core.NewCoreContextFromViper() + + res, err := ctx.Query(key, storeName) if err != nil { return err } diff --git a/x/stake/commands/tx.go b/x/stake/commands/tx.go index 732743dda7..f7df5ef7c0 100644 --- a/x/stake/commands/tx.go +++ b/x/stake/commands/tx.go @@ -93,7 +93,8 @@ func GetCmdDeclareCandidacy(cdc *wire.Codec) *cobra.Command { // build and sign the transaction, then broadcast to Tendermint name := viper.GetString(client.FlagName) - res, err := core.SignBuildBroadcast(name, msg, cdc) + ctx := core.NewCoreContextFromViper() + res, err := ctx.SignBuildBroadcast(name, msg, cdc) if err != nil { return err } @@ -130,7 +131,8 @@ func GetCmdEditCandidacy(cdc *wire.Codec) *cobra.Command { // build and sign the transaction, then broadcast to Tendermint name := viper.GetString(client.FlagName) - res, err := core.SignBuildBroadcast(name, msg, cdc) + ctx := core.NewCoreContextFromViper() + res, err := ctx.SignBuildBroadcast(name, msg, cdc) if err != nil { return err } @@ -166,7 +168,8 @@ func GetCmdDelegate(cdc *wire.Codec) *cobra.Command { // build and sign the transaction, then broadcast to Tendermint name := viper.GetString(client.FlagName) - res, err := core.SignBuildBroadcast(name, msg, cdc) + ctx := core.NewCoreContextFromViper() + res, err := ctx.SignBuildBroadcast(name, msg, cdc) if err != nil { return err } @@ -213,7 +216,8 @@ func GetCmdUnbond(cdc *wire.Codec) *cobra.Command { // build and sign the transaction, then broadcast to Tendermint name := viper.GetString(client.FlagName) - res, err := core.SignBuildBroadcast(name, msg, cdc) + ctx := core.NewCoreContextFromViper() + res, err := ctx.SignBuildBroadcast(name, msg, cdc) if err != nil { return err } From 7a8e00dbb978df71da17f398d6d07f840bc52361 Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Fri, 30 Mar 2018 15:12:50 +0200 Subject: [PATCH 03/14] Change CoreContext parameters instead of using viper.Set --- client/core/context.go | 30 ++++++++++++++++++++++++++++++ x/bank/rest/sendtx.go | 3 +-- x/ibc/commands/relay.go | 15 +++++---------- x/ibc/rest/transfer.go | 3 +-- 4 files changed, 37 insertions(+), 14 deletions(-) diff --git a/client/core/context.go b/client/core/context.go index 5a35ea533d..b3ae1f4f0b 100644 --- a/client/core/context.go +++ b/client/core/context.go @@ -28,3 +28,33 @@ func NewCoreContextFromViper() CoreContext { Sequence: viper.GetInt64(client.FlagSequence), } } + +func (c CoreContext) WithChainID(chainID string) CoreContext { + c.ChainID = chainID + return c +} + +func (c CoreContext) WithHeight(height int64) CoreContext { + c.Height = height + return c +} + +func (c CoreContext) WithTrustNode(trustNode bool) CoreContext { + c.TrustNode = trustNode + return c +} + +func (c CoreContext) WithNodeURI(nodeURI string) CoreContext { + c.NodeURI = nodeURI + return c +} + +func (c CoreContext) WithFromAddressName(fromAddressName string) CoreContext { + c.FromAddressName = fromAddressName + return c +} + +func (c CoreContext) WithSequence(sequence int64) CoreContext { + c.Sequence = sequence + return c +} diff --git a/x/bank/rest/sendtx.go b/x/bank/rest/sendtx.go index faa82f0186..59870d0f24 100644 --- a/x/bank/rest/sendtx.go +++ b/x/bank/rest/sendtx.go @@ -73,9 +73,8 @@ func SendRequestHandler(cdc *wire.Codec, kb keys.Keybase) func(http.ResponseWrit } // sign - // XXX: OMG - viper.Set(client.FlagSequence, m.Sequence) ctx := core.NewCoreContextFromViper() + ctx.Sequence = m.Sequence txBytes, err := ctx.SignAndBuild(m.LocalAccountName, m.Password, msg, c.Cdc) if err != nil { w.WriteHeader(http.StatusUnauthorized) diff --git a/x/ibc/commands/relay.go b/x/ibc/commands/relay.go index c3000df8d8..04864ca8af 100644 --- a/x/ibc/commands/relay.go +++ b/x/ibc/commands/relay.go @@ -86,8 +86,7 @@ func (c relayCommander) runIBCRelay(cmd *cobra.Command, args []string) { func (c relayCommander) loop(fromChainID, fromChainNode, toChainID, toChainNode string) { ctx := core.NewCoreContextFromViper() // get password - name := viper.GetString(client.FlagName) - passphrase, err := ctx.GetPassphraseFromStdin(name) + passphrase, err := ctx.GetPassphraseFromStdin(ctx.FromAddressName) if err != nil { panic(err) } @@ -149,15 +148,11 @@ OUTER: } func query(node string, key []byte, storeName string) (res []byte, err error) { - orig := viper.GetString(client.FlagNode) - viper.Set(client.FlagNode, node) - res, err = core.NewCoreContextFromViper().Query(key, storeName) - viper.Set(client.FlagNode, orig) - return res, err + return core.NewCoreContextFromViper().WithNodeURI(node).Query(key, storeName) } func (c relayCommander) broadcastTx(node string, tx []byte) error { - _, err := core.NewCoreContextFromViper().WithSequence(c.getSequence(node) + 1).WithNodeURI(node).BroadcastTx(tx) + _, err := core.NewCoreContextFromViper().WithNodeURI(node).WithSequence(c.getSequence(node) + 1).BroadcastTx(tx) return err } @@ -191,8 +186,8 @@ func (c relayCommander) refine(bz []byte, sequence int64, passphrase string) []b Sequence: sequence, } - name := viper.GetString(client.FlagName) - res, err := core.NewCoreContextFromViper().SignAndBuild(name, passphrase, msg, c.cdc) + ctx := core.NewCoreContextFromViper() + res, err := ctx.SignAndBuild(ctx.FromAddressName, passphrase, msg, c.cdc) if err != nil { panic(err) } diff --git a/x/ibc/rest/transfer.go b/x/ibc/rest/transfer.go index 308e7c0a6c..fcfe40d51e 100644 --- a/x/ibc/rest/transfer.go +++ b/x/ibc/rest/transfer.go @@ -7,7 +7,6 @@ import ( "net/http" "github.com/gorilla/mux" - "github.com/spf13/viper" "github.com/tendermint/go-crypto/keys" "github.com/cosmos/cosmos-sdk/client" @@ -72,8 +71,8 @@ func TransferRequestHandler(cdc *wire.Codec, kb keys.Keybase) func(http.Response // sign // XXX: OMG - viper.Set(client.FlagSequence, m.Sequence) ctx := core.NewCoreContextFromViper() + ctx.Sequence = m.Sequence txBytes, err := ctx.SignAndBuild(m.LocalAccountName, m.Password, msg, c.Cdc) if err != nil { w.WriteHeader(http.StatusUnauthorized) From f5322fa25f5bda3767e9809ab28359e41f522295 Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Fri, 30 Mar 2018 15:15:47 +0200 Subject: [PATCH 04/14] Remove unused imports --- x/bank/rest/sendtx.go | 2 -- x/ibc/commands/relay.go | 1 - x/ibc/rest/transfer.go | 1 - 3 files changed, 4 deletions(-) diff --git a/x/bank/rest/sendtx.go b/x/bank/rest/sendtx.go index 59870d0f24..a545661ca9 100644 --- a/x/bank/rest/sendtx.go +++ b/x/bank/rest/sendtx.go @@ -7,10 +7,8 @@ import ( "net/http" "github.com/gorilla/mux" - "github.com/spf13/viper" "github.com/tendermint/go-crypto/keys" - "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/core" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" diff --git a/x/ibc/commands/relay.go b/x/ibc/commands/relay.go index 04864ca8af..3c70ac958f 100644 --- a/x/ibc/commands/relay.go +++ b/x/ibc/commands/relay.go @@ -9,7 +9,6 @@ import ( "github.com/tendermint/tmlibs/log" - "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/core" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/ibc/rest/transfer.go b/x/ibc/rest/transfer.go index fcfe40d51e..1c641124f1 100644 --- a/x/ibc/rest/transfer.go +++ b/x/ibc/rest/transfer.go @@ -9,7 +9,6 @@ import ( "github.com/gorilla/mux" "github.com/tendermint/go-crypto/keys" - "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/core" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" From 47c97c24d36be993dbcf1ee92fa495a11a8794a3 Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Mon, 2 Apr 2018 12:33:44 +0200 Subject: [PATCH 05/14] Write genesis trend for democoin (closes #762) --- examples/democoin/cmd/democoind/main.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/democoin/cmd/democoind/main.go b/examples/democoin/cmd/democoind/main.go index d9421954c9..a7af708a1a 100644 --- a/examples/democoin/cmd/democoind/main.go +++ b/examples/democoin/cmd/democoind/main.go @@ -46,7 +46,10 @@ func defaultOptions(args []string) (json.RawMessage, string, cmn.HexBytes, error "amount": 9007199254740992 } ] - }] + }], + "cool": { + "trend": "ice-cold" + } }`, addr) return json.RawMessage(opts), "", nil, nil } From 08880966770e81bfa9c926de5ec2fddf8d9e4c3f Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Mon, 2 Apr 2018 12:44:55 +0200 Subject: [PATCH 06/14] Replace Result.ToQuery with Error.QueryResult (closes #765) --- baseapp/baseapp.go | 2 +- store/iavlstore.go | 4 ++-- store/rootmultistore.go | 6 +++--- types/errors.go | 11 +++++++++++ types/result.go | 8 -------- 5 files changed, 17 insertions(+), 14 deletions(-) diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index e0ef39cde6..dfbb821fe8 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -261,7 +261,7 @@ func (app *BaseApp) Query(req abci.RequestQuery) (res abci.ResponseQuery) { queryable, ok := app.cms.(sdk.Queryable) if !ok { msg := "application doesn't support queries" - return sdk.ErrUnknownRequest(msg).Result().ToQuery() + return sdk.ErrUnknownRequest(msg).QueryResult() } return queryable.Query(req) } diff --git a/store/iavlstore.go b/store/iavlstore.go index 96110c59c9..e736fbda2e 100644 --- a/store/iavlstore.go +++ b/store/iavlstore.go @@ -141,7 +141,7 @@ func (st *iavlStore) ReverseIterator(start, end []byte) Iterator { func (st *iavlStore) Query(req abci.RequestQuery) (res abci.ResponseQuery) { if len(req.Data) == 0 { msg := "Query cannot be zero length" - return sdk.ErrTxDecode(msg).Result().ToQuery() + return sdk.ErrTxDecode(msg).QueryResult() } tree := st.tree @@ -175,7 +175,7 @@ func (st *iavlStore) Query(req abci.RequestQuery) (res abci.ResponseQuery) { default: msg := fmt.Sprintf("Unexpected Query path: %v", req.Path) - return sdk.ErrUnknownRequest(msg).Result().ToQuery() + return sdk.ErrUnknownRequest(msg).QueryResult() } return } diff --git a/store/rootmultistore.go b/store/rootmultistore.go index a39c35813f..9be28967c2 100644 --- a/store/rootmultistore.go +++ b/store/rootmultistore.go @@ -205,18 +205,18 @@ func (rs *rootMultiStore) Query(req abci.RequestQuery) abci.ResponseQuery { path := req.Path storeName, subpath, err := parsePath(path) if err != nil { - return err.Result().ToQuery() + return err.QueryResult() } store := rs.getStoreByName(storeName) if store == nil { msg := fmt.Sprintf("no such store: %s", storeName) - return sdk.ErrUnknownRequest(msg).Result().ToQuery() + return sdk.ErrUnknownRequest(msg).QueryResult() } queryable, ok := store.(Queryable) if !ok { msg := fmt.Sprintf("store %s doesn't support queries", storeName) - return sdk.ErrUnknownRequest(msg).Result().ToQuery() + return sdk.ErrUnknownRequest(msg).QueryResult() } // trim the path and make the query diff --git a/types/errors.go b/types/errors.go index 1115d39376..4874c43628 100644 --- a/types/errors.go +++ b/types/errors.go @@ -3,6 +3,8 @@ package types import ( "fmt" "runtime" + + abci "github.com/tendermint/abci/types" ) // ABCI Response Code @@ -121,6 +123,7 @@ type Error interface { TraceCause(cause error, msg string) Error Cause() error Result() Result + QueryResult() abci.ResponseQuery } func NewError(code CodeType, msg string) Error { @@ -220,3 +223,11 @@ func (err *sdkError) Result() Result { Log: err.ABCILog(), } } + +// QueryResult allows us to return sdk.Error.QueryResult() in query responses +func (err *sdkError) QueryResult() abci.ResponseQuery { + return abci.ResponseQuery{ + Code: uint32(err.ABCICode()), + Log: err.ABCILog(), + } +} diff --git a/types/result.go b/types/result.go index c1afec00ce..412a9778de 100644 --- a/types/result.go +++ b/types/result.go @@ -38,11 +38,3 @@ type Result struct { func (res Result) IsOK() bool { return res.Code.IsOK() } - -// ToQuery allows us to return sdk.Error.Result() in query responses -func (res Result) ToQuery() abci.ResponseQuery { - return abci.ResponseQuery{ - Code: uint32(res.Code), - Log: res.Log, - } -} From 7214149f1d209a1cb1af3df25c87b6af00a9e06b Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Mon, 2 Apr 2018 14:05:23 +0200 Subject: [PATCH 07/14] Move client context initialization from viper to separate package --- client/context/viper.go | 19 +++++++++++++++++++ client/core/context.go | 20 -------------------- client/rpc/block.go | 6 +++--- client/rpc/status.go | 4 ++-- client/rpc/validators.go | 4 ++-- client/tx/broadcast.go | 4 ++-- client/tx/query.go | 4 ++-- client/tx/search.go | 4 ++-- examples/democoin/x/cool/commands/tx.go | 6 +++--- x/auth/commands/account.go | 4 ++-- x/auth/rest/query.go | 4 ++-- x/bank/commands/sendtx.go | 4 ++-- x/bank/rest/sendtx.go | 4 ++-- x/ibc/commands/ibctx.go | 4 ++-- x/ibc/commands/relay.go | 12 ++++++------ x/ibc/rest/transfer.go | 4 ++-- x/simplestake/commands/commands.go | 8 ++++---- x/stake/commands/query.go | 10 +++++----- x/stake/commands/tx.go | 10 +++++----- 19 files changed, 67 insertions(+), 68 deletions(-) create mode 100644 client/context/viper.go diff --git a/client/context/viper.go b/client/context/viper.go new file mode 100644 index 0000000000..75441bc257 --- /dev/null +++ b/client/context/viper.go @@ -0,0 +1,19 @@ +package context + +import ( + "github.com/spf13/viper" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/core" +) + +func NewCoreContextFromViper() core.CoreContext { + return core.CoreContext{ + ChainID: viper.GetString(client.FlagChainID), + Height: viper.GetInt64(client.FlagHeight), + TrustNode: viper.GetBool(client.FlagTrustNode), + NodeURI: viper.GetString(client.FlagNode), + FromAddressName: viper.GetString(client.FlagName), + Sequence: viper.GetInt64(client.FlagSequence), + } +} diff --git a/client/core/context.go b/client/core/context.go index b3ae1f4f0b..7134a5f03e 100644 --- a/client/core/context.go +++ b/client/core/context.go @@ -1,14 +1,5 @@ package core -import ( - // "fmt" - - // "github.com/pkg/errors" - "github.com/spf13/viper" - - "github.com/cosmos/cosmos-sdk/client" -) - type CoreContext struct { ChainID string Height int64 @@ -18,17 +9,6 @@ type CoreContext struct { Sequence int64 } -func NewCoreContextFromViper() CoreContext { - return CoreContext{ - ChainID: viper.GetString(client.FlagChainID), - Height: viper.GetInt64(client.FlagHeight), - TrustNode: viper.GetBool(client.FlagTrustNode), - NodeURI: viper.GetString(client.FlagNode), - FromAddressName: viper.GetString(client.FlagName), - Sequence: viper.GetInt64(client.FlagSequence), - } -} - func (c CoreContext) WithChainID(chainID string) CoreContext { c.ChainID = chainID return c diff --git a/client/rpc/block.go b/client/rpc/block.go index cb39113d33..f42a15bc2e 100644 --- a/client/rpc/block.go +++ b/client/rpc/block.go @@ -10,7 +10,7 @@ import ( "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/core" + "github.com/cosmos/cosmos-sdk/client/context" ) const ( @@ -32,7 +32,7 @@ func blockCommand() *cobra.Command { func getBlock(height *int64) ([]byte, error) { // get the node - ctx := core.NewCoreContextFromViper() + ctx := context.NewCoreContextFromViper() node, err := ctx.GetNode() if err != nil { return nil, err @@ -57,7 +57,7 @@ func getBlock(height *int64) ([]byte, error) { } func GetChainHeight() (int64, error) { - node, err := core.NewCoreContextFromViper().GetNode() + node, err := context.NewCoreContextFromViper().GetNode() if err != nil { return -1, err } diff --git a/client/rpc/status.go b/client/rpc/status.go index 0c79d0763d..8ea8a5ad6a 100644 --- a/client/rpc/status.go +++ b/client/rpc/status.go @@ -10,7 +10,7 @@ import ( wire "github.com/tendermint/go-wire" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/core" + "github.com/cosmos/cosmos-sdk/client/context" ctypes "github.com/tendermint/tendermint/rpc/core/types" ) @@ -26,7 +26,7 @@ func statusCommand() *cobra.Command { func getNodeStatus() (*ctypes.ResultStatus, error) { // get the node - node, err := core.NewCoreContextFromViper().GetNode() + node, err := context.NewCoreContextFromViper().GetNode() if err != nil { return &ctypes.ResultStatus{}, err } diff --git a/client/rpc/validators.go b/client/rpc/validators.go index 5fbc044b22..9bf1505dbf 100644 --- a/client/rpc/validators.go +++ b/client/rpc/validators.go @@ -10,7 +10,7 @@ import ( "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/core" + "github.com/cosmos/cosmos-sdk/client/context" ) func validatorCommand() *cobra.Command { @@ -27,7 +27,7 @@ func validatorCommand() *cobra.Command { func GetValidators(height *int64) ([]byte, error) { // get the node - node, err := core.NewCoreContextFromViper().GetNode() + node, err := context.NewCoreContextFromViper().GetNode() if err != nil { return nil, err } diff --git a/client/tx/broadcast.go b/client/tx/broadcast.go index 44fb12544e..998e2b0f17 100644 --- a/client/tx/broadcast.go +++ b/client/tx/broadcast.go @@ -4,7 +4,7 @@ import ( "encoding/json" "net/http" - "github.com/cosmos/cosmos-sdk/client/core" + "github.com/cosmos/cosmos-sdk/client/context" ) type BroadcastTxBody struct { @@ -22,7 +22,7 @@ func BroadcastTxRequestHandler(w http.ResponseWriter, r *http.Request) { return } - res, err := core.NewCoreContextFromViper().BroadcastTx([]byte(m.TxBytes)) + res, err := context.NewCoreContextFromViper().BroadcastTx([]byte(m.TxBytes)) if err != nil { w.WriteHeader(500) w.Write([]byte(err.Error())) diff --git a/client/tx/query.go b/client/tx/query.go index f64fba8017..63ab2ff04b 100644 --- a/client/tx/query.go +++ b/client/tx/query.go @@ -15,7 +15,7 @@ import ( ctypes "github.com/tendermint/tendermint/rpc/core/types" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/core" + "github.com/cosmos/cosmos-sdk/client/context" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" ) @@ -40,7 +40,7 @@ func (c commander) queryTx(hashHexStr string, trustNode bool) ([]byte, error) { } // get the node - node, err := core.NewCoreContextFromViper().GetNode() + node, err := context.NewCoreContextFromViper().GetNode() if err != nil { return nil, err } diff --git a/client/tx/search.go b/client/tx/search.go index d5cc642f14..df3be50773 100644 --- a/client/tx/search.go +++ b/client/tx/search.go @@ -12,7 +12,7 @@ import ( ctypes "github.com/tendermint/tendermint/rpc/core/types" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/core" + "github.com/cosmos/cosmos-sdk/client/context" "github.com/cosmos/cosmos-sdk/wire" ) @@ -44,7 +44,7 @@ func (c commander) searchTx(tags []string) ([]byte, error) { query := strings.Join(tags, " AND ") // get the node - node, err := core.NewCoreContextFromViper().GetNode() + node, err := context.NewCoreContextFromViper().GetNode() if err != nil { return nil, err } diff --git a/examples/democoin/x/cool/commands/tx.go b/examples/democoin/x/cool/commands/tx.go index 710a225586..8deaac405d 100644 --- a/examples/democoin/x/cool/commands/tx.go +++ b/examples/democoin/x/cool/commands/tx.go @@ -8,7 +8,7 @@ import ( "github.com/spf13/viper" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/core" + "github.com/cosmos/cosmos-sdk/client/context" "github.com/cosmos/cosmos-sdk/wire" "github.com/cosmos/cosmos-sdk/examples/democoin/x/cool" @@ -24,7 +24,7 @@ func QuizTxCmd(cdc *wire.Codec) *cobra.Command { return errors.New("You must provide an answer") } - ctx := core.NewCoreContextFromViper() + ctx := context.NewCoreContextFromViper() // get the from address from the name flag from, err := ctx.GetFromAddress() @@ -60,7 +60,7 @@ func SetTrendTxCmd(cdc *wire.Codec) *cobra.Command { return errors.New("You must provide an answer") } - ctx := core.NewCoreContextFromViper() + ctx := context.NewCoreContextFromViper() // get the from address from the name flag from, err := ctx.GetFromAddress() diff --git a/x/auth/commands/account.go b/x/auth/commands/account.go index 470aa0eeac..b87b957699 100644 --- a/x/auth/commands/account.go +++ b/x/auth/commands/account.go @@ -8,7 +8,7 @@ import ( "github.com/pkg/errors" "github.com/spf13/cobra" - "github.com/cosmos/cosmos-sdk/client/core" + "github.com/cosmos/cosmos-sdk/client/context" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" "github.com/cosmos/cosmos-sdk/x/auth" @@ -64,7 +64,7 @@ func (c commander) getAccountCmd(cmd *cobra.Command, args []string) error { } key := sdk.Address(bz) - ctx := core.NewCoreContextFromViper() + ctx := context.NewCoreContextFromViper() res, err := ctx.Query(key, c.storeName) if err != nil { diff --git a/x/auth/rest/query.go b/x/auth/rest/query.go index d30af45071..8fce027f20 100644 --- a/x/auth/rest/query.go +++ b/x/auth/rest/query.go @@ -8,7 +8,7 @@ import ( "github.com/gorilla/mux" - "github.com/cosmos/cosmos-sdk/client/core" + "github.com/cosmos/cosmos-sdk/client/context" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" ) @@ -33,7 +33,7 @@ func QueryAccountRequestHandler(storeName string, cdc *wire.Codec, decoder sdk.A } key := sdk.Address(bz) - res, err := core.NewCoreContextFromViper().Query(key, c.storeName) + res, err := context.NewCoreContextFromViper().Query(key, c.storeName) if err != nil { w.WriteHeader(http.StatusInternalServerError) w.Write([]byte(fmt.Sprintf("Could't query account. Error: %s", err.Error()))) diff --git a/x/bank/commands/sendtx.go b/x/bank/commands/sendtx.go index 67b600787a..a543ce829c 100644 --- a/x/bank/commands/sendtx.go +++ b/x/bank/commands/sendtx.go @@ -8,7 +8,7 @@ import ( "github.com/spf13/viper" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/core" + "github.com/cosmos/cosmos-sdk/client/context" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" "github.com/cosmos/cosmos-sdk/x/bank" @@ -38,7 +38,7 @@ type Commander struct { } func (c Commander) sendTxCmd(cmd *cobra.Command, args []string) error { - ctx := core.NewCoreContextFromViper() + ctx := context.NewCoreContextFromViper() // get the from address from, err := ctx.GetFromAddress() diff --git a/x/bank/rest/sendtx.go b/x/bank/rest/sendtx.go index a545661ca9..9b12fdd8ff 100644 --- a/x/bank/rest/sendtx.go +++ b/x/bank/rest/sendtx.go @@ -9,7 +9,7 @@ import ( "github.com/gorilla/mux" "github.com/tendermint/go-crypto/keys" - "github.com/cosmos/cosmos-sdk/client/core" + "github.com/cosmos/cosmos-sdk/client/context" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" "github.com/cosmos/cosmos-sdk/x/bank/commands" @@ -71,7 +71,7 @@ func SendRequestHandler(cdc *wire.Codec, kb keys.Keybase) func(http.ResponseWrit } // sign - ctx := core.NewCoreContextFromViper() + ctx := context.NewCoreContextFromViper() ctx.Sequence = m.Sequence txBytes, err := ctx.SignAndBuild(m.LocalAccountName, m.Password, msg, c.Cdc) if err != nil { diff --git a/x/ibc/commands/ibctx.go b/x/ibc/commands/ibctx.go index bff7515451..c760292ad4 100644 --- a/x/ibc/commands/ibctx.go +++ b/x/ibc/commands/ibctx.go @@ -8,7 +8,7 @@ import ( "github.com/spf13/viper" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/core" + "github.com/cosmos/cosmos-sdk/client/context" sdk "github.com/cosmos/cosmos-sdk/types" wire "github.com/cosmos/cosmos-sdk/wire" @@ -39,7 +39,7 @@ type sendCommander struct { } func (c sendCommander) sendIBCTransfer(cmd *cobra.Command, args []string) error { - ctx := core.NewCoreContextFromViper() + ctx := context.NewCoreContextFromViper() // get the from address from, err := ctx.GetFromAddress() diff --git a/x/ibc/commands/relay.go b/x/ibc/commands/relay.go index 3c70ac958f..5817d628dc 100644 --- a/x/ibc/commands/relay.go +++ b/x/ibc/commands/relay.go @@ -9,7 +9,7 @@ import ( "github.com/tendermint/tmlibs/log" - "github.com/cosmos/cosmos-sdk/client/core" + "github.com/cosmos/cosmos-sdk/client/context" sdk "github.com/cosmos/cosmos-sdk/types" wire "github.com/cosmos/cosmos-sdk/wire" @@ -73,7 +73,7 @@ func (c relayCommander) runIBCRelay(cmd *cobra.Command, args []string) { fromChainNode := viper.GetString(FlagFromChainNode) toChainID := viper.GetString(FlagToChainID) toChainNode := viper.GetString(FlagToChainNode) - address, err := core.NewCoreContextFromViper().GetFromAddress() + address, err := context.NewCoreContextFromViper().GetFromAddress() if err != nil { panic(err) } @@ -83,7 +83,7 @@ func (c relayCommander) runIBCRelay(cmd *cobra.Command, args []string) { } func (c relayCommander) loop(fromChainID, fromChainNode, toChainID, toChainNode string) { - ctx := core.NewCoreContextFromViper() + ctx := context.NewCoreContextFromViper() // get password passphrase, err := ctx.GetPassphraseFromStdin(ctx.FromAddressName) if err != nil { @@ -147,11 +147,11 @@ OUTER: } func query(node string, key []byte, storeName string) (res []byte, err error) { - return core.NewCoreContextFromViper().WithNodeURI(node).Query(key, storeName) + return context.NewCoreContextFromViper().WithNodeURI(node).Query(key, storeName) } func (c relayCommander) broadcastTx(node string, tx []byte) error { - _, err := core.NewCoreContextFromViper().WithNodeURI(node).WithSequence(c.getSequence(node) + 1).BroadcastTx(tx) + _, err := context.NewCoreContextFromViper().WithNodeURI(node).WithSequence(c.getSequence(node) + 1).BroadcastTx(tx) return err } @@ -185,7 +185,7 @@ func (c relayCommander) refine(bz []byte, sequence int64, passphrase string) []b Sequence: sequence, } - ctx := core.NewCoreContextFromViper() + ctx := context.NewCoreContextFromViper() res, err := ctx.SignAndBuild(ctx.FromAddressName, passphrase, msg, c.cdc) if err != nil { panic(err) diff --git a/x/ibc/rest/transfer.go b/x/ibc/rest/transfer.go index 1c641124f1..c26f9b53a2 100644 --- a/x/ibc/rest/transfer.go +++ b/x/ibc/rest/transfer.go @@ -9,7 +9,7 @@ import ( "github.com/gorilla/mux" "github.com/tendermint/go-crypto/keys" - "github.com/cosmos/cosmos-sdk/client/core" + "github.com/cosmos/cosmos-sdk/client/context" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" "github.com/cosmos/cosmos-sdk/x/bank/commands" @@ -70,7 +70,7 @@ func TransferRequestHandler(cdc *wire.Codec, kb keys.Keybase) func(http.Response // sign // XXX: OMG - ctx := core.NewCoreContextFromViper() + ctx := context.NewCoreContextFromViper() ctx.Sequence = m.Sequence txBytes, err := ctx.SignAndBuild(m.LocalAccountName, m.Password, msg, c.Cdc) if err != nil { diff --git a/x/simplestake/commands/commands.go b/x/simplestake/commands/commands.go index b1ef72aa81..f23da4bd85 100644 --- a/x/simplestake/commands/commands.go +++ b/x/simplestake/commands/commands.go @@ -10,7 +10,7 @@ import ( crypto "github.com/tendermint/go-crypto" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/core" + "github.com/cosmos/cosmos-sdk/client/context" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" "github.com/cosmos/cosmos-sdk/x/simplestake" @@ -48,7 +48,7 @@ type commander struct { } func (co commander) bondTxCmd(cmd *cobra.Command, args []string) error { - ctx := core.NewCoreContextFromViper() + ctx := context.NewCoreContextFromViper() from, err := ctx.GetFromAddress() if err != nil { @@ -84,7 +84,7 @@ func (co commander) bondTxCmd(cmd *cobra.Command, args []string) error { } func (co commander) unbondTxCmd(cmd *cobra.Command, args []string) error { - from, err := core.NewCoreContextFromViper().GetFromAddress() + from, err := context.NewCoreContextFromViper().GetFromAddress() if err != nil { return err } @@ -96,7 +96,7 @@ func (co commander) unbondTxCmd(cmd *cobra.Command, args []string) error { func (co commander) sendMsg(msg sdk.Msg) error { name := viper.GetString(client.FlagName) - res, err := core.NewCoreContextFromViper().SignBuildBroadcast(name, msg, co.cdc) + res, err := context.NewCoreContextFromViper().SignBuildBroadcast(name, msg, co.cdc) if err != nil { return err } diff --git a/x/stake/commands/query.go b/x/stake/commands/query.go index 2fedcfc4ad..7bc6a8aa94 100644 --- a/x/stake/commands/query.go +++ b/x/stake/commands/query.go @@ -11,7 +11,7 @@ import ( crypto "github.com/tendermint/go-crypto" - "github.com/cosmos/cosmos-sdk/client/core" + "github.com/cosmos/cosmos-sdk/client/context" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" // XXX fix "github.com/cosmos/cosmos-sdk/x/stake" @@ -47,7 +47,7 @@ func GetCmdQueryCandidates(cdc *wire.Codec, storeName string) *cobra.Command { key := PrefixedKey(stake.MsgType, stake.CandidatesKey) - ctx := core.NewCoreContextFromViper() + ctx := context.NewCoreContextFromViper() res, err := ctx.Query(key, storeName) if err != nil { return err @@ -88,7 +88,7 @@ func GetCmdQueryCandidate(cdc *wire.Codec, storeName string) *cobra.Command { key := PrefixedKey(stake.MsgType, stake.GetCandidateKey(addr)) - ctx := core.NewCoreContextFromViper() + ctx := context.NewCoreContextFromViper() res, err := ctx.Query(key, storeName) if err != nil { @@ -136,7 +136,7 @@ func GetCmdQueryDelegatorBond(cdc *wire.Codec, storeName string) *cobra.Command key := PrefixedKey(stake.MsgType, stake.GetDelegatorBondKey(delegator, addr, cdc)) - ctx := core.NewCoreContextFromViper() + ctx := context.NewCoreContextFromViper() res, err := ctx.Query(key, storeName) if err != nil { @@ -180,7 +180,7 @@ func GetCmdQueryDelegatorBonds(cdc *wire.Codec, storeName string) *cobra.Command key := PrefixedKey(stake.MsgType, stake.GetDelegatorBondsKey(delegator, cdc)) - ctx := core.NewCoreContextFromViper() + ctx := context.NewCoreContextFromViper() res, err := ctx.Query(key, storeName) if err != nil { diff --git a/x/stake/commands/tx.go b/x/stake/commands/tx.go index f7df5ef7c0..dbc4dfdf35 100644 --- a/x/stake/commands/tx.go +++ b/x/stake/commands/tx.go @@ -11,7 +11,7 @@ import ( crypto "github.com/tendermint/go-crypto" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/core" + "github.com/cosmos/cosmos-sdk/client/context" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" "github.com/cosmos/cosmos-sdk/x/stake" @@ -93,7 +93,7 @@ func GetCmdDeclareCandidacy(cdc *wire.Codec) *cobra.Command { // build and sign the transaction, then broadcast to Tendermint name := viper.GetString(client.FlagName) - ctx := core.NewCoreContextFromViper() + ctx := context.NewCoreContextFromViper() res, err := ctx.SignBuildBroadcast(name, msg, cdc) if err != nil { return err @@ -131,7 +131,7 @@ func GetCmdEditCandidacy(cdc *wire.Codec) *cobra.Command { // build and sign the transaction, then broadcast to Tendermint name := viper.GetString(client.FlagName) - ctx := core.NewCoreContextFromViper() + ctx := context.NewCoreContextFromViper() res, err := ctx.SignBuildBroadcast(name, msg, cdc) if err != nil { return err @@ -168,7 +168,7 @@ func GetCmdDelegate(cdc *wire.Codec) *cobra.Command { // build and sign the transaction, then broadcast to Tendermint name := viper.GetString(client.FlagName) - ctx := core.NewCoreContextFromViper() + ctx := context.NewCoreContextFromViper() res, err := ctx.SignBuildBroadcast(name, msg, cdc) if err != nil { return err @@ -216,7 +216,7 @@ func GetCmdUnbond(cdc *wire.Codec) *cobra.Command { // build and sign the transaction, then broadcast to Tendermint name := viper.GetString(client.FlagName) - ctx := core.NewCoreContextFromViper() + ctx := context.NewCoreContextFromViper() res, err := ctx.SignBuildBroadcast(name, msg, cdc) if err != nil { return err From 8412215c167cfb606260ae206871ed7b757fdab2 Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Mon, 2 Apr 2018 14:13:13 +0200 Subject: [PATCH 08/14] Additional module cleanup --- x/bank/commands/sendtx.go | 5 +---- x/ibc/commands/ibctx.go | 4 +--- x/simplestake/commands/commands.go | 5 ++--- x/stake/commands/tx.go | 12 ++++-------- 4 files changed, 8 insertions(+), 18 deletions(-) diff --git a/x/bank/commands/sendtx.go b/x/bank/commands/sendtx.go index a543ce829c..ee4625eac2 100644 --- a/x/bank/commands/sendtx.go +++ b/x/bank/commands/sendtx.go @@ -61,14 +61,11 @@ func (c Commander) sendTxCmd(cmd *cobra.Command, args []string) error { } to := sdk.Address(bz) - // get account name - name := viper.GetString(client.FlagName) - // build message msg := BuildMsg(from, to, coins) // build and sign the transaction, then broadcast to Tendermint - res, err := ctx.SignBuildBroadcast(name, msg, c.Cdc) + res, err := ctx.SignBuildBroadcast(ctx.FromAddressName, msg, c.Cdc) if err != nil { return err } diff --git a/x/ibc/commands/ibctx.go b/x/ibc/commands/ibctx.go index c760292ad4..689a983181 100644 --- a/x/ibc/commands/ibctx.go +++ b/x/ibc/commands/ibctx.go @@ -54,9 +54,7 @@ func (c sendCommander) sendIBCTransfer(cmd *cobra.Command, args []string) error } // get password - name := viper.GetString(client.FlagName) - - res, err := ctx.SignBuildBroadcast(name, msg, c.cdc) + res, err := ctx.SignBuildBroadcast(ctx.FromAddressName, msg, c.cdc) if err != nil { return err } diff --git a/x/simplestake/commands/commands.go b/x/simplestake/commands/commands.go index f23da4bd85..ce89801d88 100644 --- a/x/simplestake/commands/commands.go +++ b/x/simplestake/commands/commands.go @@ -9,7 +9,6 @@ import ( crypto "github.com/tendermint/go-crypto" - "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/context" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" @@ -95,8 +94,8 @@ func (co commander) unbondTxCmd(cmd *cobra.Command, args []string) error { } func (co commander) sendMsg(msg sdk.Msg) error { - name := viper.GetString(client.FlagName) - res, err := context.NewCoreContextFromViper().SignBuildBroadcast(name, msg, co.cdc) + ctx := context.NewCoreContextFromViper() + res, err := ctx.SignBuildBroadcast(ctx.FromAddressName, msg, co.cdc) if err != nil { return err } diff --git a/x/stake/commands/tx.go b/x/stake/commands/tx.go index dbc4dfdf35..d1dec6dce9 100644 --- a/x/stake/commands/tx.go +++ b/x/stake/commands/tx.go @@ -92,9 +92,8 @@ func GetCmdDeclareCandidacy(cdc *wire.Codec) *cobra.Command { msg := stake.NewMsgDeclareCandidacy(candidateAddr, pk, amount, description) // build and sign the transaction, then broadcast to Tendermint - name := viper.GetString(client.FlagName) ctx := context.NewCoreContextFromViper() - res, err := ctx.SignBuildBroadcast(name, msg, cdc) + res, err := ctx.SignBuildBroadcast(ctx.FromAddressName, msg, cdc) if err != nil { return err } @@ -130,9 +129,8 @@ func GetCmdEditCandidacy(cdc *wire.Codec) *cobra.Command { msg := stake.NewMsgEditCandidacy(candidateAddr, description) // build and sign the transaction, then broadcast to Tendermint - name := viper.GetString(client.FlagName) ctx := context.NewCoreContextFromViper() - res, err := ctx.SignBuildBroadcast(name, msg, cdc) + res, err := ctx.SignBuildBroadcast(ctx.FromAddressName, msg, cdc) if err != nil { return err } @@ -167,9 +165,8 @@ func GetCmdDelegate(cdc *wire.Codec) *cobra.Command { msg := stake.NewMsgDelegate(delegatorAddr, candidateAddr, amount) // build and sign the transaction, then broadcast to Tendermint - name := viper.GetString(client.FlagName) ctx := context.NewCoreContextFromViper() - res, err := ctx.SignBuildBroadcast(name, msg, cdc) + res, err := ctx.SignBuildBroadcast(ctx.FromAddressName, msg, cdc) if err != nil { return err } @@ -215,9 +212,8 @@ func GetCmdUnbond(cdc *wire.Codec) *cobra.Command { msg := stake.NewMsgUnbond(delegatorAddr, candidateAddr, sharesStr) // build and sign the transaction, then broadcast to Tendermint - name := viper.GetString(client.FlagName) ctx := context.NewCoreContextFromViper() - res, err := ctx.SignBuildBroadcast(name, msg, cdc) + res, err := ctx.SignBuildBroadcast(ctx.FromAddressName, msg, cdc) if err != nil { return err } From ed54dc43f2d599fb652bc364846dfd7b443e42c4 Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Mon, 2 Apr 2018 16:29:29 +0200 Subject: [PATCH 09/14] Add ChainID to testnet JSON (closes #773) --- server/init.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/init.go b/server/init.go index ab4ffcb7a4..4358950811 100644 --- a/server/init.go +++ b/server/init.go @@ -21,6 +21,7 @@ type testnetInformation struct { Account string `json:"account"` Validator tmtypes.GenesisValidator `json:"validator"` NodeID p2p.ID `json:"node_id"` + ChainID string `json:"chain_id"` } // InitCmd will initialize all files for tendermint, @@ -144,6 +145,7 @@ func (c initCmd) initTendermintFiles(config *cfg.Config, info *testnetInformatio info.Validator = validator } } + info.ChainID = loadedDoc.ChainID return nil } From fb3572c445e6c5f4a9cbea9b37689c234cb9db26 Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Mon, 2 Apr 2018 18:51:39 +0200 Subject: [PATCH 10/14] Enable TestStartWithTendermint (closes #668) --- server/start_test.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/server/start_test.go b/server/start_test.go index 2657c52234..4934e84022 100644 --- a/server/start_test.go +++ b/server/start_test.go @@ -1,7 +1,7 @@ package server import ( - // "os" + "os" "testing" "time" @@ -30,7 +30,6 @@ func TestStartStandAlone(t *testing.T) { RunOrTimeout(startCmd, timeout, t) } -/* func TestStartWithTendermint(t *testing.T) { defer setupViper(t)() @@ -52,4 +51,3 @@ func TestStartWithTendermint(t *testing.T) { RunOrTimeout(startCmd, timeout, t) } -*/ From 3404ecca793f7db6f08dd70b034db3486e32f60b Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Mon, 2 Apr 2018 19:19:38 +0200 Subject: [PATCH 11/14] Avoid race condition with viper.Set (ref #668) --- server/start_test.go | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/server/start_test.go b/server/start_test.go index 4934e84022..3a37de1b5c 100644 --- a/server/start_test.go +++ b/server/start_test.go @@ -25,9 +25,9 @@ func TestStartStandAlone(t *testing.T) { viper.Set(flagAddress, "localhost:11122") startCmd := StartCmd(mock.NewApp, logger) startCmd.Flags().Set(flagAddress, FreeTCPAddr(t)) // set to a new free address - timeout := time.Duration(3) * time.Second + timeout := time.Duration(10) * time.Second - RunOrTimeout(startCmd, timeout, t) + close(RunOrTimeout(startCmd, timeout, t)) } func TestStartWithTendermint(t *testing.T) { @@ -35,7 +35,6 @@ func TestStartWithTendermint(t *testing.T) { logger := log.NewTMLogger(log.NewSyncWriter(os.Stdout)). With("module", "mock-cmd") - // logger := log.NewNopLogger() initCmd := InitCmd(mock.GenInitOptions, logger) err := initCmd.RunE(nil, nil) require.NoError(t, err) @@ -44,10 +43,7 @@ func TestStartWithTendermint(t *testing.T) { viper.Set(flagWithTendermint, true) startCmd := StartCmd(mock.NewApp, logger) startCmd.Flags().Set(flagAddress, FreeTCPAddr(t)) // set to a new free address - timeout := time.Duration(3) * time.Second + timeout := time.Duration(10) * time.Second - //a, _ := startCmd.Flags().GetString(flagAddress) - //panic(a) - - RunOrTimeout(startCmd, timeout, t) + close(RunOrTimeout(startCmd, timeout, t)) } From 12f4a21d035c7ea69dcdb69defcabd50a2a7db55 Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Tue, 3 Apr 2018 14:11:49 +0200 Subject: [PATCH 12/14] Reuse Tendermint client instance (closes #671) --- client/context/viper.go | 10 +++++++++- client/core/context.go | 10 ++++++++++ client/core/core.go | 4 ++-- x/auth/rest/query.go | 3 ++- x/bank/rest/sendtx.go | 4 ++-- x/ibc/rest/transfer.go | 5 ++--- 6 files changed, 27 insertions(+), 9 deletions(-) diff --git a/client/context/viper.go b/client/context/viper.go index 75441bc257..750a37c616 100644 --- a/client/context/viper.go +++ b/client/context/viper.go @@ -3,17 +3,25 @@ package context import ( "github.com/spf13/viper" + rpcclient "github.com/tendermint/tendermint/rpc/client" + "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/core" ) func NewCoreContextFromViper() core.CoreContext { + nodeURI := viper.GetString(client.FlagNode) + var rpc rpcclient.Client + if nodeURI != "" { + rpc = rpcclient.NewHTTP(nodeURI, "/websocket") + } return core.CoreContext{ ChainID: viper.GetString(client.FlagChainID), Height: viper.GetInt64(client.FlagHeight), TrustNode: viper.GetBool(client.FlagTrustNode), - NodeURI: viper.GetString(client.FlagNode), FromAddressName: viper.GetString(client.FlagName), + NodeURI: nodeURI, Sequence: viper.GetInt64(client.FlagSequence), + Client: rpc, } } diff --git a/client/core/context.go b/client/core/context.go index 7134a5f03e..3d7f400a8e 100644 --- a/client/core/context.go +++ b/client/core/context.go @@ -1,5 +1,9 @@ package core +import ( + rpcclient "github.com/tendermint/tendermint/rpc/client" +) + type CoreContext struct { ChainID string Height int64 @@ -7,6 +11,7 @@ type CoreContext struct { NodeURI string FromAddressName string Sequence int64 + Client rpcclient.Client } func (c CoreContext) WithChainID(chainID string) CoreContext { @@ -38,3 +43,8 @@ func (c CoreContext) WithSequence(sequence int64) CoreContext { c.Sequence = sequence return c } + +func (c CoreContext) WithClient(client rpcclient.Client) CoreContext { + c.Client = client + return c +} diff --git a/client/core/core.go b/client/core/core.go index e8b8c19fb0..a5c7b340c7 100644 --- a/client/core/core.go +++ b/client/core/core.go @@ -146,8 +146,8 @@ func (ctx CoreContext) GetPassphraseFromStdin(name string) (pass string, err err // GetNode prepares a simple rpc.Client func (ctx CoreContext) GetNode() (rpcclient.Client, error) { - if ctx.NodeURI == "" { + if ctx.Client == nil { return nil, errors.New("Must define node URI") } - return rpcclient.NewHTTP(ctx.NodeURI, "/websocket"), nil + return ctx.Client, nil } diff --git a/x/auth/rest/query.go b/x/auth/rest/query.go index 8fce027f20..5430a77ff2 100644 --- a/x/auth/rest/query.go +++ b/x/auth/rest/query.go @@ -21,6 +21,7 @@ type commander struct { func QueryAccountRequestHandler(storeName string, cdc *wire.Codec, decoder sdk.AccountDecoder) func(http.ResponseWriter, *http.Request) { c := commander{storeName, cdc, decoder} + ctx := context.NewCoreContextFromViper() return func(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) addr := vars["address"] @@ -33,7 +34,7 @@ func QueryAccountRequestHandler(storeName string, cdc *wire.Codec, decoder sdk.A } key := sdk.Address(bz) - res, err := context.NewCoreContextFromViper().Query(key, c.storeName) + res, err := ctx.Query(key, c.storeName) if err != nil { w.WriteHeader(http.StatusInternalServerError) w.Write([]byte(fmt.Sprintf("Could't query account. Error: %s", err.Error()))) diff --git a/x/bank/rest/sendtx.go b/x/bank/rest/sendtx.go index 9b12fdd8ff..b1f8516f33 100644 --- a/x/bank/rest/sendtx.go +++ b/x/bank/rest/sendtx.go @@ -28,6 +28,7 @@ type sendBody struct { // SendRequestHandler - http request handler to send coins to a address func SendRequestHandler(cdc *wire.Codec, kb keys.Keybase) func(http.ResponseWriter, *http.Request) { c := commands.Commander{cdc} + ctx := context.NewCoreContextFromViper() return func(w http.ResponseWriter, r *http.Request) { // collect data vars := mux.Vars(r) @@ -71,8 +72,7 @@ func SendRequestHandler(cdc *wire.Codec, kb keys.Keybase) func(http.ResponseWrit } // sign - ctx := context.NewCoreContextFromViper() - ctx.Sequence = m.Sequence + ctx = ctx.WithSequence(m.Sequence) txBytes, err := ctx.SignAndBuild(m.LocalAccountName, m.Password, msg, c.Cdc) if err != nil { w.WriteHeader(http.StatusUnauthorized) diff --git a/x/ibc/rest/transfer.go b/x/ibc/rest/transfer.go index c26f9b53a2..fceac55677 100644 --- a/x/ibc/rest/transfer.go +++ b/x/ibc/rest/transfer.go @@ -29,6 +29,7 @@ type transferBody struct { // on a different chain via IBC func TransferRequestHandler(cdc *wire.Codec, kb keys.Keybase) func(http.ResponseWriter, *http.Request) { c := commands.Commander{cdc} + ctx := context.NewCoreContextFromViper() return func(w http.ResponseWriter, r *http.Request) { // collect data vars := mux.Vars(r) @@ -69,9 +70,7 @@ func TransferRequestHandler(cdc *wire.Codec, kb keys.Keybase) func(http.Response msg := ibc.IBCTransferMsg{packet} // sign - // XXX: OMG - ctx := context.NewCoreContextFromViper() - ctx.Sequence = m.Sequence + ctx = ctx.WithSequence(m.Sequence) txBytes, err := ctx.SignAndBuild(m.LocalAccountName, m.Password, msg, c.Cdc) if err != nil { w.WriteHeader(http.StatusUnauthorized) From 457092d662c5eef3257ba2496b66b824fbfe3073 Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Tue, 3 Apr 2018 20:19:41 +0200 Subject: [PATCH 13/14] TestStartStandAlone without cobra --- server/start_test.go | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/server/start_test.go b/server/start_test.go index 3a37de1b5c..b2716da24d 100644 --- a/server/start_test.go +++ b/server/start_test.go @@ -1,6 +1,7 @@ package server import ( + "io/ioutil" "os" "testing" "time" @@ -9,25 +10,34 @@ import ( "github.com/stretchr/testify/require" "github.com/cosmos/cosmos-sdk/mock" + "github.com/tendermint/abci/server" "github.com/tendermint/tmlibs/log" ) func TestStartStandAlone(t *testing.T) { - defer setupViper(t)() + home, err := ioutil.TempDir("", "mock-sdk-cmd") + defer func() { + os.RemoveAll(home) + }() logger := log.NewNopLogger() initCmd := InitCmd(mock.GenInitOptions, logger) - err := initCmd.RunE(nil, nil) + err = initCmd.RunE(nil, nil) require.NoError(t, err) - // set up app and start up - viper.Set(flagWithTendermint, false) - viper.Set(flagAddress, "localhost:11122") - startCmd := StartCmd(mock.NewApp, logger) - startCmd.Flags().Set(flagAddress, FreeTCPAddr(t)) // set to a new free address - timeout := time.Duration(10) * time.Second + app, err := mock.NewApp(home, logger) + require.Nil(t, err) + svr, err := server.NewServer(FreeTCPAddr(t), "socket", app) + require.Nil(t, err, "Error creating listener") + svr.SetLogger(logger.With("module", "abci-server")) + svr.Start() + + timer := time.NewTimer(time.Duration(5) * time.Second) + select { + case <-timer.C: + svr.Stop() + } - close(RunOrTimeout(startCmd, timeout, t)) } func TestStartWithTendermint(t *testing.T) { @@ -43,7 +53,7 @@ func TestStartWithTendermint(t *testing.T) { viper.Set(flagWithTendermint, true) startCmd := StartCmd(mock.NewApp, logger) startCmd.Flags().Set(flagAddress, FreeTCPAddr(t)) // set to a new free address - timeout := time.Duration(10) * time.Second + timeout := time.Duration(5) * time.Second close(RunOrTimeout(startCmd, timeout, t)) } From cdbb994e3fee22d7a9882f1e0a11c63eb0787973 Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Tue, 3 Apr 2018 22:23:09 +0200 Subject: [PATCH 14/14] Update IBC commands --- x/ibc/commands/relay.go | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/x/ibc/commands/relay.go b/x/ibc/commands/relay.go index 5817d628dc..d652e306fd 100644 --- a/x/ibc/commands/relay.go +++ b/x/ibc/commands/relay.go @@ -132,10 +132,8 @@ OUTER: continue OUTER } - viper.Set(client.FlagSequence, seq) + err = c.broadcastTx(seq, toChainNode, c.refine(egressbz, i, passphrase)) seq++ - - err = c.broadcastTx(toChainNode, c.refine(egressbz, i, passphrase)) if err != nil { c.logger.Error("Error broadcasting ingress packet", "err", err) continue OUTER @@ -150,8 +148,8 @@ func query(node string, key []byte, storeName string) (res []byte, err error) { return context.NewCoreContextFromViper().WithNodeURI(node).Query(key, storeName) } -func (c relayCommander) broadcastTx(node string, tx []byte) error { - _, err := context.NewCoreContextFromViper().WithNodeURI(node).WithSequence(c.getSequence(node) + 1).BroadcastTx(tx) +func (c relayCommander) broadcastTx(seq int64, node string, tx []byte) error { + _, err := context.NewCoreContextFromViper().WithNodeURI(node).WithSequence(seq + 1).BroadcastTx(tx) return err } @@ -169,10 +167,6 @@ func (c relayCommander) getSequence(node string) int64 { return account.GetSequence() } -func setSequence(seq int64) { - viper.Set(client.FlagSequence, seq) -} - func (c relayCommander) refine(bz []byte, sequence int64, passphrase string) []byte { var packet ibc.IBCPacket if err := c.cdc.UnmarshalBinary(bz, &packet); err != nil {