feat: export genesis in simapp v2 (#21199)
Co-authored-by: marbar3778 <marbar3778@yahoo.com>
This commit is contained in:
@@ -79,6 +79,11 @@ func (a *App[T]) LoadHeight(height uint64) error {
|
||||
return a.db.LoadVersion(height)
|
||||
}
|
||||
|
||||
// LoadLatestHeight loads the latest height.
|
||||
func (a *App[T]) LoadLatestHeight() (uint64, error) {
|
||||
return a.db.GetLatestVersion()
|
||||
}
|
||||
|
||||
// Close is called in start cmd to gracefully cleanup resources.
|
||||
func (a *App[T]) Close() error {
|
||||
return nil
|
||||
|
||||
+14
-1
@@ -69,7 +69,7 @@ func (a *AppBuilder[T]) RegisterModules(modules map[string]appmodulev2.AppModule
|
||||
|
||||
// RegisterStores registers the provided store keys.
|
||||
// This method should only be used for registering extra stores
|
||||
// wiich is necessary for modules that not registered using the app config.
|
||||
// which is necessary for modules that not registered using the app config.
|
||||
// To be used in combination of RegisterModules.
|
||||
func (a *AppBuilder[T]) RegisterStores(keys ...string) {
|
||||
a.app.storeKeys = append(a.app.storeKeys, keys...)
|
||||
@@ -175,6 +175,19 @@ func (a *AppBuilder[T]) Build(opts ...AppBuilderOption[T]) (*App[T], error) {
|
||||
}
|
||||
return nil
|
||||
},
|
||||
ExportGenesis: func(ctx context.Context, version uint64) ([]byte, error) {
|
||||
genesisJson, err := a.app.moduleManager.ExportGenesisForModules(ctx)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to export genesis: %w", err)
|
||||
}
|
||||
|
||||
bz, err := json.Marshal(genesisJson)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to marshal genesis: %w", err)
|
||||
}
|
||||
|
||||
return bz, nil
|
||||
},
|
||||
}
|
||||
|
||||
appManager, err := appManagerBuilder.Build()
|
||||
|
||||
+9
-23
@@ -203,16 +203,13 @@ func (m *MM[T]) ExportGenesisForModules(
|
||||
return nil, err
|
||||
}
|
||||
|
||||
type genesisResult struct {
|
||||
bz json.RawMessage
|
||||
err error
|
||||
}
|
||||
|
||||
type ModuleI interface {
|
||||
ExportGenesis(ctx context.Context) (json.RawMessage, error)
|
||||
}
|
||||
|
||||
channels := make(map[string]chan genesisResult)
|
||||
genesisData := make(map[string]json.RawMessage)
|
||||
|
||||
// TODO: make async export genesis https://github.com/cosmos/cosmos-sdk/issues/21303
|
||||
for _, moduleName := range modulesToExport {
|
||||
mod := m.modules[moduleName]
|
||||
var moduleI ModuleI
|
||||
@@ -221,27 +218,16 @@ func (m *MM[T]) ExportGenesisForModules(
|
||||
moduleI = module.(ModuleI)
|
||||
} else if module, hasABCIGenesis := mod.(appmodulev2.HasGenesis); hasABCIGenesis {
|
||||
moduleI = module.(ModuleI)
|
||||
} else {
|
||||
continue
|
||||
}
|
||||
|
||||
channels[moduleName] = make(chan genesisResult)
|
||||
go func(moduleI ModuleI, ch chan genesisResult) {
|
||||
jm, err := moduleI.ExportGenesis(ctx)
|
||||
if err != nil {
|
||||
ch <- genesisResult{nil, err}
|
||||
return
|
||||
}
|
||||
ch <- genesisResult{jm, nil}
|
||||
}(moduleI, channels[moduleName])
|
||||
}
|
||||
|
||||
genesisData := make(map[string]json.RawMessage)
|
||||
for moduleName := range channels {
|
||||
res := <-channels[moduleName]
|
||||
if res.err != nil {
|
||||
return nil, fmt.Errorf("genesis export error in %s: %w", moduleName, res.err)
|
||||
res, err := moduleI.ExportGenesis(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
genesisData[moduleName] = res.bz
|
||||
genesisData[moduleName] = res
|
||||
}
|
||||
|
||||
return genesisData, nil
|
||||
|
||||
Reference in New Issue
Block a user