github.com/lino-network/lino@v0.6.11/x/developer/handler.go (about) 1 package developer 2 3 import ( 4 "fmt" 5 "reflect" 6 7 sdk "github.com/cosmos/cosmos-sdk/types" 8 9 linotypes "github.com/lino-network/lino/types" 10 "github.com/lino-network/lino/x/developer/types" 11 ) 12 13 // NewHandler - Handle all "developer" type messages. 14 func NewHandler(dm DeveloperKeeper) sdk.Handler { 15 return func(ctx sdk.Context, msg sdk.Msg) sdk.Result { 16 switch msg := msg.(type) { 17 case types.DeveloperRegisterMsg: 18 return handleDeveloperRegisterMsg(ctx, dm, msg) 19 case types.DeveloperUpdateMsg: 20 return handleDeveloperUpdateMsg(ctx, dm, msg) 21 // case types.DeveloperRevokeMsg: 22 // return handleDeveloperRevokeMsg(ctx, dm, am, gm, msg) 23 case types.IDAIssueMsg: 24 return handleIDAIssueMsg(ctx, dm, msg) 25 case types.IDAMintMsg: 26 return handleIDAMintMsg(ctx, dm, msg) 27 case types.IDATransferMsg: 28 return handleIDATransferMsg(ctx, dm, msg) 29 case types.IDAAuthorizeMsg: 30 return handleIDAAuthorizeMsg(ctx, dm, msg) 31 case types.UpdateAffiliatedMsg: 32 return handleUpdateAffiliatedMsg(ctx, dm, msg) 33 case types.IDAConvertFromLinoMsg: 34 if ctx.BlockHeight() >= linotypes.Upgrade5Update2 { 35 return handleIDAConvertFromLinoMsg(ctx, dm, msg) 36 } else { 37 errMsg := fmt.Sprintf( 38 "Unrecognized developer msg type: %v", reflect.TypeOf(msg).Name()) 39 return sdk.ErrUnknownRequest(errMsg).Result() 40 } 41 default: 42 errMsg := fmt.Sprintf("Unrecognized developer msg type: %v", reflect.TypeOf(msg).Name()) 43 return sdk.ErrUnknownRequest(errMsg).Result() 44 } 45 } 46 } 47 48 func handleDeveloperRegisterMsg( 49 ctx sdk.Context, dm DeveloperKeeper, msg types.DeveloperRegisterMsg) sdk.Result { 50 if err := dm.RegisterDeveloper( 51 ctx, msg.Username, msg.Website, msg.Description, msg.AppMetaData); err != nil { 52 return err.Result() 53 } 54 return sdk.Result{} 55 } 56 57 func handleDeveloperUpdateMsg( 58 ctx sdk.Context, dm DeveloperKeeper, msg types.DeveloperUpdateMsg) sdk.Result { 59 if err := dm.UpdateDeveloper( 60 ctx, msg.Username, msg.Website, msg.Description, msg.AppMetaData); err != nil { 61 return err.Result() 62 } 63 return sdk.Result{} 64 } 65 66 func handleUpdateAffiliatedMsg( 67 ctx sdk.Context, dm DeveloperKeeper, msg types.UpdateAffiliatedMsg) sdk.Result { 68 if err := dm.UpdateAffiliated(ctx, msg.App, msg.Username, msg.Activate); err != nil { 69 return err.Result() 70 } 71 return sdk.Result{} 72 } 73 74 func handleIDAIssueMsg( 75 ctx sdk.Context, dm DeveloperKeeper, msg types.IDAIssueMsg) sdk.Result { 76 if err := dm.IssueIDA(ctx, msg.Username, string(msg.Username), msg.IDAPrice); err != nil { 77 return err.Result() 78 } 79 return sdk.Result{} 80 } 81 82 func handleIDAMintMsg( 83 ctx sdk.Context, dm DeveloperKeeper, msg types.IDAMintMsg) sdk.Result { 84 amount, err := linotypes.LinoToCoin(msg.Amount) 85 if err != nil { 86 return err.Result() 87 } 88 if err := dm.MintIDA(ctx, msg.Username, amount); err != nil { 89 return err.Result() 90 } 91 return sdk.Result{} 92 } 93 94 func handleIDAConvertFromLinoMsg( 95 ctx sdk.Context, dm DeveloperKeeper, msg types.IDAConvertFromLinoMsg) sdk.Result { 96 amount, err := linotypes.LinoToCoin(msg.Amount) 97 if err != nil { 98 return err.Result() 99 } 100 if err := dm.IDAConvertFromLino(ctx, msg.Username, msg.App, amount); err != nil { 101 return err.Result() 102 } 103 return sdk.Result{} 104 } 105 106 func handleIDATransferMsg( 107 ctx sdk.Context, dm DeveloperKeeper, msg types.IDATransferMsg) sdk.Result { 108 amount, err := msg.Amount.ToMiniIDA() 109 if err != nil { 110 return err.Result() 111 } 112 if err := dm.AppTransferIDA(ctx, msg.App, msg.Signer, amount, msg.From, msg.To); err != nil { 113 return err.Result() 114 } 115 return sdk.Result{} 116 } 117 118 func handleIDAAuthorizeMsg(ctx sdk.Context, dm DeveloperKeeper, msg types.IDAAuthorizeMsg) sdk.Result { 119 if err := dm.UpdateIDAAuth(ctx, msg.App, msg.Username, msg.Activate); err != nil { 120 return err.Result() 121 } 122 return sdk.Result{} 123 } 124 125 // func handleDeveloperRevokeMsg( 126 // ctx sdk.Context, dm DeveloperManager, am acc.AccountManager, 127 // gm *global.GlobalManager, msg types.DeveloperRevokeMsg) sdk.Result { 128 // if !dm.DoesDeveloperExist(ctx, msg.Username) { 129 // return types.ErrDeveloperNotFound().Result() 130 // } 131 132 // if err := dm.RemoveFromDeveloperList(ctx, msg.Username); err != nil { 133 // return err.Result() 134 // } 135 136 // coin, withdrawErr := dm.WithdrawAll(ctx, msg.Username) 137 // if withdrawErr != nil { 138 // return withdrawErr.Result() 139 // } 140 141 // param, err := dm.paramHolder.GetDeveloperParam(ctx) 142 // if err != nil { 143 // return err.Result() 144 // } 145 146 // if err := returnCoinTo( 147 // ctx, msg.Username, gm, am, param.DeveloperCoinReturnTimes, param.DeveloperCoinReturnIntervalSec, coin); err != nil { 148 // return err.Result() 149 // } 150 // return sdk.Result{} 151 // }