Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: use sdk modules #1357

Merged
merged 37 commits into from
Aug 24, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
197afa5
refactor: remove custom module & manager from app
Aug 16, 2022
09d0a7c
wip
Aug 17, 2022
68f938b
more wip
Aug 17, 2022
4f6035d
wip: perhaps this will work...
Aug 18, 2022
3ede59a
fix: fill response with baseapp msg routing
Aug 18, 2022
0b98dd3
chore: add a panic for unexpected msg response results
Aug 18, 2022
7fa0c23
wip: query support
Aug 18, 2022
b77f6a4
fix: route queries through baseapp
Aug 18, 2022
a489275
chore: cleanup todos and deleted code
Aug 18, 2022
3d991b0
fix: use a mock module and force validator updates
Aug 19, 2022
680eaa4
docs: remove dead doc
Aug 19, 2022
4636fca
refactor: expose weighted operations and use in module
Aug 19, 2022
6def4a5
Merge branch 'main' into ty/933-app_module_refactor
Aug 19, 2022
15d92e3
refactor: move weighted operations to module
Aug 20, 2022
e9b0735
refactor: move simulations away from using old configurator keys
Aug 20, 2022
bf4df8c
refactor: simplify msg response check
Aug 20, 2022
8696311
refactor: import alias
Aug 20, 2022
ace2f43
refactor: remove store key from serverImpl struct
Aug 20, 2022
05ceafb
Merge branch 'main' into ty/933-app_module_refactor
Aug 20, 2022
20bc237
fix: data test setup
Aug 20, 2022
c66423b
refactor: simplify package, add events from response to context
Aug 20, 2022
13ea4a0
fix: sdk package errors, remove unused functions
Aug 20, 2022
b126ba5
fix: remove cast to custom context
Aug 20, 2022
d044a8e
refactor: remove last of custom context
Aug 20, 2022
59b6633
fix: remove calls to custom context
Aug 20, 2022
cdbb0cd
fix: setup fixture properly
Aug 20, 2022
e83c725
docs: add changelog
Aug 22, 2022
ed63a0d
Merge branch 'main' into ty/933-app_module_refactor
Aug 22, 2022
35a6b5b
refactor: remove unused codec function
Aug 22, 2022
8e4a094
chore: consolidate require line
Aug 22, 2022
2c90050
chore: apply suggestions from code review
technicallyty Aug 22, 2022
d5d3497
Merge branch 'ty/933-app_module_refactor' of https://github.com/regen…
Aug 22, 2022
11a061b
Merge branch 'main' into ty/933-app_module_refactor
Aug 22, 2022
90d3602
docs: update weighted ops godoc
Aug 23, 2022
2306d18
refactor: move weighted ops into module, remove method from server
Aug 23, 2022
6ab8b61
Merge branch 'main' into ty/933-app_module_refactor
Aug 23, 2022
83a33b5
chore: changelog
Aug 23, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
refactor: remove custom module & manager from app
  • Loading branch information
tyler authored and tyler committed Aug 16, 2022
commit 197afa5ab13d25a71aef5b86b986cf78550ecfb3
132 changes: 58 additions & 74 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,8 @@ import (
ibchost "github.com/cosmos/ibc-go/v5/modules/core/24-host"
ibckeeper "github.com/cosmos/ibc-go/v5/modules/core/keeper"

moduletypes "github.com/regen-network/regen-ledger/types/module"
"github.com/regen-network/regen-ledger/types/module/server"
data "github.com/regen-network/regen-ledger/x/data/module"
"github.com/regen-network/regen-ledger/x/data"
datamodule "github.com/regen-network/regen-ledger/x/data/module"
"github.com/regen-network/regen-ledger/x/ecocredit"
"github.com/regen-network/regen-ledger/x/ecocredit/basket"
ecocreditmodule "github.com/regen-network/regen-ledger/x/ecocredit/module"
Expand Down Expand Up @@ -142,7 +141,7 @@ var (
authzmodule.AppModuleBasic{},
groupmodule.AppModuleBasic{},
ecocreditmodule.Module{},
data.Module{},
datamodule.Module{},
}, setCustomModuleBasics()...)...,
)

