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  }