Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // OnRecvPacket implements the IBCModule interface
- func (am AppModule) OnRecvPacket(
- ctx sdk.Context,
- packet channeltypes.Packet,
- ) (*sdk.Result, []byte, error) {
- var ack channeltypes.Acknowledgement
- var err error
- // Try handling the chain link packet data
- ack, err = am.handleLinkChainAccountPacketData(ctx, packet)
- if types.ErrInvalidPacketData.Is(err) {
- // Try handling the oracle request packet data
- ack, err = am.handleOracleRequestPacketData(ctx, packet)
- }
- // If packet data is still invalid, return an error
- if types.ErrInvalidPacketData.Is(err) {
- return nil, nil, err
- }
- // ...
- }
- // handleLinkChainAccountPacketData tries handling a LinkChainAccountPacketData packet.
- // Returns ErrInvalidPacketData if the given packet data is not of such type.
- func (am AppModule) handleLinkChainAccountPacketData(
- ctx sdk.Context, packet channeltypes.Packet,
- ) (channeltypes.Acknowledgement, error) {
- var packetData types.LinkChainAccountPacketData
- if err := types.ModuleCdc.UnmarshalJSON(packet.GetData(), &packetData); err != nil {
- return channeltypes.Acknowledgement{}, sdkerrors.Wrapf(types.ErrInvalidPacketData, "%T", packet)
- }
- // ...
- }
- // handleOracleRequestPacketData tries handling a OracleResponsePacketData packet.
- // Returns ErrInvalidPacketData if the given packet data is not of such type.
- func (am AppModule) handleOracleRequestPacketData(
- ctx sdk.Context, packet channeltypes.Packet,
- ) (channeltypes.Acknowledgement, error) {
- var data oracletypes.OracleResponsePacketData
- if err := oracletypes.ModuleCdc.UnmarshalJSON(packet.GetData(), &data); err != nil {
- return channeltypes.Acknowledgement{}, sdkerrors.Wrapf(types.ErrInvalidPacketData, "%T", packet)
- }
- // ...
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement