Skip to content

Commit

Permalink
Add consensus params into Simulation (#6002)
Browse files Browse the repository at this point in the history
* temporal commit

* add random consensus params

* make format

* make random pass

* remove comment

* revert change

* update ub key types

* extract Evidence params from state

* extract the random parameters from state

* clean the code

* update imports!

* mispelled back

* mispelled back

* add misspelled command

* update changelog

* remove useless linter to avoid misspell

* remove function

* use tendermint constants

Co-authored-by: Alexander Bezobchuk <alexanderbez@users.noreply.github.com>
  • Loading branch information
jgimeno and alexanderbez authored Apr 21, 2020
1 parent 71c62a4 commit 6504868
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 8 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,7 @@ functionality that requires an online connection.
* (types/rest) [\#5900](https://github.com/cosmos/cosmos-sdk/pull/5900) Add Check*Error function family to spare developers from replicating tons of boilerplate code.
* (x/evidence) [\#5952](https://github.com/cosmos/cosmos-sdk/pull/5952) Tendermint Consensus parameters can now be changed via parameter change proposals through `x/gov`.
* (x/auth/ante) [\#6040](https://github.com/cosmos/cosmos-sdk/pull/6040) `AccountKeeper` interface used for `NewAnteHandler` and handler's decorators to add support of using custom `AccountKeeper` implementations.
* (simulation) [\#6002](https://github.com/cosmos/cosmos-sdk/pull/6002) Add randomized consensus params into simulation.

## [v0.38.3] - 2020-04-09

Expand Down
8 changes: 4 additions & 4 deletions client/cmd_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,12 @@ func TestValidateCmd(t *testing.T) {
args []string
wantErr bool
}{
{"misspelled command", []string{"commission"}, true}, // nolint: misspell
{"misspelled command", []string{"COMMISSION"}, true},
{"no command provided", []string{}, false},
{"help flag", []string{"commission", "--help"}, false}, // nolint: misspell
{"shorthand help flag", []string{"commission", "-h"}, false}, // nolint: misspell
{"help flag", []string{"COMMISSION", "--help"}, false},
{"shorthand help flag", []string{"COMMISSION", "-h"}, false},
{"flag only, no command provided", []string{"--gas", "1000atom"}, false},
{"flag and misspelled command", []string{"--gas", "1000atom", "comission"}, true}, // nolint: misspell
{"flag and misspelled command", []string{"--gas", "1000atom", "COMMISSION"}, true},
}

for _, tt := range tests {
Expand Down
3 changes: 2 additions & 1 deletion x/ibc/09-localhost/types/localhost_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@ import (

"github.com/stretchr/testify/suite"

dbm "github.com/tendermint/tm-db"

"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/store/cachekv"
"github.com/cosmos/cosmos-sdk/store/dbadapter"
commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment/types"
dbm "github.com/tendermint/tm-db"
)

const (
Expand Down
38 changes: 38 additions & 0 deletions x/simulation/params.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
package simulation

import (
"encoding/json"
"fmt"
"math/rand"

"github.com/tendermint/tendermint/types"

"github.com/tendermint/go-amino"
abci "github.com/tendermint/tendermint/abci/types"

"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/types/simulation"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
)

const (
Expand Down Expand Up @@ -142,3 +150,33 @@ func (w WeightedProposalContent) DefaultWeight() int {
func (w WeightedProposalContent) ContentSimulatorFn() simulation.ContentSimulatorFn {
return w.contentSimulatorFn
}

//-----------------------------------------------------------------------------
// Param change proposals

// RandomParams returns random simulation consensus parameters, it extracts the Evidence from the Staking genesis state.
func RandomConsensusParams(r *rand.Rand, appState json.RawMessage) *abci.ConsensusParams {
cdc := amino.NewCodec()

var genesisState map[string]json.RawMessage
cdc.UnmarshalJSON(appState, &genesisState)

stakingGenesisState := stakingtypes.GetGenesisStateFromAppState(cdc, genesisState)

consensusParams := &abci.ConsensusParams{
Block: &abci.BlockParams{
MaxBytes: int64(simulation.RandIntBetween(r, 20000000, 30000000)),
MaxGas: -1,
},
Validator: &abci.ValidatorParams{
PubKeyTypes: []string{types.ABCIPubKeyTypeSecp256k1, types.ABCIPubKeyTypeEd25519},
},
Evidence: &abci.EvidenceParams{
MaxAgeNumBlocks: int64(stakingGenesisState.Params.UnbondingTime / AverageBlockTime),
MaxAgeDuration: stakingGenesisState.Params.UnbondingTime,
},
}
fmt.Printf("Selected randomly generated consensus parameters:\n%s\n", codec.MustMarshalJSONIndent(cdc, consensusParams))

return consensusParams
}
11 changes: 8 additions & 3 deletions x/simulation/simulate.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ import (
"github.com/cosmos/cosmos-sdk/types/simulation"
)

const AverageBlockTime = 6 * time.Second

// initialize the chain for the simulation
func initChain(
r *rand.Rand, params Params, accounts []simulation.Account, app *baseapp.BaseApp,
Expand All @@ -25,9 +27,12 @@ func initChain(

appState, accounts, chainID, genesisTimestamp := appStateFn(r, accounts, config)

consensusParams := RandomConsensusParams(r, appState)

req := abci.RequestInitChain{
AppStateBytes: appState,
ChainId: chainID,
AppStateBytes: appState,
ChainId: chainID,
ConsensusParams: consensusParams,
}
res := app.InitChain(req)
validators := newMockValidators(r, res.Validators, params)
Expand Down Expand Up @@ -108,7 +113,7 @@ func SimulateFromSeed(

// These are operations which have been queued by previous operations
operationQueue := NewOperationQueue()
timeOperationQueue := []simulation.FutureOperation{}
var timeOperationQueue []simulation.FutureOperation

logWriter := NewLogWriter(testingMode)

Expand Down
14 changes: 14 additions & 0 deletions x/staking/types/genesis.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package types

import (
"encoding/json"

"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
)

Expand Down Expand Up @@ -37,3 +40,14 @@ func DefaultGenesisState() GenesisState {
Params: DefaultParams(),
}
}

// GetGenesisStateFromAppState returns x/staking GenesisState given raw application
// genesis state.
func GetGenesisStateFromAppState(cdc *codec.Codec, appState map[string]json.RawMessage) GenesisState {
var genesisState GenesisState
if appState[ModuleName] != nil {
cdc.MustUnmarshalJSON(appState[ModuleName], &genesisState)
}

return genesisState
}

0 comments on commit 6504868

Please sign in to comment.