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 }