Expand Down Expand Up @@ -216,13 +215,6 @@ type RegenApp struct {
// simulation manager
sm *module.SimulationManager

// server module manager
// NOTE: We will likely want to make this new manager compatible
// with module.Manager so that we can have existing cosmos-sdk modules
// use ADR 33 approach without the need for removing their keepers
// and a larger refactoring.
smm *server.Manager

// module configurator
configurator module.Configurator
}
Expand All @@ -244,14 +236,13 @@ func NewRegenApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest
bApp.SetInterfaceRegistry(interfaceRegistry)

keys := sdk.NewKVStoreKeys(
append([]string{
authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey,
minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey,
govtypes.StoreKey, paramstypes.StoreKey, upgradetypes.StoreKey,
evidencetypes.StoreKey, capabilitytypes.StoreKey, feegrant.StoreKey,
authzkeeper.StoreKey,
ibchost.StoreKey, ibctransfertypes.StoreKey, group.StoreKey,
}, setCustomKVStoreKeys()...)...,
authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey,
minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey,
govtypes.StoreKey, paramstypes.StoreKey, upgradetypes.StoreKey,
evidencetypes.StoreKey, capabilitytypes.StoreKey, feegrant.StoreKey,
authzkeeper.StoreKey,
ibchost.StoreKey, ibctransfertypes.StoreKey, group.StoreKey,
ecocredit.ModuleName, data.ModuleName,
)

tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey)
Expand Down Expand Up @@ -369,60 +360,51 @@ func NewRegenApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest
app.GroupKeeper = groupkeeper.NewKeeper(keys[group.StoreKey], appCodec, app.MsgServiceRouter(), app.AccountKeeper, groupConfig)

// register custom modules here
app.smm = setCustomModules(app, interfaceRegistry)
ecocreditModule := ecocreditmodule.NewModule(
ecocreditMod := ecocreditmodule.NewModule(
app.keys[ecocredit.ModuleName],
app.GetSubspace(ecocredit.DefaultParamspace),
app.AccountKeeper,
app.BankKeeper,
authtypes.NewModuleAddress(govtypes.ModuleName),
)
dataModule := data.NewModule(app.AccountKeeper, app.BankKeeper)
newModules := []moduletypes.Module{ecocreditModule, dataModule}
err := app.smm.RegisterModules(newModules)
if err != nil {
panic(err)
}
err = app.smm.CompleteInitialization()
if err != nil {
panic(err)
}
app.smm.RegisterInvariants(&app.CrisisKeeper)
dataMod := datamodule.NewModule(app.keys[data.ModuleName], app.AccountKeeper, app.BankKeeper)

govConfig := govtypes.DefaultConfig()
app.GovKeeper = govkeeper.NewKeeper(
appCodec, keys[govtypes.StoreKey], app.GetSubspace(govtypes.ModuleName), app.AccountKeeper, app.BankKeeper,
&stakingKeeper, govRouter, app.MsgServiceRouter(), govConfig,
)

app.setCustomKeepers(bApp, keys, appCodec, govRouter, homePath, appOpts)
// TODO(Tyler): not needed??
//app.setCustomKeepers(bApp, keys, appCodec, govRouter, homePath, appOpts)
ryanchristo marked this conversation as resolved.
Show resolved Hide resolved

skipGenesisInvariants := cast.ToBool(appOpts.Get(crisis.FlagSkipGenesisInvariants))

app.mm = module.NewManager(
append([]module.AppModule{
genutil.NewAppModule(
app.AccountKeeper, app.StakingKeeper, app.BaseApp.DeliverTx,
encodingConfig.TxConfig,
),
auth.NewAppModule(appCodec, app.AccountKeeper, authsims.RandomGenesisAccounts),
vesting.NewAppModule(app.AccountKeeper, app.BankKeeper),
bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper),
capability.NewAppModule(appCodec, *app.CapabilityKeeper),
crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants),
gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper),
mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper, nil),
slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper),
distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper),
staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper),
upgrade.NewAppModule(app.UpgradeKeeper),
evidence.NewAppModule(app.EvidenceKeeper),
feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry),
authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry),
ibc.NewAppModule(app.IBCKeeper),
params.NewAppModule(app.ParamsKeeper),
transferModule,
groupmodule.NewAppModule(appCodec, app.GroupKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry),
}, app.setCustomModuleManager()...)...,
genutil.NewAppModule(
app.AccountKeeper, app.StakingKeeper, app.BaseApp.DeliverTx,
encodingConfig.TxConfig,
),
auth.NewAppModule(appCodec, app.AccountKeeper, authsims.RandomGenesisAccounts),
vesting.NewAppModule(app.AccountKeeper, app.BankKeeper),
bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper),
capability.NewAppModule(appCodec, *app.CapabilityKeeper),
crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants),
gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper),
mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper, nil),
slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper),
distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper),
staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper),
upgrade.NewAppModule(app.UpgradeKeeper),
evidence.NewAppModule(app.EvidenceKeeper),
feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry),
authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry),
ibc.NewAppModule(app.IBCKeeper),
params.NewAppModule(app.ParamsKeeper),
transferModule,
ecocreditMod,
dataMod,
groupmodule.NewAppModule(appCodec, app.GroupKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry),
)

