github.com/Finschia/finschia-sdk@v0.48.1/x/distribution/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/distribution/types"
    13  )
    14  
    15  // Simulation parameter constants
    16  const (
    17  	CommunityTax        = "community_tax"
    18  	BaseProposerReward  = "base_proposer_reward"
    19  	BonusProposerReward = "bonus_proposer_reward"
    20  	WithdrawEnabled     = "withdraw_enabled"
    21  )
    22  
    23  // GenCommunityTax randomized CommunityTax
    24  func GenCommunityTax(r *rand.Rand) sdk.Dec {
    25  	return sdk.NewDecWithPrec(1, 2).Add(sdk.NewDecWithPrec(int64(r.Intn(30)), 2))
    26  }
    27  
    28  // GenBaseProposerReward randomized BaseProposerReward
    29  func GenBaseProposerReward(r *rand.Rand) sdk.Dec {
    30  	return sdk.NewDecWithPrec(1, 2).Add(sdk.NewDecWithPrec(int64(r.Intn(30)), 2))
    31  }
    32  
    33  // GenBonusProposerReward randomized BonusProposerReward
    34  func GenBonusProposerReward(r *rand.Rand) sdk.Dec {
    35  	return sdk.NewDecWithPrec(1, 2).Add(sdk.NewDecWithPrec(int64(r.Intn(30)), 2))
    36  }
    37  
    38  // GenWithdrawEnabled returns a randomized WithdrawEnabled parameter.
    39  func GenWithdrawEnabled(r *rand.Rand) bool {
    40  	return r.Int63n(101) <= 95 // 95% chance of withdraws being enabled
    41  }
    42  
    43  // RandomizedGenState generates a random GenesisState for distribution
    44  func RandomizedGenState(simState *module.SimulationState) {
    45  	var communityTax sdk.Dec
    46  	simState.AppParams.GetOrGenerate(
    47  		simState.Cdc, CommunityTax, &communityTax, simState.Rand,
    48  		func(r *rand.Rand) { communityTax = GenCommunityTax(r) },
    49  	)
    50  
    51  	var baseProposerReward sdk.Dec
    52  	simState.AppParams.GetOrGenerate(
    53  		simState.Cdc, BaseProposerReward, &baseProposerReward, simState.Rand,
    54  		func(r *rand.Rand) { baseProposerReward = GenBaseProposerReward(r) },
    55  	)
    56  
    57  	var bonusProposerReward sdk.Dec
    58  	simState.AppParams.GetOrGenerate(
    59  		simState.Cdc, BonusProposerReward, &bonusProposerReward, simState.Rand,
    60  		func(r *rand.Rand) { bonusProposerReward = GenBonusProposerReward(r) },
    61  	)
    62  
    63  	var withdrawEnabled bool
    64  	simState.AppParams.GetOrGenerate(
    65  		simState.Cdc, WithdrawEnabled, &withdrawEnabled, simState.Rand,
    66  		func(r *rand.Rand) { withdrawEnabled = GenWithdrawEnabled(r) },
    67  	)
    68  
    69  	distrGenesis := types.GenesisState{
    70  		FeePool: types.InitialFeePool(),
    71  		Params: types.Params{
    72  			CommunityTax:        communityTax,
    73  			BaseProposerReward:  baseProposerReward,
    74  			BonusProposerReward: bonusProposerReward,
    75  			WithdrawAddrEnabled: withdrawEnabled,
    76  		},
    77  	}
    78  
    79  	bz, err := json.MarshalIndent(&distrGenesis, "", " ")
    80  	if err != nil {
    81  		panic(err)
    82  	}
    83  	fmt.Printf("Selected randomly generated distribution parameters:\n%s\n", bz)
    84  	simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(&distrGenesis)
    85  }