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  }