From 306a9a71704a67f746f2964255f11d5443c0d691 Mon Sep 17 00:00:00 2001 From: Marko Date: Wed, 5 Oct 2022 20:06:24 +0200 Subject: [PATCH] feat!: consensus module (#12905) --- CHANGELOG.md | 1 + UPGRADING.md | 53 ++++++- baseapp/abci_test.go | 25 +-- baseapp/baseapp.go | 45 ++---- baseapp/block_gas_test.go | 6 - baseapp/deliver_tx_test.go | 53 ++++--- baseapp/grpcrouter.go | 5 +- baseapp/params.go | 76 +-------- baseapp/params_legacy.go | 147 ++++++++++++++++++ baseapp/params_test.go | 65 -------- baseapp/util_test.go | 9 ++ contrib/rosetta/configuration/data.sh | 2 +- contrib/rosetta/rosetta-ci/data.tar.gz | Bin 44504 -> 42701 bytes simapp/app.go | 49 +++--- simapp/app_config.go | 8 + simapp/app_legacy.go | 42 ++--- simapp/upgrades.go | 35 +++-- .../e2e/client/grpc/tmservice/service_test.go | 1 + tests/integration/bank/keeper/keeper_test.go | 1 + tests/integration/genutil/gentx_test.go | 2 + tests/integration/gov/genesis_test.go | 2 + testutil/configurator/configurator.go | 13 ++ testutil/network/network.go | 2 + types/query/pagination_test.go | 2 + x/auth/testutil/app_config.go | 10 ++ x/authz/testutil/app_config.go | 10 ++ x/bank/app_test.go | 2 + x/bank/simulation/operations_test.go | 2 + x/capability/testutil/app_config.go | 10 ++ x/consensus/keeper/grpc_query_test.go | 5 +- x/consensus/keeper/keeper_test.go | 6 +- x/consensus/keeper/msg_server.go | 1 + x/consensus/module.go | 28 ++-- x/consensus/types/keys.go | 2 + x/consensus/types/msgs.go | 3 +- x/consensus/types/params.go | 3 +- x/consensus/types/util.go | 2 +- x/distribution/simulation/operations_test.go | 1 + x/distribution/testutil/app_config.go | 10 ++ x/evidence/testutil/app_config.go | 10 ++ x/feegrant/testutil/app_config.go | 10 ++ x/gov/common_test.go | 2 + x/gov/simulation/operations_test.go | 2 + x/group/testutil/app_config.go | 10 ++ x/mint/testutil/app_config.go | 10 ++ x/nft/testutil/app_config.go | 10 ++ x/params/module.go | 14 +- x/params/testutil/app_config.go | 10 ++ ...s_params.go => consensus_params_legacy.go} | 6 +- x/slashing/app_test.go | 1 + x/slashing/testutil/app_config.go | 10 ++ x/staking/testutil/app_config.go | 10 ++ x/staking/types/params_legacy.go | 2 +- x/upgrade/keeper/keeper.go | 3 +- 54 files changed, 541 insertions(+), 308 deletions(-) create mode 100644 baseapp/params_legacy.go delete mode 100644 baseapp/params_test.go rename x/params/types/{consensus_params.go => consensus_params_legacy.go} (63%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2843951c10db..c6446bc9cd7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (x/bank) [#11981](https://github.com/cosmos/cosmos-sdk/pull/11981) Create the `SetSendEnabled` endpoint for managing the bank's SendEnabled settings. * (x/auth) [#13210](https://github.com/cosmos/cosmos-sdk/pull/13210) Add `Query/AccountInfo` endpoint for simplified access to basic account info. * (cli) [#13147](https://github.com/cosmos/cosmos-sdk/pull/13147) Add the `--append` flag to the `sign-batch` CLI cmd to combine the messages and sign those txs which are created with `--generate-only`. +* (x/consensus) [#12905](https://github.com/cosmos/cosmos-sdk/pull/12905) Create a new `x/consensus` module that is now responsible for maintaining Tendermint consensus parameters instead of `x/param`. Legacy types remain in order to facilitate parameter migration from the deprecated `x/params`. App developers should ensure that they execute `baseapp.MigrateParams` during their chain upgrade. These legacy types will be removed in a future release. ### Improvements diff --git a/UPGRADING.md b/UPGRADING.md index 8821f85e1972..2aa309e6cd4b 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -52,8 +52,10 @@ Please use the `ghcr.io/cosmos/proto-builder` image (version >= `0.11.0`) for ge #### Broadcast Mode -Broadcast mode `block` was deprecated and has been removed. Please use `sync` mode instead. -When upgrading your tests from `block` to `sync` and checking for a transaction code, you need to query the transaction first (with its hash) to get the correct code. +Broadcast mode `block` was deprecated and has been removed. Please use `sync` mode +instead. When upgrading your tests from `block` to `sync` and checking for a +transaction code, you need to query the transaction first (with its hash) to get +the correct code. ### Modules @@ -69,6 +71,53 @@ By default, the new `MinInitialDepositRatio` parameter is set to zero during mig feature is disabled. If chains wish to utilize the minimum proposal deposits at time of submission, the migration logic needs to be modified to set the new parameter to the desired value. +#### `x/consensus` + +Introducing a new `x/consensus` module to handle managing Tendermint consensus +parameters. For migration it is required to call a specific migration to migrate +existing parameters from the deprecated `x/params` to `x/consensus` module. App +developers should ensure to call `baseapp.MigrateParams` in their upgrade handler. + +Example: + +```go +func (app SimApp) RegisterUpgradeHandlers() { + ----> baseAppLegacySS := app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable()) <---- + + app.UpgradeKeeper.SetUpgradeHandler( + UpgradeName, + func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + // Migrate Tendermint consensus parameters from x/params module to a + // dedicated x/consensus module. + ----> baseapp.MigrateParams(ctx, baseAppLegacySS, &app.ConsensusParamsKeeper) <---- + + // ... + + return app.ModuleManager.RunMigrations(ctx, app.Configurator(), fromVM) + }, + ) + + // ... +} +``` + +The old params module is required to still be imported in your app.go in order to handle this migration. + +##### App.go Changes + +Previous: + +```go +bApp.SetParamStore(app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable())) +``` + +After: + +```go +app.ConsensusParamsKeeper = consensusparamkeeper.NewKeeper(appCodec, keys[upgradetypes.StoreKey], authtypes.NewModuleAddress(govtypes.ModuleName).String()) +bApp.SetParamStore(&app.ConsensusParamsKeeper) +``` + ### Ledger Ledger support has been generalized to enable use of different apps and keytypes that use `secp256k1`. The Ledger interface remains the same, but it can now be provided through the Keyring `Options`, allowing higher-level chains to connect to different Ledger apps or use custom implementations. In addition, higher-level chains can provide custom key implementations around the Ledger public key, to enable greater flexibility with address generation and signing. diff --git a/baseapp/abci_test.go b/baseapp/abci_test.go index 7ff313c41a07..20b308cdfed8 100644 --- a/baseapp/abci_test.go +++ b/baseapp/abci_test.go @@ -2,6 +2,7 @@ package baseapp import ( "encoding/json" + "errors" "os" "testing" @@ -177,17 +178,19 @@ type paramStore struct { db *dbm.MemDB } -func (ps *paramStore) Set(_ sdk.Context, key []byte, value interface{}) { +var ParamstoreKey = []byte("paramstore") + +func (ps *paramStore) Set(_ sdk.Context, value *tmproto.ConsensusParams) { bz, err := json.Marshal(value) if err != nil { panic(err) } - ps.db.Set(key, bz) + ps.db.Set(ParamstoreKey, bz) } -func (ps *paramStore) Has(_ sdk.Context, key []byte) bool { - ok, err := ps.db.Has(key) +func (ps *paramStore) Has(_ sdk.Context) bool { + ok, err := ps.db.Has(ParamstoreKey) if err != nil { panic(err) } @@ -195,17 +198,21 @@ func (ps *paramStore) Has(_ sdk.Context, key []byte) bool { return ok } -func (ps *paramStore) Get(_ sdk.Context, key []byte, ptr interface{}) { - bz, err := ps.db.Get(key) +func (ps paramStore) Get(_ sdk.Context) (*tmproto.ConsensusParams, error) { + bz, err := ps.db.Get(ParamstoreKey) if err != nil { - panic(err) + return nil, err } if len(bz) == 0 { - return + return nil, errors.New("no consensus params") } - if err := json.Unmarshal(bz, ptr); err != nil { + var params tmproto.ConsensusParams + + if err := json.Unmarshal(bz, ¶ms); err != nil { panic(err) } + + return ¶ms, nil } diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index 247099390985..b9618ca989b2 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -5,6 +5,7 @@ import ( "sort" "strings" + "github.com/cosmos/gogoproto/proto" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto/tmhash" "github.com/tendermint/tendermint/libs/log" @@ -12,8 +13,6 @@ import ( dbm "github.com/tendermint/tm-db" "golang.org/x/exp/maps" - "github.com/cosmos/gogoproto/proto" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/snapshots" "github.com/cosmos/cosmos-sdk/store" @@ -407,39 +406,14 @@ func (app *BaseApp) GetConsensusParams(ctx sdk.Context) *tmproto.ConsensusParams return nil } - cp := new(tmproto.ConsensusParams) - - if app.paramStore.Has(ctx, ParamStoreKeyBlockParams) { - var bp tmproto.BlockParams - - app.paramStore.Get(ctx, ParamStoreKeyBlockParams, &bp) - cp.Block = &bp - } - - if app.paramStore.Has(ctx, ParamStoreKeyEvidenceParams) { - var ep tmproto.EvidenceParams - - app.paramStore.Get(ctx, ParamStoreKeyEvidenceParams, &ep) - cp.Evidence = &ep - } - - if app.paramStore.Has(ctx, ParamStoreKeyValidatorParams) { - var vp tmproto.ValidatorParams - - app.paramStore.Get(ctx, ParamStoreKeyValidatorParams, &vp) - cp.Validator = &vp + cp, err := app.paramStore.Get(ctx) + if err != nil { + panic(err) } return cp } -// AddRunTxRecoveryHandler adds custom app.runTx method panic handlers. -func (app *BaseApp) AddRunTxRecoveryHandler(handlers ...RecoveryHandler) { - for _, h := range handlers { - app.runTxRecoveryMiddleware = newRecoveryMiddleware(h, app.runTxRecoveryMiddleware) - } -} - // StoreConsensusParams sets the consensus parameters to the baseapp's param store. func (app *BaseApp) StoreConsensusParams(ctx sdk.Context, cp *tmproto.ConsensusParams) { if app.paramStore == nil { @@ -450,13 +424,18 @@ func (app *BaseApp) StoreConsensusParams(ctx sdk.Context, cp *tmproto.ConsensusP return } - app.paramStore.Set(ctx, ParamStoreKeyBlockParams, cp.Block) - app.paramStore.Set(ctx, ParamStoreKeyEvidenceParams, cp.Evidence) - app.paramStore.Set(ctx, ParamStoreKeyValidatorParams, cp.Validator) + app.paramStore.Set(ctx, cp) // We're explicitly not storing the Tendermint app_version in the param store. It's // stored instead in the x/upgrade store, with its own bump logic. } +// AddRunTxRecoveryHandler adds custom app.runTx method panic handlers. +func (app *BaseApp) AddRunTxRecoveryHandler(handlers ...RecoveryHandler) { + for _, h := range handlers { + app.runTxRecoveryMiddleware = newRecoveryMiddleware(h, app.runTxRecoveryMiddleware) + } +} + // getMaximumBlockGas gets the maximum gas from the consensus params. It panics // if maximum block gas is less than negative one and returns zero if negative // one. diff --git a/baseapp/block_gas_test.go b/baseapp/block_gas_test.go index 280b3bd4f2dc..47f2fbd351ce 100644 --- a/baseapp/block_gas_test.go +++ b/baseapp/block_gas_test.go @@ -32,8 +32,6 @@ import ( bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" - paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" - stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" ) var blockMaxGas = uint64(simtestutil.DefaultConsensusParams.Block.MaxGas) @@ -73,8 +71,6 @@ func TestBaseApp_BlockGas(t *testing.T) { var ( bankKeeper bankkeeper.Keeper accountKeeper authkeeper.AccountKeeper - paramsKeeper paramskeeper.Keeper - stakingKeeper *stakingkeeper.Keeper appBuilder *runtime.AppBuilder txConfig client.TxConfig cdc codec.Codec @@ -88,8 +84,6 @@ func TestBaseApp_BlockGas(t *testing.T) { err = depinject.Inject(appConfig, &bankKeeper, &accountKeeper, - ¶msKeeper, - &stakingKeeper, &interfaceRegistry, &txConfig, &cdc, diff --git a/baseapp/deliver_tx_test.go b/baseapp/deliver_tx_test.go index 453ddab35c48..b7daf0505bfc 100644 --- a/baseapp/deliver_tx_test.go +++ b/baseapp/deliver_tx_test.go @@ -5,6 +5,7 @@ import ( "context" "encoding/binary" "encoding/json" + "errors" "fmt" "math/rand" "net/url" @@ -17,6 +18,14 @@ import ( "unsafe" "cosmossdk.io/depinject" + "github.com/cosmos/gogoproto/jsonpb" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + abci "github.com/tendermint/tendermint/abci/types" + "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + dbm "github.com/tendermint/tm-db" + "github.com/cosmos/cosmos-sdk/baseapp" baseapptestutil "github.com/cosmos/cosmos-sdk/baseapp/testutil" "github.com/cosmos/cosmos-sdk/client" @@ -34,13 +43,6 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/signing" authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" - "github.com/cosmos/gogoproto/jsonpb" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/libs/log" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - dbm "github.com/tendermint/tm-db" ) var ( @@ -102,10 +104,13 @@ func setupBaseAppWithSnapshots(t *testing.T, config *setupConfig) (*baseapp.Base // patch in TxConfig instead of using an output from x/auth/tx txConfig := authtx.NewTxConfig(cdc, authtx.DefaultSignModes) + // set the TxDecoder in the BaseApp for minimal tx simulations app.SetTxDecoder(txConfig.TxDecoder()) - app.InitChain(abci.RequestInitChain{}) + app.InitChain(abci.RequestInitChain{ + ConsensusParams: &tmproto.ConsensusParams{}, + }) r := rand.New(rand.NewSource(3920758213583)) keyCounter := 0 @@ -571,9 +576,13 @@ func TestGRPCQuery(t *testing.T) { app := setupBaseApp(t, grpcQueryOpt) app.GRPCQueryRouter().SetInterfaceRegistry(codectypes.NewInterfaceRegistry()) - app.InitChain(abci.RequestInitChain{}) + app.InitChain(abci.RequestInitChain{ + ConsensusParams: &tmproto.ConsensusParams{}, + }) + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) + app.Commit() req := testdata.SayHelloRequest{Name: "foo"} @@ -1886,7 +1895,9 @@ func TestQuery(t *testing.T) { app.SetTxDecoder(txConfig.TxDecoder()) app.SetParamStore(¶mStore{db: dbm.NewMemDB()}) - app.InitChain(abci.RequestInitChain{}) + app.InitChain(abci.RequestInitChain{ + ConsensusParams: &tmproto.ConsensusParams{}, + }) // NOTE: "/store/key1" tells us KVStore // and the final "/key" says to use the data as the @@ -2152,17 +2163,19 @@ type paramStore struct { db *dbm.MemDB } -func (ps *paramStore) Set(_ sdk.Context, key []byte, value interface{}) { +var ParamstoreKey = []byte("paramstore") + +func (ps *paramStore) Set(_ sdk.Context, value *tmproto.ConsensusParams) { bz, err := json.Marshal(value) if err != nil { panic(err) } - ps.db.Set(key, bz) + ps.db.Set(ParamstoreKey, bz) } -func (ps *paramStore) Has(_ sdk.Context, key []byte) bool { - ok, err := ps.db.Has(key) +func (ps *paramStore) Has(_ sdk.Context) bool { + ok, err := ps.db.Has(ParamstoreKey) if err != nil { panic(err) } @@ -2170,17 +2183,21 @@ func (ps *paramStore) Has(_ sdk.Context, key []byte) bool { return ok } -func (ps *paramStore) Get(_ sdk.Context, key []byte, ptr interface{}) { - bz, err := ps.db.Get(key) +func (ps paramStore) Get(ctx sdk.Context) (*tmproto.ConsensusParams, error) { + bz, err := ps.db.Get(ParamstoreKey) if err != nil { panic(err) } if len(bz) == 0 { - return + return nil, errors.New("params not found") } - if err := json.Unmarshal(bz, ptr); err != nil { + var params tmproto.ConsensusParams + + if err := json.Unmarshal(bz, ¶ms); err != nil { panic(err) } + + return ¶ms, nil } diff --git a/baseapp/grpcrouter.go b/baseapp/grpcrouter.go index a92529a97ff3..d311f085c0e4 100644 --- a/baseapp/grpcrouter.go +++ b/baseapp/grpcrouter.go @@ -114,8 +114,5 @@ func (qrt *GRPCQueryRouter) SetInterfaceRegistry(interfaceRegistry codectypes.In qrt.cdc = codec.NewProtoCodec(interfaceRegistry).GRPCCodec() // Once we have an interface registry, we can register the interface // registry reflection gRPC service. - reflection.RegisterReflectionServiceServer( - qrt, - reflection.NewReflectionServiceServer(interfaceRegistry), - ) + reflection.RegisterReflectionServiceServer(qrt, reflection.NewReflectionServiceServer(interfaceRegistry)) } diff --git a/baseapp/params.go b/baseapp/params.go index 5cf31125b027..dec49a22e0dd 100644 --- a/baseapp/params.go +++ b/baseapp/params.go @@ -1,85 +1,15 @@ package baseapp import ( - "errors" - "fmt" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" ) -// Paramspace defines the parameter subspace to be used for the paramstore. -const Paramspace = "baseapp" - -// Parameter store keys for all the consensus parameter types. -var ( - ParamStoreKeyBlockParams = []byte("BlockParams") - ParamStoreKeyEvidenceParams = []byte("EvidenceParams") - ParamStoreKeyValidatorParams = []byte("ValidatorParams") -) - // ParamStore defines the interface the parameter store used by the BaseApp must // fulfill. type ParamStore interface { - Get(ctx sdk.Context, key []byte, ptr interface{}) - Has(ctx sdk.Context, key []byte) bool - Set(ctx sdk.Context, key []byte, param interface{}) -} - -// ValidateBlockParams defines a stateless validation on BlockParams. This function -// is called whenever the parameters are updated or stored. -func ValidateBlockParams(i interface{}) error { - v, ok := i.(tmproto.BlockParams) - if !ok { - return fmt.Errorf("invalid parameter type: %T", i) - } - - if v.MaxBytes <= 0 { - return fmt.Errorf("block maximum bytes must be positive: %d", v.MaxBytes) - } - - if v.MaxGas < -1 { - return fmt.Errorf("block maximum gas must be greater than or equal to -1: %d", v.MaxGas) - } - - return nil -} - -// ValidateEvidenceParams defines a stateless validation on EvidenceParams. This -// function is called whenever the parameters are updated or stored. -func ValidateEvidenceParams(i interface{}) error { - v, ok := i.(tmproto.EvidenceParams) - if !ok { - return fmt.Errorf("invalid parameter type: %T", i) - } - - if v.MaxAgeNumBlocks <= 0 { - return fmt.Errorf("evidence maximum age in blocks must be positive: %d", v.MaxAgeNumBlocks) - } - - if v.MaxAgeDuration <= 0 { - return fmt.Errorf("evidence maximum age time duration must be positive: %v", v.MaxAgeDuration) - } - - if v.MaxBytes < 0 { - return fmt.Errorf("maximum evidence bytes must be non-negative: %v", v.MaxBytes) - } - - return nil -} - -// ValidateValidatorParams defines a stateless validation on ValidatorParams. This -// function is called whenever the parameters are updated or stored. -func ValidateValidatorParams(i interface{}) error { - v, ok := i.(tmproto.ValidatorParams) - if !ok { - return fmt.Errorf("invalid parameter type: %T", i) - } - - if len(v.PubKeyTypes) == 0 { - return errors.New("validator allowed pubkey types must not be empty") - } - - return nil + Get(ctx sdk.Context) (*tmproto.ConsensusParams, error) + Has(ctx sdk.Context) bool + Set(ctx sdk.Context, cp *tmproto.ConsensusParams) } diff --git a/baseapp/params_legacy.go b/baseapp/params_legacy.go new file mode 100644 index 000000000000..8fed7253df0d --- /dev/null +++ b/baseapp/params_legacy.go @@ -0,0 +1,147 @@ +/* +Deprecated. + +Legacy types are defined below to aid in the migration of Tendermint consensus +parameters from use of the now deprecated x/params modules to a new dedicated +x/consensus module. + +Application developers should ensure that they implement their upgrade handler +correctly such that app.ConsensusParamsKeeper.Set() is called with the values +returned by GetConsensusParams(). + +Example: + + baseAppLegacySS := app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable()) + + app.UpgradeKeeper.SetUpgradeHandler( + UpgradeName, + func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + if cp := baseapp.GetConsensusParams(ctx, baseAppLegacySS); cp != nil { + app.ConsensusParamsKeeper.Set(ctx, cp) + } else { + ctx.Logger().Info("warning: consensus parameters are undefined; skipping migration", "upgrade", UpgradeName) + } + + return app.ModuleManager.RunMigrations(ctx, app.Configurator(), fromVM) + }, + ) + +Developers can also bypass the use of the legacy Params subspace and set the +values to app.ConsensusParamsKeeper.Set() explicitly. + +Note, for new chains this is not necessary as Tendermint's consensus parameters +will automatically be set for you in InitChain. +*/ +package baseapp + +import ( + "errors" + "fmt" + + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +const Paramspace = "baseapp" + +var ( + ParamStoreKeyBlockParams = []byte("BlockParams") + ParamStoreKeyEvidenceParams = []byte("EvidenceParams") + ParamStoreKeyValidatorParams = []byte("ValidatorParams") +) + +type LegacyParamStore interface { + Get(ctx sdk.Context, key []byte, ptr interface{}) + Has(ctx sdk.Context, key []byte) bool +} + +func ValidateBlockParams(i interface{}) error { + v, ok := i.(tmproto.BlockParams) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + if v.MaxBytes <= 0 { + return fmt.Errorf("block maximum bytes must be positive: %d", v.MaxBytes) + } + + if v.MaxGas < -1 { + return fmt.Errorf("block maximum gas must be greater than or equal to -1: %d", v.MaxGas) + } + + return nil +} + +func ValidateEvidenceParams(i interface{}) error { + v, ok := i.(tmproto.EvidenceParams) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + if v.MaxAgeNumBlocks <= 0 { + return fmt.Errorf("evidence maximum age in blocks must be positive: %d", v.MaxAgeNumBlocks) + } + + if v.MaxAgeDuration <= 0 { + return fmt.Errorf("evidence maximum age time duration must be positive: %v", v.MaxAgeDuration) + } + + if v.MaxBytes < 0 { + return fmt.Errorf("maximum evidence bytes must be non-negative: %v", v.MaxBytes) + } + + return nil +} + +func ValidateValidatorParams(i interface{}) error { + v, ok := i.(tmproto.ValidatorParams) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + if len(v.PubKeyTypes) == 0 { + return errors.New("validator allowed pubkey types must not be empty") + } + + return nil +} + +func GetConsensusParams(ctx sdk.Context, paramStore LegacyParamStore) *tmproto.ConsensusParams { + if paramStore == nil { + return nil + } + + cp := new(tmproto.ConsensusParams) + + if paramStore.Has(ctx, ParamStoreKeyBlockParams) { + var bp tmproto.BlockParams + + paramStore.Get(ctx, ParamStoreKeyBlockParams, &bp) + cp.Block = &bp + } + + if paramStore.Has(ctx, ParamStoreKeyEvidenceParams) { + var ep tmproto.EvidenceParams + + paramStore.Get(ctx, ParamStoreKeyEvidenceParams, &ep) + cp.Evidence = &ep + } + + if paramStore.Has(ctx, ParamStoreKeyValidatorParams) { + var vp tmproto.ValidatorParams + + paramStore.Get(ctx, ParamStoreKeyValidatorParams, &vp) + cp.Validator = &vp + } + + return cp +} + +func MigrateParams(ctx sdk.Context, lps LegacyParamStore, ps ParamStore) { + if cp := GetConsensusParams(ctx, lps); cp != nil { + ps.Set(ctx, cp) + } else { + ctx.Logger().Info("warning: consensus parameters are undefined; skipping migration") + } +} diff --git a/baseapp/params_test.go b/baseapp/params_test.go deleted file mode 100644 index 3f9d26a56f2f..000000000000 --- a/baseapp/params_test.go +++ /dev/null @@ -1,65 +0,0 @@ -package baseapp_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - - "github.com/cosmos/cosmos-sdk/baseapp" -) - -func TestValidateBlockParams(t *testing.T) { - testCases := []struct { - arg interface{} - expectErr bool - }{ - {nil, true}, - {&tmproto.BlockParams{}, true}, - {tmproto.BlockParams{}, true}, - {tmproto.BlockParams{MaxBytes: -1, MaxGas: -1}, true}, - {tmproto.BlockParams{MaxBytes: 2000000, MaxGas: -5}, true}, - {tmproto.BlockParams{MaxBytes: 2000000, MaxGas: 300000}, false}, - } - - for _, tc := range testCases { - require.Equal(t, tc.expectErr, baseapp.ValidateBlockParams(tc.arg) != nil) - } -} - -func TestValidateEvidenceParams(t *testing.T) { - testCases := []struct { - arg interface{} - expectErr bool - }{ - {nil, true}, - {&tmproto.EvidenceParams{}, true}, - {tmproto.EvidenceParams{}, true}, - {tmproto.EvidenceParams{MaxAgeNumBlocks: -1, MaxAgeDuration: 18004000, MaxBytes: 5000000}, true}, - {tmproto.EvidenceParams{MaxAgeNumBlocks: 360000, MaxAgeDuration: -1, MaxBytes: 5000000}, true}, - {tmproto.EvidenceParams{MaxAgeNumBlocks: 360000, MaxAgeDuration: 18004000, MaxBytes: -1}, true}, - {tmproto.EvidenceParams{MaxAgeNumBlocks: 360000, MaxAgeDuration: 18004000, MaxBytes: 5000000}, false}, - {tmproto.EvidenceParams{MaxAgeNumBlocks: 360000, MaxAgeDuration: 18004000, MaxBytes: 0}, false}, - } - - for _, tc := range testCases { - require.Equal(t, tc.expectErr, baseapp.ValidateEvidenceParams(tc.arg) != nil) - } -} - -func TestValidateValidatorParams(t *testing.T) { - testCases := []struct { - arg interface{} - expectErr bool - }{ - {nil, true}, - {&tmproto.ValidatorParams{}, true}, - {tmproto.ValidatorParams{}, true}, - {tmproto.ValidatorParams{PubKeyTypes: []string{}}, true}, - {tmproto.ValidatorParams{PubKeyTypes: []string{"secp256k1"}}, false}, - } - - for _, tc := range testCases { - require.Equal(t, tc.expectErr, baseapp.ValidateValidatorParams(tc.arg) != nil) - } -} diff --git a/baseapp/util_test.go b/baseapp/util_test.go index 55d6137212c2..8acd70d52884 100644 --- a/baseapp/util_test.go +++ b/baseapp/util_test.go @@ -11,6 +11,7 @@ import ( appv1alpha1 "cosmossdk.io/api/cosmos/app/v1alpha1" authmodulev1 "cosmossdk.io/api/cosmos/auth/module/v1" bankmodulev1 "cosmossdk.io/api/cosmos/bank/module/v1" + consensusmodulev1 "cosmossdk.io/api/cosmos/consensus/module/v1" mintmodulev1 "cosmossdk.io/api/cosmos/mint/module/v1" paramsmodulev1 "cosmossdk.io/api/cosmos/params/module/v1" stakingmodulev1 "cosmossdk.io/api/cosmos/staking/module/v1" @@ -28,6 +29,7 @@ import ( authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" _ "github.com/cosmos/cosmos-sdk/x/bank" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + _ "github.com/cosmos/cosmos-sdk/x/consensus" _ "github.com/cosmos/cosmos-sdk/x/mint" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" _ "github.com/cosmos/cosmos-sdk/x/params" @@ -79,6 +81,7 @@ func makeTestConfig() depinject.Config { "auth", "bank", "params", + "consensus", }, EndBlockers: []string{ "staking", @@ -86,6 +89,7 @@ func makeTestConfig() depinject.Config { "bank", "mint", "params", + "consensus", }, OverrideStoreKeys: []*runtimev1alpha1.StoreKeyConfig{ { @@ -99,6 +103,7 @@ func makeTestConfig() depinject.Config { "staking", "mint", "params", + "consensus", }, }), }, @@ -130,6 +135,10 @@ func makeTestConfig() depinject.Config { Name: "mint", Config: appconfig.WrapAny(&mintmodulev1.Module{}), }, + { + Name: "consensus", + Config: appconfig.WrapAny(&consensusmodulev1.Module{}), + }, { Name: "tx", Config: appconfig.WrapAny(&txmodulev1.Module{}), diff --git a/contrib/rosetta/configuration/data.sh b/contrib/rosetta/configuration/data.sh index 51806fcea631..22bdcbacb0b3 100644 --- a/contrib/rosetta/configuration/data.sh +++ b/contrib/rosetta/configuration/data.sh @@ -45,7 +45,7 @@ sleep 10 # send transaction to deterministic address echo sending transaction with addr $addr -simd tx bank send "$addr" cosmos19g9cm8ymzchq2qkcdv3zgqtwayj9asv3hjv5u5 100stake --yes --keyring-backend=test --broadcast-mode=block --chain-id=testing +simd tx bank send "$addr" cosmos19g9cm8ymzchq2qkcdv3zgqtwayj9asv3hjv5u5 100stake --yes --keyring-backend=test --chain-id=testing sleep 10 diff --git a/contrib/rosetta/rosetta-ci/data.tar.gz b/contrib/rosetta/rosetta-ci/data.tar.gz index 7290a7bc1a8127f47389e058050c55b2ab613188..2f2dc13dc5a5c8b285cdd711af2b4270648f5d1c 100644 GIT binary patch literal 42701 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Ν5oHRfW(qC^n(G+f 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