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 }