github.com/Finschia/finschia-sdk@v0.48.1/x/distribution/simulation/proposals.go (about) 1 package simulation 2 3 import ( 4 "math/rand" 5 6 simappparams "github.com/Finschia/finschia-sdk/simapp/params" 7 sdk "github.com/Finschia/finschia-sdk/types" 8 simtypes "github.com/Finschia/finschia-sdk/types/simulation" 9 "github.com/Finschia/finschia-sdk/x/distribution/keeper" 10 "github.com/Finschia/finschia-sdk/x/distribution/types" 11 "github.com/Finschia/finschia-sdk/x/simulation" 12 ) 13 14 // OpWeightSubmitCommunitySpendProposal app params key for community spend proposal 15 const OpWeightSubmitCommunitySpendProposal = "op_weight_submit_community_spend_proposal" 16 17 // ProposalContents defines the module weighted proposals' contents 18 func ProposalContents(k keeper.Keeper) []simtypes.WeightedProposalContent { 19 return []simtypes.WeightedProposalContent{ 20 simulation.NewWeightedProposalContent( 21 OpWeightSubmitCommunitySpendProposal, 22 simappparams.DefaultWeightCommunitySpendProposal, 23 SimulateCommunityPoolSpendProposalContent(k), 24 ), 25 } 26 } 27 28 // SimulateCommunityPoolSpendProposalContent generates random community-pool-spend proposal content 29 func SimulateCommunityPoolSpendProposalContent(k keeper.Keeper) simtypes.ContentSimulatorFn { 30 return func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) simtypes.Content { 31 simAccount, _ := simtypes.RandomAcc(r, accs) 32 33 balance := k.GetFeePool(ctx).CommunityPool 34 if balance.Empty() { 35 return nil 36 } 37 38 denomIndex := r.Intn(len(balance)) 39 amount, err := simtypes.RandPositiveInt(r, balance[denomIndex].Amount.TruncateInt()) 40 if err != nil { 41 return nil 42 } 43 44 return types.NewCommunityPoolSpendProposal( 45 simtypes.RandStringOfLength(r, 10), 46 simtypes.RandStringOfLength(r, 100), 47 simAccount.Address, 48 sdk.NewCoins(sdk.NewCoin(balance[denomIndex].Denom, amount)), 49 ) 50 } 51 }