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

     1  package simulation
     2  
     3  import (
     4  	"fmt"
     5  	"math/rand"
     6  
     7  	sdk "github.com/Finschia/finschia-sdk/types"
     8  	"github.com/Finschia/finschia-sdk/types/simulation"
     9  	"github.com/Finschia/finschia-sdk/x/params/types/proposal"
    10  )
    11  
    12  func min(a int, b int) int {
    13  	if a <= b {
    14  		return a
    15  	}
    16  	return b
    17  }
    18  
    19  // SimulateParamChangeProposalContent returns random parameter change content.
    20  // It will generate a ParameterChangeProposal object with anywhere between 1 and
    21  // the total amount of defined parameters changes, all of which have random valid values.
    22  func SimulateParamChangeProposalContent(paramChangePool []simulation.ParamChange) simulation.ContentSimulatorFn {
    23  	numProposals := 0
    24  	// Bound the maximum number of simultaneous parameter changes
    25  	maxSimultaneousParamChanges := min(len(paramChangePool), 1000)
    26  	if maxSimultaneousParamChanges == 0 {
    27  		panic("param changes array is empty")
    28  	}
    29  
    30  	return func(r *rand.Rand, _ sdk.Context, _ []simulation.Account) simulation.Content {
    31  		numChanges := simulation.RandIntBetween(r, 1, maxSimultaneousParamChanges)
    32  		paramChanges := make([]proposal.ParamChange, numChanges)
    33  
    34  		// perm here takes at most len(paramChangePool) calls to random
    35  		paramChoices := r.Perm(len(paramChangePool))
    36  
    37  		for i := 0; i < numChanges; i++ {
    38  			spc := paramChangePool[paramChoices[i]]
    39  			// add a new distinct parameter to the set of changes
    40  			paramChanges[i] = proposal.NewParamChange(spc.Subspace(), spc.Key(), spc.SimValue()(r))
    41  		}
    42  
    43  		title := fmt.Sprintf("title from SimulateParamChangeProposalContent-%d", numProposals)
    44  		desc := fmt.Sprintf("desc from SimulateParamChangeProposalContent-%d. Random short desc: %s",
    45  			numProposals, simulation.RandStringOfLength(r, 20))
    46  		numProposals++
    47  		return proposal.NewParameterChangeProposal(
    48  			title,        // title
    49  			desc,         // description
    50  			paramChanges, // set of changes
    51  		)
    52  	}
    53  }