From f3936663f66a74ed854699fc8865eecb01f3124e Mon Sep 17 00:00:00 2001 From: jqwoyn Date: Thu, 27 Jul 2023 22:28:34 +0800 Subject: [PATCH 1/5] add updates for v5.2 --- app/app.go | 61 ++++++++-------------------------- app/keepers/keepers.go | 2 ++ app/upgrades/v5_2/constants.go | 20 +++++++++++ app/upgrades/v5_2/upgrades.go | 30 ++++++----------- 4 files changed, 46 insertions(+), 67 deletions(-) create mode 100644 app/upgrades/v5_2/constants.go diff --git a/app/app.go b/app/app.go index 7e24098..57ee80f 100644 --- a/app/app.go +++ b/app/app.go @@ -1,13 +1,14 @@ package app import ( - "github.com/cosmos/cosmos-sdk/x/group" "io" "net/http" "os" "path/filepath" "strings" + "github.com/cosmos/cosmos-sdk/x/group" + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1" dbm "github.com/cometbft/cometbft-db" @@ -15,6 +16,10 @@ import ( tmjson "github.com/cometbft/cometbft/libs/json" "github.com/cometbft/cometbft/libs/log" tmos "github.com/cometbft/cometbft/libs/os" + keepers "github.com/cosmic-horizon/qwoyn/app/keepers" + "github.com/cosmic-horizon/qwoyn/app/upgrades" + v5_1 "github.com/cosmic-horizon/qwoyn/app/upgrades/v5_1" + v5_2 "github.com/cosmic-horizon/qwoyn/app/upgrades/v5_2" intertx "github.com/cosmic-horizon/qwoyn/x/intertx" intertxkeeper "github.com/cosmic-horizon/qwoyn/x/intertx/keeper" intertxtypes "github.com/cosmic-horizon/qwoyn/x/intertx/types" @@ -186,6 +191,8 @@ var ( // DefaultNodeHome default home directories for the application daemon DefaultNodeHome string + Upgrades = []upgrades.Upgrade{v5_1.Upgrade, v5_2.Upgrade} + // ModuleBasics defines the module BasicManager is in charge of setting up basic, // non-dependant module elements, such as codec registration // and genesis verification. @@ -256,6 +263,7 @@ func init() { // capabilities aren't needed for testing. type App struct { *baseapp.BaseApp + keepers.AppKeepers legacyAmino *codec.LegacyAmino appCodec codec.Codec @@ -266,50 +274,9 @@ type App struct { tkeys map[string]*storetypes.TransientStoreKey memKeys map[string]*storetypes.MemoryStoreKey - // keepers - AccountKeeper authkeeper.AccountKeeper - BankKeeper bankkeeper.Keeper - CapabilityKeeper *capabilitykeeper.Keeper - StakingKeeper *stakingkeeper.Keeper - SlashingKeeper slashingkeeper.Keeper - MintKeeper mintkeeper.Keeper - DistrKeeper distrkeeper.Keeper - GovKeeper govkeeper.Keeper - CrisisKeeper *crisiskeeper.Keeper - UpgradeKeeper *upgradekeeper.Keeper - ParamsKeeper paramskeeper.Keeper - IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly - IBCFeeKeeper ibcfeekeeper.Keeper - ICAHostKeeper icahostkeeper.Keeper - ICAControllerKeeper icacontrollerkeeper.Keeper - InterTxKeeper intertxkeeper.Keeper - EvidenceKeeper evidencekeeper.Keeper - TransferKeeper ibctransferkeeper.Keeper - FeeGrantKeeper feegrantkeeper.Keeper - AuthzKeeper authzkeeper.Keeper - GroupKeeper groupkeeper.Keeper - ConsensusParamsKeeper consensusparamkeeper.Keeper - - // make scoped keepers public for test purposes - ScopedIBCKeeper capabilitykeeper.ScopedKeeper - ScopedTransferKeeper capabilitykeeper.ScopedKeeper - ScopedIBCFeeKeeper capabilitykeeper.ScopedKeeper - ScopedICAControllerKeeper capabilitykeeper.ScopedKeeper - ScopedInterTxKeeper capabilitykeeper.ScopedKeeper - ScopedAquiferKeeper capabilitykeeper.ScopedKeeper - - WasmKeeper wasm.Keeper - scopedWasmKeeper capabilitykeeper.ScopedKeeper - - StimulusKeeper stimuluskeeper.Keeper - AquiferKeeper aquiferkeeper.Keeper - GameKeeper gamekeeper.Keeper - - // mm is the module manager - mm *module.Manager - - // sm is the simulation manager - sm *module.SimulationManager + mm *module.Manager + sm *module.SimulationManager + configurator module.Configurator } // New returns a reference to an initialized blockchain app @@ -382,7 +349,7 @@ func New( scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) app.ScopedICAControllerKeeper = app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) app.ScopedInterTxKeeper = app.CapabilityKeeper.ScopeToModule(intertxtypes.ModuleName) - app.scopedWasmKeeper = app.CapabilityKeeper.ScopeToModule(wasm.ModuleName) + app.ScopedWasmKeeper = app.CapabilityKeeper.ScopeToModule(wasm.ModuleName) app.ScopedAquiferKeeper = app.CapabilityKeeper.ScopeToModule(aquifertypes.ModuleName) // add keepers @@ -580,7 +547,7 @@ func New( app.IBCFeeKeeper, // ISC4 Wrapper: fee IBC middleware app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, - app.scopedWasmKeeper, + app.ScopedWasmKeeper, app.TransferKeeper, app.MsgServiceRouter(), app.GRPCQueryRouter(), diff --git a/app/keepers/keepers.go b/app/keepers/keepers.go index a127abd..d8743c9 100644 --- a/app/keepers/keepers.go +++ b/app/keepers/keepers.go @@ -17,6 +17,7 @@ import ( evidencekeeper "github.com/cosmos/cosmos-sdk/x/evidence/keeper" feegrantkeeper "github.com/cosmos/cosmos-sdk/x/feegrant/keeper" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" + groupkeeper "github.com/cosmos/cosmos-sdk/x/group/keeper" paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" @@ -49,6 +50,7 @@ type AppKeepers struct { TransferKeeper ibctransferkeeper.Keeper FeeGrantKeeper feegrantkeeper.Keeper AuthzKeeper authzkeeper.Keeper + GroupKeeper groupkeeper.Keeper ConsensusParamsKeeper consensusparamkeeper.Keeper WasmKeeper wasm.Keeper StimulusKeeper stimuluskeeper.Keeper diff --git a/app/upgrades/v5_2/constants.go b/app/upgrades/v5_2/constants.go new file mode 100644 index 0000000..9bd8a78 --- /dev/null +++ b/app/upgrades/v5_2/constants.go @@ -0,0 +1,20 @@ +package v5_2 + +import ( + "github.com/cosmic-horizon/qwoyn/app/upgrades" + store "github.com/cosmos/cosmos-sdk/store/types" + "github.com/cosmos/cosmos-sdk/x/group" +) + +const ( + // UpgradeName defines the on-chain upgrade name. + UpgradeName = "v5.2.0" +) + +var Upgrade = upgrades.Upgrade{ + UpgradeName: UpgradeName, + CreateUpgradeHandler: CreateUpgradeHandler, + StoreUpgrades: store.StoreUpgrades{ + Added: []string{group.ModuleName}, + }, +} diff --git a/app/upgrades/v5_2/upgrades.go b/app/upgrades/v5_2/upgrades.go index ce1c2e0..22e3a1a 100644 --- a/app/upgrades/v5_2/upgrades.go +++ b/app/upgrades/v5_2/upgrades.go @@ -1,28 +1,18 @@ -package v5_2 //nolint:revive,stylecheck +package v5_2 import ( - storetypes "github.com/cosmos/cosmos-sdk/store/types" + "github.com/cosmic-horizon/qwoyn/app/keepers" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" - "github.com/cosmos/cosmos-sdk/x/group" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - - "github.com/cosmic-horizon/QWOYN/v5_2/app/upgrades" ) -const Name = "v5.2.0" - -var Upgrade = upgrades.Upgrade{ - UpgradeName: Name, - CreateUpgradeHandler: func(mm *module.Manager, cfg module.Configurator) upgradetypes.UpgradeHandler { - return func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { - - return mm.RunMigrations(ctx, cfg, fromVM) - } - }, - StoreUpgrades: storetypes.StoreUpgrades{ - Added: []string{ - group.ModuleName, - }, - }, +func CreateUpgradeHandler( + mm *module.Manager, + configurator module.Configurator, + keepers keepers.AppKeepers, +) upgradetypes.UpgradeHandler { + return func(ctx sdk.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + return mm.RunMigrations(ctx, configurator, vm) + } } From d57d6488d71e4c3fba54ef1d65c84b127c442835 Mon Sep 17 00:00:00 2001 From: jqwoyn Date: Thu, 27 Jul 2023 22:30:32 +0800 Subject: [PATCH 2/5] add upgrade handler setter --- app/app.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/app/app.go b/app/app.go index 57ee80f..6a5815c 100644 --- a/app/app.go +++ b/app/app.go @@ -1,6 +1,7 @@ package app import ( + "fmt" "io" "net/http" "os" @@ -534,6 +535,8 @@ func New( panic("error while reading wasm config: " + err.Error()) } + app.setupUpgradeStoreLoaders() + // The last arguments can contain custom message handlers, and custom query handlers, // if we want to allow any custom callbacks availableCapabilities := "iterator,staking,stargate,cosmwasm_1_1,cosmwasm_1_2" @@ -752,6 +755,8 @@ func New( } reflectionv1.RegisterReflectionServiceServer(app.GRPCQueryRouter(), reflectionSvc) + app.setupUpgradeHandlers() + overrideModules := map[string]module.AppModuleSimulation{ authtypes.ModuleName: auth.NewAppModule(app.appCodec, app.AccountKeeper, authsims.RandomGenesisAccounts, app.GetSubspace(authtypes.ModuleName)), } @@ -989,3 +994,34 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino func (app *App) SimulationManager() *module.SimulationManager { return app.sm } + +// configure store loader that checks if version == upgradeHeight and applies store upgrades +func (app *App) setupUpgradeStoreLoaders() { + upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk() + if err != nil { + panic(fmt.Sprintf("failed to read upgrade info from disk %s", err)) + } + + if app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { + return + } + + for _, upgrade := range Upgrades { + if upgradeInfo.Name == upgrade.UpgradeName { + app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &upgrade.StoreUpgrades)) + } + } +} + +func (app *App) setupUpgradeHandlers() { + for _, upgrade := range Upgrades { + app.UpgradeKeeper.SetUpgradeHandler( + upgrade.UpgradeName, + upgrade.CreateUpgradeHandler( + app.mm, + app.configurator, + app.AppKeepers, + ), + ) + } +} From 645c28bfb21ef147e45a878c3ffd6c500f172fdf Mon Sep 17 00:00:00 2001 From: jqwoyn Date: Thu, 27 Jul 2023 22:33:37 +0800 Subject: [PATCH 3/5] upgrade test script --- app/app.go | 1 - start50.sh => start51.sh | 26 +++++++++++++------------- upgrade.sh | 12 ++++++------ 3 files changed, 19 insertions(+), 20 deletions(-) rename start50.sh => start51.sh (59%) diff --git a/app/app.go b/app/app.go index 6a5815c..332007b 100644 --- a/app/app.go +++ b/app/app.go @@ -500,7 +500,6 @@ func New( ) interTxModule := intertx.NewAppModule(appCodec, app.InterTxKeeper) interTxIBCModule := intertx.NewIBCModule(app.InterTxKeeper) - _ = interTxIBCModule app.AquiferKeeper = *aquiferkeeper.NewKeeper( appCodec, diff --git a/start50.sh b/start51.sh similarity index 59% rename from start50.sh rename to start51.sh index 684467b..bbe0119 100644 --- a/start50.sh +++ b/start51.sh @@ -7,25 +7,25 @@ echo "weather leader certain hard busy blouse click patient balcony return eleph echo "never chuckle bird almost jacket veteran weekend original rare habit point scorpion place gadget net train more plug upon pear renew mule material dynamic" > mnemonic2.txt; # Build genesis -qwoynd50 init --chain-id=qwoyn-1 test -qwoynd50 keys add validator --keyring-backend="test" < validator.txt; -qwoynd50 keys add maintainer --recover --keyring-backend=test < mnemonic.txt; -qwoynd50 keys add user1 --recover --keyring-backend=test < mnemonic2.txt; +qwoynd51 init --chain-id=qwoyn-1 test +qwoynd51 keys add validator --keyring-backend="test" < validator.txt; +qwoynd51 keys add maintainer --recover --keyring-backend=test < mnemonic.txt; +qwoynd51 keys add user1 --recover --keyring-backend=test < mnemonic2.txt; -VALIDATOR=$(qwoynd50 keys show validator -a --keyring-backend="test") -MAINTAINER=$(qwoynd50 keys show maintainer -a --keyring-backend="test") -USER1=$(qwoynd50 keys show user1 -a --keyring-backend="test") +VALIDATOR=$(qwoynd51 keys show validator -a --keyring-backend="test") +MAINTAINER=$(qwoynd51 keys show maintainer -a --keyring-backend="test") +USER1=$(qwoynd51 keys show user1 -a --keyring-backend="test") # VALIDATOR=qwoyn1hzqg4r2e789930hs88wqle25ef94xajuqay93r # MAINTAINER=qwoyn1h9krsew6kpg9huzcqgmgmns0n48jx9yd5vr0n5 # USER1=qwoyn13tqzdukugulllnk3p5js3w7hzw8gclkeenzp6e -qwoynd50 genesis add-genesis-account $VALIDATOR 1000000000000uqwoyn,1000000000000ucoho,1000000000000stake -qwoynd50 genesis add-genesis-account $MAINTAINER 1000000000000uqwoyn,1000000000000ucoho,1000000000000stake -qwoynd50 genesis add-genesis-account $USER1 1000000000000uqwoyn,1000000000000ucoho,1000000000000stake -qwoynd50 genesis gentx validator 100000000stake --keyring-backend="test" --chain-id=qwoyn-1 -qwoynd50 genesis collect-gentxs +qwoynd51 genesis add-genesis-account $VALIDATOR 1000000000000uqwoyn,1000000000000ucoho,1000000000000stake +qwoynd51 genesis add-genesis-account $MAINTAINER 1000000000000uqwoyn,1000000000000ucoho,1000000000000stake +qwoynd51 genesis add-genesis-account $USER1 1000000000000uqwoyn,1000000000000ucoho,1000000000000stake +qwoynd51 genesis gentx validator 100000000stake --keyring-backend="test" --chain-id=qwoyn-1 +qwoynd51 genesis collect-gentxs sed -i '' 's/"voting_period": "172800s"/"voting_period": "20s"/g' $HOME/.qwoynd/config/genesis.json # sed -i 's/stake/uqwoyn/g' $HOME/.qwoynd/config/genesis.json # Start node -qwoynd50 start --pruning=nothing --minimum-gas-prices="0stake" +qwoynd51 start --pruning=nothing --minimum-gas-prices="0stake" diff --git a/upgrade.sh b/upgrade.sh index b0b957b..21cfad3 100644 --- a/upgrade.sh +++ b/upgrade.sh @@ -1,16 +1,16 @@ #!/bin/sh -qwoynd51 tx gov submit-legacy-proposal software-upgrade "v5.1.0" \ +qwoynd52 tx gov submit-legacy-proposal software-upgrade "v5.2.0" \ --upgrade-height=12 \ ---title="Upgrade to v5.1.0" --description="Upgrade to v5.1.0" --no-validate \ +--title="Upgrade to v5.2.0" --description="Upgrade to v5.2.0" --no-validate \ --from=validator --keyring-backend=test \ --chain-id=qwoyn-1 --yes -b sync --deposit="100000000stake" -qwoynd50 tx gov vote 1 yes --from validator --chain-id qwoyn-1 \ +qwoynd51 tx gov vote 1 yes --from validator --chain-id qwoyn-1 \ -b sync -y --keyring-backend test -qwoynd50 query gov proposals +qwoynd51 query gov proposals -qwoynd51 start --pruning=nothing --minimum-gas-prices="0stake" +qwoynd52 start --pruning=nothing --minimum-gas-prices="0stake" -qwoynd51 query bank total \ No newline at end of file +qwoynd52 query bank total \ No newline at end of file From 7c9e5aab396fabce4f9a6644dbb03c8098b1b666 Mon Sep 17 00:00:00 2001 From: jqwoyn Date: Thu, 27 Jul 2023 22:40:17 +0800 Subject: [PATCH 4/5] fix further --- app/app.go | 4 +++- upgrade.sh | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/app.go b/app/app.go index 332007b..1222937 100644 --- a/app/app.go +++ b/app/app.go @@ -179,6 +179,7 @@ func getGovProposalHandlers() []govclient.ProposalHandler { govProposalHandlers = append(govProposalHandlers, paramsclient.ProposalHandler, + upgradeclient.LegacyProposalHandler, upgradeclient.LegacyCancelProposalHandler, ibcclientclient.UpdateClientProposalHandler, ibcclientclient.UpdateClientProposalHandler, @@ -744,7 +745,8 @@ func New( ) app.mm.RegisterInvariants(app.CrisisKeeper) - app.mm.RegisterServices(module.NewConfigurator(app.appCodec, app.MsgServiceRouter(), app.GRPCQueryRouter())) + app.configurator = module.NewConfigurator(app.appCodec, app.MsgServiceRouter(), app.GRPCQueryRouter()) + app.mm.RegisterServices(app.configurator) autocliv1.RegisterQueryServer(app.GRPCQueryRouter(), runtimeservices.NewAutoCLIQueryService(app.mm.Modules)) diff --git a/upgrade.sh b/upgrade.sh index 21cfad3..e0cc6b1 100644 --- a/upgrade.sh +++ b/upgrade.sh @@ -1,6 +1,6 @@ #!/bin/sh -qwoynd52 tx gov submit-legacy-proposal software-upgrade "v5.2.0" \ +qwoynd51 tx gov submit-legacy-proposal software-upgrade "v5.2.0" \ --upgrade-height=12 \ --title="Upgrade to v5.2.0" --description="Upgrade to v5.2.0" --no-validate \ --from=validator --keyring-backend=test \ From d10267b270f89abdf2e36c0bec82c3bb7544c450 Mon Sep 17 00:00:00 2001 From: jqwoyn Date: Thu, 27 Jul 2023 22:42:17 +0800 Subject: [PATCH 5/5] update package import order --- app/app.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/app.go b/app/app.go index 1222937..66d94c6 100644 --- a/app/app.go +++ b/app/app.go @@ -8,8 +8,6 @@ import ( "path/filepath" "strings" - "github.com/cosmos/cosmos-sdk/x/group" - autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1" dbm "github.com/cometbft/cometbft-db" @@ -82,6 +80,7 @@ import ( govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + "github.com/cosmos/cosmos-sdk/x/group" groupkeeper "github.com/cosmos/cosmos-sdk/x/group/keeper" groupmodule "github.com/cosmos/cosmos-sdk/x/group/module" "github.com/cosmos/cosmos-sdk/x/params"