github.com/Finschia/finschia-sdk@v0.48.1/x/mint/simulation/genesis.go (about)

     1  package simulation
     2  
     3  // DONTCOVER
     4  
     5  import (
     6  	"encoding/json"
     7  	"fmt"
     8  	"math/rand"
     9  
    10  	sdk "github.com/Finschia/finschia-sdk/types"
    11  	"github.com/Finschia/finschia-sdk/types/module"
    12  	"github.com/Finschia/finschia-sdk/x/mint/types"
    13  )
    14  
    15  // Simulation parameter constants
    16  const (
    17  	Inflation           = "inflation"
    18  	InflationRateChange = "inflation_rate_change"
    19  	InflationMax        = "inflation_max"
    20  	InflationMin        = "inflation_min"
    21  	GoalBonded          = "goal_bonded"
    22  )
    23  
    24  // GenInflation randomized Inflation
    25  func GenInflation(r *rand.Rand) sdk.Dec {
    26  	return sdk.NewDecWithPrec(int64(r.Intn(99)), 2)
    27  }
    28  
    29  // GenInflationRateChange randomized InflationRateChange
    30  func GenInflationRateChange(r *rand.Rand) sdk.Dec {
    31  	return sdk.NewDecWithPrec(int64(r.Intn(99)), 2)
    32  }
    33  
    34  // GenInflationMax randomized InflationMax
    35  func GenInflationMax(r *rand.Rand) sdk.Dec {
    36  	return sdk.NewDecWithPrec(20, 2)
    37  }
    38  
    39  // GenInflationMin randomized InflationMin
    40  func GenInflationMin(r *rand.Rand) sdk.Dec {
    41  	return sdk.NewDecWithPrec(7, 2)
    42  }
    43  
    44  // GenGoalBonded randomized GoalBonded
    45  func GenGoalBonded(r *rand.Rand) sdk.Dec {
    46  	return sdk.NewDecWithPrec(67, 2)
    47  }
    48  
    49  // RandomizedGenState generates a random GenesisState for mint
    50  func RandomizedGenState(simState *module.SimulationState) {
    51  	// minter
    52  	var inflation sdk.Dec
    53  	simState.AppParams.GetOrGenerate(
    54  		simState.Cdc, Inflation, &inflation, simState.Rand,
    55  		func(r *rand.Rand) { inflation = GenInflation(r) },
    56  	)
    57  
    58  	// params
    59  	var inflationRateChange sdk.Dec
    60  	simState.AppParams.GetOrGenerate(
    61  		simState.Cdc, InflationRateChange, &inflationRateChange, simState.Rand,
    62  		func(r *rand.Rand) { inflationRateChange = GenInflationRateChange(r) },
    63  	)
    64  
    65  	var inflationMax sdk.Dec
    66  	simState.AppParams.GetOrGenerate(
    67  		simState.Cdc, InflationMax, &inflationMax, simState.Rand,
    68  		func(r *rand.Rand) { inflationMax = GenInflationMax(r) },
    69  	)
    70  
    71  	var inflationMin sdk.Dec
    72  	simState.AppParams.GetOrGenerate(
    73  		simState.Cdc, InflationMin, &inflationMin, simState.Rand,
    74  		func(r *rand.Rand) { inflationMin = GenInflationMin(r) },
    75  	)
    76  
    77  	var goalBonded sdk.Dec
    78  	simState.AppParams.GetOrGenerate(
    79  		simState.Cdc, GoalBonded, &goalBonded, simState.Rand,
    80  		func(r *rand.Rand) { goalBonded = GenGoalBonded(r) },
    81  	)
    82  
    83  	mintDenom := sdk.DefaultBondDenom
    84  	blocksPerYear := uint64(60 * 60 * 8766 / 5)
    85  	params := types.NewParams(mintDenom, inflationRateChange, inflationMax, inflationMin, goalBonded, blocksPerYear)
    86  
    87  	mintGenesis := types.NewGenesisState(types.InitialMinter(inflation), params)
    88  
    89  	bz, err := json.MarshalIndent(&mintGenesis, "", " ")
    90  	if err != nil {
    91  		panic(err)
    92  	}
    93  	fmt.Printf("Selected randomly generated minting parameters:\n%s\n", bz)
    94  	simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(mintGenesis)
    95  }