github.com/Finschia/finschia-sdk@v0.48.1/x/gov/keeper/msg_server.go (about) 1 package keeper 2 3 import ( 4 "context" 5 "fmt" 6 "strconv" 7 8 "github.com/armon/go-metrics" 9 10 "github.com/Finschia/finschia-sdk/telemetry" 11 sdk "github.com/Finschia/finschia-sdk/types" 12 "github.com/Finschia/finschia-sdk/x/gov/types" 13 ) 14 15 type msgServer struct { 16 Keeper 17 } 18 19 // NewMsgServerImpl returns an implementation of the gov MsgServer interface 20 // for the provided Keeper. 21 func NewMsgServerImpl(keeper Keeper) types.MsgServer { 22 return &msgServer{Keeper: keeper} 23 } 24 25 var _ types.MsgServer = msgServer{} 26 27 func (k msgServer) SubmitProposal(goCtx context.Context, msg *types.MsgSubmitProposal) (*types.MsgSubmitProposalResponse, error) { 28 ctx := sdk.UnwrapSDKContext(goCtx) 29 proposal, err := k.Keeper.SubmitProposal(ctx, msg.GetContent()) 30 if err != nil { 31 return nil, err 32 } 33 34 defer telemetry.IncrCounter(1, types.ModuleName, "proposal") 35 36 votingStarted, err := k.Keeper.AddDeposit(ctx, proposal.ProposalId, msg.GetProposer(), msg.GetInitialDeposit()) 37 if err != nil { 38 return nil, err 39 } 40 41 if votingStarted { 42 ctx.EventManager().EmitEvent( 43 sdk.NewEvent(types.EventTypeSubmitProposal, 44 sdk.NewAttribute(types.AttributeKeyVotingPeriodStart, fmt.Sprintf("%d", proposal.ProposalId)), 45 ), 46 ) 47 } 48 49 return &types.MsgSubmitProposalResponse{ 50 ProposalId: proposal.ProposalId, 51 }, nil 52 } 53 54 func (k msgServer) Vote(goCtx context.Context, msg *types.MsgVote) (*types.MsgVoteResponse, error) { 55 ctx := sdk.UnwrapSDKContext(goCtx) 56 accAddr, err := sdk.AccAddressFromBech32(msg.Voter) 57 if err != nil { 58 return nil, err 59 } 60 61 err = k.Keeper.AddVote(ctx, msg.ProposalId, accAddr, types.NewNonSplitVoteOption(msg.Option)) 62 if err != nil { 63 return nil, err 64 } 65 66 defer telemetry.IncrCounterWithLabels( 67 []string{types.ModuleName, "vote"}, 68 1, 69 []metrics.Label{ 70 telemetry.NewLabel("proposal_id", strconv.Itoa(int(msg.ProposalId))), 71 }, 72 ) 73 74 return &types.MsgVoteResponse{}, nil 75 } 76 77 func (k msgServer) VoteWeighted(goCtx context.Context, msg *types.MsgVoteWeighted) (*types.MsgVoteWeightedResponse, error) { 78 ctx := sdk.UnwrapSDKContext(goCtx) 79 accAddr, accErr := sdk.AccAddressFromBech32(msg.Voter) 80 if accErr != nil { 81 return nil, accErr 82 } 83 err := k.Keeper.AddVote(ctx, msg.ProposalId, accAddr, msg.Options) 84 if err != nil { 85 return nil, err 86 } 87 88 defer telemetry.IncrCounterWithLabels( 89 []string{types.ModuleName, "vote"}, 90 1, 91 []metrics.Label{ 92 telemetry.NewLabel("proposal_id", strconv.Itoa(int(msg.ProposalId))), 93 }, 94 ) 95 96 return &types.MsgVoteWeightedResponse{}, nil 97 } 98 99 func (k msgServer) Deposit(goCtx context.Context, msg *types.MsgDeposit) (*types.MsgDepositResponse, error) { 100 ctx := sdk.UnwrapSDKContext(goCtx) 101 accAddr, err := sdk.AccAddressFromBech32(msg.Depositor) 102 if err != nil { 103 return nil, err 104 } 105 votingStarted, err := k.Keeper.AddDeposit(ctx, msg.ProposalId, accAddr, msg.Amount) 106 if err != nil { 107 return nil, err 108 } 109 110 defer telemetry.IncrCounterWithLabels( 111 []string{types.ModuleName, "deposit"}, 112 1, 113 []metrics.Label{ 114 telemetry.NewLabel("proposal_id", strconv.Itoa(int(msg.ProposalId))), 115 }, 116 ) 117 118 if votingStarted { 119 ctx.EventManager().EmitEvent( 120 sdk.NewEvent( 121 types.EventTypeProposalDeposit, 122 sdk.NewAttribute(types.AttributeKeyVotingPeriodStart, fmt.Sprintf("%d", msg.ProposalId)), 123 ), 124 ) 125 } 126 127 return &types.MsgDepositResponse{}, nil 128 }