Skip to content

Commit

Permalink
Added ibc_module_v2 and ibc_app_v2
Browse files Browse the repository at this point in the history
  • Loading branch information
bznein committed Sep 18, 2024
1 parent 373028a commit 0c1c80c
Show file tree
Hide file tree
Showing 2 changed files with 127 additions and 0 deletions.
48 changes: 48 additions & 0 deletions testing/mock/ibc_app_v2.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package mock

import (
"context"

sdk "github.com/cosmos/cosmos-sdk/types"

channeltypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types"
)

// IBCAppV2 contains IBCModuleV2 application module callbacks as defined in 05-port.
type IBCAppV2 struct {
OnSendPacketV2 func(
ctx context.Context,
sourceID string,
sequence uint64,
timeoutTimestamp uint64,
payload channeltypes.Payload,
signer sdk.AccAddress,
) error

OnRecvPacketV2 func(
ctx context.Context,
packet channeltypes.PacketV2,
payload channeltypes.Payload,
relayer sdk.AccAddress,
) channeltypes.RecvPacketResult

OnAcknowledgementPacketV2 func(
ctx context.Context,
packet channeltypes.PacketV2,
payload channeltypes.Payload,
recvPacketResult channeltypes.RecvPacketResult,
relayer sdk.AccAddress,
) error

OnTimeoutPacketV2 func(
ctx context.Context,
packet channeltypes.PacketV2,
payload channeltypes.Payload,
relayer sdk.AccAddress,
) error
}

// NewIBCV2App returns a IBCAppV2.
func NewIBCV2App() *IBCAppV2 {
return &IBCAppV2{}
}
79 changes: 79 additions & 0 deletions testing/mock/ibc_module_v2.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package mock

import (
"bytes"
"context"

sdk "github.com/cosmos/cosmos-sdk/types"

channeltypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types"
porttypes "github.com/cosmos/ibc-go/v9/modules/core/05-port/types"
)

var _ porttypes.IBCModuleV2 = (*IBCModuleV2)(nil)

// IBCModuleV2 implements the IBCModuleV2 interface for testing v2 of the IBC module.
type IBCModuleV2 struct {
IBCApp *IBCAppV2 // base application of an IBC middleware stack
}

func (im IBCModuleV2) OnSendPacketV2(ctx context.Context, sourceID string, sequence uint64, timeoutTimestamp uint64, payload channeltypes.Payload, signer sdk.AccAddress) error {
if im.IBCApp.OnSendPacketV2 != nil {
return im.IBCApp.OnSendPacketV2(ctx, sourceID, sequence, timeoutTimestamp, payload, signer)
}

return nil
}

func (im IBCModuleV2) OnRecvPacketV2(ctx context.Context, packet channeltypes.PacketV2, payload channeltypes.Payload, relayer sdk.AccAddress) channeltypes.RecvPacketResult {
if im.IBCApp.OnRecvPacketV2 != nil {
return im.IBCApp.OnRecvPacketV2(ctx, packet, payload, relayer)
}

sdkCtx := sdk.UnwrapSDKContext(ctx)
sdkCtx.EventManager().EmitEvent(NewMockRecvPacketEvent())

status := channeltypes.PacketStatus_Success
ack := MockAcknowledgement.Acknowledgement()

if bytes.Equal(payload.Value, MockFailPacketData) {
status = channeltypes.PacketStatus_Failure
ack = MockFailAcknowledgement.Acknowledgement()
} else if bytes.Equal(payload.Value, MockAsyncPacketData) {
status = channeltypes.PacketStatus_Async
ack = nil
}

return channeltypes.RecvPacketResult{
Status: status,
Acknowledgement: ack,
}
}

func (im IBCModuleV2) OnAcknowledgementPacketV2(ctx context.Context, packet channeltypes.PacketV2, payload channeltypes.Payload, recvPacketResult channeltypes.RecvPacketResult, relayer sdk.AccAddress) error {
if im.IBCApp.OnAcknowledgementPacketV2 != nil {
return im.IBCApp.OnAcknowledgementPacketV2(ctx, packet, payload, recvPacketResult, relayer)
}

sdkCtx := sdk.UnwrapSDKContext(ctx)
sdkCtx.EventManager().EmitEvent(NewMockAckPacketEvent())
return nil
}

func (im IBCModuleV2) OnTimeoutPacketV2(ctx context.Context, packet channeltypes.PacketV2, payload channeltypes.Payload, relayer sdk.AccAddress) error {
if im.IBCApp.OnTimeoutPacketV2 != nil {
return im.IBCApp.OnTimeoutPacketV2(ctx, packet, payload, relayer)
}

sdkCtx := sdk.UnwrapSDKContext(ctx)
sdkCtx.EventManager().EmitEvent(NewMockTimeoutPacketEvent())

return nil
}

// NewIBCModuleV2 creates a new IBCModule given the underlying mock IBC application and scopedKeeper.
func NewIBCModuleV2(app *IBCAppV2) IBCModuleV2 {
return IBCModuleV2{
IBCApp: app,
}
}

0 comments on commit 0c1c80c

Please sign in to comment.