// During begin block slashing happens after distr.BeginBlocker so that
Expand All @@ -449,6 +431,8 @@ func NewRegenApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest
paramstypes.ModuleName,
vestingtypes.ModuleName,
group.ModuleName,
ecocredit.ModuleName,
data.ModuleName,

// ibc modules
ibchost.ModuleName,
Expand All @@ -474,6 +458,8 @@ func NewRegenApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest
upgradetypes.ModuleName,
vestingtypes.ModuleName,
group.ModuleName,
ecocredit.ModuleName,
data.ModuleName,

// ibc modules
ibchost.ModuleName,
Expand Down Expand Up @@ -504,17 +490,19 @@ func NewRegenApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest
paramstypes.ModuleName,
upgradetypes.ModuleName,
group.ModuleName,
ecocredit.ModuleName,
data.ModuleName,

// ibc modules
ibctransfertypes.ModuleName,
ibchost.ModuleName,
}, setCustomOrderInitGenesis()...)...,
)

app.mm.RegisterInvariants(&app.CrisisKeeper)
app.mm.RegisterRoutes(app.Router(), app.QueryRouter(), encodingConfig.Amino)
app.configurator = module.NewConfigurator(app.appCodec, app.MsgServiceRouter(), app.GRPCQueryRouter())
app.mm.RegisterServices(app.configurator)
app.mm.RegisterRoutes(app.Router(), app.QueryRouter(), encodingConfig.Amino)
app.mm.RegisterInvariants(&app.CrisisKeeper)

// create the simulation manager and define the order of the modules for deterministic simulations
//
// NOTE: this is not required apps that don't use the simulator for fuzz testing
Expand All @@ -535,8 +523,8 @@ func NewRegenApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest
authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry),
ibc.NewAppModule(app.IBCKeeper),
transferModule,
ecocreditmodule.NewModule(app.GetSubspace(ecocredit.DefaultParamspace), app.AccountKeeper, app.BankKeeper, authtypes.NewModuleAddress(govtypes.ModuleName)),
data.NewModule(app.AccountKeeper, app.BankKeeper),
ecocreditmodule.NewModule(app.keys[ecocredit.ModuleName], app.GetSubspace(ecocredit.DefaultParamspace), app.AccountKeeper, app.BankKeeper, authtypes.NewModuleAddress(govtypes.ModuleName)),
datamodule.NewModule(app.keys[data.ModuleName], app.AccountKeeper, app.BankKeeper),
}, app.setCustomSimulationManager()...)...,
)
app.sm.RegisterStoreDecoders()
Expand Down Expand Up @@ -569,34 +557,31 @@ func NewRegenApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest
return app
}

// TODO(Tyler): is below needed?

// MakeCodecs constructs the *std.Codec and *codec.LegacyAmino instances used by
// Regenapp. It is useful for tests and clients who do not want to construct the
// full Regenapp
func MakeCodecs() (codec.Codec, *codec.LegacyAmino) {
config := MakeEncodingConfig()
return config.Codec, config.Amino
}
//func MakeCodecs() (codec.Codec, *codec.LegacyAmino) {
// cfg := MakeEncodingConfig()
// return cfg.Codec, cfg.Amino
//}
ryanchristo marked this conversation as resolved.
Show resolved Hide resolved

// Name returns the name of the App
func (app *RegenApp) Name() string { return app.BaseApp.Name() }

