From 0be651fd2777baca64b9b03475ba9e6bced90e66 Mon Sep 17 00:00:00 2001 From: Sunny Aggarwal Date: Tue, 27 Mar 2018 19:42:09 +0200 Subject: [PATCH] address rigels review --- examples/basecoin/app/app.go | 6 ++--- examples/basecoin/x/cool/errors.go | 2 +- examples/basecoin/x/cool/handler.go | 22 +++++++++-------- x/bank/handler.go | 37 ++++++++++++----------------- x/bank/keeper.go | 19 +++++++++++++++ x/bank/{tx.go => msgs.go} | 0 x/bank/{tx_test.go => msgs_test.go} | 0 x/staking/handler.go | 19 ++++++++------- 8 files changed, 61 insertions(+), 44 deletions(-) rename x/bank/{tx.go => msgs.go} (100%) rename x/bank/{tx_test.go => msgs_test.go} (100%) diff --git a/examples/basecoin/app/app.go b/examples/basecoin/app/app.go index f69bb96d0a..e5235bd667 100644 --- a/examples/basecoin/app/app.go +++ b/examples/basecoin/app/app.go @@ -61,10 +61,10 @@ func NewBasecoinApp(logger log.Logger, db dbm.DB) *BasecoinApp { ibcMapper := ibc.NewIBCMapper(app.cdc, app.capKeyIBCStore) stakeKeeper := staking.NewKeeper(app.capKeyStakingStore, coinKeeper) app.Router(). - AddRoute("bank", coinKeeper.Handler). - AddRoute("cool", coolKeeper.Handler). + AddRoute("bank", bank.NewHandler(coinKeeper)). + AddRoute("cool", cool.NewHandler(coolKeeper)). AddRoute("ibc", ibc.NewHandler(ibcMapper, coinKeeper)). - AddRoute("staking", stakeKeeper.Handler) + AddRoute("staking", staking.NewHandler(stakeKeeper)) // initialize BaseApp app.SetTxDecoder(app.txDecoder) diff --git a/examples/basecoin/x/cool/errors.go b/examples/basecoin/x/cool/errors.go index 9001c3c243..707f2ef8c1 100644 --- a/examples/basecoin/x/cool/errors.go +++ b/examples/basecoin/x/cool/errors.go @@ -11,5 +11,5 @@ const ( // ErrIncorrectCoolAnswer - Error returned upon an incorrect guess func ErrIncorrectCoolAnswer(answer string) sdk.Error { - return sdk.NewError(CodeIncorrectCoolAnswer, "Incorrect Cool answer - `"+answer+"'") + return sdk.NewError(CodeIncorrectCoolAnswer, "Incorrect cool answer") } diff --git a/examples/basecoin/x/cool/handler.go b/examples/basecoin/x/cool/handler.go index fc3dc44ad4..ce86ecd5bc 100644 --- a/examples/basecoin/x/cool/handler.go +++ b/examples/basecoin/x/cool/handler.go @@ -17,16 +17,18 @@ import ( //| $$$$$$$| $$$$$$/| $$$$$$/| $$$$$$$ // \_______/ \______/ \______/ |______/ -// Handle all "coolmodule" type objects -func (k Keeper) Handler(ctx sdk.Context, msg sdk.Msg) sdk.Result { - switch msg := msg.(type) { - case SetTrendMsg: - return handleSetTrendMsg(ctx, k, msg) - case QuizMsg: - return handleQuizMsg(ctx, k, msg) - default: - errMsg := fmt.Sprintf("Unrecognized cool Msg type: %v", reflect.TypeOf(msg).Name()) - return sdk.ErrUnknownRequest(errMsg).Result() +// NewHandler returns a handler for "cool" type messages. +func NewHandler(k Keeper) sdk.Handler { + return func(ctx sdk.Context, msg sdk.Msg) sdk.Result { + switch msg := msg.(type) { + case SetTrendMsg: + return handleSetTrendMsg(ctx, k, msg) + case QuizMsg: + return handleQuizMsg(ctx, k, msg) + default: + errMsg := fmt.Sprintf("Unrecognized cool Msg type: %v", reflect.TypeOf(msg).Name()) + return sdk.ErrUnknownRequest(errMsg).Result() + } } } diff --git a/x/bank/handler.go b/x/bank/handler.go index 34f86ddc6a..8eca94a861 100644 --- a/x/bank/handler.go +++ b/x/bank/handler.go @@ -6,16 +6,18 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" ) -// Handle all "bank" type messages. -func (ck CoinKeeper) Handler(ctx sdk.Context, msg sdk.Msg) sdk.Result { - switch msg := msg.(type) { - case SendMsg: - return handleSendMsg(ctx, ck, msg) - case IssueMsg: - return handleIssueMsg(ctx, ck, msg) - default: - errMsg := "Unrecognized bank Msg type: " + reflect.TypeOf(msg).Name() - return sdk.ErrUnknownRequest(errMsg).Result() +// NewHandler returns a handler for "bank" type messages. +func NewHandler(ck CoinKeeper) sdk.Handler { + return func(ctx sdk.Context, msg sdk.Msg) sdk.Result { + switch msg := msg.(type) { + case SendMsg: + return handleSendMsg(ctx, ck, msg) + case IssueMsg: + return handleIssueMsg(ctx, ck, msg) + default: + errMsg := "Unrecognized bank Msg type: " + reflect.TypeOf(msg).Name() + return sdk.ErrUnknownRequest(errMsg).Result() + } } } @@ -23,18 +25,9 @@ func (ck CoinKeeper) Handler(ctx sdk.Context, msg sdk.Msg) sdk.Result { func handleSendMsg(ctx sdk.Context, ck CoinKeeper, msg SendMsg) sdk.Result { // NOTE: totalIn == totalOut should already have been checked - for _, in := range msg.Inputs { - _, err := ck.SubtractCoins(ctx, in.Address, in.Coins) - if err != nil { - return err.Result() - } - } - - for _, out := range msg.Outputs { - _, err := ck.AddCoins(ctx, out.Address, out.Coins) - if err != nil { - return err.Result() - } + err := ck.InputOutputCoins(ctx, msg.Inputs, msg.Outputs) + if err != nil { + return err.Result() } // TODO: add some tags so we can search it! diff --git a/x/bank/keeper.go b/x/bank/keeper.go index c1fec95b15..b52b480f6b 100644 --- a/x/bank/keeper.go +++ b/x/bank/keeper.go @@ -71,3 +71,22 @@ func (ck CoinKeeper) SendCoins(ctx sdk.Context, fromAddr sdk.Address, toAddr sdk return nil } + +// InputOutputCoins handles a list of inputs and outputs +func (ck CoinKeeper) InputOutputCoins(ctx sdk.Context, inputs []Input, outputs []Output) sdk.Error { + for _, in := range inputs { + _, err := ck.SubtractCoins(ctx, in.Address, in.Coins) + if err != nil { + return err + } + } + + for _, out := range outputs { + _, err := ck.AddCoins(ctx, out.Address, out.Coins) + if err != nil { + return err + } + } + + return nil +} diff --git a/x/bank/tx.go b/x/bank/msgs.go similarity index 100% rename from x/bank/tx.go rename to x/bank/msgs.go diff --git a/x/bank/tx_test.go b/x/bank/msgs_test.go similarity index 100% rename from x/bank/tx_test.go rename to x/bank/msgs_test.go diff --git a/x/staking/handler.go b/x/staking/handler.go index 40463cf033..b405490b16 100644 --- a/x/staking/handler.go +++ b/x/staking/handler.go @@ -6,14 +6,17 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" ) -func (k Keeper) Handler(ctx sdk.Context, msg sdk.Msg) sdk.Result { - switch msg := msg.(type) { - case BondMsg: - return handleBondMsg(ctx, k, msg) - case UnbondMsg: - return handleUnbondMsg(ctx, k, msg) - default: - return sdk.ErrUnknownRequest("No match for message type.").Result() +// NewHandler returns a handler for "bank" type messages. +func NewHandler(k Keeper) sdk.Handler { + return func(ctx sdk.Context, msg sdk.Msg) sdk.Result { + switch msg := msg.(type) { + case BondMsg: + return handleBondMsg(ctx, k, msg) + case UnbondMsg: + return handleUnbondMsg(ctx, k, msg) + default: + return sdk.ErrUnknownRequest("No match for message type.").Result() + } } }