github.com/Finschia/finschia-sdk@v0.48.1/x/upgrade/handler.go (about) 1 package upgrade 2 3 import ( 4 sdk "github.com/Finschia/finschia-sdk/types" 5 sdkerrors "github.com/Finschia/finschia-sdk/types/errors" 6 govtypes "github.com/Finschia/finschia-sdk/x/gov/types" 7 "github.com/Finschia/finschia-sdk/x/upgrade/keeper" 8 "github.com/Finschia/finschia-sdk/x/upgrade/types" 9 ) 10 11 // NewSoftwareUpgradeProposalHandler creates a governance handler to manage new proposal types. 12 // It enables SoftwareUpgradeProposal to propose an Upgrade, and CancelSoftwareUpgradeProposal 13 // to abort a previously voted upgrade. 14 func NewSoftwareUpgradeProposalHandler(k keeper.Keeper) govtypes.Handler { 15 return func(ctx sdk.Context, content govtypes.Content) error { 16 switch c := content.(type) { 17 case *types.SoftwareUpgradeProposal: 18 return handleSoftwareUpgradeProposal(ctx, k, c) 19 20 case *types.CancelSoftwareUpgradeProposal: 21 return handleCancelSoftwareUpgradeProposal(ctx, k, c) 22 23 default: 24 return sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized software upgrade proposal content type: %T", c) 25 } 26 } 27 } 28 29 func handleSoftwareUpgradeProposal(ctx sdk.Context, k keeper.Keeper, p *types.SoftwareUpgradeProposal) error { 30 return k.ScheduleUpgrade(ctx, p.Plan) 31 } 32 33 func handleCancelSoftwareUpgradeProposal(ctx sdk.Context, k keeper.Keeper, _ *types.CancelSoftwareUpgradeProposal) error { 34 k.ClearUpgradePlan(ctx) 35 return nil 36 }