// BeginBlocker application updates every begin block
func (app *RegenApp) BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock) abci.ResponseBeginBlock {
resp := app.mm.BeginBlock(ctx, req)
events := app.smm.BeginBlock(ctx, req)
resp.Events = append(resp.Events, events...)
return resp
}

// EndBlocker application updates every end block
func (app *RegenApp) EndBlocker(ctx sdk.Context, req abci.RequestEndBlock) abci.ResponseEndBlock {
resp := app.mm.EndBlock(ctx, req)
events, vals := app.smm.EndBlock(ctx, req)
if len(resp.ValidatorUpdates) > 0 && len(vals) > 0 {
if len(resp.ValidatorUpdates) > 0 { // TODO(tyler): is this still needed?
ryanchristo marked this conversation as resolved.
Show resolved Hide resolved
panic("validator EndBlock updates already set by the SDK Module Manager")
}
resp.ValidatorUpdates = vals
resp.Events = append(resp.Events, events...)
return resp
}

Expand All @@ -607,8 +592,7 @@ func (app *RegenApp) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abc
panic(err)
}
app.UpgradeKeeper.SetModuleVersionMap(ctx, app.mm.GetVersionMap())
res := app.mm.InitGenesis(ctx, app.appCodec, genesisState)
return app.smm.InitGenesis(ctx, genesisState, res.Validators)
return app.mm.InitGenesis(ctx, app.appCodec, genesisState)
}

// LoadHeight loads a particular height
Expand Down
19 changes: 11 additions & 8 deletions app/export.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,17 @@ func (app *RegenApp) ExportAppStateAndValidators(
genState[name] = v
}

// Export genesis state from new modules (that use ADR 33 approach)
// if they are not already part of genState
for name, v := range app.smm.ExportGenesis(ctx) {
if _, ok := genState[name]; ok {
return servertypes.ExportedApp{}, fmt.Errorf("genesis state already exported for %s module", name)
}
genState[name] = v
}
// TODO(Tyler): do we need below??

//// Export genesis state from new modules (that use ADR 33 approach)
//// if they are not already part of genState
//for name, v := range app.mm.ExportGenesis(ctx)
//for name, v := range app.smm.ExportGenesis(ctx) {
// if _, ok := genState[name]; ok {
// return servertypes.ExportedApp{}, fmt.Errorf("genesis state already exported for %s module", name)
// }
// genState[name] = v
//}
ryanchristo marked this conversation as resolved.
Show resolved Hide resolved

appState, err := json.MarshalIndent(genState, "", " ")
if err != nil {
Expand Down
8 changes: 0 additions & 8 deletions app/stable_appconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"github.com/cosmos/cosmos-sdk/baseapp"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/codec/types"
servertypes "github.com/cosmos/cosmos-sdk/server/types"
storetypes "github.com/cosmos/cosmos-sdk/store/types"
sdk "github.com/cosmos/cosmos-sdk/types"
Expand All @@ -21,8 +20,6 @@ import (
paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper"
upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client"
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"

"github.com/regen-network/regen-ledger/types/module/server"
)

func setCustomModuleBasics() []module.AppModuleBasic {
Expand All @@ -36,11 +33,6 @@ func setCustomModuleBasics() []module.AppModuleBasic {
}
}

// setCustomModules registers new modules with the server module manager.
// It does nothing here and returns an empty manager since we're not using experimental mode.
func setCustomModules(app *RegenApp, interfaceRegistry types.InterfaceRegistry) *server.Manager {
return server.NewManager(app.BaseApp, codec.NewProtoCodec(interfaceRegistry))
}
func setCustomKVStoreKeys() []string {
return []string{}
}
Expand Down
4 changes: 3 additions & 1 deletion app/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,7 @@ func SimulationOperations(app *RegenApp, cdc codec.Codec, config simulation.Conf

simState.ParamChanges = app.SimulationManager().GenerateParamChanges(config.Seed)
simState.Contents = app.SimulationManager().GetProposalContents(simState)
return app.smm.WeightedOperations(simState, app.sm.Modules)
// TODO(Tyler): how to fix?
// return app.smm.WeightedOperations(simState, app.sm.Modules)
ryanchristo marked this conversation as resolved.
Show resolved Hide resolved
return nil
}
Loading