diff --git a/app/upgrade_v0_1_2.go b/app/upgrade_v0_1_2.go index 60b8c3f..fb5a9f2 100644 --- a/app/upgrade_v0_1_2.go +++ b/app/upgrade_v0_1_2.go @@ -16,7 +16,6 @@ package app import ( "bytes" - "fmt" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" @@ -28,13 +27,18 @@ import ( // applyUpgrade_v0_1_2 checks and applies the upgrade plan if necessary. func (app *App) applyUpgrade_v0_1_2() { - ctx, err := app.CreateQueryContext(v0_1_2.UpgradeBlockHeight, false) + latestBlock := app.LastBlockHeight() + logger := app.Logger().With("upgrade", v0_1_2.UpgradeName) + + ctx, err := app.CreateQueryContext(latestBlock, false) if err != nil { + logger.Error("Failed to create query context with block", "error", err, "block", latestBlock) return } plan, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk() if err != nil || plan.Height < v0_1_2.UpgradeBlockHeight { + logger.Info("Applying upgrade plan", "info", plan.Info) app.UpgradeKeeper.SetUpgradeHandler(v0_1_2.UpgradeName, app.upgradeHandler_v0_1_2()) app.UpgradeKeeper.ApplyUpgrade(ctx, v0_1_2.Plan) } @@ -46,20 +50,28 @@ func (app *App) upgradeHandler_v0_1_2() func( _ upgradetypes.Plan, fromVM module.VersionMap, ) (module.VersionMap, error) { - return func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { - logger := ctx.Logger().With("upgrade", v0_1_2.UpgradeName) + return func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + logger := ctx.Logger().With("upgrade", plan.Name) + + if plan.Name != v0_1_2.UpgradeName { + logger.Error("Invalid upgrade plan", "expected", v0_1_2.UpgradeName, "got", plan.Name) + return app.ModuleManager.RunMigrations(ctx, app.Configurator(), fromVM) + } + validators := app.StakingKeeper.GetAllValidators(ctx) for _, validator := range validators { if err := app.updateValidatorPowerIndex(ctx, validator); err != nil { - panic(fmt.Sprintf("failed to update validator power index: %v", err)) + logger.Error("Failed to update validator power index", "error", err, "validator", validator.OperatorAddress) + return nil, err } - logger.Info("Validator power index updated", "validator", validator.OperatorAddress) } + logger.Info("All validators updated successfully.") - if err := app.UpgradeKeeper.DumpUpgradeInfoToDisk(v0_1_2.UpgradeBlockHeight, v0_1_2.Plan); err != nil { + if err := app.UpgradeKeeper.DumpUpgradeInfoToDisk(plan.Height, plan); err != nil { + logger.Error("Failed to dump upgrade info to disk", "error", err) return nil, err } diff --git a/scripts/upgrade_v0_1_2.sh b/scripts/upgrade_v0_1_2.sh new file mode 100755 index 0000000..30747c4 --- /dev/null +++ b/scripts/upgrade_v0_1_2.sh @@ -0,0 +1,65 @@ +# Copyright 2024 Galactica Network +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#!/bin/bash + +# This script is used to prepare the upgrade from v0.1.1 to v0.1.2 + +GALACTICAD_VERSION=$(galacticad version) +if [[ $GALACTICAD_VERSION != *"0.1.2"* ]]; then + echo "Galactica version must be 0.1.2" + exit 1 +fi + +# check env var GALACTICA_HOME and if not exists exit +if [ -z "$GALACTICA_HOME" ]; then + echo "GALACTICA_HOME is not set, using default path" + GALACTICA_HOME="$HOME/.galactica" +fi + +# ask user to confirm: +echo "GALACTICA_HOME: $GALACTICA_HOME" +echo "\nThis script will perform the following actions:\n\ +- Backup the existing priv_validator_state.json and replace it with a new one containing default values\n\ +- Upgrade the node storage to v0.1.2\n\ +- Rollback the latest block state\n" + +if [ "$1" != "-y" ]; then + read -p "Do you want to continue? (y/n): " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + echo "User cancelled the script" + exit 1 + fi +fi + +PRIV_VAL_STATE=$GALACTICA_HOME/data/priv_validator_state.json + +UPGRADE_INFO_FILE=$GALACTICA_HOME/data/upgrade-info.json +if [ -f "$UPGRADE_INFO_FILE" ]; then + echo "upgrade v0.1.2 already applied" + exit 1 +fi + +if [ ! -f "$PRIV_VAL_STATE" ]; then + echo "priv_validator_state.json not found at $PRIV_VAL_STATE" + exit 1 +fi + +cp $PRIV_VAL_STATE $PRIV_VAL_STATE.bkp + +galacticad --home $GALACTICA_HOME rollback --hard + +echo '{"height":"0","round":0,"step":0}' > $PRIV_VAL_STATE +