refactor: Simplify SimulationManager setup (#12153)
This commit is contained in:
parent
fc02389030
commit
544afb65e2
|
@ -44,6 +44,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
||||||
### Improvements
|
### Improvements
|
||||||
|
|
||||||
* [#12089](https://github.com/cosmos/cosmos-sdk/pull/12089) Mark the `TipDecorator` as beta, don't include it in simapp by default.
|
* [#12089](https://github.com/cosmos/cosmos-sdk/pull/12089) Mark the `TipDecorator` as beta, don't include it in simapp by default.
|
||||||
|
* [#12153](https://github.com/cosmos/cosmos-sdk/pull/12153) Add a new `NewSimulationManagerFromAppModules` constructor, to simplify simulation wiring.
|
||||||
|
|
||||||
### API Breaking Changes
|
### API Breaking Changes
|
||||||
|
|
||||||
|
|
|
@ -373,21 +373,10 @@ func NewSimApp(
|
||||||
//
|
//
|
||||||
// NOTE: this is not required apps that don't use the simulator for fuzz testing
|
// NOTE: this is not required apps that don't use the simulator for fuzz testing
|
||||||
// transactions
|
// transactions
|
||||||
app.sm = module.NewSimulationManager(
|
overrideModules := map[string]module.AppModuleSimulation{
|
||||||
auth.NewAppModule(app.appCodec, app.AccountKeeper, authsims.RandomGenesisAccounts),
|
authtypes.ModuleName: auth.NewAppModule(app.appCodec, app.AccountKeeper, authsims.RandomGenesisAccounts),
|
||||||
bank.NewAppModule(app.appCodec, app.BankKeeper, app.AccountKeeper),
|
}
|
||||||
feegrantmodule.NewAppModule(app.appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry),
|
app.sm = module.NewSimulationManagerFromAppModules(app.ModuleManager.Modules, overrideModules)
|
||||||
gov.NewAppModule(app.appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper),
|
|
||||||
mint.NewAppModule(app.appCodec, app.MintKeeper, app.AccountKeeper, nil),
|
|
||||||
staking.NewAppModule(app.appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper),
|
|
||||||
distr.NewAppModule(app.appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper),
|
|
||||||
slashing.NewAppModule(app.appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper),
|
|
||||||
params.NewAppModule(app.ParamsKeeper),
|
|
||||||
evidence.NewAppModule(app.EvidenceKeeper),
|
|
||||||
authzmodule.NewAppModule(app.appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry),
|
|
||||||
groupmodule.NewAppModule(app.appCodec, app.GroupKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry),
|
|
||||||
nftmodule.NewAppModule(app.appCodec, app.NFTKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry),
|
|
||||||
)
|
|
||||||
|
|
||||||
app.sm.RegisterStoreDecoders()
|
app.sm.RegisterStoreDecoders()
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ package module
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
|
"sort"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
sdkmath "cosmossdk.io/math"
|
sdkmath "cosmossdk.io/math"
|
||||||
|
@ -47,6 +48,38 @@ func NewSimulationManager(modules ...AppModuleSimulation) *SimulationManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewSimulationManagerFromAppModules creates a new SimulationManager object.
|
||||||
|
//
|
||||||
|
// First it sets any SimulationModule provided by overrideModules, and ignores any AppModule
|
||||||
|
// with the same moduleName.
|
||||||
|
// Then it attempts to cast every provided AppModule into an AppModuleSimulation.
|
||||||
|
// If the cast succeeds, its included, otherwise it is excluded.
|
||||||
|
func NewSimulationManagerFromAppModules(modules map[string]AppModule, overrideModules map[string]AppModuleSimulation) *SimulationManager {
|
||||||
|
simModules := []AppModuleSimulation{}
|
||||||
|
appModuleNamesSorted := make([]string, 0, len(modules))
|
||||||
|
for moduleName := range modules {
|
||||||
|
appModuleNamesSorted = append(appModuleNamesSorted, moduleName)
|
||||||
|
}
|
||||||
|
|
||||||
|
sort.Strings(appModuleNamesSorted)
|
||||||
|
|
||||||
|
for _, moduleName := range appModuleNamesSorted {
|
||||||
|
// for every module, see if we override it. If so, use override.
|
||||||
|
// Else, if we can cast the app module into a simulation module add it.
|
||||||
|
// otherwise no simulation module.
|
||||||
|
if simModule, ok := overrideModules[moduleName]; ok {
|
||||||
|
simModules = append(simModules, simModule)
|
||||||
|
} else {
|
||||||
|
appModule := modules[moduleName]
|
||||||
|
if simModule, ok := appModule.(AppModuleSimulation); ok {
|
||||||
|
simModules = append(simModules, simModule)
|
||||||
|
}
|
||||||
|
// cannot cast, so we continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NewSimulationManager(simModules...)
|
||||||
|
}
|
||||||
|
|
||||||
// GetProposalContents returns each module's proposal content generator function
|
// GetProposalContents returns each module's proposal content generator function
|
||||||
// with their default operation weight and key.
|
// with their default operation weight and key.
|
||||||
func (sm *SimulationManager) GetProposalContents(simState SimulationState) []simulation.WeightedProposalContent {
|
func (sm *SimulationManager) GetProposalContents(simState SimulationState) []simulation.WeightedProposalContent {
|
||||||
|
|
Loading…
Reference in New Issue