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  }