diff --git a/docs/sdk/core/app1.md b/docs/sdk/core/app1.md index 6977d2ddc3..4dc573464a 100644 --- a/docs/sdk/core/app1.md +++ b/docs/sdk/core/app1.md @@ -421,17 +421,13 @@ Here is the complete setup for App1: ```go func NewApp1(logger log.Logger, db dbm.DB) *bapp.BaseApp { - cdc := wire.NewCodec() - + // Create the base application object. - app := bapp.NewBaseApp(app1Name, cdc, logger, db) + app := bapp.NewBaseApp(app1Name, logger, db, tx1Decoder) // Create a capability key for accessing the account store. keyAccount := sdk.NewKVStoreKey("acc") - // Determine how transactions are decoded. - app.SetTxDecoder(txDecoder) - // Register message routes. // Note the handler receives the keyAccount and thus // gets access to the account store. diff --git a/docs/sdk/core/app2.md b/docs/sdk/core/app2.md index 0158976cd6..1f9e81a318 100644 --- a/docs/sdk/core/app2.md +++ b/docs/sdk/core/app2.md @@ -169,10 +169,19 @@ type app2Tx struct { func (tx app2Tx) GetMsgs() []sdk.Msg { return []sdk.Msg{tx.Msg} } -``` -We don't need a custom TxDecoder function anymore, since we're just using the -Amino codec! +// Amino decode app2Tx. Capable of decoding both MsgSend and MsgIssue +func tx2Decoder(cdc *wire.Codec) sdk.TxDecoder { + return func(txBytes []byte) (sdk.Tx, sdk.Error) { + var tx app2Tx + err := cdc.UnmarshalBinary(txBytes, &tx) + if err != nil { + return nil, sdk.ErrTxDecode(err.Error()) + } + return tx, nil + } +} +``` ## AnteHandler @@ -249,7 +258,7 @@ func NewApp2(logger log.Logger, db dbm.DB) *bapp.BaseApp { cdc := NewCodec() // Create the base application object. - app := bapp.NewBaseApp(app2Name, cdc, logger, db) + app := bapp.NewBaseApp(app2Name, logger, db, txDecoder(cdc)) // Create a key for accessing the account store. keyAccount := sdk.NewKVStoreKey("acc") @@ -280,9 +289,8 @@ key for a second store that is *only* passed to a second handler, the `handleMsgIssue`. The first `handleMsgSend` has no access to this second store and cannot read or write to it, ensuring a strong separation of concerns. -Note also that we do not need to use `SetTxDecoder` here - now that we're using -Amino, we simply create a codec, register our types on the codec, and pass the -codec into `NewBaseApp`. The SDK takes care of the rest for us! +Note now that we're using Amino, we create a codec, register our types on the codec, and pass the +codec into our TxDecoder constructor, `tx2Decoder`. The SDK takes care of the rest for us! ## Conclusion diff --git a/docs/sdk/core/app3.md b/docs/sdk/core/app3.md index 459f48c838..66bb05521b 100644 --- a/docs/sdk/core/app3.md +++ b/docs/sdk/core/app3.md @@ -328,7 +328,7 @@ func NewApp3(logger log.Logger, db dbm.DB) *bapp.BaseApp { cdc := NewCodec() // Create the base application object. - app := bapp.NewBaseApp(app3Name, cdc, logger, db) + app := bapp.NewBaseApp(app3Name, logger, db, auth.DefaultTxDecoder(cdc)) // Create a key for accessing the account store. keyAccount := sdk.NewKVStoreKey("acc") @@ -361,6 +361,9 @@ and receives only the `bank.Keeper`. See the [x/bank API docs](https://godoc.org/github.com/cosmos/cosmos-sdk/x/bank) for more details. +We also use the default txDecoder in `x/auth`, which decodes amino-encoded +`auth.StdTx` transactions. + ## Conclusion Armed with native modules for authentication and coin transfer,