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 }