github.com/lino-network/lino@v0.6.11/x/vote/handler.go (about)

     1  package vote
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     6  
     7  	linotypes "github.com/lino-network/lino/types"
     8  	"github.com/lino-network/lino/x/vote/types"
     9  
    10  	sdk "github.com/cosmos/cosmos-sdk/types"
    11  )
    12  
    13  // NewHandler - Handle all "vote" type messages.
    14  func NewHandler(vk VoteKeeper) sdk.Handler {
    15  	return func(ctx sdk.Context, msg sdk.Msg) sdk.Result {
    16  		switch msg := msg.(type) {
    17  		case types.StakeInMsg:
    18  			return handleStakeInMsg(ctx, vk, msg)
    19  		case types.StakeOutMsg:
    20  			return handleStakeOutMsg(ctx, vk, msg)
    21  		case types.ClaimInterestMsg:
    22  			return handleClaimInterestMsg(ctx, vk, msg)
    23  		case types.StakeInForMsg:
    24  			return handleStakeInForMsg(ctx, vk, msg)
    25  		default:
    26  			errMsg := fmt.Sprintf("Unrecognized vote msg type: %v", reflect.TypeOf(msg).Name())
    27  			return sdk.ErrUnknownRequest(errMsg).Result()
    28  		}
    29  	}
    30  }
    31  
    32  func handleStakeInMsg(ctx sdk.Context, vk VoteKeeper, msg types.StakeInMsg) sdk.Result {
    33  	coin, err := linotypes.LinoToCoin(msg.Deposit)
    34  	if err != nil {
    35  		return err.Result()
    36  	}
    37  
    38  	if err := vk.StakeIn(ctx, msg.Username, coin); err != nil {
    39  		return err.Result()
    40  	}
    41  
    42  	return sdk.Result{}
    43  }
    44  
    45  func handleStakeInForMsg(ctx sdk.Context, vk VoteKeeper, msg types.StakeInForMsg) sdk.Result {
    46  	coin, err := linotypes.LinoToCoin(msg.Deposit)
    47  	if err != nil {
    48  		return err.Result()
    49  	}
    50  
    51  	if err := vk.StakeInFor(ctx, msg.Sender, msg.Receiver, coin); err != nil {
    52  		return err.Result()
    53  	}
    54  
    55  	return sdk.Result{}
    56  }
    57  
    58  func handleStakeOutMsg(ctx sdk.Context, vk VoteKeeper, msg types.StakeOutMsg) sdk.Result {
    59  	coin, err := linotypes.LinoToCoin(msg.Amount)
    60  	if err != nil {
    61  		return err.Result()
    62  	}
    63  	if err := vk.StakeOut(ctx, msg.Username, coin); err != nil {
    64  		return err.Result()
    65  	}
    66  	return sdk.Result{}
    67  }
    68  
    69  func handleClaimInterestMsg(ctx sdk.Context, vk VoteKeeper, msg types.ClaimInterestMsg) sdk.Result {
    70  	if err := vk.ClaimInterest(ctx, msg.Username); err != nil {
    71  		return err.Result()
    72  	}
    73  	return sdk.Result{}
    74  }