github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/gov/handler.go (about)

     1  package gov
     2  
     3  import (
     4  	"fmt"
     5  
     6  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     7  	sdkerrors "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/errors"
     8  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/gov/types"
     9  )
    10  
    11  // NewHandler creates an sdk.Handler for all the gov type messages
    12  func NewHandler(keeper Keeper) sdk.Handler {
    13  	return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) {
    14  		ctx.SetEventManager(sdk.NewEventManager())
    15  
    16  		switch msg := msg.(type) {
    17  		case MsgDeposit:
    18  			return handleMsgDeposit(ctx, keeper, msg)
    19  
    20  		case MsgSubmitProposal:
    21  			return handleMsgSubmitProposal(ctx, keeper, msg)
    22  
    23  		case MsgVote:
    24  			return handleMsgVote(ctx, keeper, msg)
    25  
    26  		default:
    27  			return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized %s message type: %T", ModuleName, msg)
    28  		}
    29  	}
    30  }
    31  
    32  func handleMsgSubmitProposal(ctx sdk.Context, keeper Keeper, msg MsgSubmitProposal) (*sdk.Result, error) {
    33  	proposal, err := keeper.SubmitProposal(ctx, msg.Content)
    34  	if err != nil {
    35  		return nil, err
    36  	}
    37  
    38  	votingStarted, err := keeper.AddDeposit(ctx, proposal.ProposalID, msg.Proposer, msg.InitialDeposit)
    39  	if err != nil {
    40  		return nil, err
    41  	}
    42  
    43  	ctx.EventManager().EmitEvent(
    44  		sdk.NewEvent(
    45  			sdk.EventTypeMessage,
    46  			sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),
    47  			sdk.NewAttribute(sdk.AttributeKeySender, msg.Proposer.String()),
    48  		),
    49  	)
    50  
    51  	submitEvent := sdk.NewEvent(types.EventTypeSubmitProposal, sdk.NewAttribute(types.AttributeKeyProposalType, msg.Content.ProposalType()))
    52  	if votingStarted {
    53  		submitEvent = submitEvent.AppendAttributes(
    54  			sdk.NewAttribute(types.AttributeKeyVotingPeriodStart, fmt.Sprintf("%d", proposal.ProposalID)),
    55  		)
    56  	}
    57  	ctx.EventManager().EmitEvent(submitEvent)
    58  
    59  	return &sdk.Result{
    60  		Data:   GetProposalIDBytes(proposal.ProposalID),
    61  		Events: ctx.EventManager().Events(),
    62  	}, nil
    63  }
    64  
    65  func handleMsgDeposit(ctx sdk.Context, keeper Keeper, msg MsgDeposit) (*sdk.Result, error) {
    66  	votingStarted, err := keeper.AddDeposit(ctx, msg.ProposalID, msg.Depositor, msg.Amount)
    67  	if err != nil {
    68  		return nil, err
    69  	}
    70  
    71  	ctx.EventManager().EmitEvent(
    72  		sdk.NewEvent(
    73  			sdk.EventTypeMessage,
    74  			sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),
    75  			sdk.NewAttribute(sdk.AttributeKeySender, msg.Depositor.String()),
    76  		),
    77  	)
    78  
    79  	if votingStarted {
    80  		ctx.EventManager().EmitEvent(
    81  			sdk.NewEvent(
    82  				types.EventTypeProposalDeposit,
    83  				sdk.NewAttribute(types.AttributeKeyVotingPeriodStart, fmt.Sprintf("%d", msg.ProposalID)),
    84  			),
    85  		)
    86  	}
    87  
    88  	return &sdk.Result{Events: ctx.EventManager().Events()}, nil
    89  }
    90  
    91  func handleMsgVote(ctx sdk.Context, keeper Keeper, msg MsgVote) (*sdk.Result, error) {
    92  	err := keeper.AddVote(ctx, msg.ProposalID, msg.Voter, msg.Option)
    93  	if err != nil {
    94  		return nil, err
    95  	}
    96  
    97  	ctx.EventManager().EmitEvent(
    98  		sdk.NewEvent(
    99  			sdk.EventTypeMessage,
   100  			sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),
   101  			sdk.NewAttribute(sdk.AttributeKeySender, msg.Voter.String()),
   102  		),
   103  	)
   104  
   105  	return &sdk.Result{Events: ctx.EventManager().Events()}, nil
   106  }