diff --git a/app/app.go b/app/app.go index 2154bcc0..6fad3ba9 100644 --- a/app/app.go +++ b/app/app.go @@ -216,6 +216,7 @@ type App struct { interfaceRegistry types.InterfaceRegistry invCheckPeriod uint + cudosPath string // keys to access the substores keys map[string]*sdk.KVStoreKey @@ -256,7 +257,7 @@ type App struct { // NewSimApp returns a reference to an initialized SimApp. func New( logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest bool, - skipUpgradeHeights map[int64]bool, homePath string, invCheckPeriod uint, encodingConfig appparams.EncodingConfig, enabledProposals []wasm.ProposalType, + skipUpgradeHeights map[int64]bool, homePath string, invCheckPeriod uint, cudosPath string, encodingConfig appparams.EncodingConfig, enabledProposals []wasm.ProposalType, appOpts servertypes.AppOptions, wasmOpts []wasm.Option, baseAppOptions ...func(*baseapp.BaseApp), ) *App { @@ -285,6 +286,7 @@ func New( appCodec: appCodec, interfaceRegistry: interfaceRegistry, invCheckPeriod: invCheckPeriod, + cudosPath: cudosPath, keys: keys, tkeys: tkeys, memKeys: memKeys, @@ -369,7 +371,7 @@ func New( app.GovKeeper = *govKeeper.SetHooks( govtypes.NewMultiGovHooks( - // register the governance hooks + // register the governance hooks ), ) @@ -718,41 +720,57 @@ func (app *App) GetSubspace(moduleName string) paramstypes.Subspace { return subspace } +func (app *App) PerformASIUpgradeTasks(ctx sdk.Context, networkInfo *NetworkConfig, manifest *UpgradeManifest) error { + err := app.DeleteContractStates(ctx, networkInfo, manifest) + if err != nil { + return err + } + + // Call the separate function to handle the admin upgrade + err = app.UpgradeContractAdmins(ctx, networkInfo, manifest) + if err != nil { + return err + } + + err = app.ProcessReconciliation(ctx, networkInfo, manifest) + if err != nil { + return err + } + + err = app.ChangeContractLabels(ctx, networkInfo, manifest) + if err != nil { + return err + } + + err = app.ChangeContractVersions(ctx, networkInfo, manifest) + if err != nil { + return err + } + + return nil +} + func (app *App) RegisterUpgradeHandlers(cfg module.Configurator) { app.UpgradeKeeper.SetUpgradeHandler("v0.11.3", func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { return app.mm.RunMigrations(ctx, cfg, fromVM) }) app.UpgradeKeeper.SetUpgradeHandler("v0.11.4", func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { - manifest := NewUpgradeManifest() - - networkInfo, ok := NetworkInfos[ctx.ChainID()] - if !ok { - panic("Network info not found for chain id: " + ctx.ChainID()) - } - - err := app.DeleteContractStates(ctx, &networkInfo, manifest) - if err != nil { - return nil, err - } - - // Call the separate function to handle the admin upgrade - err = app.UpgradeContractAdmins(ctx, &networkInfo, manifest) + genesis, err := ReadGenesisFile(app.cudosPath) if err != nil { return nil, err } + print(genesis) - err = app.ProcessReconciliation(ctx, &networkInfo, manifest) - if err != nil { - return nil, err - } + manifest := NewUpgradeManifest() - err = app.ChangeContractLabels(ctx, &networkInfo, manifest) - if err != nil { - return nil, err + networkInfo, ok := NetworkInfos[ctx.ChainID()] + if !ok { + panic("Network info not found for chain id: " + ctx.ChainID()) } - err = app.ChangeContractVersions(ctx, &networkInfo, manifest) + // Perform ASI upgrade tasks + err = app.PerformASIUpgradeTasks(ctx, &networkInfo, manifest) if err != nil { return nil, err } diff --git a/app/cudos_merge.go b/app/cudos_merge.go new file mode 100644 index 00000000..ef1ac42c --- /dev/null +++ b/app/cudos_merge.go @@ -0,0 +1,24 @@ +package app + +import ( + "encoding/json" + "fmt" + "os" +) + +func ReadGenesisFile(filePath string) (*GenesisState, error) { + // Read the file into a byte slice + fileData, err := os.ReadFile(filePath) + if err != nil { + return nil, fmt.Errorf("error reading genesis file: %v", err) + } + + // Parse the JSON data + var genesisState GenesisState + err = json.Unmarshal(fileData, &genesisState) + if err != nil { + return nil, fmt.Errorf("error unmarshalling genesis file: %v", err) + } + + return &genesisState, nil +} diff --git a/cmd/fetchd/cmd/cudos_merge.go b/cmd/fetchd/cmd/cudos_merge.go new file mode 100644 index 00000000..c8aad42e --- /dev/null +++ b/cmd/fetchd/cmd/cudos_merge.go @@ -0,0 +1,12 @@ +package cmd + +import "github.com/spf13/cobra" + +// Module init related flags +const ( + FlagCudosPath = "cudos-path" +) + +func AddCudosFlags(startCmd *cobra.Command) { + startCmd.Flags().String(FlagCudosPath, "", "Cudos genesis path") +} diff --git a/cmd/fetchd/cmd/root.go b/cmd/fetchd/cmd/root.go index 4aab5388..3a63db8b 100644 --- a/cmd/fetchd/cmd/root.go +++ b/cmd/fetchd/cmd/root.go @@ -153,6 +153,7 @@ func initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig) { func addModuleInitFlags(startCmd *cobra.Command) { crisis.AddModuleInitFlags(startCmd) wasm.AddModuleInitFlags(startCmd) + AddCudosFlags(startCmd) } func queryCommand() *cobra.Command { @@ -247,6 +248,7 @@ func (a appCreator) newApp(logger log.Logger, db dbm.DB, traceStore io.Writer, a logger, db, traceStore, true, skipUpgradeHeights, cast.ToString(appOpts.Get(flags.FlagHome)), cast.ToUint(appOpts.Get(server.FlagInvCheckPeriod)), + cast.ToString(appOpts.Get(FlagCudosPath)), a.encCfg, app.GetEnabledProposals(), appOpts, @@ -277,6 +279,11 @@ func (a appCreator) appExport( return servertypes.ExportedApp{}, errors.New("application home not set") } + cudosPath, ok := appOpts.Get(FlagCudosPath).(string) + if !ok || cudosPath == "" { + return servertypes.ExportedApp{}, errors.New("cudos path not set") + } + var emptyWasmOpts []wasm.Option if height != -1 { anApp = app.New( @@ -287,6 +294,7 @@ func (a appCreator) appExport( map[int64]bool{}, homePath, uint(1), + cudosPath, a.encCfg, app.GetEnabledProposals(), appOpts, @@ -305,6 +313,7 @@ func (a appCreator) appExport( map[int64]bool{}, homePath, uint(1), + cudosPath, a.encCfg, app.GetEnabledProposals(), appOpts,