github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/ibc-go/modules/core/handler.go (about) 1 package ibc 2 3 import ( 4 "fmt" 5 6 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 7 sdkerrors "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/errors" 8 clienttypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/02-client/types" 9 connectiontypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/03-connection/types" 10 channeltypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/04-channel/types" 11 "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/keeper" 12 "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/types" 13 tmtypes "github.com/fibonacci-chain/fbc/libs/tendermint/types" 14 ) 15 16 // NewHandler defines the IBC handler 17 func NewHandler(k keeper.FacadedKeeper) sdk.Handler { 18 return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { 19 if !tmtypes.HigherThanVenus1(ctx.BlockHeight()) { 20 errMsg := fmt.Sprintf("ibc handler is not supported at height %d", ctx.BlockHeight()) 21 return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, errMsg) 22 } 23 24 ctx.SetEventManager(sdk.NewEventManager()) 25 26 if !k.GetIbcEnabled(ctx) { 27 return nil, types.ErrIbcDisabled 28 } 29 30 switch msg := msg.(type) { 31 // IBC client msg interface types 32 case *clienttypes.MsgCreateClient: 33 res, err := k.CreateClient(sdk.WrapSDKContext(ctx), msg) 34 return sdk.WrapServiceResult(ctx, res, err) 35 36 case *clienttypes.MsgUpdateClient: 37 res, err := k.UpdateClient(sdk.WrapSDKContext(ctx), msg) 38 return sdk.WrapServiceResult(ctx, res, err) 39 40 case *clienttypes.MsgUpgradeClient: 41 res, err := k.UpgradeClient(sdk.WrapSDKContext(ctx), msg) 42 return sdk.WrapServiceResult(ctx, res, err) 43 44 case *clienttypes.MsgSubmitMisbehaviour: 45 res, err := k.SubmitMisbehaviour(sdk.WrapSDKContext(ctx), msg) 46 return sdk.WrapServiceResult(ctx, res, err) 47 48 // IBC connection msgs 49 case *connectiontypes.MsgConnectionOpenInit: 50 res, err := k.ConnectionOpenInit(sdk.WrapSDKContext(ctx), msg) 51 return sdk.WrapServiceResult(ctx, res, err) 52 53 case *connectiontypes.MsgConnectionOpenTry: 54 res, err := k.ConnectionOpenTry(sdk.WrapSDKContext(ctx), msg) 55 return sdk.WrapServiceResult(ctx, res, err) 56 57 case *connectiontypes.MsgConnectionOpenAck: 58 res, err := k.ConnectionOpenAck(sdk.WrapSDKContext(ctx), msg) 59 return sdk.WrapServiceResult(ctx, res, err) 60 61 case *connectiontypes.MsgConnectionOpenConfirm: 62 res, err := k.ConnectionOpenConfirm(sdk.WrapSDKContext(ctx), msg) 63 return sdk.WrapServiceResult(ctx, res, err) 64 65 // IBC channel msgs 66 case *channeltypes.MsgChannelOpenInit: 67 res, err := k.ChannelOpenInit(sdk.WrapSDKContext(ctx), msg) 68 return sdk.WrapServiceResult(ctx, res, err) 69 70 case *channeltypes.MsgChannelOpenTry: 71 res, err := k.ChannelOpenTry(sdk.WrapSDKContext(ctx), msg) 72 return sdk.WrapServiceResult(ctx, res, err) 73 74 case *channeltypes.MsgChannelOpenAck: 75 res, err := k.ChannelOpenAck(sdk.WrapSDKContext(ctx), msg) 76 return sdk.WrapServiceResult(ctx, res, err) 77 78 case *channeltypes.MsgChannelOpenConfirm: 79 res, err := k.ChannelOpenConfirm(sdk.WrapSDKContext(ctx), msg) 80 return sdk.WrapServiceResult(ctx, res, err) 81 82 case *channeltypes.MsgChannelCloseInit: 83 res, err := k.ChannelCloseInit(sdk.WrapSDKContext(ctx), msg) 84 return sdk.WrapServiceResult(ctx, res, err) 85 86 case *channeltypes.MsgChannelCloseConfirm: 87 res, err := k.ChannelCloseConfirm(sdk.WrapSDKContext(ctx), msg) 88 return sdk.WrapServiceResult(ctx, res, err) 89 90 // IBC packet msgs get routed to the appropriate module callback 91 case *channeltypes.MsgRecvPacket: 92 res, err := k.RecvPacket(sdk.WrapSDKContext(ctx), msg) 93 return sdk.WrapServiceResult(ctx, res, err) 94 95 case *channeltypes.MsgAcknowledgement: 96 res, err := k.Acknowledgement(sdk.WrapSDKContext(ctx), msg) 97 return sdk.WrapServiceResult(ctx, res, err) 98 99 case *channeltypes.MsgTimeout: 100 res, err := k.Timeout(sdk.WrapSDKContext(ctx), msg) 101 return sdk.WrapServiceResult(ctx, res, err) 102 103 case *channeltypes.MsgTimeoutOnClose: 104 res, err := k.TimeoutOnClose(sdk.WrapSDKContext(ctx), msg) 105 return sdk.WrapServiceResult(ctx, res, err) 106 107 default: 108 return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized IBC message type: %T", msg) 109 } 110 } 111 }