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