github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/gov/simulation/params.go (about)

     1  package simulation
     2  
     3  // DONTCOVER
     4  
     5  import (
     6  	"encoding/json"
     7  	"fmt"
     8  	"math/rand"
     9  
    10  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    11  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/gov/types"
    12  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/simulation"
    13  )
    14  
    15  const (
    16  	keyVotingParams  = "votingparams"
    17  	keyDepositParams = "depositparams"
    18  	keyTallyParams   = "tallyparams"
    19  	subkeyQuorum     = "quorum"
    20  	subkeyThreshold  = "threshold"
    21  	subkeyVeto       = "veto"
    22  )
    23  
    24  // ParamChanges defines the parameters that can be modified by param change proposals
    25  // on the simulation
    26  func ParamChanges(r *rand.Rand) []simulation.ParamChange {
    27  	return []simulation.ParamChange{
    28  		simulation.NewSimParamChange(types.ModuleName, keyVotingParams,
    29  			func(r *rand.Rand) string {
    30  				return fmt.Sprintf(`{"voting_period": "%d"}`, GenVotingParamsVotingPeriod(r))
    31  			},
    32  		),
    33  		simulation.NewSimParamChange(types.ModuleName, keyDepositParams,
    34  			func(r *rand.Rand) string {
    35  				return fmt.Sprintf(`{"max_deposit_period": "%d"}`, GenDepositParamsDepositPeriod(r))
    36  			},
    37  		),
    38  		simulation.NewSimParamChange(types.ModuleName, keyTallyParams,
    39  			func(r *rand.Rand) string {
    40  				changes := []struct {
    41  					key   string
    42  					value sdk.Dec
    43  				}{
    44  					{subkeyQuorum, GenTallyParamsQuorum(r)},
    45  					{subkeyThreshold, GenTallyParamsThreshold(r)},
    46  					{subkeyVeto, GenTallyParamsVeto(r)},
    47  				}
    48  
    49  				pc := make(map[string]string)
    50  				numChanges := simulation.RandIntBetween(r, 1, len(changes))
    51  				for i := 0; i < numChanges; i++ {
    52  					c := changes[r.Intn(len(changes))]
    53  
    54  					_, ok := pc[c.key]
    55  					for ok {
    56  						c := changes[r.Intn(len(changes))]
    57  						_, ok = pc[c.key]
    58  					}
    59  
    60  					pc[c.key] = c.value.String()
    61  				}
    62  
    63  				bz, _ := json.Marshal(pc)
    64  				return string(bz)
    65  			},
    66  		),
    67  	}
    68  }