Documentation ¶
Index ¶
- func DeriveRand(r *rand.Rand) *rand.Rand
- func NewBarCoin(amt int64) sdk.Coin
- func NewFooCoin(amt int64) sdk.Coin
- func RandHex(length int) []byte
- func RandIntBetween(r *rand.Rand, min, max int) int
- func RandPositiveInt(r *rand.Rand, max sdk.Int) (sdk.Int, error)
- func RandStringOfLength(r *rand.Rand, n int) string
- func RandSubsetCoins(r *rand.Rand, coins sdk.Coins) sdk.Coins
- func RandTimestamp(r *rand.Rand) time.Time
- func RandomAmount(r *rand.Rand, max sdk.Int) sdk.Int
- func RandomDecAmount(r *rand.Rand, max sdk.Dec) sdk.Dec
- func RandomFeeCoins() sdk.Coins
- func RandomFees(r *rand.Rand, ctx sdk.Context, spendableCoins sdk.Coins) (sdk.Coins, error)
- type Account
- type AppParams
- type AppStateFn
- type Config
- type Content
- type ContentSimulatorFn
- type FutureOperation
- type Operation
- type OperationMsg
- type ParamChange
- type ParamSimulator
- type Params
- type SelectOpFn
- type SimValFn
- type TransitionMatrix
- type WeightedOperation
- type WeightedProposalContent
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DeriveRand ¶
DeriveRand derives a new Rand deterministically from another random source. Unlike rand.New(rand.NewSource(seed)), the result is "more random" depending on the source and state of r.
NOTE: not crypto safe.
func RandIntBetween ¶
RandIntBetween returns a random int between two numbers inclusively.
func RandPositiveInt ¶
RandPositiveInt get a rand positive sdk.Int
func RandStringOfLength ¶
RandStringOfLength generates a random string of a particular length
func RandSubsetCoins ¶
RandSubsetCoins returns random subset of the provided coins will return at least one coin unless coins argument is empty or malformed i.e. 0 amt in coins
func RandTimestamp ¶
RandTimestamp generates a random timestamp
func RandomAmount ¶
RandomAmount generates a random amount Note: The range of RandomAmount includes max, and is, in fact, biased to return max as well as 0.
func RandomDecAmount ¶
RandomDecAmount generates a random decimal amount Note: The range of RandomDecAmount includes max, and is, in fact, biased to return max as well as 0.
func RandomFees ¶
RandomFees returns a random fee by selecting a random coin denomination and amount from the account's available balance. If the user doesn't have enough funds for paying fees, it returns empty coins.
Types ¶
type Account ¶
Account contains a privkey, pubkey, address tuple eventually more useful data can be placed in here. (e.g. number of coins)
func FindAccount ¶
func FindAccount(accs []Account, address hmTypes.HeimdallAddress) (Account, bool)
FindAccount iterates over all the simulation accounts to find the one that matches the given address
func RandomAcc ¶
RandomAcc picks and returns a random account from an array and returs its position in the array.
func RandomAccounts ¶
RandomAccounts generates n random accounts
type AppParams ¶
type AppParams map[string]json.RawMessage
AppParams defines a flat JSON of key/values for all possible configurable simulation parameters. It might contain: operation weights, simulation parameters and flattened module state parameters (i.e not stored under it's respective module name).
func (AppParams) GetOrGenerate ¶
func (sp AppParams) GetOrGenerate(cdc *codec.Codec, key string, ptr interface{}, r *rand.Rand, ps ParamSimulator)
GetOrGenerate attempts to get a given parameter by key from the AppParams object. If it exists, it'll be decoded and returned. Otherwise, the provided ParamSimulator is used to generate a random value or default value (eg: in the case of operation weights where Rand is not used).
type AppStateFn ¶
type AppStateFn func(r *rand.Rand, accs []Account, config Config) ( appState json.RawMessage, accounts []Account, chainId string, genesisTimestamp time.Time, )
AppStateFn returns the app state json bytes and the genesis accounts
type Config ¶
type Config struct { GenesisFile string // custom simulation genesis file; cannot be used with params file ParamsFile string // custom simulation params file which overrides any random params; cannot be used with genesis ExportParamsPath string // custom file path to save the exported params JSON ExportParamsHeight int //height to which export the randomly generated params ExportStatePath string //custom file path to save the exported app state JSON ExportStatsPath string // custom file path to save the exported simulation statistics JSON Seed int64 // simulation random seed InitialBlockHeight int // initial block to start the simulation NumBlocks int // number of new blocks to simulate from the initial block height BlockSize int // operations per block ChainID string // chain-id used on the simulation Lean bool // lean simulation log output Commit bool // have the simulation commit OnOperation bool // run slow invariants every operation AllInvariants bool // print all failed invariants if a broken invariant is found }
Config contains the necessary configuration flags for the simulator
type ContentSimulatorFn ¶
type FutureOperation ¶
FutureOperation is an operation which will be ran at the beginning of the provided BlockHeight. If both a BlockHeight and BlockTime are specified, it will use the BlockHeight. In the (likely) event that multiple operations are queued at the same block height, they will execute in a FIFO pattern.
type Operation ¶
type Operation func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accounts []Account, chainID string) ( OperationMsg OperationMsg, futureOps []FutureOperation, err error)
Operation runs a state machine transition, and ensures the transition happened as expected. The operation could be running and testing a fuzzed transaction, or doing the same for a message.
For ease of debugging, an operation returns a descriptive message "action", which details what this fuzzed state machine transition actually did.
Operations can optionally provide a list of "FutureOperations" to run later These will be ran at the beginning of the corresponding block.
type OperationMsg ¶
type OperationMsg struct { Route string `json:"route" yaml:"route"` // msg route (i.e module name) Name string `json:"name" yaml:"name"` // operation name (msg Type or "no-operation") Comment string `json:"comment" yaml:"comment"` // additional comment OK bool `json:"ok" yaml:"ok"` // success Msg json.RawMessage `json:"msg" yaml:"msg"` // JSON encoded msg }
OperationMsg - structure for operation output
func NewOperationMsg ¶
func NewOperationMsg(msg sdk.Msg, ok bool, comment string) OperationMsg
NewOperationMsg - create a new operation message from sdk.Msg
func NewOperationMsgBasic ¶
func NewOperationMsgBasic(route, name, comment string, ok bool, msg []byte) OperationMsg
NewOperationMsgBasic creates a new operation message from raw input.
func (OperationMsg) LogEvent ¶
func (om OperationMsg) LogEvent(eventLogger func(route, op, evResult string))
LogEvent adds an event for the events stats
func (OperationMsg) MustMarshal ¶
func (om OperationMsg) MustMarshal() json.RawMessage
MustMarshal Marshals the operation msg, panic on error
func (OperationMsg) String ¶
func (om OperationMsg) String() string
log entry text for this operation msg
type ParamChange ¶
type ParamSimulator ¶
type Params ¶
type Params interface { PastEvidenceFraction() float64 NumKeys() int EvidenceFraction() float64 InitialLivenessWeightings() []int LivenessTransitionMatrix() TransitionMatrix BlockSizeTransitionMatrix() TransitionMatrix }
type SelectOpFn ¶
type TransitionMatrix ¶
TransitionMatrix is _almost_ a left stochastic matrix. It is technically not one due to not normalizing the column values. In the future, if we want to find the steady state distribution, it will be quite easy to normalize these values to get a stochastic matrix. Floats aren't currently used as the default due to non-determinism across architectures
type WeightedOperation ¶
type WeightedProposalContent ¶
type WeightedProposalContent interface { AppParamsKey() string // key used to retrieve the value of the weight from the simulation application params DefaultWeight() int // default weight ContentSimulatorFn() ContentSimulatorFn // content simulator function }