package keeper import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/kava-labs/kava/x/committee/types" ) type msgServer struct { keeper Keeper } // NewMsgServerImpl returns an implementation of the committee MsgServer interface // for the provided Keeper. func NewMsgServerImpl(keeper Keeper) types.MsgServer { return &msgServer{keeper: keeper} } var _ types.MsgServer = msgServer{} // SubmitProposal handles MsgSubmitProposal messages func (m msgServer) SubmitProposal(goCtx context.Context, msg *types.MsgSubmitProposal) (*types.MsgSubmitProposalResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) proposer, err := sdk.AccAddressFromBech32(msg.Proposer) if err != nil { return nil, err } proposalID, err := m.keeper.SubmitProposal(ctx, proposer, msg.CommitteeID, msg.GetPubProposal()) if err != nil { return nil, err } ctx.EventManager().EmitEvent( sdk.NewEvent( sdk.EventTypeMessage, sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), sdk.NewAttribute(sdk.AttributeKeySender, msg.Proposer), ), ) return &types.MsgSubmitProposalResponse{ProposalID: proposalID}, nil } // Vote handles MsgVote messages func (m msgServer) Vote(goCtx context.Context, msg *types.MsgVote) (*types.MsgVoteResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) voter, err := sdk.AccAddressFromBech32(msg.Voter) if err != nil { return nil, err } if err := m.keeper.AddVote(ctx, msg.ProposalID, voter, msg.VoteType); err != nil { return nil, err } ctx.EventManager().EmitEvent( sdk.NewEvent( sdk.EventTypeMessage, sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), sdk.NewAttribute(sdk.AttributeKeySender, msg.Voter), ), ) return &types.MsgVoteResponse{}, nil }