From fa31165438bb3a333e77b3a2745a3a89566120c8 Mon Sep 17 00:00:00 2001 From: Aditya Sripal Date: Thu, 12 Jul 2018 18:32:48 -0700 Subject: [PATCH 01/18] Refactor BaseApp without breaking change --- baseapp/baseapp.go | 71 ++++++++++++++++++++++-------------- baseapp/baseapp_test.go | 48 +++++++++++++++--------- cmd/gaia/app/app.go | 2 +- docs/core/examples/app1.go | 10 +---- docs/core/examples/app2.go | 15 +++++++- docs/core/examples/app3.go | 2 +- docs/core/examples/app4.go | 2 +- examples/basecoin/app/app.go | 3 +- examples/democoin/app/app.go | 2 +- x/auth/stdtx.go | 20 ++++++++++ x/mock/app.go | 2 +- 11 files changed, 117 insertions(+), 60 deletions(-) diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index b17e797774..3c96761e4b 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -4,6 +4,7 @@ import ( "fmt" "runtime/debug" "strings" + "encoding/json" "github.com/pkg/errors" @@ -15,8 +16,10 @@ import ( "github.com/cosmos/cosmos-sdk/store" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/version" - "github.com/cosmos/cosmos-sdk/wire" + + // TODO: Remove dependency on auth and wire "github.com/cosmos/cosmos-sdk/x/auth" + "github.com/cosmos/cosmos-sdk/wire" ) // Key to store the header in the DB itself. @@ -42,7 +45,7 @@ type BaseApp struct { // initialized on creation Logger log.Logger name string // application name from abci.Info - cdc *wire.Codec // Amino codec + cdc *wire.Codec // Amino codec (DEPRECATED) db dbm.DB // common DB backend cms sdk.CommitMultiStore // Main (uncached) state router Router // handle any kind of message @@ -74,6 +77,7 @@ var _ abci.Application = (*BaseApp)(nil) // Create and name new BaseApp // NOTE: The db is used to store the version number for now. // Accepts variable number of option functions, which act on the BaseApp to set configuration choices +// DEPRECATED func NewBaseApp(name string, cdc *wire.Codec, logger log.Logger, db dbm.DB, options ...func(*BaseApp)) *BaseApp { app := &BaseApp{ Logger: logger, @@ -83,7 +87,28 @@ func NewBaseApp(name string, cdc *wire.Codec, logger log.Logger, db dbm.DB, opti cms: store.NewCommitMultiStore(db), router: NewRouter(), codespacer: sdk.NewCodespacer(), - txDecoder: defaultTxDecoder(cdc), + txDecoder: auth.DefaultTxDecoder(cdc), + } + // Register the undefined & root codespaces, which should not be used by any modules + app.codespacer.RegisterOrPanic(sdk.CodespaceRoot) + for _, option := range options { + option(app) + } + return app +} + +// Create and name new BaseApp +// Does not set cdc and instead takes a user-defined txDecoder. If nil, BaseApp uses defaultTxDecoder +// TODO: Rename to NewBaseApp and remove above constructor once auth, wire dependencies removed +func NewBaseAppNoCodec(name string, logger log.Logger, db dbm.DB, txDecoder sdk.TxDecoder, options ...func(*BaseApp)) *BaseApp { + app := &BaseApp{ + Logger: logger, + name: name, + db: db, + cms: store.NewCommitMultiStore(db), + router: NewRouter(), + codespacer: sdk.NewCodespacer(), + txDecoder: txDecoder, } // Register the undefined & root codespaces, which should not be used by any modules app.codespacer.RegisterOrPanic(sdk.CodespaceRoot) @@ -121,34 +146,11 @@ func (app *BaseApp) MountStore(key sdk.StoreKey, typ sdk.StoreType) { } // Set the txDecoder function +// DEPRECATED func (app *BaseApp) SetTxDecoder(txDecoder sdk.TxDecoder) { app.txDecoder = txDecoder } -// default custom logic for transaction decoding -// TODO: remove auth and wire dependencies from baseapp -// - move this to auth.DefaultTxDecoder -// - set the default here to JSON decode like docs/examples/app1 (it will fail -// for multiple messages ;)) -// - pass a TxDecoder into NewBaseApp, instead of a codec. -func defaultTxDecoder(cdc *wire.Codec) sdk.TxDecoder { - return func(txBytes []byte) (sdk.Tx, sdk.Error) { - var tx = auth.StdTx{} - - if len(txBytes) == 0 { - return nil, sdk.ErrTxDecode("txBytes are empty") - } - - // StdTx.Msg is an interface. The concrete types - // are registered by MakeTxCodec - err := cdc.UnmarshalBinary(txBytes, &tx) - if err != nil { - return nil, sdk.ErrTxDecode("").TraceSDK(err.Error()) - } - return tx, nil - } -} - // nolint - Set functions func (app *BaseApp) SetInitChainer(initChainer sdk.InitChainer) { app.initChainer = initChainer @@ -349,7 +351,20 @@ func handleQueryApp(app *BaseApp, path []string, req abci.RequestQuery) (res abc default: result = sdk.ErrUnknownRequest(fmt.Sprintf("Unknown query: %s", path)).Result() } - value := app.cdc.MustMarshalBinary(result) + + // Encode with amino if defined, else use json + // TODO: Use JSON encoding only once app.cdc removed + var value []byte + if app.cdc != nil { + value = app.cdc.MustMarshalBinary(result) + } else { + var err error + value, err = json.Marshal(result) + if err != nil { + return sdk.ErrInternal("Encoding result failed").QueryResult() + } + } + return abci.ResponseQuery{ Code: uint32(sdk.ABCICodeOK), Value: value, diff --git a/baseapp/baseapp_test.go b/baseapp/baseapp_test.go index 00897392ec..0da76e717a 100644 --- a/baseapp/baseapp_test.go +++ b/baseapp/baseapp_test.go @@ -3,6 +3,7 @@ package baseapp import ( "bytes" "encoding/binary" + "encoding/json" "fmt" "os" "testing" @@ -30,7 +31,7 @@ func newBaseApp(name string) *BaseApp { db := dbm.NewMemDB() codec := wire.NewCodec() registerTestCodec(codec) - return NewBaseApp(name, codec, logger, db) + return NewBaseAppNoCodec(name, logger, db, testTxDecoder(codec)) } func registerTestCodec(cdc *wire.Codec) { @@ -49,8 +50,6 @@ func setupBaseApp(t *testing.T) (*BaseApp, *sdk.KVStoreKey, *sdk.KVStoreKey) { app := newBaseApp(t.Name()) require.Equal(t, t.Name(), app.Name()) - app.SetTxDecoder(testTxDecoder(app.cdc)) - // make some cap keys capKey1 := sdk.NewKVStoreKey("key1") capKey2 := sdk.NewKVStoreKey("key2") @@ -85,7 +84,7 @@ func TestLoadVersion(t *testing.T) { logger := defaultLogger() db := dbm.NewMemDB() name := t.Name() - app := NewBaseApp(name, nil, logger, db) + app := NewBaseAppNoCodec(name, logger, db, nil) // make a cap key and mount the store capKey := sdk.NewKVStoreKey("main") @@ -114,7 +113,7 @@ func TestLoadVersion(t *testing.T) { commitID2 := sdk.CommitID{2, res.Data} // reload with LoadLatestVersion - app = NewBaseApp(name, nil, logger, db) + app = NewBaseAppNoCodec(name, logger, db, nil) app.MountStoresIAVL(capKey) err = app.LoadLatestVersion(capKey) require.Nil(t, err) @@ -122,7 +121,7 @@ func TestLoadVersion(t *testing.T) { // reload with LoadVersion, see if you can commit the same block and get // the same result - app = NewBaseApp(name, nil, logger, db) + app = NewBaseAppNoCodec(name, logger, db, nil) app.MountStoresIAVL(capKey) err = app.LoadVersion(1, capKey) require.Nil(t, err) @@ -142,9 +141,7 @@ func testLoadVersionHelper(t *testing.T, app *BaseApp, expectedHeight int64, exp func TestOptionFunction(t *testing.T) { logger := defaultLogger() db := dbm.NewMemDB() - codec := wire.NewCodec() - registerTestCodec(codec) - bap := NewBaseApp("starting name", codec, logger, db, testChangeNameHelper("new name")) + bap := NewBaseAppNoCodec("starting name", logger, db, nil, testChangeNameHelper("new name")) require.Equal(t, bap.name, "new name", "BaseApp should have had name changed via option function") } @@ -216,7 +213,7 @@ func TestInitChainer(t *testing.T) { // we can reload the same app later db := dbm.NewMemDB() logger := defaultLogger() - app := NewBaseApp(name, nil, logger, db) + app := NewBaseAppNoCodec(name, logger, db, nil) capKey := sdk.NewKVStoreKey("main") capKey2 := sdk.NewKVStoreKey("key2") app.MountStoresIAVL(capKey, capKey2) @@ -257,7 +254,7 @@ func TestInitChainer(t *testing.T) { require.Equal(t, value, res.Value) // reload app - app = NewBaseApp(name, nil, logger, db) + app = NewBaseAppNoCodec(name, logger, db, nil) app.MountStoresIAVL(capKey, capKey2) err = app.LoadLatestVersion(capKey) // needed to make stores non-nil require.Nil(t, err) @@ -444,9 +441,13 @@ func TestCheckTx(t *testing.T) { app.InitChain(abci.RequestInitChain{}) + // Create same codec used in txDecoder + codec := wire.NewCodec() + registerTestCodec(codec) + for i := int64(0); i < nTxs; i++ { tx := newTxCounter(i, 0) - txBytes, err := app.cdc.MarshalBinary(tx) + txBytes, err := codec.MarshalBinary(tx) require.NoError(t, err) r := app.CheckTx(txBytes) assert.True(t, r.IsOK(), fmt.Sprintf("%v", r)) @@ -481,6 +482,10 @@ func TestDeliverTx(t *testing.T) { deliverKey := []byte("deliver-key") app.Router().AddRoute(typeMsgCounter, handlerMsgCounter(t, capKey, deliverKey)) + // Create same codec used in txDecoder + codec := wire.NewCodec() + registerTestCodec(codec) + nBlocks := 3 txPerHeight := 5 for blockN := 0; blockN < nBlocks; blockN++ { @@ -488,7 +493,7 @@ func TestDeliverTx(t *testing.T) { for i := 0; i < txPerHeight; i++ { counter := int64(blockN*txPerHeight + i) tx := newTxCounter(counter, counter) - txBytes, err := app.cdc.MarshalBinary(tx) + txBytes, err := codec.MarshalBinary(tx) require.NoError(t, err) res := app.DeliverTx(txBytes) require.True(t, res.IsOK(), fmt.Sprintf("%v", res)) @@ -518,12 +523,16 @@ func TestMultiMsgDeliverTx(t *testing.T) { app.Router().AddRoute(typeMsgCounter, handlerMsgCounter(t, capKey, deliverKey)) app.Router().AddRoute(typeMsgCounter2, handlerMsgCounter(t, capKey, deliverKey2)) + // Create same codec used in txDecoder + codec := wire.NewCodec() + registerTestCodec(codec) + // run a multi-msg tx // with all msgs the same type { app.BeginBlock(abci.RequestBeginBlock{}) tx := newTxCounter(0, 0, 1, 2) - txBytes, err := app.cdc.MarshalBinary(tx) + txBytes, err := codec.MarshalBinary(tx) require.NoError(t, err) res := app.DeliverTx(txBytes) require.True(t, res.IsOK(), fmt.Sprintf("%v", res)) @@ -544,7 +553,7 @@ func TestMultiMsgDeliverTx(t *testing.T) { tx := newTxCounter(1, 3) tx.Msgs = append(tx.Msgs, msgCounter2{0}) tx.Msgs = append(tx.Msgs, msgCounter2{1}) - txBytes, err := app.cdc.MarshalBinary(tx) + txBytes, err := codec.MarshalBinary(tx) require.NoError(t, err) res := app.DeliverTx(txBytes) require.True(t, res.IsOK(), fmt.Sprintf("%v", res)) @@ -589,6 +598,10 @@ func TestSimulateTx(t *testing.T) { }) app.InitChain(abci.RequestInitChain{}) + // Create same codec used in txDecoder + codec := wire.NewCodec() + registerTestCodec(codec) + nBlocks := 3 for blockN := 0; blockN < nBlocks; blockN++ { count := int64(blockN + 1) @@ -607,7 +620,7 @@ func TestSimulateTx(t *testing.T) { require.Equal(t, int64(gasConsumed), result.GasUsed) // simulate by calling Query with encoded tx - txBytes, err := app.cdc.MarshalBinary(tx) + txBytes, err := codec.MarshalBinary(tx) require.Nil(t, err) query := abci.RequestQuery{ Path: "/app/simulate", @@ -617,7 +630,8 @@ func TestSimulateTx(t *testing.T) { require.True(t, queryResult.IsOK(), queryResult.Log) var res sdk.Result - app.cdc.MustUnmarshalBinary(queryResult.Value, &res) + err = json.Unmarshal(queryResult.Value, &res) + require.Nil(t, err, "Result unmarshalling failed") require.True(t, res.IsOK(), res.Log) require.Equal(t, gasConsumed, res.GasUsed, res.Log) app.EndBlock(abci.RequestEndBlock{}) diff --git a/cmd/gaia/app/app.go b/cmd/gaia/app/app.go index 40e8686694..dd85fd7637 100644 --- a/cmd/gaia/app/app.go +++ b/cmd/gaia/app/app.go @@ -60,7 +60,7 @@ func NewGaiaApp(logger log.Logger, db dbm.DB) *GaiaApp { // create your application object var app = &GaiaApp{ - BaseApp: bam.NewBaseApp(appName, cdc, logger, db), + BaseApp: bam.NewBaseAppNoCodec(appName, logger, db, auth.DefaultTxDecoder(cdc)), cdc: cdc, keyMain: sdk.NewKVStoreKey("main"), keyAccount: sdk.NewKVStoreKey("acc"), diff --git a/docs/core/examples/app1.go b/docs/core/examples/app1.go index b208f75cf7..7be0d43e24 100644 --- a/docs/core/examples/app1.go +++ b/docs/core/examples/app1.go @@ -9,7 +9,6 @@ import ( bapp "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/wire" ) const ( @@ -18,17 +17,12 @@ const ( 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.NewBaseAppNoCodec(app1Name, logger, db, tx1Decoder) // Create a key for accessing the account store. keyAccount := sdk.NewKVStoreKey("acc") - // Determine how transactions are decoded. - app.SetTxDecoder(txDecoder) - // Register message routes. // Note the handler gets access to the account store. app.Router(). @@ -225,7 +219,7 @@ func (tx app1Tx) GetMsgs() []sdk.Msg { } // JSON decode MsgSend. -func txDecoder(txBytes []byte) (sdk.Tx, sdk.Error) { +func tx1Decoder(txBytes []byte) (sdk.Tx, sdk.Error) { var tx app1Tx err := json.Unmarshal(txBytes, &tx) if err != nil { diff --git a/docs/core/examples/app2.go b/docs/core/examples/app2.go index 4c20c17c3a..d5d6c3d518 100644 --- a/docs/core/examples/app2.go +++ b/docs/core/examples/app2.go @@ -37,7 +37,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.NewBaseAppNoCodec(app2Name, logger, db, tx2Decoder(cdc)) // Create a key for accessing the account store. keyAccount := sdk.NewKVStoreKey("acc") @@ -191,6 +191,19 @@ func (tx app2Tx) GetSignatures() []auth.StdSignature { return tx.Signatures } +// 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 + } +} + + //------------------------------------------------------------------ // Simple anteHandler that ensures msg signers have signed. diff --git a/docs/core/examples/app3.go b/docs/core/examples/app3.go index 853ad687e1..5f9fe081c3 100644 --- a/docs/core/examples/app3.go +++ b/docs/core/examples/app3.go @@ -21,7 +21,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.NewBaseAppNoCodec(app3Name, logger, db, auth.DefaultTxDecoder(cdc)) // Create a key for accessing the account store. keyAccount := sdk.NewKVStoreKey("acc") diff --git a/docs/core/examples/app4.go b/docs/core/examples/app4.go index a8ef37cee5..b6f9af2db7 100644 --- a/docs/core/examples/app4.go +++ b/docs/core/examples/app4.go @@ -22,7 +22,7 @@ func NewApp4(logger log.Logger, db dbm.DB) *bapp.BaseApp { cdc := NewCodec() // Create the base application object. - app := bapp.NewBaseApp(app3Name, cdc, logger, db) + app := bapp.NewBaseAppNoCodec(app4Name, logger, db, auth.DefaultTxDecoder(cdc)) // Create a key for accessing the account store. keyAccount := sdk.NewKVStoreKey("acc") diff --git a/examples/basecoin/app/app.go b/examples/basecoin/app/app.go index 7b2c7af3a3..a65e62592f 100644 --- a/examples/basecoin/app/app.go +++ b/examples/basecoin/app/app.go @@ -53,7 +53,7 @@ func NewBasecoinApp(logger log.Logger, db dbm.DB) *BasecoinApp { // create your application type var app = &BasecoinApp{ cdc: cdc, - BaseApp: bam.NewBaseApp(appName, cdc, logger, db), + BaseApp: bam.NewBaseAppNoCodec(appName, logger, db, auth.DefaultTxDecoder(cdc)), keyMain: sdk.NewKVStoreKey("main"), keyAccount: sdk.NewKVStoreKey("acc"), keyIBC: sdk.NewKVStoreKey("ibc"), @@ -78,6 +78,7 @@ func NewBasecoinApp(logger log.Logger, db dbm.DB) *BasecoinApp { app.SetBeginBlocker(app.BeginBlocker) app.SetEndBlocker(app.EndBlocker) app.SetAnteHandler(auth.NewAnteHandler(app.accountMapper, app.feeCollectionKeeper)) + app.SetTxDecoder(auth.DefaultTxDecoder(cdc)) // mount the multistore and load the latest state app.MountStoresIAVL(app.keyMain, app.keyAccount, app.keyIBC) diff --git a/examples/democoin/app/app.go b/examples/democoin/app/app.go index 51d10002a7..7038f8905f 100644 --- a/examples/democoin/app/app.go +++ b/examples/democoin/app/app.go @@ -58,7 +58,7 @@ func NewDemocoinApp(logger log.Logger, db dbm.DB) *DemocoinApp { // Create your application object. var app = &DemocoinApp{ - BaseApp: bam.NewBaseApp(appName, cdc, logger, db), + BaseApp: bam.NewBaseAppNoCodec(appName, logger, db, auth.DefaultTxDecoder(cdc)), cdc: cdc, capKeyMainStore: sdk.NewKVStoreKey("main"), capKeyAccountStore: sdk.NewKVStoreKey("acc"), diff --git a/x/auth/stdtx.go b/x/auth/stdtx.go index 316ff5e95a..3a37dce595 100644 --- a/x/auth/stdtx.go +++ b/x/auth/stdtx.go @@ -5,6 +5,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/tendermint/tendermint/crypto" + "github.com/cosmos/cosmos-sdk/wire" ) var _ sdk.Tx = (*StdTx)(nil) @@ -162,3 +163,22 @@ type StdSignature struct { AccountNumber int64 `json:"account_number"` Sequence int64 `json:"sequence"` } + +// default custom logic for transaction decoding +func DefaultTxDecoder(cdc *wire.Codec) sdk.TxDecoder { + return func(txBytes []byte) (sdk.Tx, sdk.Error) { + var tx = StdTx{} + + if len(txBytes) == 0 { + return nil, sdk.ErrTxDecode("txBytes are empty") + } + + // StdTx.Msg is an interface. The concrete types + // are registered by MakeTxCodec + err := cdc.UnmarshalBinary(txBytes, &tx) + if err != nil { + return nil, sdk.ErrTxDecode("").TraceSDK(err.Error()) + } + return tx, nil + } +} diff --git a/x/mock/app.go b/x/mock/app.go index 27f3b9d46e..9d43e649df 100644 --- a/x/mock/app.go +++ b/x/mock/app.go @@ -47,7 +47,7 @@ func NewApp() *App { // Create your application object app := &App{ - BaseApp: bam.NewBaseApp("mock", cdc, logger, db), + BaseApp: bam.NewBaseAppNoCodec("mock", logger, db, auth.DefaultTxDecoder(cdc)), Cdc: cdc, KeyMain: sdk.NewKVStoreKey("main"), KeyAccount: sdk.NewKVStoreKey("acc"), From ade7186ffbeaa30ba2d6f6d0a543d02896b890f6 Mon Sep 17 00:00:00 2001 From: Aditya Sripal Date: Thu, 12 Jul 2018 19:06:05 -0700 Subject: [PATCH 02/18] minor cleanup --- cmd/gaia/app/app.go | 3 +++ x/auth/stdtx.go | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/cmd/gaia/app/app.go b/cmd/gaia/app/app.go index 77bfb9d149..ebd06f3308 100644 --- a/cmd/gaia/app/app.go +++ b/cmd/gaia/app/app.go @@ -75,6 +75,9 @@ func NewGaiaApp(logger log.Logger, db dbm.DB, traceStore io.Writer, baseAppOptio keyFeeCollection: sdk.NewKVStoreKey("fee"), } + // Set app.cdc so that Query has same result encoding + app.cdc = cdc + // define the accountMapper app.accountMapper = auth.NewAccountMapper( app.cdc, diff --git a/x/auth/stdtx.go b/x/auth/stdtx.go index 3a37dce595..6425ecf76d 100644 --- a/x/auth/stdtx.go +++ b/x/auth/stdtx.go @@ -164,7 +164,7 @@ type StdSignature struct { Sequence int64 `json:"sequence"` } -// default custom logic for transaction decoding +// logic for standard transaction decoding func DefaultTxDecoder(cdc *wire.Codec) sdk.TxDecoder { return func(txBytes []byte) (sdk.Tx, sdk.Error) { var tx = StdTx{} From 47517273516982474413d0d5565f5feb6af3cfc7 Mon Sep 17 00:00:00 2001 From: Aditya Sripal Date: Thu, 12 Jul 2018 19:06:54 -0700 Subject: [PATCH 03/18] fmt --- baseapp/baseapp.go | 6 +++--- docs/core/examples/app2.go | 1 - x/auth/stdtx.go | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index cb21775b65..b349168213 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -1,11 +1,11 @@ package baseapp import ( + "encoding/json" "fmt" "io" "runtime/debug" "strings" - "encoding/json" "github.com/pkg/errors" @@ -20,8 +20,8 @@ import ( "github.com/cosmos/cosmos-sdk/version" // TODO: Remove dependency on auth and wire - "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/wire" + "github.com/cosmos/cosmos-sdk/x/auth" ) // Key to store the header in the DB itself. @@ -366,7 +366,7 @@ func handleQueryApp(app *BaseApp, path []string, req abci.RequestQuery) (res abc default: result = sdk.ErrUnknownRequest(fmt.Sprintf("Unknown query: %s", path)).Result() } - + // Encode with amino if defined, else use json // TODO: Use JSON encoding only once app.cdc removed var value []byte diff --git a/docs/core/examples/app2.go b/docs/core/examples/app2.go index d5d6c3d518..9f95a71eca 100644 --- a/docs/core/examples/app2.go +++ b/docs/core/examples/app2.go @@ -203,7 +203,6 @@ func tx2Decoder(cdc *wire.Codec) sdk.TxDecoder { } } - //------------------------------------------------------------------ // Simple anteHandler that ensures msg signers have signed. diff --git a/x/auth/stdtx.go b/x/auth/stdtx.go index 6425ecf76d..bebd246234 100644 --- a/x/auth/stdtx.go +++ b/x/auth/stdtx.go @@ -4,8 +4,8 @@ import ( "encoding/json" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/tendermint/crypto" "github.com/cosmos/cosmos-sdk/wire" + "github.com/tendermint/tendermint/crypto" ) var _ sdk.Tx = (*StdTx)(nil) From cb9c7fecee1dea04ba6fbf68bd9a8f2add526326 Mon Sep 17 00:00:00 2001 From: Aditya Sripal Date: Thu, 12 Jul 2018 19:12:04 -0700 Subject: [PATCH 04/18] remove false promise --- cmd/gaia/app/app.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/cmd/gaia/app/app.go b/cmd/gaia/app/app.go index ebd06f3308..77bfb9d149 100644 --- a/cmd/gaia/app/app.go +++ b/cmd/gaia/app/app.go @@ -75,9 +75,6 @@ func NewGaiaApp(logger log.Logger, db dbm.DB, traceStore io.Writer, baseAppOptio keyFeeCollection: sdk.NewKVStoreKey("fee"), } - // Set app.cdc so that Query has same result encoding - app.cdc = cdc - // define the accountMapper app.accountMapper = auth.NewAccountMapper( app.cdc, From f6d5c850498c0d6b0c65c20d2176304fbeca68b8 Mon Sep 17 00:00:00 2001 From: Aditya Sripal Date: Thu, 12 Jul 2018 19:38:22 -0700 Subject: [PATCH 05/18] Added recover to standard antehandler --- x/auth/ante.go | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/x/auth/ante.go b/x/auth/ante.go index 9652b37de2..73c3df6628 100644 --- a/x/auth/ante.go +++ b/x/auth/ante.go @@ -21,7 +21,7 @@ func NewAnteHandler(am AccountMapper, fck FeeCollectionKeeper) sdk.AnteHandler { return func( ctx sdk.Context, tx sdk.Tx, - ) (_ sdk.Context, _ sdk.Result, abort bool) { + ) (_ sdk.Context, res sdk.Result, abort bool) { // This AnteHandler requires Txs to be StdTxs stdTx, ok := tx.(StdTx) @@ -29,6 +29,24 @@ func NewAnteHandler(am AccountMapper, fck FeeCollectionKeeper) sdk.AnteHandler { return ctx, sdk.ErrInternal("tx must be StdTx").Result(), true } + // AnteHandlers must have their own defer/recover in order + // for the BaseApp to know how much gas was used! + // This is because the GasMeter is created in the AnteHandler, + // but if it panics the context won't be set properly in runTx's recover ... + defer func() { + if r := recover(); r != nil { + switch rType := r.(type) { + case sdk.ErrorOutOfGas: + log := fmt.Sprintf("out of gas in location: %v", rType.Descriptor) + res = sdk.ErrOutOfGas(log).Result() + res.GasWanted = stdTx.Fee.Gas + res.GasUsed = ctx.GasMeter().GasConsumed() + default: + panic(r) + } + } + }() + err := validateBasic(stdTx) if err != nil { return ctx, err.Result(), true @@ -90,7 +108,7 @@ func NewAnteHandler(am AccountMapper, fck FeeCollectionKeeper) sdk.AnteHandler { // TODO: tx tags (?) - return ctx, sdk.Result{}, false // continue... + return ctx, sdk.Result{GasWanted: stdTx.Fee.Gas}, false // continue... } } From aa3a64d2895895a07c535bd4863eb082c0b6c6ae Mon Sep 17 00:00:00 2001 From: Aditya Sripal Date: Fri, 13 Jul 2018 10:53:12 -0700 Subject: [PATCH 06/18] Test recover in ante --- baseapp/baseapp.go | 2 +- examples/basecoin/app/app.go | 1 - x/auth/ante.go | 35 ++++++++++++++++++----------------- x/auth/ante_test.go | 23 +++++++++++------------ 4 files changed, 30 insertions(+), 31 deletions(-) diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index b349168213..78a14414c9 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -105,7 +105,7 @@ func NewBaseApp(name string, cdc *wire.Codec, logger log.Logger, db dbm.DB, opti } // Create and name new BaseApp -// Does not set cdc and instead takes a user-defined txDecoder. If nil, BaseApp uses defaultTxDecoder +// Does not set cdc and instead takes a user-defined txDecoder. // TODO: Rename to NewBaseApp and remove above constructor once auth, wire dependencies removed func NewBaseAppNoCodec(name string, logger log.Logger, db dbm.DB, txDecoder sdk.TxDecoder, options ...func(*BaseApp)) *BaseApp { app := &BaseApp{ diff --git a/examples/basecoin/app/app.go b/examples/basecoin/app/app.go index 349952e70a..a43fea0838 100644 --- a/examples/basecoin/app/app.go +++ b/examples/basecoin/app/app.go @@ -78,7 +78,6 @@ func NewBasecoinApp(logger log.Logger, db dbm.DB, baseAppOptions ...func(*bam.Ba app.SetBeginBlocker(app.BeginBlocker) app.SetEndBlocker(app.EndBlocker) app.SetAnteHandler(auth.NewAnteHandler(app.accountMapper, app.feeCollectionKeeper)) - app.SetTxDecoder(auth.DefaultTxDecoder(cdc)) // mount the multistore and load the latest state app.MountStoresIAVL(app.keyMain, app.keyAccount, app.keyIBC) diff --git a/x/auth/ante.go b/x/auth/ante.go index 73c3df6628..9f14193962 100644 --- a/x/auth/ante.go +++ b/x/auth/ante.go @@ -21,7 +21,7 @@ func NewAnteHandler(am AccountMapper, fck FeeCollectionKeeper) sdk.AnteHandler { return func( ctx sdk.Context, tx sdk.Tx, - ) (_ sdk.Context, res sdk.Result, abort bool) { + ) (newCtx sdk.Context, res sdk.Result, abort bool) { // This AnteHandler requires Txs to be StdTxs stdTx, ok := tx.(StdTx) @@ -29,6 +29,9 @@ func NewAnteHandler(am AccountMapper, fck FeeCollectionKeeper) sdk.AnteHandler { return ctx, sdk.ErrInternal("tx must be StdTx").Result(), true } + // set the gas meter + newCtx = ctx.WithGasMeter(sdk.NewGasMeter(stdTx.Fee.Gas)) + // AnteHandlers must have their own defer/recover in order // for the BaseApp to know how much gas was used! // This is because the GasMeter is created in the AnteHandler, @@ -39,8 +42,9 @@ func NewAnteHandler(am AccountMapper, fck FeeCollectionKeeper) sdk.AnteHandler { case sdk.ErrorOutOfGas: log := fmt.Sprintf("out of gas in location: %v", rType.Descriptor) res = sdk.ErrOutOfGas(log).Result() - res.GasWanted = stdTx.Fee.Gas - res.GasUsed = ctx.GasMeter().GasConsumed() + res.GasWanted = stdTx.Fee.Gas + res.GasUsed = newCtx.GasMeter().GasConsumed() + abort = true default: panic(r) } @@ -49,18 +53,15 @@ func NewAnteHandler(am AccountMapper, fck FeeCollectionKeeper) sdk.AnteHandler { err := validateBasic(stdTx) if err != nil { - return ctx, err.Result(), true + return newCtx, err.Result(), true } sigs := stdTx.GetSignatures() signerAddrs := stdTx.GetSigners() msgs := tx.GetMsgs() - // set the gas meter - ctx = ctx.WithGasMeter(sdk.NewGasMeter(stdTx.Fee.Gas)) - // charge gas for the memo - ctx.GasMeter().ConsumeGas(memoCostPerByte*sdk.Gas(len(stdTx.GetMemo())), "memo") + newCtx.GasMeter().ConsumeGas(memoCostPerByte*sdk.Gas(len(stdTx.GetMemo())), "memo") // Get the sign bytes (requires all account & sequence numbers and the fee) sequences := make([]int64, len(sigs)) @@ -77,38 +78,38 @@ func NewAnteHandler(am AccountMapper, fck FeeCollectionKeeper) sdk.AnteHandler { signerAddr, sig := signerAddrs[i], sigs[i] // check signature, return account with incremented nonce - signBytes := StdSignBytes(ctx.ChainID(), accNums[i], sequences[i], fee, msgs, stdTx.GetMemo()) + signBytes := StdSignBytes(newCtx.ChainID(), accNums[i], sequences[i], fee, msgs, stdTx.GetMemo()) signerAcc, res := processSig( - ctx, am, + newCtx, am, signerAddr, sig, signBytes, ) if !res.IsOK() { - return ctx, res, true + return newCtx, res, true } // first sig pays the fees // TODO: Add min fees // Can this function be moved outside of the loop? if i == 0 && !fee.Amount.IsZero() { - ctx.GasMeter().ConsumeGas(deductFeesCost, "deductFees") + newCtx.GasMeter().ConsumeGas(deductFeesCost, "deductFees") signerAcc, res = deductFees(signerAcc, fee) if !res.IsOK() { - return ctx, res, true + return newCtx, res, true } - fck.addCollectedFees(ctx, fee.Amount) + fck.addCollectedFees(newCtx, fee.Amount) } // Save the account. - am.SetAccount(ctx, signerAcc) + am.SetAccount(newCtx, signerAcc) signerAccs[i] = signerAcc } // cache the signer accounts in the context - ctx = WithSigners(ctx, signerAccs) + newCtx = WithSigners(newCtx, signerAccs) // TODO: tx tags (?) - return ctx, sdk.Result{GasWanted: stdTx.Fee.Gas}, false // continue... + return newCtx, sdk.Result{GasWanted: stdTx.Fee.Gas}, false // continue... } } diff --git a/x/auth/ante_test.go b/x/auth/ante_test.go index c30013d32f..907de17492 100644 --- a/x/auth/ante_test.go +++ b/x/auth/ante_test.go @@ -47,21 +47,20 @@ func checkValidTx(t *testing.T, anteHandler sdk.AnteHandler, ctx sdk.Context, tx // run the tx through the anteHandler and ensure it fails with the given code func checkInvalidTx(t *testing.T, anteHandler sdk.AnteHandler, ctx sdk.Context, tx sdk.Tx, code sdk.CodeType) { - defer func() { - if r := recover(); r != nil { - switch r.(type) { - case sdk.ErrorOutOfGas: - require.Equal(t, sdk.ToABCICode(sdk.CodespaceRoot, code), sdk.ToABCICode(sdk.CodespaceRoot, sdk.CodeOutOfGas), - fmt.Sprintf("Expected ErrorOutOfGas, got %v", r)) - default: - panic(r) - } - } - }() - _, result, abort := anteHandler(ctx, tx) + newCtx, result, abort := anteHandler(ctx, tx) require.True(t, abort) require.Equal(t, sdk.ToABCICode(sdk.CodespaceRoot, code), result.Code, fmt.Sprintf("Expected %v, got %v", sdk.ToABCICode(sdk.CodespaceRoot, code), result)) + + if code == sdk.CodeOutOfGas { + stdTx, ok := tx.(StdTx) + require.True(t, ok, "tx must be in form auth.StdTx") + // GasWanted set correctly + require.Equal(t, stdTx.Fee.Gas, result.GasWanted, "Gas wanted not set correctly") + require.True(t, result.GasUsed > result.GasWanted, "GasUsed not greated than GasWanted") + // Check that context is set correctly + require.Equal(t, result.GasUsed, newCtx.GasMeter().GasConsumed(), "Context not updated correctly") + } } func newTestTx(ctx sdk.Context, msgs []sdk.Msg, privs []crypto.PrivKey, accNums []int64, seqs []int64, fee StdFee) sdk.Tx { From ddd4deda7d79e5ed49f1393b5a5c967e25deec9e Mon Sep 17 00:00:00 2001 From: Aditya Sripal Date: Fri, 13 Jul 2018 11:12:29 -0700 Subject: [PATCH 07/18] ignore linter --- x/auth/ante.go | 1 + 1 file changed, 1 insertion(+) diff --git a/x/auth/ante.go b/x/auth/ante.go index 9f14193962..60aea8fc78 100644 --- a/x/auth/ante.go +++ b/x/auth/ante.go @@ -17,6 +17,7 @@ const ( // NewAnteHandler returns an AnteHandler that checks // and increments sequence numbers, checks signatures & account numbers, // and deducts fees from the first signer. +// nolint: gocyclo func NewAnteHandler(am AccountMapper, fck FeeCollectionKeeper) sdk.AnteHandler { return func( From 198aef29245e83603248f098e76a3907a2d6e2be Mon Sep 17 00:00:00 2001 From: Aditya Sripal Date: Tue, 17 Jul 2018 14:16:33 -0700 Subject: [PATCH 08/18] revert changes to gaia to ensure non-breaking --- cmd/gaia/app/app.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/gaia/app/app.go b/cmd/gaia/app/app.go index e5b7bfe39c..7b0f85e306 100644 --- a/cmd/gaia/app/app.go +++ b/cmd/gaia/app/app.go @@ -63,7 +63,7 @@ type GaiaApp struct { func NewGaiaApp(logger log.Logger, db dbm.DB, traceStore io.Writer, baseAppOptions ...func(*bam.BaseApp)) *GaiaApp { cdc := MakeCodec() - bApp := bam.NewBaseAppNoCodec(appName, logger, db, auth.DefaultTxDecoder(cdc), baseAppOptions...) + bApp := bam.NewBaseApp(appName, cdc, logger, db, baseAppOptions...) bApp.SetCommitMultiStoreTracer(traceStore) var app = &GaiaApp{ From 81f3e794feab2565c771b765cd75438ff44ae09a Mon Sep 17 00:00:00 2001 From: Aditya Sripal Date: Wed, 18 Jul 2018 16:24:16 -0700 Subject: [PATCH 09/18] make breaking changes --- baseapp/baseapp.go | 54 +++++----------------------------- baseapp/baseapp_test.go | 14 ++++----- cmd/gaia/app/app.go | 2 +- cmd/gaia/cmd/gaiadebug/hack.go | 2 +- docs/sdk/core/examples/app1.go | 2 +- docs/sdk/core/examples/app2.go | 2 +- docs/sdk/core/examples/app3.go | 2 +- docs/sdk/core/examples/app4.go | 2 +- examples/basecoin/app/app.go | 2 +- examples/democoin/app/app.go | 2 +- examples/kvstore/main.go | 5 +--- server/mock/app.go | 5 +--- x/mock/app.go | 2 +- 13 files changed, 25 insertions(+), 71 deletions(-) diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index 78a14414c9..de0dfbeded 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -18,10 +18,6 @@ import ( "github.com/cosmos/cosmos-sdk/store" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/version" - - // TODO: Remove dependency on auth and wire - "github.com/cosmos/cosmos-sdk/wire" - "github.com/cosmos/cosmos-sdk/x/auth" ) // Key to store the header in the DB itself. @@ -47,14 +43,12 @@ type BaseApp struct { // initialized on creation Logger log.Logger name string // application name from abci.Info - cdc *wire.Codec // Amino codec (DEPRECATED) db dbm.DB // common DB backend cms sdk.CommitMultiStore // Main (uncached) state router Router // handle any kind of message codespacer *sdk.Codespacer // handle module codespacing - - // must be set txDecoder sdk.TxDecoder // unmarshal []byte into sdk.Tx + anteHandler sdk.AnteHandler // ante handler for fee and auth // may be nil @@ -83,31 +77,10 @@ var _ abci.Application = (*BaseApp)(nil) // (e.g. functional options). // // NOTE: The db is used to store the version number for now. +// Accepts a user-defined txDecoder // Accepts variable number of option functions, which act on the BaseApp to set configuration choices -// DEPRECATED -func NewBaseApp(name string, cdc *wire.Codec, logger log.Logger, db dbm.DB, options ...func(*BaseApp)) *BaseApp { - app := &BaseApp{ - Logger: logger, - name: name, - cdc: cdc, - db: db, - cms: store.NewCommitMultiStore(db), - router: NewRouter(), - codespacer: sdk.NewCodespacer(), - txDecoder: auth.DefaultTxDecoder(cdc), - } - // Register the undefined & root codespaces, which should not be used by any modules - app.codespacer.RegisterOrPanic(sdk.CodespaceRoot) - for _, option := range options { - option(app) - } - return app -} - -// Create and name new BaseApp -// Does not set cdc and instead takes a user-defined txDecoder. // TODO: Rename to NewBaseApp and remove above constructor once auth, wire dependencies removed -func NewBaseAppNoCodec(name string, logger log.Logger, db dbm.DB, txDecoder sdk.TxDecoder, options ...func(*BaseApp)) *BaseApp { +func NewBaseApp(name string, logger log.Logger, db dbm.DB, txDecoder sdk.TxDecoder, options ...func(*BaseApp)) *BaseApp { app := &BaseApp{ Logger: logger, name: name, @@ -160,12 +133,6 @@ func (app *BaseApp) MountStore(key sdk.StoreKey, typ sdk.StoreType) { app.cms.MountStoreWithDB(key, typ, nil) } -// Set the txDecoder function -// DEPRECATED -func (app *BaseApp) SetTxDecoder(txDecoder sdk.TxDecoder) { - app.txDecoder = txDecoder -} - // nolint - Set functions func (app *BaseApp) SetInitChainer(initChainer sdk.InitChainer) { app.initChainer = initChainer @@ -367,17 +334,10 @@ func handleQueryApp(app *BaseApp, path []string, req abci.RequestQuery) (res abc result = sdk.ErrUnknownRequest(fmt.Sprintf("Unknown query: %s", path)).Result() } - // Encode with amino if defined, else use json - // TODO: Use JSON encoding only once app.cdc removed - var value []byte - if app.cdc != nil { - value = app.cdc.MustMarshalBinary(result) - } else { - var err error - value, err = json.Marshal(result) - if err != nil { - return sdk.ErrInternal("Encoding result failed").QueryResult() - } + // Encode with json + value, err := json.Marshal(result) + if err != nil { + return sdk.ErrInternal("Encoding result failed").QueryResult() } return abci.ResponseQuery{ diff --git a/baseapp/baseapp_test.go b/baseapp/baseapp_test.go index 0da76e717a..08cf59b549 100644 --- a/baseapp/baseapp_test.go +++ b/baseapp/baseapp_test.go @@ -31,7 +31,7 @@ func newBaseApp(name string) *BaseApp { db := dbm.NewMemDB() codec := wire.NewCodec() registerTestCodec(codec) - return NewBaseAppNoCodec(name, logger, db, testTxDecoder(codec)) + return NewBaseApp(name, logger, db, testTxDecoder(codec)) } func registerTestCodec(cdc *wire.Codec) { @@ -84,7 +84,7 @@ func TestLoadVersion(t *testing.T) { logger := defaultLogger() db := dbm.NewMemDB() name := t.Name() - app := NewBaseAppNoCodec(name, logger, db, nil) + app := NewBaseApp(name, logger, db, nil) // make a cap key and mount the store capKey := sdk.NewKVStoreKey("main") @@ -113,7 +113,7 @@ func TestLoadVersion(t *testing.T) { commitID2 := sdk.CommitID{2, res.Data} // reload with LoadLatestVersion - app = NewBaseAppNoCodec(name, logger, db, nil) + app = NewBaseApp(name, logger, db, nil) app.MountStoresIAVL(capKey) err = app.LoadLatestVersion(capKey) require.Nil(t, err) @@ -121,7 +121,7 @@ func TestLoadVersion(t *testing.T) { // reload with LoadVersion, see if you can commit the same block and get // the same result - app = NewBaseAppNoCodec(name, logger, db, nil) + app = NewBaseApp(name, logger, db, nil) app.MountStoresIAVL(capKey) err = app.LoadVersion(1, capKey) require.Nil(t, err) @@ -141,7 +141,7 @@ func testLoadVersionHelper(t *testing.T, app *BaseApp, expectedHeight int64, exp func TestOptionFunction(t *testing.T) { logger := defaultLogger() db := dbm.NewMemDB() - bap := NewBaseAppNoCodec("starting name", logger, db, nil, testChangeNameHelper("new name")) + bap := NewBaseApp("starting name", logger, db, nil, testChangeNameHelper("new name")) require.Equal(t, bap.name, "new name", "BaseApp should have had name changed via option function") } @@ -213,7 +213,7 @@ func TestInitChainer(t *testing.T) { // we can reload the same app later db := dbm.NewMemDB() logger := defaultLogger() - app := NewBaseAppNoCodec(name, logger, db, nil) + app := NewBaseApp(name, logger, db, nil) capKey := sdk.NewKVStoreKey("main") capKey2 := sdk.NewKVStoreKey("key2") app.MountStoresIAVL(capKey, capKey2) @@ -254,7 +254,7 @@ func TestInitChainer(t *testing.T) { require.Equal(t, value, res.Value) // reload app - app = NewBaseAppNoCodec(name, logger, db, nil) + app = NewBaseApp(name, logger, db, nil) app.MountStoresIAVL(capKey, capKey2) err = app.LoadLatestVersion(capKey) // needed to make stores non-nil require.Nil(t, err) diff --git a/cmd/gaia/app/app.go b/cmd/gaia/app/app.go index 7b0f85e306..211278e833 100644 --- a/cmd/gaia/app/app.go +++ b/cmd/gaia/app/app.go @@ -63,7 +63,7 @@ type GaiaApp struct { func NewGaiaApp(logger log.Logger, db dbm.DB, traceStore io.Writer, baseAppOptions ...func(*bam.BaseApp)) *GaiaApp { cdc := MakeCodec() - bApp := bam.NewBaseApp(appName, cdc, logger, db, baseAppOptions...) + bApp := bam.NewBaseApp(appName, logger, db, auth.DefaultTxDecoder(cdc), baseAppOptions...) bApp.SetCommitMultiStoreTracer(traceStore) var app = &GaiaApp{ diff --git a/cmd/gaia/cmd/gaiadebug/hack.go b/cmd/gaia/cmd/gaiadebug/hack.go index 11d2dfa730..7803c4702a 100644 --- a/cmd/gaia/cmd/gaiadebug/hack.go +++ b/cmd/gaia/cmd/gaiadebug/hack.go @@ -149,7 +149,7 @@ type GaiaApp struct { func NewGaiaApp(logger log.Logger, db dbm.DB, baseAppOptions ...func(*bam.BaseApp)) *GaiaApp { cdc := MakeCodec() - bApp := bam.NewBaseApp(appName, cdc, logger, db, baseAppOptions...) + bApp := bam.NewBaseApp(appName, logger, db, auth.DefaultTxDecoder(cdc), baseAppOptions...) bApp.SetCommitMultiStoreTracer(os.Stdout) // create your application object diff --git a/docs/sdk/core/examples/app1.go b/docs/sdk/core/examples/app1.go index 7be0d43e24..ba33c61201 100644 --- a/docs/sdk/core/examples/app1.go +++ b/docs/sdk/core/examples/app1.go @@ -18,7 +18,7 @@ const ( func NewApp1(logger log.Logger, db dbm.DB) *bapp.BaseApp { // Create the base application object. - app := bapp.NewBaseAppNoCodec(app1Name, logger, db, tx1Decoder) + app := bapp.NewBaseApp(app1Name, logger, db, tx1Decoder) // Create a key for accessing the account store. keyAccount := sdk.NewKVStoreKey("acc") diff --git a/docs/sdk/core/examples/app2.go b/docs/sdk/core/examples/app2.go index 9f95a71eca..1e1910b628 100644 --- a/docs/sdk/core/examples/app2.go +++ b/docs/sdk/core/examples/app2.go @@ -37,7 +37,7 @@ func NewApp2(logger log.Logger, db dbm.DB) *bapp.BaseApp { cdc := NewCodec() // Create the base application object. - app := bapp.NewBaseAppNoCodec(app2Name, logger, db, tx2Decoder(cdc)) + app := bapp.NewBaseApp(app2Name, logger, db, tx2Decoder(cdc)) // Create a key for accessing the account store. keyAccount := sdk.NewKVStoreKey("acc") diff --git a/docs/sdk/core/examples/app3.go b/docs/sdk/core/examples/app3.go index 5f9fe081c3..15c8ea7584 100644 --- a/docs/sdk/core/examples/app3.go +++ b/docs/sdk/core/examples/app3.go @@ -21,7 +21,7 @@ func NewApp3(logger log.Logger, db dbm.DB) *bapp.BaseApp { cdc := NewCodec() // Create the base application object. - app := bapp.NewBaseAppNoCodec(app3Name, logger, db, auth.DefaultTxDecoder(cdc)) + app := bapp.NewBaseApp(app3Name, logger, db, auth.DefaultTxDecoder(cdc)) // Create a key for accessing the account store. keyAccount := sdk.NewKVStoreKey("acc") diff --git a/docs/sdk/core/examples/app4.go b/docs/sdk/core/examples/app4.go index b6f9af2db7..f8175fe41e 100644 --- a/docs/sdk/core/examples/app4.go +++ b/docs/sdk/core/examples/app4.go @@ -22,7 +22,7 @@ func NewApp4(logger log.Logger, db dbm.DB) *bapp.BaseApp { cdc := NewCodec() // Create the base application object. - app := bapp.NewBaseAppNoCodec(app4Name, logger, db, auth.DefaultTxDecoder(cdc)) + app := bapp.NewBaseApp(app4Name, logger, db, auth.DefaultTxDecoder(cdc)) // Create a key for accessing the account store. keyAccount := sdk.NewKVStoreKey("acc") diff --git a/examples/basecoin/app/app.go b/examples/basecoin/app/app.go index a43fea0838..aa3ea25909 100644 --- a/examples/basecoin/app/app.go +++ b/examples/basecoin/app/app.go @@ -53,7 +53,7 @@ func NewBasecoinApp(logger log.Logger, db dbm.DB, baseAppOptions ...func(*bam.Ba // create your application type var app = &BasecoinApp{ cdc: cdc, - BaseApp: bam.NewBaseAppNoCodec(appName, logger, db, auth.DefaultTxDecoder(cdc), baseAppOptions...), + BaseApp: bam.NewBaseApp(appName, logger, db, auth.DefaultTxDecoder(cdc), baseAppOptions...), keyMain: sdk.NewKVStoreKey("main"), keyAccount: sdk.NewKVStoreKey("acc"), keyIBC: sdk.NewKVStoreKey("ibc"), diff --git a/examples/democoin/app/app.go b/examples/democoin/app/app.go index 7038f8905f..4d4afb92d7 100644 --- a/examples/democoin/app/app.go +++ b/examples/democoin/app/app.go @@ -58,7 +58,7 @@ func NewDemocoinApp(logger log.Logger, db dbm.DB) *DemocoinApp { // Create your application object. var app = &DemocoinApp{ - BaseApp: bam.NewBaseAppNoCodec(appName, logger, db, auth.DefaultTxDecoder(cdc)), + BaseApp: bam.NewBaseApp(appName, logger, db, auth.DefaultTxDecoder(cdc)), cdc: cdc, capKeyMainStore: sdk.NewKVStoreKey("main"), capKeyAccountStore: sdk.NewKVStoreKey("acc"), diff --git a/examples/kvstore/main.go b/examples/kvstore/main.go index 47416da057..125c7cd47e 100644 --- a/examples/kvstore/main.go +++ b/examples/kvstore/main.go @@ -32,14 +32,11 @@ func main() { var capKeyMainStore = sdk.NewKVStoreKey("main") // Create BaseApp. - var baseApp = bam.NewBaseApp("kvstore", nil, logger, db) + var baseApp = bam.NewBaseApp("kvstore", logger, db, decodeTx) // Set mounts for BaseApp's MultiStore. baseApp.MountStoresIAVL(capKeyMainStore) - // Set Tx decoder - baseApp.SetTxDecoder(decodeTx) - // Set a handler Route. baseApp.Router().AddRoute("kvstore", Handler(capKeyMainStore)) diff --git a/server/mock/app.go b/server/mock/app.go index 5229da41ee..7b22328b06 100644 --- a/server/mock/app.go +++ b/server/mock/app.go @@ -30,14 +30,11 @@ func NewApp(rootDir string, logger log.Logger) (abci.Application, error) { capKeyMainStore := sdk.NewKVStoreKey("main") // Create BaseApp. - baseApp := bam.NewBaseApp("kvstore", nil, logger, db) + baseApp := bam.NewBaseApp("kvstore", logger, db, decodeTx) // Set mounts for BaseApp's MultiStore. baseApp.MountStoresIAVL(capKeyMainStore) - // Set Tx decoder - baseApp.SetTxDecoder(decodeTx) - baseApp.SetInitChainer(InitChainer(capKeyMainStore)) // Set a handler Route. diff --git a/x/mock/app.go b/x/mock/app.go index 9d43e649df..17d4d122be 100644 --- a/x/mock/app.go +++ b/x/mock/app.go @@ -47,7 +47,7 @@ func NewApp() *App { // Create your application object app := &App{ - BaseApp: bam.NewBaseAppNoCodec("mock", logger, db, auth.DefaultTxDecoder(cdc)), + BaseApp: bam.NewBaseApp("mock", logger, db, auth.DefaultTxDecoder(cdc)), Cdc: cdc, KeyMain: sdk.NewKVStoreKey("main"), KeyAccount: sdk.NewKVStoreKey("acc"), From ca5e1591b18a2c28a1e503c7c4275d9fefe474ca Mon Sep 17 00:00:00 2001 From: Aditya Sripal Date: Wed, 18 Jul 2018 16:32:50 -0700 Subject: [PATCH 10/18] update documentation --- docs/sdk/core/app1.md | 8 ++------ docs/sdk/core/app2.md | 22 +++++++++++++++------- docs/sdk/core/app3.md | 5 ++++- 3 files changed, 21 insertions(+), 14 deletions(-) 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, From 46b87666bd537569f227221ed0143c8431747691 Mon Sep 17 00:00:00 2001 From: Aditya Sripal Date: Wed, 18 Jul 2018 16:34:15 -0700 Subject: [PATCH 11/18] fmt --- baseapp/baseapp.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index de0dfbeded..b5e47c1701 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -47,7 +47,7 @@ type BaseApp struct { cms sdk.CommitMultiStore // Main (uncached) state router Router // handle any kind of message codespacer *sdk.Codespacer // handle module codespacing - txDecoder sdk.TxDecoder // unmarshal []byte into sdk.Tx + txDecoder sdk.TxDecoder // unmarshal []byte into sdk.Tx anteHandler sdk.AnteHandler // ante handler for fee and auth From 8cdbc4b267a5e7153db761ade79a27b332378c06 Mon Sep 17 00:00:00 2001 From: Aditya Sripal Date: Wed, 18 Jul 2018 16:37:02 -0700 Subject: [PATCH 12/18] fix baseapp docs --- docs/sdk/core/app1.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/sdk/core/app1.md b/docs/sdk/core/app1.md index 4dc573464a..ddf2a533e5 100644 --- a/docs/sdk/core/app1.md +++ b/docs/sdk/core/app1.md @@ -421,7 +421,7 @@ Here is the complete setup for App1: ```go func NewApp1(logger log.Logger, db dbm.DB) *bapp.BaseApp { - + // Create the base application object. app := bapp.NewBaseApp(app1Name, logger, db, tx1Decoder) @@ -454,7 +454,7 @@ Here, we have only a single Msg type, `bank`, a single store for accounts, and a The handler is granted access to the store by giving it the capability key. In future apps, we'll have multiple stores and handlers, and not every handler will get access to every store. -After setting the transaction decoder and the message handling routes, the final +After setting the message handling routes, the final step is to mount the stores and load the latest version. Since we only have one store, we only mount one. From 971cfc663864c432c09078f4c428b48b79c823bc Mon Sep 17 00:00:00 2001 From: Aditya Sripal Date: Wed, 18 Jul 2018 17:49:54 -0700 Subject: [PATCH 13/18] add to pending changelog --- PENDING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/PENDING.md b/PENDING.md index 3d6d0d92de..e0bcf294d0 100644 --- a/PENDING.md +++ b/PENDING.md @@ -3,6 +3,7 @@ BREAKING CHANGES * [baseapp] Msgs are no longer run on CheckTx, removed `ctx.IsCheckTx()` * [x/stake] Fixed the period check for the inflation calculation +* [baseapp] NewBaseApp constructor now takes sdk.TxDecoder as argument instead of wire.Codec FEATURES * [lcd] Can now query governance proposals by ProposalStatus From 20ce656ac0d0bb9984f7896506da845b9b5ee881 Mon Sep 17 00:00:00 2001 From: Aditya Sripal Date: Wed, 18 Jul 2018 18:21:22 -0700 Subject: [PATCH 14/18] update pending --- Gopkg.lock | 182 +++++------------------------------------------------ PENDING.md | 4 +- 2 files changed, 20 insertions(+), 166 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index cf5c97909d..66f6c04925 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -2,76 +2,57 @@ [[projects]] - digest = "1:09a7f74eb6bb3c0f14d8926610c87f569c5cff68e978d30e9a3540aeb626fdf0" name = "github.com/bartekn/go-bip39" packages = ["."] - pruneopts = "UT" revision = "a05967ea095d81c8fe4833776774cfaff8e5036c" [[projects]] branch = "master" - digest = "1:d6afaeed1502aa28e80a4ed0981d570ad91b2579193404256ce672ed0a609e0d" name = "github.com/beorn7/perks" packages = ["quantile"] - pruneopts = "UT" revision = "3a771d992973f24aa725d07868b467d1ddfceafb" [[projects]] - digest = "1:1343a2963481a305ca4d051e84bc2abd16b601ee22ed324f8d605de1adb291b0" name = "github.com/bgentry/speakeasy" packages = ["."] - pruneopts = "UT" revision = "4aabc24848ce5fd31929f7d1e4ea74d3709c14cd" version = "v0.1.0" [[projects]] branch = "master" - digest = "1:70f6b224a59b2fa453debffa85c77f71063d8754b90c8c4fbad5794e2c382b0f" name = "github.com/brejski/hid" packages = ["."] - pruneopts = "UT" revision = "06112dcfcc50a7e0e4fd06e17f9791e788fdaafc" [[projects]] branch = "master" - digest = "1:6aabc1566d6351115d561d038da82a4c19b46c3b6e17f4a0a2fa60260663dc79" name = "github.com/btcsuite/btcd" packages = ["btcec"] - pruneopts = "UT" revision = "fdfc19097e7ac6b57035062056f5b7b4638b8898" [[projects]] - digest = "1:386de157f7d19259a7f9c81f26ce011223ce0f090353c1152ffdf730d7d10ac2" name = "github.com/btcsuite/btcutil" packages = ["bech32"] - pruneopts = "UT" revision = "d4cc87b860166d00d6b5b9e0d3b3d71d6088d4d4" [[projects]] - digest = "1:a2c1d0e43bd3baaa071d1b9ed72c27d78169b2b269f71c105ac4ba34b1be4a39" name = "github.com/davecgh/go-spew" packages = ["spew"] - pruneopts = "UT" revision = "346938d642f2ec3594ed81d874461961cd0faa76" version = "v1.1.0" [[projects]] - digest = "1:c7644c73a3d23741fdba8a99b1464e021a224b7e205be497271a8003a15ca41b" name = "github.com/ebuchman/fail-test" packages = ["."] - pruneopts = "UT" revision = "95f809107225be108efcf10a3509e4ea6ceef3c4" [[projects]] - digest = "1:abeb38ade3f32a92943e5be54f55ed6d6e3b6602761d74b4aab4c9dd45c18abd" name = "github.com/fsnotify/fsnotify" packages = ["."] - pruneopts = "UT" revision = "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9" version = "v1.4.7" [[projects]] - digest = "1:fa30c0652956e159cdb97dcb2ef8b8db63ed668c02a5c3a40961c8f0641252fe" name = "github.com/go-kit/kit" packages = [ "log", @@ -80,30 +61,24 @@ "metrics", "metrics/discard", "metrics/internal/lv", - "metrics/prometheus", + "metrics/prometheus" ] - pruneopts = "UT" revision = "4dc7be5d2d12881735283bcab7352178e190fc71" version = "v0.6.0" [[projects]] - digest = "1:31a18dae27a29aa074515e43a443abfd2ba6deb6d69309d8d7ce789c45f34659" name = "github.com/go-logfmt/logfmt" packages = ["."] - pruneopts = "UT" revision = "390ab7935ee28ec6b286364bba9b4dd6410cb3d5" version = "v0.3.0" [[projects]] - digest = "1:c4a2528ccbcabf90f9f3c464a5fc9e302d592861bbfd0b7135a7de8a943d0406" name = "github.com/go-stack/stack" packages = ["."] - pruneopts = "UT" revision = "259ab82a6cad3992b4e21ff5cac294ccb06474bc" version = "v1.7.0" [[projects]] - digest = "1:af1306bff89268721ea2550d504413c9487ebfca11e2ff8f39ae79b99a720ff5" name = "github.com/gogo/protobuf" packages = [ "gogoproto", @@ -111,61 +86,49 @@ "proto", "protoc-gen-gogo/descriptor", "sortkeys", - "types", + "types" ] - pruneopts = "UT" revision = "1adfc126b41513cc696b209667c8656ea7aac67c" version = "v1.0.0" [[projects]] - digest = "1:cb22af0ed7c72d495d8be1106233ee553898950f15fd3f5404406d44c2e86888" name = "github.com/golang/protobuf" packages = [ "proto", "ptypes", "ptypes/any", "ptypes/duration", - "ptypes/timestamp", + "ptypes/timestamp" ] - pruneopts = "UT" revision = "b4deda0973fb4c70b50d226b1af49f3da59f5265" version = "v1.1.0" [[projects]] branch = "master" - digest = "1:4a0c6bb4805508a6287675fac876be2ac1182539ca8a32468d8128882e9d5009" name = "github.com/golang/snappy" packages = ["."] - pruneopts = "UT" revision = "2e65f85255dbc3072edf28d6b5b8efc472979f5a" [[projects]] - digest = "1:c79fb010be38a59d657c48c6ba1d003a8aa651fa56b579d959d74573b7dff8e1" name = "github.com/gorilla/context" packages = ["."] - pruneopts = "UT" revision = "08b5f424b9271eedf6f9f0ce86cb9396ed337a42" version = "v1.1.1" [[projects]] - digest = "1:e73f5b0152105f18bc131fba127d9949305c8693f8a762588a82a48f61756f5f" name = "github.com/gorilla/mux" packages = ["."] - pruneopts = "UT" revision = "e3702bed27f0d39777b0b37b664b6280e8ef8fbf" version = "v1.6.2" [[projects]] - digest = "1:43dd08a10854b2056e615d1b1d22ac94559d822e1f8b6fcc92c1a1057e85188e" name = "github.com/gorilla/websocket" packages = ["."] - pruneopts = "UT" revision = "ea4d1f681babbce9545c9c5f3d5194a789c89f5b" version = "v1.2.0" [[projects]] branch = "master" - digest = "1:8951fe6e358876736d8fa1f3992624fdbb2dec6bc49401c1381d1ef8abbb544f" name = "github.com/hashicorp/hcl" packages = [ ".", @@ -176,206 +139,160 @@ "hcl/token", "json/parser", "json/scanner", - "json/token", + "json/token" ] - pruneopts = "UT" revision = "ef8a98b0bbce4a65b5aa4c368430a80ddc533168" [[projects]] - digest = "1:870d441fe217b8e689d7949fef6e43efbc787e50f200cb1e70dbca9204a1d6be" name = "github.com/inconshreveable/mousetrap" packages = ["."] - pruneopts = "UT" revision = "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75" version = "v1.0" [[projects]] branch = "master" - digest = "1:39b27d1381a30421f9813967a5866fba35dc1d4df43a6eefe3b7a5444cb07214" name = "github.com/jmhodges/levigo" packages = ["."] - pruneopts = "UT" revision = "c42d9e0ca023e2198120196f842701bb4c55d7b9" [[projects]] branch = "master" - digest = "1:a64e323dc06b73892e5bb5d040ced475c4645d456038333883f58934abbf6f72" name = "github.com/kr/logfmt" packages = ["."] - pruneopts = "UT" revision = "b84e30acd515aadc4b783ad4ff83aff3299bdfe0" [[projects]] - digest = "1:c568d7727aa262c32bdf8a3f7db83614f7af0ed661474b24588de635c20024c7" name = "github.com/magiconair/properties" packages = ["."] - pruneopts = "UT" revision = "c2353362d570a7bfa228149c62842019201cfb71" version = "v1.8.0" [[projects]] - digest = "1:d4d17353dbd05cb52a2a52b7fe1771883b682806f68db442b436294926bbfafb" name = "github.com/mattn/go-isatty" packages = ["."] - pruneopts = "UT" revision = "0360b2af4f38e8d38c7fce2a9f4e702702d73a39" version = "v0.0.3" [[projects]] - digest = "1:ff5ebae34cfbf047d505ee150de27e60570e8c394b3b8fdbb720ff6ac71985fc" name = "github.com/matttproud/golang_protobuf_extensions" packages = ["pbutil"] - pruneopts = "UT" revision = "c12348ce28de40eed0136aa2b644d0ee0650e56c" version = "v1.0.1" [[projects]] branch = "master" - digest = "1:e730597b38a4d56e2361e0b6236cb800e52c73cace2ff91396f4ff35792ddfa7" name = "github.com/mitchellh/mapstructure" packages = ["."] - pruneopts = "UT" revision = "bb74f1db0675b241733089d5a1faa5dd8b0ef57b" [[projects]] - digest = "1:95741de3af260a92cc5c7f3f3061e85273f5a81b5db20d4bd68da74bd521675e" name = "github.com/pelletier/go-toml" packages = ["."] - pruneopts = "UT" revision = "c01d1270ff3e442a8a57cddc1c92dc1138598194" version = "v1.2.0" [[projects]] - digest = "1:40e195917a951a8bf867cd05de2a46aaf1806c50cf92eebf4c16f78cd196f747" name = "github.com/pkg/errors" packages = ["."] - pruneopts = "UT" revision = "645ef00459ed84a119197bfb8d8205042c6df63d" version = "v0.8.0" [[projects]] - digest = "1:0028cb19b2e4c3112225cd871870f2d9cf49b9b4276531f03438a88e94be86fe" name = "github.com/pmezard/go-difflib" packages = ["difflib"] - pruneopts = "UT" revision = "792786c7400a136282c1664665ae0a8db921c6c2" version = "v1.0.0" [[projects]] - digest = "1:98225904b7abff96c052b669b25788f18225a36673fba022fb93514bb9a2a64e" name = "github.com/prometheus/client_golang" packages = [ "prometheus", - "prometheus/promhttp", + "prometheus/promhttp" ] - pruneopts = "UT" revision = "ae27198cdd90bf12cd134ad79d1366a6cf49f632" [[projects]] branch = "master" - digest = "1:0f37e09b3e92aaeda5991581311f8dbf38944b36a3edec61cc2d1991f527554a" name = "github.com/prometheus/client_model" packages = ["go"] - pruneopts = "UT" revision = "5c3871d89910bfb32f5fcab2aa4b9ec68e65a99f" [[projects]] branch = "master" - digest = "1:4d291d51042ed9de40eef61a3c1b56e969d6e0f8aa5fd3da5e958ec66bee68e4" name = "github.com/prometheus/common" packages = [ "expfmt", "internal/bitbucket.org/ww/goautoneg", - "model", + "model" ] - pruneopts = "UT" revision = "7600349dcfe1abd18d72d3a1770870d9800a7801" [[projects]] branch = "master" - digest = "1:55d7449d6987dabf272b4e81b2f9c449f05b17415c939b68d1e82f57e3374b7f" name = "github.com/prometheus/procfs" packages = [ ".", "internal/util", "nfs", - "xfs", + "xfs" ] - pruneopts = "UT" revision = "ae68e2d4c00fed4943b5f6698d504a5fe083da8a" [[projects]] - digest = "1:c4556a44e350b50a490544d9b06e9fba9c286c21d6c0e47f54f3a9214597298c" name = "github.com/rcrowley/go-metrics" packages = ["."] - pruneopts = "UT" revision = "e2704e165165ec55d062f5919b4b29494e9fa790" [[projects]] - digest = "1:37ace7f35375adec11634126944bdc45a673415e2fcc07382d03b75ec76ea94c" name = "github.com/spf13/afero" packages = [ ".", - "mem", + "mem" ] - pruneopts = "UT" revision = "787d034dfe70e44075ccc060d346146ef53270ad" version = "v1.1.1" [[projects]] - digest = "1:516e71bed754268937f57d4ecb190e01958452336fa73dbac880894164e91c1f" name = "github.com/spf13/cast" packages = ["."] - pruneopts = "UT" revision = "8965335b8c7107321228e3e3702cab9832751bac" version = "v1.2.0" [[projects]] - digest = "1:627ab2f549a6a55c44f46fa24a4307f4d0da81bfc7934ed0473bf38b24051d26" name = "github.com/spf13/cobra" packages = ["."] - pruneopts = "UT" revision = "7b2c5ac9fc04fc5efafb60700713d4fa609b777b" version = "v0.0.1" [[projects]] branch = "master" - digest = "1:080e5f630945ad754f4b920e60b4d3095ba0237ebf88dc462eb28002932e3805" name = "github.com/spf13/jwalterweatherman" packages = ["."] - pruneopts = "UT" revision = "7c0cea34c8ece3fbeb2b27ab9b59511d360fb394" [[projects]] - digest = "1:9424f440bba8f7508b69414634aef3b2b3a877e522d8a4624692412805407bb7" name = "github.com/spf13/pflag" packages = ["."] - pruneopts = "UT" revision = "583c0c0531f06d5278b7d917446061adc344b5cd" version = "v1.0.1" [[projects]] - digest = "1:f8e1a678a2571e265f4bf91a3e5e32aa6b1474a55cb0ea849750cc177b664d96" name = "github.com/spf13/viper" packages = ["."] - pruneopts = "UT" revision = "25b30aa063fc18e48662b86996252eabdcf2f0c7" version = "v1.0.0" [[projects]] - digest = "1:73697231b93fb74a73ebd8384b68b9a60c57ea6b13c56d2425414566a72c8e6d" name = "github.com/stretchr/testify" packages = [ "assert", - "require", + "require" ] - pruneopts = "UT" revision = "12b6f73e6084dad08a7c6e575284b177ecafbc71" version = "v1.2.1" [[projects]] branch = "master" - digest = "1:922191411ad8f61bcd8018ac127589bb489712c1d1a0ab2497aca4b16de417d2" name = "github.com/syndtr/goleveldb" packages = [ "leveldb", @@ -389,41 +306,33 @@ "leveldb/opt", "leveldb/storage", "leveldb/table", - "leveldb/util", + "leveldb/util" ] - pruneopts = "UT" revision = "c4c61651e9e37fa117f53c5a906d3b63090d8445" [[projects]] branch = "master" - digest = "1:203b409c21115233a576f99e8f13d8e07ad82b25500491f7e1cca12588fb3232" name = "github.com/tendermint/ed25519" packages = [ ".", "edwards25519", - "extra25519", + "extra25519" ] - pruneopts = "UT" revision = "d8387025d2b9d158cf4efb07e7ebf814bcce2057" [[projects]] - digest = "1:e9113641c839c21d8eaeb2c907c7276af1eddeed988df8322168c56b7e06e0e1" name = "github.com/tendermint/go-amino" packages = ["."] - pruneopts = "UT" revision = "2106ca61d91029c931fd54968c2bb02dc96b1412" version = "0.10.1" [[projects]] - digest = "1:d4a15d404afbf591e8be16fcda7f5ac87948d5c7531f9d909fd84cc730ab16e2" name = "github.com/tendermint/iavl" packages = ["."] - pruneopts = "UT" revision = "35f66e53d9b01e83b30de68b931f54b2477a94c9" version = "v0.9.2" [[projects]] - digest = "1:5f41a7655812fa5901c71735dc8845f33184e94a2020c770f60a1a80ed228cb3" name = "github.com/tendermint/tendermint" packages = [ "abci/client", @@ -478,22 +387,18 @@ "state/txindex/kv", "state/txindex/null", "types", - "version", + "version" ] - pruneopts = "UT" revision = "c64a3c74c870d725ba1356f75b4afadf0928c297" version = "v0.22.4" [[projects]] - digest = "1:5bd938386bd1f61a581bf8cd6ff2b7b2f79c542929176db4ceb44965440dae07" name = "github.com/zondax/ledger-goclient" packages = ["."] - pruneopts = "UT" revision = "39ba4728c137c75718a21f9b4b3280fa31b9139b" [[projects]] branch = "master" - digest = "1:e8206c1653e050116ec8c9a823a86413fc9f9ee3c2f3ae977c96d6a1747f7325" name = "golang.org/x/crypto" packages = [ "blowfish", @@ -506,13 +411,11 @@ "pbkdf2", "poly1305", "ripemd160", - "salsa20/salsa", + "salsa20/salsa" ] - pruneopts = "UT" revision = "a49355c7e3f8fe157a85be2f77e6e269a0f89602" [[projects]] - digest = "1:04dda8391c3e2397daf254ac68003f30141c069b228d06baec8324a5f81dc1e9" name = "golang.org/x/net" packages = [ "context", @@ -522,21 +425,17 @@ "idna", "internal/timeseries", "netutil", - "trace", + "trace" ] - pruneopts = "UT" revision = "292b43bbf7cb8d35ddf40f8d5100ef3837cced3f" [[projects]] branch = "master" - digest = "1:d773e525476aefa22ea944a5425a9bfb99819b2e67eeb9b1966454fd57522bbf" name = "golang.org/x/sys" packages = ["unix"] - pruneopts = "UT" revision = "1b2967e3c290b7c545b3db0deeda16e9be4f98a2" [[projects]] - digest = "1:7509ba4347d1f8de6ae9be8818b0cd1abc3deeffe28aeaf4be6d4b6b5178d9ca" name = "golang.org/x/text" packages = [ "collate", @@ -552,22 +451,18 @@ "unicode/bidi", "unicode/cldr", "unicode/norm", - "unicode/rangetable", + "unicode/rangetable" ] - pruneopts = "UT" revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" version = "v0.3.0" [[projects]] branch = "master" - digest = "1:601e63e7d4577f907118bec825902505291918859d223bce015539e79f1160e3" name = "google.golang.org/genproto" packages = ["googleapis/rpc/status"] - pruneopts = "UT" revision = "e92b116572682a5b432ddd840aeaba2a559eeff1" [[projects]] - digest = "1:4d7b5d9746840266938cdb21a40f8eba7137d9153c4ed404d6bb2a450d06f690" name = "google.golang.org/grpc" packages = [ ".", @@ -592,63 +487,20 @@ "stats", "status", "tap", - "transport", + "transport" ] - pruneopts = "UT" revision = "d11072e7ca9811b1100b80ca0269ac831f06d024" version = "v1.11.3" [[projects]] - digest = "1:342378ac4dcb378a5448dd723f0784ae519383532f5e70ade24132c4c8693202" name = "gopkg.in/yaml.v2" packages = ["."] - pruneopts = "UT" revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183" version = "v2.2.1" [solve-meta] analyzer-name = "dep" analyzer-version = 1 - input-imports = [ - "github.com/bartekn/go-bip39", - "github.com/bgentry/speakeasy", - "github.com/btcsuite/btcd/btcec", - "github.com/golang/protobuf/proto", - "github.com/gorilla/mux", - "github.com/mattn/go-isatty", - "github.com/pkg/errors", - "github.com/spf13/cobra", - "github.com/spf13/pflag", - "github.com/spf13/viper", - "github.com/stretchr/testify/assert", - "github.com/stretchr/testify/require", - "github.com/tendermint/go-amino", - "github.com/tendermint/iavl", - "github.com/tendermint/tendermint/abci/server", - "github.com/tendermint/tendermint/abci/types", - "github.com/tendermint/tendermint/cmd/tendermint/commands", - "github.com/tendermint/tendermint/config", - "github.com/tendermint/tendermint/crypto", - "github.com/tendermint/tendermint/crypto/merkle", - "github.com/tendermint/tendermint/crypto/tmhash", - "github.com/tendermint/tendermint/libs/bech32", - "github.com/tendermint/tendermint/libs/cli", - "github.com/tendermint/tendermint/libs/cli/flags", - "github.com/tendermint/tendermint/libs/common", - "github.com/tendermint/tendermint/libs/db", - "github.com/tendermint/tendermint/libs/log", - "github.com/tendermint/tendermint/node", - "github.com/tendermint/tendermint/p2p", - "github.com/tendermint/tendermint/privval", - "github.com/tendermint/tendermint/proxy", - "github.com/tendermint/tendermint/rpc/client", - "github.com/tendermint/tendermint/rpc/core/types", - "github.com/tendermint/tendermint/rpc/lib/client", - "github.com/tendermint/tendermint/rpc/lib/server", - "github.com/tendermint/tendermint/types", - "github.com/zondax/ledger-goclient", - "golang.org/x/crypto/blowfish", - "golang.org/x/crypto/ripemd160", - ] + inputs-digest = "71e86b1f1e9ec71901c20d8532dc8477df66eff37a407322379f6a8b03e5d91b" solver-name = "gps-cdcl" solver-version = 1 diff --git a/PENDING.md b/PENDING.md index e0bcf294d0..0d23553243 100644 --- a/PENDING.md +++ b/PENDING.md @@ -4,6 +4,7 @@ BREAKING CHANGES * [baseapp] Msgs are no longer run on CheckTx, removed `ctx.IsCheckTx()` * [x/stake] Fixed the period check for the inflation calculation * [baseapp] NewBaseApp constructor now takes sdk.TxDecoder as argument instead of wire.Codec +* [x/auth] Default TxDecoder can be found in `x/auth` rather than baseapp FEATURES * [lcd] Can now query governance proposals by ProposalStatus @@ -12,7 +13,8 @@ IMPROVEMENTS * [baseapp] Allow any alphanumeric character in route * [cli] Improve error messages for all txs when the account doesn't exist * [tools] Remove `rm -rf vendor/` from `make get_vendor_deps` -* [x/stake] Add revoked to human-readable validator +* [x/stake] Add revoked to human-readable validator +* [x/auth] Recover ErrorOutOfGas panic in order to set sdk.Result attributes correctly BUG FIXES * \#1666 Add intra-tx counter to the genesis validators From 7c41e8cbc09ccfb512cf2e1b004c77ea327dcd3b Mon Sep 17 00:00:00 2001 From: Aditya Sripal Date: Wed, 18 Jul 2018 18:44:38 -0700 Subject: [PATCH 15/18] revert change to gopkg.lock --- Gopkg.lock | 182 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 165 insertions(+), 17 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index 66f6c04925..cf5c97909d 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -2,57 +2,76 @@ [[projects]] + digest = "1:09a7f74eb6bb3c0f14d8926610c87f569c5cff68e978d30e9a3540aeb626fdf0" name = "github.com/bartekn/go-bip39" packages = ["."] + pruneopts = "UT" revision = "a05967ea095d81c8fe4833776774cfaff8e5036c" [[projects]] branch = "master" + digest = "1:d6afaeed1502aa28e80a4ed0981d570ad91b2579193404256ce672ed0a609e0d" name = "github.com/beorn7/perks" packages = ["quantile"] + pruneopts = "UT" revision = "3a771d992973f24aa725d07868b467d1ddfceafb" [[projects]] + digest = "1:1343a2963481a305ca4d051e84bc2abd16b601ee22ed324f8d605de1adb291b0" name = "github.com/bgentry/speakeasy" packages = ["."] + pruneopts = "UT" revision = "4aabc24848ce5fd31929f7d1e4ea74d3709c14cd" version = "v0.1.0" [[projects]] branch = "master" + digest = "1:70f6b224a59b2fa453debffa85c77f71063d8754b90c8c4fbad5794e2c382b0f" name = "github.com/brejski/hid" packages = ["."] + pruneopts = "UT" revision = "06112dcfcc50a7e0e4fd06e17f9791e788fdaafc" [[projects]] branch = "master" + digest = "1:6aabc1566d6351115d561d038da82a4c19b46c3b6e17f4a0a2fa60260663dc79" name = "github.com/btcsuite/btcd" packages = ["btcec"] + pruneopts = "UT" revision = "fdfc19097e7ac6b57035062056f5b7b4638b8898" [[projects]] + digest = "1:386de157f7d19259a7f9c81f26ce011223ce0f090353c1152ffdf730d7d10ac2" name = "github.com/btcsuite/btcutil" packages = ["bech32"] + pruneopts = "UT" revision = "d4cc87b860166d00d6b5b9e0d3b3d71d6088d4d4" [[projects]] + digest = "1:a2c1d0e43bd3baaa071d1b9ed72c27d78169b2b269f71c105ac4ba34b1be4a39" name = "github.com/davecgh/go-spew" packages = ["spew"] + pruneopts = "UT" revision = "346938d642f2ec3594ed81d874461961cd0faa76" version = "v1.1.0" [[projects]] + digest = "1:c7644c73a3d23741fdba8a99b1464e021a224b7e205be497271a8003a15ca41b" name = "github.com/ebuchman/fail-test" packages = ["."] + pruneopts = "UT" revision = "95f809107225be108efcf10a3509e4ea6ceef3c4" [[projects]] + digest = "1:abeb38ade3f32a92943e5be54f55ed6d6e3b6602761d74b4aab4c9dd45c18abd" name = "github.com/fsnotify/fsnotify" packages = ["."] + pruneopts = "UT" revision = "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9" version = "v1.4.7" [[projects]] + digest = "1:fa30c0652956e159cdb97dcb2ef8b8db63ed668c02a5c3a40961c8f0641252fe" name = "github.com/go-kit/kit" packages = [ "log", @@ -61,24 +80,30 @@ "metrics", "metrics/discard", "metrics/internal/lv", - "metrics/prometheus" + "metrics/prometheus", ] + pruneopts = "UT" revision = "4dc7be5d2d12881735283bcab7352178e190fc71" version = "v0.6.0" [[projects]] + digest = "1:31a18dae27a29aa074515e43a443abfd2ba6deb6d69309d8d7ce789c45f34659" name = "github.com/go-logfmt/logfmt" packages = ["."] + pruneopts = "UT" revision = "390ab7935ee28ec6b286364bba9b4dd6410cb3d5" version = "v0.3.0" [[projects]] + digest = "1:c4a2528ccbcabf90f9f3c464a5fc9e302d592861bbfd0b7135a7de8a943d0406" name = "github.com/go-stack/stack" packages = ["."] + pruneopts = "UT" revision = "259ab82a6cad3992b4e21ff5cac294ccb06474bc" version = "v1.7.0" [[projects]] + digest = "1:af1306bff89268721ea2550d504413c9487ebfca11e2ff8f39ae79b99a720ff5" name = "github.com/gogo/protobuf" packages = [ "gogoproto", @@ -86,49 +111,61 @@ "proto", "protoc-gen-gogo/descriptor", "sortkeys", - "types" + "types", ] + pruneopts = "UT" revision = "1adfc126b41513cc696b209667c8656ea7aac67c" version = "v1.0.0" [[projects]] + digest = "1:cb22af0ed7c72d495d8be1106233ee553898950f15fd3f5404406d44c2e86888" name = "github.com/golang/protobuf" packages = [ "proto", "ptypes", "ptypes/any", "ptypes/duration", - "ptypes/timestamp" + "ptypes/timestamp", ] + pruneopts = "UT" revision = "b4deda0973fb4c70b50d226b1af49f3da59f5265" version = "v1.1.0" [[projects]] branch = "master" + digest = "1:4a0c6bb4805508a6287675fac876be2ac1182539ca8a32468d8128882e9d5009" name = "github.com/golang/snappy" packages = ["."] + pruneopts = "UT" revision = "2e65f85255dbc3072edf28d6b5b8efc472979f5a" [[projects]] + digest = "1:c79fb010be38a59d657c48c6ba1d003a8aa651fa56b579d959d74573b7dff8e1" name = "github.com/gorilla/context" packages = ["."] + pruneopts = "UT" revision = "08b5f424b9271eedf6f9f0ce86cb9396ed337a42" version = "v1.1.1" [[projects]] + digest = "1:e73f5b0152105f18bc131fba127d9949305c8693f8a762588a82a48f61756f5f" name = "github.com/gorilla/mux" packages = ["."] + pruneopts = "UT" revision = "e3702bed27f0d39777b0b37b664b6280e8ef8fbf" version = "v1.6.2" [[projects]] + digest = "1:43dd08a10854b2056e615d1b1d22ac94559d822e1f8b6fcc92c1a1057e85188e" name = "github.com/gorilla/websocket" packages = ["."] + pruneopts = "UT" revision = "ea4d1f681babbce9545c9c5f3d5194a789c89f5b" version = "v1.2.0" [[projects]] branch = "master" + digest = "1:8951fe6e358876736d8fa1f3992624fdbb2dec6bc49401c1381d1ef8abbb544f" name = "github.com/hashicorp/hcl" packages = [ ".", @@ -139,160 +176,206 @@ "hcl/token", "json/parser", "json/scanner", - "json/token" + "json/token", ] + pruneopts = "UT" revision = "ef8a98b0bbce4a65b5aa4c368430a80ddc533168" [[projects]] + digest = "1:870d441fe217b8e689d7949fef6e43efbc787e50f200cb1e70dbca9204a1d6be" name = "github.com/inconshreveable/mousetrap" packages = ["."] + pruneopts = "UT" revision = "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75" version = "v1.0" [[projects]] branch = "master" + digest = "1:39b27d1381a30421f9813967a5866fba35dc1d4df43a6eefe3b7a5444cb07214" name = "github.com/jmhodges/levigo" packages = ["."] + pruneopts = "UT" revision = "c42d9e0ca023e2198120196f842701bb4c55d7b9" [[projects]] branch = "master" + digest = "1:a64e323dc06b73892e5bb5d040ced475c4645d456038333883f58934abbf6f72" name = "github.com/kr/logfmt" packages = ["."] + pruneopts = "UT" revision = "b84e30acd515aadc4b783ad4ff83aff3299bdfe0" [[projects]] + digest = "1:c568d7727aa262c32bdf8a3f7db83614f7af0ed661474b24588de635c20024c7" name = "github.com/magiconair/properties" packages = ["."] + pruneopts = "UT" revision = "c2353362d570a7bfa228149c62842019201cfb71" version = "v1.8.0" [[projects]] + digest = "1:d4d17353dbd05cb52a2a52b7fe1771883b682806f68db442b436294926bbfafb" name = "github.com/mattn/go-isatty" packages = ["."] + pruneopts = "UT" revision = "0360b2af4f38e8d38c7fce2a9f4e702702d73a39" version = "v0.0.3" [[projects]] + digest = "1:ff5ebae34cfbf047d505ee150de27e60570e8c394b3b8fdbb720ff6ac71985fc" name = "github.com/matttproud/golang_protobuf_extensions" packages = ["pbutil"] + pruneopts = "UT" revision = "c12348ce28de40eed0136aa2b644d0ee0650e56c" version = "v1.0.1" [[projects]] branch = "master" + digest = "1:e730597b38a4d56e2361e0b6236cb800e52c73cace2ff91396f4ff35792ddfa7" name = "github.com/mitchellh/mapstructure" packages = ["."] + pruneopts = "UT" revision = "bb74f1db0675b241733089d5a1faa5dd8b0ef57b" [[projects]] + digest = "1:95741de3af260a92cc5c7f3f3061e85273f5a81b5db20d4bd68da74bd521675e" name = "github.com/pelletier/go-toml" packages = ["."] + pruneopts = "UT" revision = "c01d1270ff3e442a8a57cddc1c92dc1138598194" version = "v1.2.0" [[projects]] + digest = "1:40e195917a951a8bf867cd05de2a46aaf1806c50cf92eebf4c16f78cd196f747" name = "github.com/pkg/errors" packages = ["."] + pruneopts = "UT" revision = "645ef00459ed84a119197bfb8d8205042c6df63d" version = "v0.8.0" [[projects]] + digest = "1:0028cb19b2e4c3112225cd871870f2d9cf49b9b4276531f03438a88e94be86fe" name = "github.com/pmezard/go-difflib" packages = ["difflib"] + pruneopts = "UT" revision = "792786c7400a136282c1664665ae0a8db921c6c2" version = "v1.0.0" [[projects]] + digest = "1:98225904b7abff96c052b669b25788f18225a36673fba022fb93514bb9a2a64e" name = "github.com/prometheus/client_golang" packages = [ "prometheus", - "prometheus/promhttp" + "prometheus/promhttp", ] + pruneopts = "UT" revision = "ae27198cdd90bf12cd134ad79d1366a6cf49f632" [[projects]] branch = "master" + digest = "1:0f37e09b3e92aaeda5991581311f8dbf38944b36a3edec61cc2d1991f527554a" name = "github.com/prometheus/client_model" packages = ["go"] + pruneopts = "UT" revision = "5c3871d89910bfb32f5fcab2aa4b9ec68e65a99f" [[projects]] branch = "master" + digest = "1:4d291d51042ed9de40eef61a3c1b56e969d6e0f8aa5fd3da5e958ec66bee68e4" name = "github.com/prometheus/common" packages = [ "expfmt", "internal/bitbucket.org/ww/goautoneg", - "model" + "model", ] + pruneopts = "UT" revision = "7600349dcfe1abd18d72d3a1770870d9800a7801" [[projects]] branch = "master" + digest = "1:55d7449d6987dabf272b4e81b2f9c449f05b17415c939b68d1e82f57e3374b7f" name = "github.com/prometheus/procfs" packages = [ ".", "internal/util", "nfs", - "xfs" + "xfs", ] + pruneopts = "UT" revision = "ae68e2d4c00fed4943b5f6698d504a5fe083da8a" [[projects]] + digest = "1:c4556a44e350b50a490544d9b06e9fba9c286c21d6c0e47f54f3a9214597298c" name = "github.com/rcrowley/go-metrics" packages = ["."] + pruneopts = "UT" revision = "e2704e165165ec55d062f5919b4b29494e9fa790" [[projects]] + digest = "1:37ace7f35375adec11634126944bdc45a673415e2fcc07382d03b75ec76ea94c" name = "github.com/spf13/afero" packages = [ ".", - "mem" + "mem", ] + pruneopts = "UT" revision = "787d034dfe70e44075ccc060d346146ef53270ad" version = "v1.1.1" [[projects]] + digest = "1:516e71bed754268937f57d4ecb190e01958452336fa73dbac880894164e91c1f" name = "github.com/spf13/cast" packages = ["."] + pruneopts = "UT" revision = "8965335b8c7107321228e3e3702cab9832751bac" version = "v1.2.0" [[projects]] + digest = "1:627ab2f549a6a55c44f46fa24a4307f4d0da81bfc7934ed0473bf38b24051d26" name = "github.com/spf13/cobra" packages = ["."] + pruneopts = "UT" revision = "7b2c5ac9fc04fc5efafb60700713d4fa609b777b" version = "v0.0.1" [[projects]] branch = "master" + digest = "1:080e5f630945ad754f4b920e60b4d3095ba0237ebf88dc462eb28002932e3805" name = "github.com/spf13/jwalterweatherman" packages = ["."] + pruneopts = "UT" revision = "7c0cea34c8ece3fbeb2b27ab9b59511d360fb394" [[projects]] + digest = "1:9424f440bba8f7508b69414634aef3b2b3a877e522d8a4624692412805407bb7" name = "github.com/spf13/pflag" packages = ["."] + pruneopts = "UT" revision = "583c0c0531f06d5278b7d917446061adc344b5cd" version = "v1.0.1" [[projects]] + digest = "1:f8e1a678a2571e265f4bf91a3e5e32aa6b1474a55cb0ea849750cc177b664d96" name = "github.com/spf13/viper" packages = ["."] + pruneopts = "UT" revision = "25b30aa063fc18e48662b86996252eabdcf2f0c7" version = "v1.0.0" [[projects]] + digest = "1:73697231b93fb74a73ebd8384b68b9a60c57ea6b13c56d2425414566a72c8e6d" name = "github.com/stretchr/testify" packages = [ "assert", - "require" + "require", ] + pruneopts = "UT" revision = "12b6f73e6084dad08a7c6e575284b177ecafbc71" version = "v1.2.1" [[projects]] branch = "master" + digest = "1:922191411ad8f61bcd8018ac127589bb489712c1d1a0ab2497aca4b16de417d2" name = "github.com/syndtr/goleveldb" packages = [ "leveldb", @@ -306,33 +389,41 @@ "leveldb/opt", "leveldb/storage", "leveldb/table", - "leveldb/util" + "leveldb/util", ] + pruneopts = "UT" revision = "c4c61651e9e37fa117f53c5a906d3b63090d8445" [[projects]] branch = "master" + digest = "1:203b409c21115233a576f99e8f13d8e07ad82b25500491f7e1cca12588fb3232" name = "github.com/tendermint/ed25519" packages = [ ".", "edwards25519", - "extra25519" + "extra25519", ] + pruneopts = "UT" revision = "d8387025d2b9d158cf4efb07e7ebf814bcce2057" [[projects]] + digest = "1:e9113641c839c21d8eaeb2c907c7276af1eddeed988df8322168c56b7e06e0e1" name = "github.com/tendermint/go-amino" packages = ["."] + pruneopts = "UT" revision = "2106ca61d91029c931fd54968c2bb02dc96b1412" version = "0.10.1" [[projects]] + digest = "1:d4a15d404afbf591e8be16fcda7f5ac87948d5c7531f9d909fd84cc730ab16e2" name = "github.com/tendermint/iavl" packages = ["."] + pruneopts = "UT" revision = "35f66e53d9b01e83b30de68b931f54b2477a94c9" version = "v0.9.2" [[projects]] + digest = "1:5f41a7655812fa5901c71735dc8845f33184e94a2020c770f60a1a80ed228cb3" name = "github.com/tendermint/tendermint" packages = [ "abci/client", @@ -387,18 +478,22 @@ "state/txindex/kv", "state/txindex/null", "types", - "version" + "version", ] + pruneopts = "UT" revision = "c64a3c74c870d725ba1356f75b4afadf0928c297" version = "v0.22.4" [[projects]] + digest = "1:5bd938386bd1f61a581bf8cd6ff2b7b2f79c542929176db4ceb44965440dae07" name = "github.com/zondax/ledger-goclient" packages = ["."] + pruneopts = "UT" revision = "39ba4728c137c75718a21f9b4b3280fa31b9139b" [[projects]] branch = "master" + digest = "1:e8206c1653e050116ec8c9a823a86413fc9f9ee3c2f3ae977c96d6a1747f7325" name = "golang.org/x/crypto" packages = [ "blowfish", @@ -411,11 +506,13 @@ "pbkdf2", "poly1305", "ripemd160", - "salsa20/salsa" + "salsa20/salsa", ] + pruneopts = "UT" revision = "a49355c7e3f8fe157a85be2f77e6e269a0f89602" [[projects]] + digest = "1:04dda8391c3e2397daf254ac68003f30141c069b228d06baec8324a5f81dc1e9" name = "golang.org/x/net" packages = [ "context", @@ -425,17 +522,21 @@ "idna", "internal/timeseries", "netutil", - "trace" + "trace", ] + pruneopts = "UT" revision = "292b43bbf7cb8d35ddf40f8d5100ef3837cced3f" [[projects]] branch = "master" + digest = "1:d773e525476aefa22ea944a5425a9bfb99819b2e67eeb9b1966454fd57522bbf" name = "golang.org/x/sys" packages = ["unix"] + pruneopts = "UT" revision = "1b2967e3c290b7c545b3db0deeda16e9be4f98a2" [[projects]] + digest = "1:7509ba4347d1f8de6ae9be8818b0cd1abc3deeffe28aeaf4be6d4b6b5178d9ca" name = "golang.org/x/text" packages = [ "collate", @@ -451,18 +552,22 @@ "unicode/bidi", "unicode/cldr", "unicode/norm", - "unicode/rangetable" + "unicode/rangetable", ] + pruneopts = "UT" revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" version = "v0.3.0" [[projects]] branch = "master" + digest = "1:601e63e7d4577f907118bec825902505291918859d223bce015539e79f1160e3" name = "google.golang.org/genproto" packages = ["googleapis/rpc/status"] + pruneopts = "UT" revision = "e92b116572682a5b432ddd840aeaba2a559eeff1" [[projects]] + digest = "1:4d7b5d9746840266938cdb21a40f8eba7137d9153c4ed404d6bb2a450d06f690" name = "google.golang.org/grpc" packages = [ ".", @@ -487,20 +592,63 @@ "stats", "status", "tap", - "transport" + "transport", ] + pruneopts = "UT" revision = "d11072e7ca9811b1100b80ca0269ac831f06d024" version = "v1.11.3" [[projects]] + digest = "1:342378ac4dcb378a5448dd723f0784ae519383532f5e70ade24132c4c8693202" name = "gopkg.in/yaml.v2" packages = ["."] + pruneopts = "UT" revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183" version = "v2.2.1" [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "71e86b1f1e9ec71901c20d8532dc8477df66eff37a407322379f6a8b03e5d91b" + input-imports = [ + "github.com/bartekn/go-bip39", + "github.com/bgentry/speakeasy", + "github.com/btcsuite/btcd/btcec", + "github.com/golang/protobuf/proto", + "github.com/gorilla/mux", + "github.com/mattn/go-isatty", + "github.com/pkg/errors", + "github.com/spf13/cobra", + "github.com/spf13/pflag", + "github.com/spf13/viper", + "github.com/stretchr/testify/assert", + "github.com/stretchr/testify/require", + "github.com/tendermint/go-amino", + "github.com/tendermint/iavl", + "github.com/tendermint/tendermint/abci/server", + "github.com/tendermint/tendermint/abci/types", + "github.com/tendermint/tendermint/cmd/tendermint/commands", + "github.com/tendermint/tendermint/config", + "github.com/tendermint/tendermint/crypto", + "github.com/tendermint/tendermint/crypto/merkle", + "github.com/tendermint/tendermint/crypto/tmhash", + "github.com/tendermint/tendermint/libs/bech32", + "github.com/tendermint/tendermint/libs/cli", + "github.com/tendermint/tendermint/libs/cli/flags", + "github.com/tendermint/tendermint/libs/common", + "github.com/tendermint/tendermint/libs/db", + "github.com/tendermint/tendermint/libs/log", + "github.com/tendermint/tendermint/node", + "github.com/tendermint/tendermint/p2p", + "github.com/tendermint/tendermint/privval", + "github.com/tendermint/tendermint/proxy", + "github.com/tendermint/tendermint/rpc/client", + "github.com/tendermint/tendermint/rpc/core/types", + "github.com/tendermint/tendermint/rpc/lib/client", + "github.com/tendermint/tendermint/rpc/lib/server", + "github.com/tendermint/tendermint/types", + "github.com/zondax/ledger-goclient", + "golang.org/x/crypto/blowfish", + "golang.org/x/crypto/ripemd160", + ] solver-name = "gps-cdcl" solver-version = 1 From 5015c46e0666da26069e93ef1f841fb128fc3022 Mon Sep 17 00:00:00 2001 From: Aditya Sripal Date: Thu, 19 Jul 2018 11:35:31 -0700 Subject: [PATCH 16/18] revert change to queryApp encoding --- baseapp/baseapp.go | 8 ++------ baseapp/baseapp_test.go | 3 +-- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index fa419be2a4..c3ab5e4dbc 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -1,7 +1,6 @@ package baseapp import ( - "encoding/json" "fmt" "io" "runtime/debug" @@ -18,6 +17,7 @@ import ( "github.com/cosmos/cosmos-sdk/store" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/version" + "github.com/cosmos/cosmos-sdk/wire" ) // Key to store the header in the DB itself. @@ -335,11 +335,7 @@ func handleQueryApp(app *BaseApp, path []string, req abci.RequestQuery) (res abc } // Encode with json - value, err := json.Marshal(result) - if err != nil { - return sdk.ErrInternal("Encoding result failed").QueryResult() - } - + value := wire.Cdc.MustMarshalBinary(result) return abci.ResponseQuery{ Code: uint32(sdk.ABCICodeOK), Value: value, diff --git a/baseapp/baseapp_test.go b/baseapp/baseapp_test.go index c34c6d2704..26e398b4ed 100644 --- a/baseapp/baseapp_test.go +++ b/baseapp/baseapp_test.go @@ -3,7 +3,6 @@ package baseapp import ( "bytes" "encoding/binary" - "encoding/json" "fmt" "os" "testing" @@ -630,7 +629,7 @@ func TestSimulateTx(t *testing.T) { require.True(t, queryResult.IsOK(), queryResult.Log) var res sdk.Result - err = json.Unmarshal(queryResult.Value, &res) + wire.Cdc.MustUnmarshalBinary(queryResult.Value, &res) require.Nil(t, err, "Result unmarshalling failed") require.True(t, res.IsOK(), res.Log) require.Equal(t, gasConsumed, res.GasUsed, res.Log) From 1e87b5e02e7643a897dbdeee51cda10e88c9c856 Mon Sep 17 00:00:00 2001 From: Aditya Sripal Date: Thu, 19 Jul 2018 11:36:36 -0700 Subject: [PATCH 17/18] remove old comment --- baseapp/baseapp.go | 1 - 1 file changed, 1 deletion(-) diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index c3ab5e4dbc..bc4d629509 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -79,7 +79,6 @@ var _ abci.Application = (*BaseApp)(nil) // NOTE: The db is used to store the version number for now. // Accepts a user-defined txDecoder // Accepts variable number of option functions, which act on the BaseApp to set configuration choices -// TODO: Rename to NewBaseApp and remove above constructor once auth, wire dependencies removed func NewBaseApp(name string, logger log.Logger, db dbm.DB, txDecoder sdk.TxDecoder, options ...func(*BaseApp)) *BaseApp { app := &BaseApp{ Logger: logger, From 6198c203573f220e3483d4f280810538be1900b6 Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Sat, 21 Jul 2018 03:51:35 +0200 Subject: [PATCH 18/18] Remove duplicate changelog entry --- PENDING.md | 1 - 1 file changed, 1 deletion(-) diff --git a/PENDING.md b/PENDING.md index 91bf4a8ed3..2e1fffc3eb 100644 --- a/PENDING.md +++ b/PENDING.md @@ -33,7 +33,6 @@ IMPROVEMENTS * [baseapp] Allow any alphanumeric character in route * [cli] Improve error messages for all txs when the account doesn't exist * [tools] Remove `rm -rf vendor/` from `make get_vendor_deps` -* [x/stake] Add revoked to human-readable validator * [x/auth] Recover ErrorOutOfGas panic in order to set sdk.Result attributes correctly * [x/stake] Add revoked to human-readable validator * [x/gov] Votes on a proposal can now be queried