Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
58e0268
chore: update minor dependencies
DeshErBojhaa Apr 7, 2025
863799f
feat: move packet_forward_middleware from ibc-app to ibc-go repo.
DeshErBojhaa Apr 9, 2025
2f0b0b0
fix: run go mod tidy
DeshErBojhaa Apr 9, 2025
048215d
Merge branch 'main' into tamjid/pfm-homecoming
DeshErBojhaa Apr 13, 2025
7b7a159
feat: Unit tests for Packet Forward Middleware (#8313)
DeshErBojhaa May 7, 2025
ae228c4
e2e: Port tests for packet forward middleware module (#8292)
DeshErBojhaa May 9, 2025
695ee1d
chore: bump sdk math to 1.5.3 (#8293)
gjermundgaraba Apr 13, 2025
fadf346
test(07-tendermint): remove unused expPass in TestSetAndGetParams (#8…
hungdinh82 Apr 13, 2025
e665141
test(08-wasm): replace expPass with expError in TestNewKeeper (#8280)
hungdinh82 Apr 13, 2025
554de1c
chore: bump go-ethereum to v1.15.8 (#8295)
gjermundgaraba Apr 13, 2025
76e2ef2
docs: add versioned docs for v10 (#8279)
gjermundgaraba Apr 14, 2025
ca1cbdb
rename total_escrow query path (#8287)
vladjdk Apr 14, 2025
4f48209
docs: set v10 as default (#8301)
gjermundgaraba Apr 14, 2025
209f0cd
feat: allow scaling of trusting period for client upgrades (#8185)
damiannolan Apr 14, 2025
187fdf3
chore: prep v10.2.x mergify (#8305)
gjermundgaraba Apr 15, 2025
e48f6df
chore: fix test TestSetGetTotalEscrowForDenom, use expected errors (#…
hungdinh82 Apr 15, 2025
580420c
chore: bump deps (#8304)
gjermundgaraba Apr 15, 2025
11f5a79
chore: remove datahash from ica account creation (#8307)
gjermundgaraba Apr 16, 2025
093b44f
feat: sdk v53 upgrade (#8254)
Apr 17, 2025
7234ec5
chore: bump cosmossdk.io/api from v0.9.0 to v0.9.2 (#8326)
gjermundgaraba Apr 29, 2025
6652880
chore(deps): bump github.com/ethereum/go-ethereum from 1.15.8 to 1.15…
dependabot[bot] Apr 29, 2025
6e9ba42
chore: update to official sdk v0.53 release (#8329)
Apr 30, 2025
17724ed
chore: add changelog for v10.2.0 (#8331)
gjermundgaraba Apr 30, 2025
4ead143
chore: fixed proto-lint errors (#8336)
srdtrk May 2, 2025
d9f49a2
chore: bumped go version used by wasm dockerfile (#8354)
srdtrk May 7, 2025
f883b96
chore: remove modules/core/specs (#8350)
gjermundgaraba May 7, 2025
64ca973
feat: Prefix-based routing in IBCv2 Router (#8303)
kulikthebird May 8, 2025
6c785a8
chore: remove e2e fork and draft restrictions (#8359)
gjermundgaraba May 9, 2025
3cfc3f6
bump wasmvm to v2.2.4, go-etheruem to v1.15.11, spf13/cast to v1.8.0 …
gjermundgaraba May 12, 2025
618a409
e2e: Create only required number of chains. (#8371)
DeshErBojhaa May 12, 2025
4bf9be1
chore: update minor dependencies
DeshErBojhaa Apr 7, 2025
7dda020
feat: move packet_forward_middleware from ibc-app to ibc-go repo.
DeshErBojhaa Apr 9, 2025
7317ae2
fix: run go mod tidy
DeshErBojhaa Apr 9, 2025
0b6af28
feat: Unit tests for Packet Forward Middleware (#8313)
DeshErBojhaa May 7, 2025
9b399c7
e2e: Port tests for packet forward middleware module (#8292)
DeshErBojhaa May 9, 2025
f5de71c
sync dep
DeshErBojhaa May 12, 2025
36fa262
fix: lint - Shutup Meg!
DeshErBojhaa May 12, 2025
6bbbd0b
feat: sdk v53 upgrade (#8254)
Apr 17, 2025
67abf32
chore: update to official sdk v0.53 release (#8329)
Apr 30, 2025
575f650
e2e: Create only required number of chains. (#8371)
DeshErBojhaa May 12, 2025
1f5a087
feat: move packet_forward_middleware from ibc-app to ibc-go repo.
DeshErBojhaa Apr 9, 2025
2749602
feat: Unit tests for Packet Forward Middleware (#8313)
DeshErBojhaa May 7, 2025
983a045
e2e: Port tests for packet forward middleware module (#8292)
DeshErBojhaa May 9, 2025
05fd50e
feat: sdk v53 upgrade (#8254)
Apr 17, 2025
eb227b6
chore: update to official sdk v0.53 release (#8329)
Apr 30, 2025
18b514b
e2e: Create only required number of chains. (#8371)
DeshErBojhaa May 12, 2025
c8b8ac2
Merge branch 'main' of github.com:cosmos/ibc-go into tamjid/pfm-homec…
DeshErBojhaa May 12, 2025
735636d
sync dep: WTF!!
DeshErBojhaa May 12, 2025
8819f59
fix lint: Shutup Meg!
DeshErBojhaa May 12, 2025
0aa1e9f
fix e2e
DeshErBojhaa May 12, 2025
2fcf66c
changelog
DeshErBojhaa May 12, 2025
bc5df6a
fix markdown lint
DeshErBojhaa May 12, 2025
b2433d0
Merge remote-tracking branch 'origin/main' into tamjid/pfm-homecoming
gjermundgaraba May 13, 2025
deab81c
Merge branch 'main' into tamjid/pfm-homecoming
gjermundgaraba May 13, 2025
0fe788e
address pr comment
DeshErBojhaa May 14, 2025
0adb957
add comment
DeshErBojhaa May 14, 2025
d4f5dbf
fix: removed unused key
DeshErBojhaa May 14, 2025
a1ac2e0
refactor: removed unused func from expected keepers
DeshErBojhaa May 14, 2025
38ca1d9
fix: Removed duplicated makefile
DeshErBojhaa May 14, 2025
665fed0
Removed unused tar files
DeshErBojhaa May 14, 2025
9dec322
refactor: remove unused param subspace
DeshErBojhaa May 14, 2025
b6ec134
refactor: simplify logic for getting inflight packets from KV store
DeshErBojhaa May 14, 2025
1143ceb
refactor: remove unclear function
DeshErBojhaa May 14, 2025
0018d29
refactor: remove dup interface
DeshErBojhaa May 14, 2025
b225209
chore: bump deps + lint (#8383)
gjermundgaraba May 14, 2025
affe099
fix dep
DeshErBojhaa May 14, 2025
596d4ee
fix dep
DeshErBojhaa May 14, 2025
4d63041
sync dep
DeshErBojhaa May 14, 2025
e8306cd
Merge branch 'main' of github.com:cosmos/ibc-go into tamjid/pfm-homec…
DeshErBojhaa May 14, 2025
94ed241
refactor: rename function param
DeshErBojhaa May 15, 2025
f6ab855
Merge branch 'main' of github.com:cosmos/ibc-go into tamjid/pfm-homec…
DeshErBojhaa May 15, 2025
d31125d
move CallbacksCompatibleModuleV2 to api
gjermundgaraba May 15, 2025
f24e6a9
rename CallbacksCompatibleModuleV2 to PacketUnmarshalarModuleV2
gjermundgaraba May 15, 2025
1947674
Merge branch 'main' into tamjid/pfm-homecoming
gjermundgaraba May 15, 2025
16134a6
add note on module name spelling mistake
gjermundgaraba May 15, 2025
f2a204a
remove commented out import in genesis.proto
gjermundgaraba May 15, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
feat: Unit tests for Packet Forward Middleware (#8313)
Co-authored-by: Gjermund Garaba <gjermund@garaba.net>
  • Loading branch information
DeshErBojhaa and gjermundgaraba authored May 7, 2025
commit 7b7a15970815247d6e5bdf4c9a86c65790fa8999
1 change: 1 addition & 0 deletions e2e/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ require (
github.com/hdevalence/ed25519consensus v0.2.0 // indirect
github.com/holiman/uint256 v1.3.2 // indirect
github.com/huandu/skiplist v1.2.0 // indirect
github.com/iancoleman/orderedmap v0.3.0 // indirect
github.com/iancoleman/strcase v0.3.0 // indirect
github.com/icza/dyno v0.0.0-20230330125955-09f820a8d9c0 // indirect
github.com/improbable-eng/grpc-web v0.15.0 // indirect
Expand Down
2 changes: 2 additions & 0 deletions e2e/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -739,6 +739,8 @@ github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0Jr
github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw=
github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w=
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
github.com/iancoleman/orderedmap v0.3.0 h1:5cbR2grmZR/DiVt+VJopEhtVs9YGInGIxAoMJn+Ichc=
github.com/iancoleman/orderedmap v0.3.0/go.mod h1:XuLcCUkdL5owUCQeF2Ue9uuw1EptkJDkXXS7VoV7XGE=
github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
Expand Down
4 changes: 2 additions & 2 deletions modules/apps/packet-forward-middleware/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -167,8 +167,8 @@ Generally without `memo` to handle, all handling by this module is delegated to
5. `B` Handle denom. If denom prefix is from `B`, remove it. If denom prefix is other chain - add `B` prefix.
6. `B` Take fee, create new ICS-004 packet with timeout from forward for next step, and remaining inner `memo`.
7. `B` Send transfer to `C` with parameters obtained from `memo`. Tokens burnt or escrowed here.
8. `B` Store tracking `in flight packet` under next `(channel, port, ICS-20 transfer sequence)`, do not `ACK` packet yet.
9. `C` Handle ICS-020 packet as usual.
8. `B` Store tracking `in flight packet` under next `(channel, port, ICS-20 transfer sequence)`, do not `ACK` packet yet.
9. `C` Handle ICS-020 packet as usual.
10. `B` On ICS-020 ACK from `C` find `in flight packet`, delete it and write `ACK` for original packet from `A`.
11. `A` Handle ICS-020 `ACK` as usual

Expand Down
13 changes: 8 additions & 5 deletions modules/apps/packet-forward-middleware/ibc_middleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -174,12 +174,16 @@ func (im IBCMiddleware) OnRecvPacket(

logger.Debug("packetForwardMiddleware OnRecvPacket",
"sequence", packet.Sequence,
"src-channel", packet.SourceChannel, "src-port", packet.SourcePort,
"dst-channel", packet.DestinationChannel, "dst-port", packet.DestinationPort,
"amount", data.Amount, "denom", data.Denom, "memo", data.Memo,
"src-channel", packet.SourceChannel,
"src-port", packet.SourcePort,
"dst-channel", packet.DestinationChannel,
"dst-port", packet.DestinationPort,
"amount", data.Amount,
"denom", data.Denom,
"memo", data.Memo,
)

d := make(map[string]interface{})
d := make(map[string]any)
err := json.Unmarshal([]byte(data.Memo), &d)
if err != nil || d["forward"] == nil {
// not a packet that should be forwarded
Expand Down Expand Up @@ -343,7 +347,6 @@ func (im IBCMiddleware) OnAcknowledgementPacket(

// OnTimeoutPacket implements the IBCModule interface.
func (im IBCMiddleware) OnTimeoutPacket(ctx sdk.Context, channelVersion string, packet channeltypes.Packet, relayer sdk.AccAddress) error {

var data transfertypes.FungibleTokenPacketData
if err := transfertypes.ModuleCdc.UnmarshalJSON(packet.GetData(), &data); err != nil {
im.keeper.Logger(ctx).Error("packetForwardMiddleware error parsing packet data from timeout packet",
Expand Down
245 changes: 245 additions & 0 deletions modules/apps/packet-forward-middleware/ibc_middleware_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,245 @@
package packetforward_test

import (
"encoding/json"
"testing"

"github.com/stretchr/testify/suite"

packetforward "github.com/cosmos/ibc-go/v10/modules/apps/packet-forward-middleware"
packetforwardkeeper "github.com/cosmos/ibc-go/v10/modules/apps/packet-forward-middleware/keeper"
packetforwardtypes "github.com/cosmos/ibc-go/v10/modules/apps/packet-forward-middleware/types"
transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types"
channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types"
ibctesting "github.com/cosmos/ibc-go/v10/testing"
)

type PFMTestSuite struct {
suite.Suite

coordinator *ibctesting.Coordinator

chainA *ibctesting.TestChain
chainB *ibctesting.TestChain
chainC *ibctesting.TestChain

pathAB *ibctesting.Path
pathBC *ibctesting.Path
}

func TestPFMTestSuite(t *testing.T) {
suite.Run(t, new(PFMTestSuite))
}

// setupChains sets up a coordinator with 3 test chains.
func (s *PFMTestSuite) setupChains() {
s.coordinator = ibctesting.NewCoordinator(s.T(), 3)
s.chainA = s.coordinator.GetChain(ibctesting.GetChainID(1))
s.chainB = s.coordinator.GetChain(ibctesting.GetChainID(2))
s.chainC = s.coordinator.GetChain(ibctesting.GetChainID(3))

s.pathAB = ibctesting.NewTransferPath(s.chainA, s.chainB)
s.pathAB.Setup()

s.pathBC = ibctesting.NewTransferPath(s.chainB, s.chainC)
s.pathBC.Setup()
}

func (s *PFMTestSuite) TestOnRecvPacket_NonfungibleToken() {
s.setupChains()

ctx := s.chainA.GetContext()
version := s.pathAB.EndpointA.GetChannel().Version
relayerAddr := s.chainA.SenderAccount.GetAddress()

pfm := s.pktForwardMiddleware(s.chainA)
ack := pfm.OnRecvPacket(ctx, version, channeltypes.Packet{}, relayerAddr)
s.Require().False(ack.Success())

expectedAck := &channeltypes.Acknowledgement{}
err := s.chainA.Codec.UnmarshalJSON(ack.Acknowledgement(), expectedAck)
s.Require().NoError(err)

// Transfer keeper returns this error if the packet received is not a fungible token.
s.Require().Equal("ABCI code: 12: error handling packet: see events for details", expectedAck.GetError())
}

func (s *PFMTestSuite) TestOnRecvPacket_NoMemo() {
s.setupChains()

ctx := s.chainA.GetContext()
version := s.pathAB.EndpointA.GetChannel().Version
relayerAddr := s.chainA.SenderAccount.GetAddress()
receiverAddr := s.chainB.SenderAccount.GetAddress()

packet := s.transferPacket(relayerAddr.String(), receiverAddr.String(), s.pathAB, 0, "{}")

pfm := s.pktForwardMiddleware(s.chainA)
ack := pfm.OnRecvPacket(ctx, version, packet, relayerAddr)
s.Require().True(ack.Success())

expectedAck := &channeltypes.Acknowledgement{}
err := s.chainA.Codec.UnmarshalJSON(ack.Acknowledgement(), expectedAck)
s.Require().NoError(err)

s.Require().Equal("", expectedAck.GetError())
s.Require().ElementsMatch([]byte{1}, expectedAck.GetResult())
}

func (s *PFMTestSuite) TestOnRecvPacket_InvalidReceiver() {
s.setupChains()

ctx := s.chainA.GetContext()
version := s.pathAB.EndpointA.GetChannel().Version
relayerAddr := s.chainA.SenderAccount.GetAddress()

packet := s.transferPacket(relayerAddr.String(), "", s.pathAB, 0, nil)

pfm := s.pktForwardMiddleware(s.chainA)
ack := pfm.OnRecvPacket(ctx, version, packet, relayerAddr)
s.Require().False(ack.Success())

expectedAck := &channeltypes.Acknowledgement{}
err := s.chainA.Codec.UnmarshalJSON(ack.Acknowledgement(), expectedAck)
s.Require().NoError(err)

s.Require().Equal("ABCI code: 5: error handling packet: see events for details", expectedAck.GetError())
s.Require().Empty(expectedAck.GetResult())
}

func (s *PFMTestSuite) TestOnRecvPacket_NoForward() {
s.setupChains()

ctx := s.chainA.GetContext()
version := s.pathAB.EndpointA.GetChannel().Version

senderAddr := s.chainA.SenderAccount.GetAddress()
receiverAddr := s.chainB.SenderAccount.GetAddress()

packet := s.transferPacket(senderAddr.String(), receiverAddr.String(), s.pathAB, 0, nil)

pfm := s.pktForwardMiddleware(s.chainA)
ack := pfm.OnRecvPacket(ctx, version, packet, senderAddr)
s.Require().True(ack.Success())

expectedAck := &channeltypes.Acknowledgement{}
err := s.chainA.Codec.UnmarshalJSON(ack.Acknowledgement(), expectedAck)
s.Require().NoError(err)
s.Require().Equal("", expectedAck.GetError())

s.Require().Equal([]byte{1}, expectedAck.GetResult())
}

func (s *PFMTestSuite) TestOnRecvPacket_RecvPacketFailed() {
s.setupChains()

transferKeeper := s.chainA.GetSimApp().TransferKeeper
ctx := s.chainA.GetContext()
transferKeeper.SetParams(ctx, transfertypes.Params{ReceiveEnabled: false})

version := s.pathAB.EndpointA.GetChannel().Version

senderAddr := s.chainA.SenderAccount.GetAddress()
receiverAddr := s.chainB.SenderAccount.GetAddress()
metadata := &packetforwardtypes.PacketMetadata{
Forward: &packetforwardtypes.ForwardMetadata{
Receiver: receiverAddr.String(),
Port: s.pathAB.EndpointA.ChannelConfig.PortID,
Channel: s.pathAB.EndpointA.ChannelID,
},
}
packet := s.transferPacket(senderAddr.String(), receiverAddr.String(), s.pathAB, 0, metadata)

pfm := s.pktForwardMiddleware(s.chainA)
ack := pfm.OnRecvPacket(ctx, version, packet, senderAddr)
s.Require().False(ack.Success())

expectedAck := &channeltypes.Acknowledgement{}

err := s.chainA.Codec.UnmarshalJSON(ack.Acknowledgement(), expectedAck)
s.Require().NoError(err)
s.Require().Equal("packet-forward-middleware error: error receiving packet: ack error: {\"error\":\"ABCI code: 8: error handling packet: see events for details\"}", expectedAck.GetError())

s.Require().Equal([]byte(nil), expectedAck.GetResult())
}

func (s *PFMTestSuite) TestOnRecvPacket_ForwardNoFee() {
s.setupChains()

senderAddr := s.chainA.SenderAccount.GetAddress()
receiverAddr := s.chainC.SenderAccount.GetAddress()
metadata := &packetforwardtypes.PacketMetadata{
Forward: &packetforwardtypes.ForwardMetadata{
Receiver: receiverAddr.String(),
Port: s.pathBC.EndpointA.ChannelConfig.PortID,
Channel: s.pathBC.EndpointA.ChannelID,
},
}
packet := s.transferPacket(senderAddr.String(), receiverAddr.String(), s.pathAB, 0, metadata)
version := s.pathAB.EndpointA.GetChannel().Version
ctxB := s.chainB.GetContext()

pfmB := s.pktForwardMiddleware(s.chainB)
ack := pfmB.OnRecvPacket(ctxB, version, packet, senderAddr)
s.Require().Nil(ack)

// Check that chain C has received the packet
ctxC := s.chainC.GetContext()
packet = s.transferPacket(senderAddr.String(), receiverAddr.String(), s.pathBC, 0, nil)
version = s.pathBC.EndpointA.GetChannel().Version

pfmC := s.pktForwardMiddleware(s.chainC)
ack = pfmC.OnRecvPacket(ctxC, version, packet, senderAddr)
s.Require().NotNil(ack)

// Ack on chainC
packet = s.transferPacket(senderAddr.String(), receiverAddr.String(), s.pathBC, 1, nil)
err := pfmC.OnAcknowledgementPacket(ctxC, version, packet, ack.Acknowledgement(), senderAddr)
s.Require().NoError(err)

// Ack on ChainB
err = pfmB.OnAcknowledgementPacket(ctxB, version, packet, ack.Acknowledgement(), senderAddr)
s.Require().NoError(err)
}

func (s *PFMTestSuite) pktForwardMiddleware(chain *ibctesting.TestChain) packetforward.IBCMiddleware {
pfmKeeper := chain.GetSimApp().PFMKeeper

ibcModule, ok := chain.App.GetIBCKeeper().PortKeeper.Route(transfertypes.ModuleName)
s.Require().True(ok)

ibcMiddleware := packetforward.NewIBCMiddleware(ibcModule, &pfmKeeper, 0, packetforwardkeeper.DefaultForwardTransferPacketTimeoutTimestamp)
return ibcMiddleware
}

func (s *PFMTestSuite) transferPacket(sender string, receiver string, path *ibctesting.Path, seq uint64, metadata any) channeltypes.Packet {
s.T().Helper()
tokenPacket := transfertypes.FungibleTokenPacketData{
Denom: "uatom",
Amount: "100",
Sender: sender,
Receiver: receiver,
}

if metadata != nil {
if mStr, ok := metadata.(string); ok {
tokenPacket.Memo = mStr
} else {
memo, err := json.Marshal(metadata)
s.Require().NoError(err)
tokenPacket.Memo = string(memo)
}
}

tokenData, err := transfertypes.ModuleCdc.MarshalJSON(&tokenPacket)
s.Require().NoError(err)

return channeltypes.Packet{
SourcePort: path.EndpointA.ChannelConfig.PortID,
SourceChannel: path.EndpointA.ChannelID,
DestinationPort: path.EndpointB.ChannelConfig.PortID,
DestinationChannel: path.EndpointB.ChannelID,
Data: tokenData,
Sequence: seq,
}
}
9 changes: 6 additions & 3 deletions modules/apps/packet-forward-middleware/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -338,9 +338,12 @@ func (k *Keeper) ForwardTransferPacket(
)

k.Logger(ctx).Debug("packetForwardMiddleware ForwardTransferPacket",
"port", metadata.Port, "channel", metadata.Channel,
"sender", receiver, "receiver", metadata.Receiver,
"amount", token.Amount.String(), "denom", token.Denom,
"port", metadata.Port,
"channel", metadata.Channel,
"sender", receiver,
"receiver", metadata.Receiver,
"amount", token.Amount.String(),
"denom", token.Denom,
)

// send tokens to destination
Expand Down
1 change: 1 addition & 0 deletions modules/light-clients/08-wasm/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ require (
github.com/herumi/bls-eth-go-binary v1.31.0 // indirect
github.com/holiman/uint256 v1.3.2 // indirect
github.com/huandu/skiplist v1.2.0 // indirect
github.com/iancoleman/orderedmap v0.3.0 // indirect
github.com/iancoleman/strcase v0.3.0 // indirect
github.com/improbable-eng/grpc-web v0.15.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
Expand Down
2 changes: 2 additions & 0 deletions modules/light-clients/08-wasm/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -749,6 +749,8 @@ github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0Jr
github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw=
github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w=
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
github.com/iancoleman/orderedmap v0.3.0 h1:5cbR2grmZR/DiVt+VJopEhtVs9YGInGIxAoMJn+Ichc=
github.com/iancoleman/orderedmap v0.3.0/go.mod h1:XuLcCUkdL5owUCQeF2Ue9uuw1EptkJDkXXS7VoV7XGE=
github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
Expand Down
2 changes: 2 additions & 0 deletions simapp/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -725,6 +725,8 @@ github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0Jr
github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw=
github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w=
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
github.com/iancoleman/orderedmap v0.3.0 h1:5cbR2grmZR/DiVt+VJopEhtVs9YGInGIxAoMJn+Ichc=
github.com/iancoleman/orderedmap v0.3.0/go.mod h1:XuLcCUkdL5owUCQeF2Ue9uuw1EptkJDkXXS7VoV7XGE=
github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
Expand Down
14 changes: 11 additions & 3 deletions testing/simapp/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,10 @@ import (
icahostkeeper "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/host/keeper"
icahosttypes "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/host/types"
icatypes "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/types"
"github.com/cosmos/ibc-go/v10/modules/apps/transfer"
packetforward "github.com/cosmos/ibc-go/v10/modules/apps/packet-forward-middleware"
packetforwardkeeper "github.com/cosmos/ibc-go/v10/modules/apps/packet-forward-middleware/keeper"
packetforwardtypes "github.com/cosmos/ibc-go/v10/modules/apps/packet-forward-middleware/types"
transfer "github.com/cosmos/ibc-go/v10/modules/apps/transfer"
ibctransferkeeper "github.com/cosmos/ibc-go/v10/modules/apps/transfer/keeper"
ibctransfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types"
transferv2 "github.com/cosmos/ibc-go/v10/modules/apps/transfer/v2"
Expand Down Expand Up @@ -158,6 +161,7 @@ type SimApp struct {
IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly
ICAControllerKeeper icacontrollerkeeper.Keeper
ICAHostKeeper icahostkeeper.Keeper
PFMKeeper packetforwardkeeper.Keeper
TransferKeeper ibctransferkeeper.Keeper
ConsensusParamsKeeper consensusparamkeeper.Keeper

Expand Down Expand Up @@ -253,7 +257,7 @@ func NewSimApp(
minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey,
govtypes.StoreKey, group.StoreKey, paramstypes.StoreKey, ibcexported.StoreKey, upgradetypes.StoreKey,
ibctransfertypes.StoreKey, icacontrollertypes.StoreKey, icahosttypes.StoreKey,
authzkeeper.StoreKey, consensusparamtypes.StoreKey,
authzkeeper.StoreKey, consensusparamtypes.StoreKey, packetforwardtypes.StoreKey,
)

// register streaming services
Expand Down Expand Up @@ -376,6 +380,7 @@ func NewSimApp(
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
)

app.PFMKeeper = *packetforwardkeeper.NewKeeper(appCodec, runtime.NewKVStoreService(keys[packetforwardtypes.StoreKey]), app.TransferKeeper, app.IBCKeeper.ChannelKeeper, app.BankKeeper, app.ICAControllerKeeper.GetICS4Wrapper(), authtypes.NewModuleAddress(govtypes.ModuleName).String())
// Mock Module Stack

// Mock Module setup for testing IBC and also acts as the interchain accounts authentication module
Expand Down Expand Up @@ -427,11 +432,14 @@ func NewSimApp(

var icaHostStack porttypes.IBCModule = icahost.NewIBCModule(app.ICAHostKeeper)

pfmStack := packetforward.NewIBCMiddleware(transferStack, &app.PFMKeeper, 0, packetforwardkeeper.DefaultForwardTransferPacketTimeoutTimestamp)

// Add host, controller & ica auth modules to IBC router
ibcRouter.
AddRoute(icacontrollertypes.SubModuleName, icaControllerStack).
AddRoute(icahosttypes.SubModuleName, icaHostStack).
AddRoute(ibcmock.ModuleName+icacontrollertypes.SubModuleName, icaControllerStack) // ica with mock auth module stack route to ica (top level of middleware stack)
AddRoute(ibcmock.ModuleName+icacontrollertypes.SubModuleName, icaControllerStack). // ica with mock auth module stack route to ica (top level of middleware stack)
AddRoute(packetforwardtypes.ModuleName, pfmStack)

// create two separate mock v2 applications so that it is possible to test multi packet data.
mockV2A := mockv2.NewIBCModule()
Expand Down