github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/mint/proposal_handler.go (about) 1 package mint 2 3 import ( 4 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 5 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/mint/internal/types" 6 "github.com/fibonacci-chain/fbc/x/common" 7 8 govTypes "github.com/fibonacci-chain/fbc/x/gov/types" 9 ) 10 11 // NewManageTreasuresProposalHandler handles "gov" type message in "mint" 12 func NewManageTreasuresProposalHandler(k *Keeper) govTypes.Handler { 13 return func(ctx sdk.Context, proposal *govTypes.Proposal) (err sdk.Error) { 14 switch content := proposal.Content.(type) { 15 case types.ManageTreasuresProposal: 16 return handleManageTreasuresProposal(ctx, k, proposal) 17 case types.ModifyNextBlockUpdateProposal: 18 return handleModifyNextBlockUpdateProposal(ctx, k, proposal) 19 default: 20 return common.ErrUnknownProposalType(types.DefaultCodespace, content.ProposalType()) 21 } 22 } 23 } 24 25 func handleManageTreasuresProposal(ctx sdk.Context, k *Keeper, proposal *govTypes.Proposal) sdk.Error { 26 // check 27 manageTreasuresProposal, ok := proposal.Content.(types.ManageTreasuresProposal) 28 if !ok { 29 return types.ErrUnexpectedProposalType 30 } 31 32 if manageTreasuresProposal.IsAdded { 33 // add/update treasures into state 34 if err := k.UpdateTreasures(ctx, manageTreasuresProposal.Treasures); err != nil { 35 return types.ErrTreasuresInternal(err) 36 } 37 return nil 38 } 39 40 // delete treasures into state 41 if err := k.DeleteTreasures(ctx, manageTreasuresProposal.Treasures); err != nil { 42 return types.ErrTreasuresInternal(err) 43 } 44 return nil 45 } 46 47 func handleModifyNextBlockUpdateProposal(ctx sdk.Context, k *Keeper, proposal *govTypes.Proposal) sdk.Error { 48 modifyProposal, ok := proposal.Content.(types.ModifyNextBlockUpdateProposal) 49 if !ok { 50 return types.ErrUnexpectedProposalType 51 } 52 if modifyProposal.BlockNum <= uint64(ctx.BlockHeight()) { 53 return types.ErrNextBlockUpdateTooLate 54 } 55 56 minter := k.GetMinterCustom(ctx) 57 minter.NextBlockToUpdate = modifyProposal.BlockNum 58 k.SetMinterCustom(ctx, minter) 59 return nil 60 }