Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add consensus params into Simulation #6002

Merged
merged 25 commits into from
Apr 21, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
752859c
temporal commit
jgimeno Apr 16, 2020
4b61cd1
add random consensus params
jgimeno Apr 17, 2020
351069a
Merge branch 'master' into jonathan/5988-sim-params-consensus
jgimeno Apr 17, 2020
bfbd275
make format
jgimeno Apr 17, 2020
ef06bbc
Merge branch 'master' into jonathan/5988-sim-params-consensus
jgimeno Apr 20, 2020
e734a7f
make random pass
jgimeno Apr 20, 2020
ede19d9
remove comment
jgimeno Apr 20, 2020
c275138
revert change
jgimeno Apr 20, 2020
b1a3403
update ub key types
jgimeno Apr 20, 2020
42b4c70
extract Evidence params from state
jgimeno Apr 20, 2020
d2382c9
extract the random parameters from state
jgimeno Apr 20, 2020
2f36081
clean the code
jgimeno Apr 20, 2020
cdcb9e9
Merge branch 'master' into jonathan/5988-sim-params-consensus
jgimeno Apr 20, 2020
af3c2fc
update imports!
jgimeno Apr 20, 2020
2b98aff
mispelled back
jgimeno Apr 20, 2020
d1d3355
mispelled back
jgimeno Apr 20, 2020
0e9ec1b
add misspelled command
jgimeno Apr 20, 2020
4125431
update changelog
jgimeno Apr 21, 2020
84341c8
Merge branch 'master' into jonathan/5988-sim-params-consensus
jgimeno Apr 21, 2020
d09de06
remove useless linter to avoid misspell
jgimeno Apr 21, 2020
2b3a6f3
Merge branch 'master' into jonathan/5988-sim-params-consensus
alexanderbez Apr 21, 2020
6c0e4ff
remove function
jgimeno Apr 21, 2020
2e52fcf
use tendermint constants
jgimeno Apr 21, 2020
fc895f0
Merge branch 'master' into jonathan/5988-sim-params-consensus
jgimeno Apr 21, 2020
6cf3eb0
Merge branch 'master' into jonathan/5988-sim-params-consensus
jgimeno Apr 21, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this even called/used? I'd opt to remove it.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah in x/simulation/params.go line 182

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok so you removed the other, now removed private helper function 👍

var genesisState GenesisState
if appState[ModuleName] != nil {
cdc.MustUnmarshalJSON(appState[ModuleName], &genesisState)
}

return genesisState
}