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

     1  package account
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     6  
     7  	linotypes "github.com/lino-network/lino/types"
     8  	"github.com/lino-network/lino/x/account/types"
     9  
    10  	sdk "github.com/cosmos/cosmos-sdk/types"
    11  )
    12  
    13  // NewHandler - Handle all "account" type messages.
    14  func NewHandler(am AccountKeeper) sdk.Handler {
    15  	return func(ctx sdk.Context, msg sdk.Msg) sdk.Result {
    16  		switch msg := msg.(type) {
    17  		case types.TransferMsg:
    18  			return handleTransferMsg(ctx, am, msg)
    19  		case types.TransferV2Msg:
    20  			return handleTransferV2Msg(ctx, am, msg)
    21  		case types.RecoverMsg:
    22  			return handleRecoverMsg(ctx, am, msg)
    23  		case types.RegisterV2Msg:
    24  			return handleRegisterV2Msg(ctx, am, msg)
    25  		case types.UpdateAccountMsg:
    26  			return handleUpdateAccountMsg(ctx, am, msg)
    27  		default:
    28  			errMsg := fmt.Sprintf("Unrecognized account msg type: %v", reflect.TypeOf(msg).Name())
    29  			return sdk.ErrUnknownRequest(errMsg).Result()
    30  		}
    31  	}
    32  }
    33  
    34  func handleTransferMsg(ctx sdk.Context, am AccountKeeper, msg types.TransferMsg) sdk.Result {
    35  	// withdraw money from sender's bank
    36  	coin, err := linotypes.LinoToCoin(msg.Amount)
    37  	if err != nil {
    38  		return err.Result()
    39  	}
    40  	if err := am.MoveCoin(ctx,
    41  		linotypes.NewAccOrAddrFromAcc(msg.Sender),
    42  		linotypes.NewAccOrAddrFromAcc(msg.Receiver),
    43  		coin); err != nil {
    44  		return err.Result()
    45  	}
    46  	return sdk.Result{}
    47  }
    48  
    49  func handleTransferV2Msg(ctx sdk.Context, am AccountKeeper, msg types.TransferV2Msg) sdk.Result {
    50  	// withdraw money from sender's bank
    51  	coin, err := linotypes.LinoToCoin(msg.Amount)
    52  	if err != nil {
    53  		return err.Result()
    54  	}
    55  	if err := am.MoveCoin(ctx, msg.Sender, msg.Receiver, coin); err != nil {
    56  		return err.Result()
    57  	}
    58  	return sdk.Result{}
    59  }
    60  
    61  func handleRecoverMsg(ctx sdk.Context, am AccountKeeper, msg types.RecoverMsg) sdk.Result {
    62  	if err := am.RecoverAccount(ctx, msg.Username, msg.NewTxPubKey, msg.NewSigningPubKey); err != nil {
    63  		return err.Result()
    64  	}
    65  	return sdk.Result{}
    66  }
    67  
    68  // Handle RegisterV2Msg
    69  func handleRegisterV2Msg(ctx sdk.Context, am AccountKeeper, msg types.RegisterV2Msg) sdk.Result {
    70  	coin, err := linotypes.LinoToCoin(msg.RegisterFee)
    71  	if err != nil {
    72  		return err.Result()
    73  	}
    74  	if err := am.RegisterAccount(
    75  		ctx, msg.Referrer, coin, msg.NewUser, msg.NewSigningPubKey, msg.NewTransactionPubKey); err != nil {
    76  		return err.Result()
    77  	}
    78  	return sdk.Result{}
    79  }
    80  
    81  // Handle RegisterMsg
    82  func handleUpdateAccountMsg(ctx sdk.Context, am AccountKeeper, msg types.UpdateAccountMsg) sdk.Result {
    83  	if err := am.UpdateJSONMeta(ctx, msg.Username, msg.JSONMeta); err != nil {
    84  		return err.Result()
    85  	}
    86  	return sdk.Result{}
    87  }