From e7f1765326c55fb6d307e051232b832c345dfec7 Mon Sep 17 00:00:00 2001
From: mmsqe <mavis@crypto.com>
Date: Wed, 28 Jun 2023 06:59:54 +0800
Subject: [PATCH] feat: add custom max gas for block for sim config (#16656)

(cherry picked from commit 9b2fd7bad9eac5015d10ed76c798826bfd63d44d)
---
 CHANGELOG.md               | 4 ++++
 types/simulation/config.go | 3 ++-
 x/simulation/params.go     | 4 ++--
 x/simulation/simulate.go   | 6 +++++-
 4 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9b6baef85616..4f776db70db5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -38,6 +38,10 @@ Ref: https://keepachangelog.com/en/1.0.0/
 
 ## [Unreleased]
 
+### Features
+
+* (sims) [#16656](https://github.com/cosmos/cosmos-sdk/pull/16656) Add custom max gas for block for sim config with unlimited as default.
+
 ### Improvements
 
 * (all) [#16497](https://github.com/cosmos/cosmos-sdk/pull/16497) Removed all exported vestiges of `sdk.MustSortJSON` and `sdk.SortJSON`.
diff --git a/types/simulation/config.go b/types/simulation/config.go
index 7f520004d478..4ed9530a92bc 100644
--- a/types/simulation/config.go
+++ b/types/simulation/config.go
@@ -22,5 +22,6 @@ type Config struct {
 	OnOperation   bool // run slow invariants every operation
 	AllInvariants bool // print all failed invariants if a broken invariant is found
 
-	DBBackend string // custom db backend type
+	DBBackend   string // custom db backend type
+	BlockMaxGas int64  // custom max gas for block
 }
diff --git a/x/simulation/params.go b/x/simulation/params.go
index 73b520a0fd74..7be6d77ae08b 100644
--- a/x/simulation/params.go
+++ b/x/simulation/params.go
@@ -176,7 +176,7 @@ func (w WeightedProposalContent) ContentSimulatorFn() simulation.ContentSimulato
 // Consensus Params
 
 // randomConsensusParams returns random simulation consensus parameters, it extracts the Evidence from the Staking genesis state.
-func randomConsensusParams(r *rand.Rand, appState json.RawMessage, cdc codec.JSONCodec) *cmtproto.ConsensusParams {
+func randomConsensusParams(r *rand.Rand, appState json.RawMessage, cdc codec.JSONCodec, maxGas int64) *cmtproto.ConsensusParams {
 	var genesisState map[string]json.RawMessage
 	err := json.Unmarshal(appState, &genesisState)
 	if err != nil {
@@ -187,7 +187,7 @@ func randomConsensusParams(r *rand.Rand, appState json.RawMessage, cdc codec.JSO
 	consensusParams := &cmtproto.ConsensusParams{
 		Block: &cmtproto.BlockParams{
 			MaxBytes: int64(simulation.RandIntBetween(r, 20000000, 30000000)),
-			MaxGas:   -1,
+			MaxGas:   maxGas,
 		},
 		Validator: &cmtproto.ValidatorParams{
 			PubKeyTypes: []string{types.ABCIPubKeyTypeEd25519},
diff --git a/x/simulation/simulate.go b/x/simulation/simulate.go
index 2583e39aacb4..4ee83ea8d6a8 100644
--- a/x/simulation/simulate.go
+++ b/x/simulation/simulate.go
@@ -31,8 +31,12 @@ func initChain(
 	config simulation.Config,
 	cdc codec.JSONCodec,
 ) (mockValidators, time.Time, []simulation.Account, string) {
+	blockMaxGas := int64(-1)
+	if config.BlockMaxGas > 0 {
+		blockMaxGas = config.BlockMaxGas
+	}
 	appState, accounts, chainID, genesisTimestamp := appStateFn(r, accounts, config)
-	consensusParams := randomConsensusParams(r, appState, cdc)
+	consensusParams := randomConsensusParams(r, appState, cdc, blockMaxGas)
 	req := abci.RequestInitChain{
 		AppStateBytes:   appState,
 		ChainId:         chainID,