From 2bda2acaee5442e9ee4e1558d5f84bd785a984c5 Mon Sep 17 00:00:00 2001 From: Mathieu Hofman Date: Wed, 6 Mar 2024 20:51:26 +0000 Subject: [PATCH 1/6] refactor(cosmos): handle multiple upgrades of same version --- golang/cosmos/app/app.go | 56 ++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/golang/cosmos/app/app.go b/golang/cosmos/app/app.go index 8bb38103444..aa4ed2ecbbc 100644 --- a/golang/cosmos/app/app.go +++ b/golang/cosmos/app/app.go @@ -788,25 +788,19 @@ func NewAgoricApp( app.SetBeginBlocker(app.BeginBlocker) app.SetEndBlocker(app.EndBlocker) - const ( - upgradeName = "agoric-upgrade-14" - upgradeNameTest = "agorictest-upgrade-14" - ) + for name := range upgradeNamesOfThisVersion { - app.UpgradeKeeper.SetUpgradeHandler( - upgradeName, - upgrade14Handler(app, upgradeName), - ) - app.UpgradeKeeper.SetUpgradeHandler( - upgradeNameTest, - upgrade14Handler(app, upgradeNameTest), - ) + app.UpgradeKeeper.SetUpgradeHandler( + name, + upgrade14Handler(app, name), + ) + } upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk() if err != nil { panic(err) } - if (upgradeInfo.Name == upgradeName || upgradeInfo.Name == upgradeNameTest) && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { + if upgradeInfo.Name != "" && upgradeNamesOfThisVersion[upgradeInfo.Name] && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { storeUpgrades := storetypes.StoreUpgrades{ Deleted: []string{ crisistypes.ModuleName, // The SDK discontinued the crisis module in v0.51.0 @@ -837,20 +831,38 @@ func NewAgoricApp( return app } +var upgradeNamesOfThisVersion = map[string]bool{ + "agoric-upgrade-14": true, + "agorictest-upgrade-14": true, +} + +func isFirstTimeUpgradeOfThisVersion(app *GaiaApp, ctx sdk.Context) bool { + for name := range upgradeNamesOfThisVersion { + if app.UpgradeKeeper.GetDoneHeight(ctx, name) != 0 { + return false + } + } + return true +} + // upgrade14Handler performs standard upgrade actions plus custom actions for upgrade-14. func upgrade14Handler(app *GaiaApp, targetUpgrade string) func(sdk.Context, upgradetypes.Plan, module.VersionMap) (module.VersionMap, error) { return func(ctx sdk.Context, plan upgradetypes.Plan, fromVm module.VersionMap) (module.VersionMap, error) { app.CheckControllerInited(false) - // Each CoreProposalStep runs sequentially, and can be constructed from - // one or more modules executing in parallel within the step. - CoreProposalSteps := []vm.CoreProposalStep{ - // First, upgrade wallet factory - vm.CoreProposalStepForModules("@agoric/vats/scripts/build-wallet-factory2-upgrade.js"), - // Then, upgrade Zoe and ZCF - vm.CoreProposalStepForModules("@agoric/vats/scripts/replace-zoe.js"), - // Next revive KREAd characters - vm.CoreProposalStepForModules("@agoric/vats/scripts/revive-kread.js"), + CoreProposalSteps := []vm.CoreProposalStep{} + + if isFirstTimeUpgradeOfThisVersion(app, ctx) { + // Each CoreProposalStep runs sequentially, and can be constructed from + // one or more modules executing in parallel within the step. + CoreProposalSteps = []vm.CoreProposalStep{ + // First, upgrade wallet factory + vm.CoreProposalStepForModules("@agoric/vats/scripts/build-wallet-factory2-upgrade.js"), + // Then, upgrade Zoe and ZCF + vm.CoreProposalStepForModules("@agoric/vats/scripts/replace-zoe.js"), + // Next revive KREAd characters + vm.CoreProposalStepForModules("@agoric/vats/scripts/revive-kread.js"), + } } app.upgradeDetails = &upgradeDetails{ From f6e873145f0c064b7714db30765ad7ce3b755075 Mon Sep 17 00:00:00 2001 From: Mathieu Hofman Date: Wed, 6 Mar 2024 20:52:31 +0000 Subject: [PATCH 2/6] feat(cosmos): add agorictest-upgrade-14-rc1 upgrade name --- golang/cosmos/app/app.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/golang/cosmos/app/app.go b/golang/cosmos/app/app.go index aa4ed2ecbbc..36187eda380 100644 --- a/golang/cosmos/app/app.go +++ b/golang/cosmos/app/app.go @@ -832,8 +832,9 @@ func NewAgoricApp( } var upgradeNamesOfThisVersion = map[string]bool{ - "agoric-upgrade-14": true, - "agorictest-upgrade-14": true, + "agoric-upgrade-14": true, + "agorictest-upgrade-14": true, + "agorictest-upgrade-14-rc1": true, } func isFirstTimeUpgradeOfThisVersion(app *GaiaApp, ctx sdk.Context) bool { From 43321e2354bf1079769763e8a1f42d17f833dcb9 Mon Sep 17 00:00:00 2001 From: Mathieu Hofman Date: Wed, 6 Mar 2024 23:14:31 +0000 Subject: [PATCH 3/6] fixup! refactor(cosmos): handle multiple upgrades of same version --- golang/cosmos/app/app.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/golang/cosmos/app/app.go b/golang/cosmos/app/app.go index 36187eda380..95a8d68b01a 100644 --- a/golang/cosmos/app/app.go +++ b/golang/cosmos/app/app.go @@ -789,7 +789,6 @@ func NewAgoricApp( app.SetEndBlocker(app.EndBlocker) for name := range upgradeNamesOfThisVersion { - app.UpgradeKeeper.SetUpgradeHandler( name, upgrade14Handler(app, name), @@ -853,6 +852,8 @@ func upgrade14Handler(app *GaiaApp, targetUpgrade string) func(sdk.Context, upgr CoreProposalSteps := []vm.CoreProposalStep{} + // These CoreProposalSteps are not idempotent and should only be executed + // as part of the first upgrade-14 on any given chain. if isFirstTimeUpgradeOfThisVersion(app, ctx) { // Each CoreProposalStep runs sequentially, and can be constructed from // one or more modules executing in parallel within the step. From d8e9d57ba4e7f9b6e528cd45d2c8fe8c521d2753 Mon Sep 17 00:00:00 2001 From: Mathieu Hofman Date: Wed, 6 Mar 2024 23:15:15 +0000 Subject: [PATCH 4/6] fixup! feat(cosmos): add agorictest-upgrade-14-2 upgrade name --- golang/cosmos/app/app.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/golang/cosmos/app/app.go b/golang/cosmos/app/app.go index 95a8d68b01a..7cf158fbe94 100644 --- a/golang/cosmos/app/app.go +++ b/golang/cosmos/app/app.go @@ -831,9 +831,9 @@ func NewAgoricApp( } var upgradeNamesOfThisVersion = map[string]bool{ - "agoric-upgrade-14": true, - "agorictest-upgrade-14": true, - "agorictest-upgrade-14-rc1": true, + "agoric-upgrade-14": true, + "agorictest-upgrade-14": true, + "agorictest-upgrade-14-2": true, } func isFirstTimeUpgradeOfThisVersion(app *GaiaApp, ctx sdk.Context) bool { From f091b6d179bc3eddabac3c5b548686458f0e8266 Mon Sep 17 00:00:00 2001 From: Mathieu Hofman Date: Fri, 8 Mar 2024 02:09:44 +0000 Subject: [PATCH 5/6] fix(scripts): unwrap binary in upgrade info --- scripts/gen-upgrade-proposal.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gen-upgrade-proposal.sh b/scripts/gen-upgrade-proposal.sh index ea12ae0f196..fe9902f3158 100755 --- a/scripts/gen-upgrade-proposal.sh +++ b/scripts/gen-upgrade-proposal.sh @@ -20,7 +20,7 @@ curl -L "$ZIPURL" -o "$zipfile" echo "Generating SHA-256 checksum..." 1>&2 checksum=sha256:$(shasum -a 256 "$zipfile" | cut -d' ' -f1) -info="{\"binaries\":{\"any\":\"$ZIPURL?checksum=$checksum\"}}" +info="{\"binaries\":{\"any\":\"$ZIPURL//agoric-sdk-$COMMIT_ID?checksum=$checksum\"},\"source\":\"$ZIPURL?checksum=$checksum\"}" cat <&2 ------------------------------------------------------------ From 6c2b10771c7efe01fc5becde5b0e2c8d6a560009 Mon Sep 17 00:00:00 2001 From: Richard Gibson Date: Mon, 11 Mar 2024 15:21:59 -0400 Subject: [PATCH 6/6] style(golang): Eliminate unnecessary condition --- golang/cosmos/app/app.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/golang/cosmos/app/app.go b/golang/cosmos/app/app.go index 7cf158fbe94..45120af0f2f 100644 --- a/golang/cosmos/app/app.go +++ b/golang/cosmos/app/app.go @@ -799,7 +799,7 @@ func NewAgoricApp( if err != nil { panic(err) } - if upgradeInfo.Name != "" && upgradeNamesOfThisVersion[upgradeInfo.Name] && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { + if upgradeNamesOfThisVersion[upgradeInfo.Name] && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { storeUpgrades := storetypes.StoreUpgrades{ Deleted: []string{ crisistypes.ModuleName, // The SDK discontinued the crisis module in v0.51.0