From 6757303fcf3e5aee21dd8727d4beb029950dbff0 Mon Sep 17 00:00:00 2001 From: Jim Larson Date: Thu, 29 Jun 2023 14:46:01 -0700 Subject: [PATCH 1/4] feat: Cosmos upgrade handler calls swingset --- golang/cosmos/app/app.go | 63 +++++++++++--------- golang/cosmos/app/const.go | 4 +- packages/cosmic-swingset/src/launch-chain.js | 6 ++ packages/internal/src/action-types.js | 1 + 4 files changed, 45 insertions(+), 29 deletions(-) diff --git a/golang/cosmos/app/app.go b/golang/cosmos/app/app.go index 1f26380e46d..6bcb5d14d6c 100644 --- a/golang/cosmos/app/app.go +++ b/golang/cosmos/app/app.go @@ -744,11 +744,11 @@ func NewAgoricApp( app.UpgradeKeeper.SetUpgradeHandler( upgradeName, - upgrade10Handler(app, upgradeName), + upgrade11Handler(app, upgradeName, callToController), ) app.UpgradeKeeper.SetUpgradeHandler( upgradeNameTest, - upgrade10Handler(app, upgradeNameTest), + upgrade11Handler(app, upgradeNameTest, callToController), ) if loadLatest { @@ -771,39 +771,48 @@ func NewAgoricApp( return app } -func upgrade10Handler(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) { - // change bootrap gov parameter to correct vaults parameter - - prevParams := app.SwingSetKeeper.GetParams(ctx) - - ctx.Logger().Info("Pre-upgrade swingset params", "BeansPerUnit", fmt.Sprintf("%v", prevParams.BeansPerUnit), "BootstrapVatConfig", prevParams.BootstrapVatConfig) - - switch targetUpgrade { - case upgradeName: - prevParams.BootstrapVatConfig = "@agoric/vats/decentral-main-vaults-config.json" - case upgradeNameTest: - prevParams.BootstrapVatConfig = "@agoric/vats/decentral-test-vaults-config.json" - default: - return fromVm, fmt.Errorf("invalid upgrade name") - } +// swingsetUpgradeAction is the action to run swingset upgrade handlers. +type swingsetUpgradeAction struct { + // Type must be enactUpgradePlanType + Type string `json:"type"` + // Plan is the upgrade plan + Plan upgradetypes.Plan `json:"plan"` +} - app.SwingSetKeeper.SetParams(ctx, prevParams) - ctx.Logger().Info("Post-upgrade swingset params", "BeansPerUnit", fmt.Sprintf("%v", prevParams.BeansPerUnit), "BootstrapVatConfig", prevParams.BootstrapVatConfig) +const enactUpgradePlanType = "ENACT_UPGRADE_PLAN" - app.VstorageKeeper.MigrateNoDataPlaceholders(ctx) // upgrade-10 only - normalizeModuleAccount(ctx, app.AccountKeeper, vbanktypes.ProvisionPoolName) - normalizeModuleAccount(ctx, app.AccountKeeper, vbanktypes.ReservePoolName) +// swingsetUpgrade tells swingset to execute the upgrade plan. +func swingsetUpgrade(ctx sdk.Context, plan upgradetypes.Plan, callToController func(ctx sdk.Context, str string) (string, error)) error { + action := swingsetUpgradeAction{ + Type: enactUpgradePlanType, + Plan: plan, + } + bz, err := json.Marshal(action) + if err != nil { + return err + } + _, err = callToController(ctx, string(bz)) + if err != nil { + return err + } + return nil +} +// upgrade11Handler performs standard upgrade actions plus custom actions for upgrade-11. +func upgrade11Handler(app *GaiaApp, targetUpgrade string, callToController func(ctx sdk.Context, str string) (string, error)) func(sdk.Context, upgradetypes.Plan, module.VersionMap) (module.VersionMap, error) { + return func(ctx sdk.Context, plan upgradetypes.Plan, fromVm module.VersionMap) (module.VersionMap, error) { + // Always run module migrations mvm, err := app.mm.RunMigrations(ctx, app.configurator, fromVm) if err != nil { return mvm, err } - // Just run the SwingSet kernel to finish bootstrap and get ready to open for - // business. - stdlog.Println("Rebooting SwingSet") - return mvm, swingset.BootSwingset(ctx, app.SwingSetKeeper) + // Lastly, let Swingset reaction to the upgrade + err = swingsetUpgrade(ctx, plan, callToController) + if err != nil { + return mvm, err + } + return mvm, nil } } diff --git a/golang/cosmos/app/const.go b/golang/cosmos/app/const.go index 15dd38b8b70..2e7f4a2f391 100644 --- a/golang/cosmos/app/const.go +++ b/golang/cosmos/app/const.go @@ -1,6 +1,6 @@ package gaia const ( - upgradeName = "agoric-upgrade-10" - upgradeNameTest = "agorictest-upgrade-10" + upgradeName = "agoric-upgrade-11" + upgradeNameTest = "agorictest-upgrade-11" ) diff --git a/packages/cosmic-swingset/src/launch-chain.js b/packages/cosmic-swingset/src/launch-chain.js index 07006df536a..4d5fd93795d 100644 --- a/packages/cosmic-swingset/src/launch-chain.js +++ b/packages/cosmic-swingset/src/launch-chain.js @@ -842,6 +842,12 @@ export async function launch({ return undefined; } + case ActionType.ENACT_UPGRADE_PLAN: { + // Dispatch to upgrade-specific handler + // const { plan } = action; + // const { name, height, info } = plan; + return undefined; + } default: { throw Fail`Unrecognized action ${action}; are you sure you didn't mean to queue it?`; diff --git a/packages/internal/src/action-types.js b/packages/internal/src/action-types.js index 2d5a3d77ce2..e5ed9a05dcf 100644 --- a/packages/internal/src/action-types.js +++ b/packages/internal/src/action-types.js @@ -15,3 +15,4 @@ export const VBANK_BALANCE_UPDATE = 'VBANK_BALANCE_UPDATE'; export const WALLET_ACTION = 'WALLET_ACTION'; export const WALLET_SPEND_ACTION = 'WALLET_SPEND_ACTION'; export const INSTALL_BUNDLE = 'INSTALL_BUNDLE'; +export const ENACT_UPGRADE_PLAN = 'ENACT_UPGRADE_PLAN'; From e088215a7561b0bcc0f4c83f7a099c6cc32fb66f Mon Sep 17 00:00:00 2001 From: Jim Larson Date: Mon, 10 Jul 2023 23:41:50 -0700 Subject: [PATCH 2/4] fix: test upgrade to one-past-vaults --- packages/deployment/upgrade-test/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/deployment/upgrade-test/Dockerfile b/packages/deployment/upgrade-test/Dockerfile index ffe27896c4c..b00ccf38aac 100644 --- a/packages/deployment/upgrade-test/Dockerfile +++ b/packages/deployment/upgrade-test/Dockerfile @@ -59,7 +59,7 @@ ARG DEST_IMAGE #this is agoric-upgrade-10 / vaults FROM ghcr.io/agoric/agoric-sdk:34 as agoric-upgrade-10 ARG BOOTSTRAP_MODE -ENV THIS_NAME=agoric-upgrade-10 BOOTSTRAP_MODE=${BOOTSTRAP_MODE} +ENV THIS_NAME=agoric-upgrade-10 UPGRADE_TO=agoric-upgrade-11 BOOTSTRAP_MODE=${BOOTSTRAP_MODE} WORKDIR /usr/src/agoric-sdk/ COPY ./bash_entrypoint.sh ./env_setup.sh ./start_to_to.sh ./upgrade-test-scripts/ From e84ebf2c1baf21365f1214c42800eabab20e00f8 Mon Sep 17 00:00:00 2001 From: Jim Larson Date: Tue, 11 Jul 2023 00:08:30 -0700 Subject: [PATCH 3/4] refactor: put upgrade plan in cosmos init action --- golang/cosmos/app/app.go | 55 ++++++-------------- packages/cosmic-swingset/src/launch-chain.js | 6 --- packages/internal/src/action-types.js | 1 - 3 files changed, 15 insertions(+), 47 deletions(-) diff --git a/golang/cosmos/app/app.go b/golang/cosmos/app/app.go index 6bcb5d14d6c..c646bb5ae63 100644 --- a/golang/cosmos/app/app.go +++ b/golang/cosmos/app/app.go @@ -201,6 +201,8 @@ type GaiaApp struct { // nolint: golint vibcPort int vstoragePort int + upgradePlan *upgradetypes.Plan + invCheckPeriod uint // keys to access the substores @@ -771,47 +773,18 @@ func NewAgoricApp( return app } -// swingsetUpgradeAction is the action to run swingset upgrade handlers. -type swingsetUpgradeAction struct { - // Type must be enactUpgradePlanType - Type string `json:"type"` - // Plan is the upgrade plan - Plan upgradetypes.Plan `json:"plan"` -} - -const enactUpgradePlanType = "ENACT_UPGRADE_PLAN" - -// swingsetUpgrade tells swingset to execute the upgrade plan. -func swingsetUpgrade(ctx sdk.Context, plan upgradetypes.Plan, callToController func(ctx sdk.Context, str string) (string, error)) error { - action := swingsetUpgradeAction{ - Type: enactUpgradePlanType, - Plan: plan, - } - bz, err := json.Marshal(action) - if err != nil { - return err - } - _, err = callToController(ctx, string(bz)) - if err != nil { - return err - } - return nil -} - // upgrade11Handler performs standard upgrade actions plus custom actions for upgrade-11. func upgrade11Handler(app *GaiaApp, targetUpgrade string, callToController func(ctx sdk.Context, str string) (string, error)) func(sdk.Context, upgradetypes.Plan, module.VersionMap) (module.VersionMap, error) { return func(ctx sdk.Context, plan upgradetypes.Plan, fromVm module.VersionMap) (module.VersionMap, error) { + // Record the plan to send to SwingSet + app.upgradePlan = &plan + // Always run module migrations mvm, err := app.mm.RunMigrations(ctx, app.configurator, fromVm) if err != nil { return mvm, err } - // Lastly, let Swingset reaction to the upgrade - err = swingsetUpgrade(ctx, plan, callToController) - if err != nil { - return mvm, err - } return mvm, nil } } @@ -834,14 +807,15 @@ func normalizeModuleAccount(ctx sdk.Context, ak authkeeper.AccountKeeper, name s } type cosmosInitAction struct { - Type string `json:"type"` - ChainID string `json:"chainID"` - Params swingset.Params `json:"params"` - StoragePort int `json:"storagePort"` - SupplyCoins sdk.Coins `json:"supplyCoins"` - VibcPort int `json:"vibcPort"` - VbankPort int `json:"vbankPort"` - LienPort int `json:"lienPort"` + Type string `json:"type"` + ChainID string `json:"chainID"` + Params swingset.Params `json:"params"` + StoragePort int `json:"storagePort"` + SupplyCoins sdk.Coins `json:"supplyCoins"` + VibcPort int `json:"vibcPort"` + VbankPort int `json:"vbankPort"` + LienPort int `json:"lienPort"` + UpgradePlan *upgradetypes.Plan `json:"upgradePlan,omitempty"` } // Name returns the name of the App @@ -862,6 +836,7 @@ func (app *GaiaApp) MustInitController(ctx sdk.Context) { VibcPort: app.vibcPort, VbankPort: app.vbankPort, LienPort: app.lienPort, + UpgradePlan: app.upgradePlan, } out, err := app.SwingSetKeeper.BlockingSend(ctx, action) diff --git a/packages/cosmic-swingset/src/launch-chain.js b/packages/cosmic-swingset/src/launch-chain.js index 4d5fd93795d..07006df536a 100644 --- a/packages/cosmic-swingset/src/launch-chain.js +++ b/packages/cosmic-swingset/src/launch-chain.js @@ -842,12 +842,6 @@ export async function launch({ return undefined; } - case ActionType.ENACT_UPGRADE_PLAN: { - // Dispatch to upgrade-specific handler - // const { plan } = action; - // const { name, height, info } = plan; - return undefined; - } default: { throw Fail`Unrecognized action ${action}; are you sure you didn't mean to queue it?`; diff --git a/packages/internal/src/action-types.js b/packages/internal/src/action-types.js index e5ed9a05dcf..2d5a3d77ce2 100644 --- a/packages/internal/src/action-types.js +++ b/packages/internal/src/action-types.js @@ -15,4 +15,3 @@ export const VBANK_BALANCE_UPDATE = 'VBANK_BALANCE_UPDATE'; export const WALLET_ACTION = 'WALLET_ACTION'; export const WALLET_SPEND_ACTION = 'WALLET_SPEND_ACTION'; export const INSTALL_BUNDLE = 'INSTALL_BUNDLE'; -export const ENACT_UPGRADE_PLAN = 'ENACT_UPGRADE_PLAN'; From 8d8580a8c46e602b6c505845a3dec5442f62970f Mon Sep 17 00:00:00 2001 From: Jim Larson Date: Tue, 11 Jul 2023 00:12:26 -0700 Subject: [PATCH 4/4] refactor: no longer a need for upgrade function to talk over bridge --- 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 c646bb5ae63..9d037a3bf3f 100644 --- a/golang/cosmos/app/app.go +++ b/golang/cosmos/app/app.go @@ -746,11 +746,11 @@ func NewAgoricApp( app.UpgradeKeeper.SetUpgradeHandler( upgradeName, - upgrade11Handler(app, upgradeName, callToController), + upgrade11Handler(app, upgradeName), ) app.UpgradeKeeper.SetUpgradeHandler( upgradeNameTest, - upgrade11Handler(app, upgradeNameTest, callToController), + upgrade11Handler(app, upgradeNameTest), ) if loadLatest { @@ -774,7 +774,7 @@ func NewAgoricApp( } // upgrade11Handler performs standard upgrade actions plus custom actions for upgrade-11. -func upgrade11Handler(app *GaiaApp, targetUpgrade string, callToController func(ctx sdk.Context, str string) (string, error)) func(sdk.Context, upgradetypes.Plan, module.VersionMap) (module.VersionMap, error) { +func upgrade11Handler(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) { // Record the plan to send to SwingSet app.upgradePlan = &plan