Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
d8473b7
begin attempted upgrade to ibc-go/v9 and SDK 0.52
kocubinski Jan 7, 2025
de09993
go mod tidy working
kocubinski Jan 8, 2025
677d09d
run make mocks
kocubinski Jan 8, 2025
db06533
fix errors in simapp/app.go
kocubinski Jan 8, 2025
f6a6d3a
wip
kocubinski Jan 13, 2025
da10efb
refactor: tidy up code to use new ibc denom type
damiannolan Feb 4, 2025
44e7ac5
refactor: remove legacy ibc code and cleanup app code
damiannolan Feb 4, 2025
40cd1d2
chore: refactoring based on new Denom type and wiring up AuthKeeper
Feb 5, 2025
ab1e691
chore: update mock generation
chatton Feb 5, 2025
ff10b60
chore: updating tests to pass channel version
chatton Feb 5, 2025
f37e4ef
refactor: begin ripping apart simapp and simd binary wiring
damiannolan Feb 5, 2025
4926592
chore: update ante_handler.go
chatton Feb 5, 2025
681cba0
refactor: clean simapp without pfm wiring
damiannolan Feb 5, 2025
1e6be3c
chore: add packet-forward to simapp wiring
damiannolan Feb 5, 2025
990a412
chore: update go version in dockerfile and mod RegisterInterfaces api
damiannolan Feb 5, 2025
a94a2b1
refactor: start fixing e2es
damiannolan Feb 5, 2025
c24acaf
chore: fixing e2e tests
chatton Feb 5, 2025
5f0002a
wip: e2e hackery
damiannolan Feb 5, 2025
03cda4f
chore: wip debugging e2es
damiannolan Feb 6, 2025
468119d
fix: e2e multi hop forward successfuly, add godocs inline to denom tr…
damiannolan Feb 6, 2025
e748854
fix: e2es and invert incorrect pfm logic
damiannolan Feb 6, 2025
94c0b13
chore: adding util function and docstring explaining the logic
chatton Feb 7, 2025
80550d2
chore: updating assertions in non refundable test
chatton Feb 7, 2025
e8e1505
chore: updating assertions in forward timeout test
chatton Feb 7, 2025
8aa2a28
chore: add genesis command to export
chatton Feb 7, 2025
d793f59
wip: updating pfm and simapp to use ibc-go v9 and sdk 50
chatton Feb 7, 2025
73d7331
fix: go mod errors
damiannolan Feb 7, 2025
e54e2a8
chore: regen mocks and fix upgrades import
damiannolan Feb 7, 2025
93c876f
chore: handle merge conflicts
chatton Feb 7, 2025
51210d8
chore: make lint fix
damiannolan Feb 7, 2025
6fa3342
fix: update e2e upgrade test to work
damiannolan Feb 7, 2025
c13a5c0
chore: remove unneeded log
chatton Feb 7, 2025
1908080
chore: regen protos and update makefile
damiannolan Feb 7, 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
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
*.out

# Dependency directories (remove the comment below to include it)
# vendor/
vendor/

target/

Expand Down
2 changes: 1 addition & 1 deletion middleware/packet-forward-middleware/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# docker build . -t pfm:local
# docker run --rm -it pfm:local q ibc-router

FROM golang:1.21-alpine3.18 as builder
FROM golang:1.23.4-alpine AS builder

RUN set -eux; apk add --no-cache git libusb-dev linux-headers gcc musl-dev make;

Expand Down
6 changes: 3 additions & 3 deletions middleware/packet-forward-middleware/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -146,8 +146,8 @@ mocks: $(MOCKS_DIR)
mockgen -package=mock -destination=./test/mock/transfer_keeper.go $(GOMOD)/packetforward/types TransferKeeper
mockgen -package=mock -destination=./test/mock/bank_keeper.go $(GOMOD)/packetforward/types BankKeeper
mockgen -package=mock -destination=./test/mock/channel_keeper.go $(GOMOD)/packetforward/types ChannelKeeper
mockgen -package=mock -destination=./test/mock/ics4_wrapper.go github.com/cosmos/ibc-go/v8/modules/core/05-port/types ICS4Wrapper
mockgen -package=mock -destination=./test/mock/ibc_module.go github.com/cosmos/ibc-go/v8/modules/core/05-port/types IBCModule
mockgen -package=mock -destination=./test/mock/ics4_wrapper.go github.com/cosmos/ibc-go/v9/modules/core/05-port/types ICS4Wrapper
mockgen -package=mock -destination=./test/mock/ibc_module.go github.com/cosmos/ibc-go/v9/modules/core/05-port/types IBCModule

.PHONY: mocks

Expand Down Expand Up @@ -259,7 +259,7 @@ containerProtoGen=cosmos-sdk-proto-gen-$(containerProtoVer)
containerProtoGenSwagger=cosmos-sdk-proto-gen-swagger-$(containerProtoVer)
containerProtoFmt=cosmos-sdk-proto-fmt-$(containerProtoVer)

protoVer=0.13.1
protoVer=0.14.0
protoImageName=ghcr.io/cosmos/proto-builder:$(protoVer)
protoImage=$(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(protoImageName)

Expand Down
6 changes: 3 additions & 3 deletions middleware/packet-forward-middleware/docs/integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ Integration of the PFM should take approximately 20 minutes.

// Import the packet forward middleware
import (
"github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8/packetforward"
packetforwardkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8/packetforward/keeper"
packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8/packetforward/types"
"github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v9/packetforward"
packetforwardkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v9/packetforward/keeper"
packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v9/packetforward/types"
)

...
Expand Down
94 changes: 45 additions & 49 deletions middleware/packet-forward-middleware/e2e/forward_timeout_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import (
"time"

"cosmossdk.io/math"
transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types"
chantypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types"
transfertypes "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types"
chantypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types"
"github.com/strangelove-ventures/interchaintest/v8"
"github.com/strangelove-ventures/interchaintest/v8/chain/cosmos"
"github.com/strangelove-ventures/interchaintest/v8/ibc"
Expand Down Expand Up @@ -143,17 +143,13 @@ func TestTimeoutOnForward(t *testing.T) {
userA, userB, userC, userD := users[0], users[1], users[2], users[3]

// Compose the prefixed denoms and ibc denom for asserting balances
firstHopDenom := transfertypes.GetPrefixedDenom(baChan.PortID, baChan.ChannelID, chainA.Config().Denom)
secondHopDenom := transfertypes.GetPrefixedDenom(cbChan.PortID, cbChan.ChannelID, firstHopDenom)
thirdHopDenom := transfertypes.GetPrefixedDenom(dcChan.PortID, dcChan.ChannelID, secondHopDenom)
firstHopDenom := transfertypes.NewDenom(chainA.Config().Denom, transfertypes.NewHop(baChan.PortID, baChan.ChannelID))
secondHopDenom := transfertypes.NewDenom(chainA.Config().Denom, transfertypes.NewHop(cbChan.PortID, cbChan.ChannelID), transfertypes.NewHop(baChan.PortID, baChan.ChannelID))
thirdHopDenom := transfertypes.NewDenom(chainA.Config().Denom, transfertypes.NewHop(dcChan.PortID, dcChan.ChannelID), transfertypes.NewHop(cbChan.PortID, cbChan.ChannelID), transfertypes.NewHop(baChan.PortID, baChan.ChannelID))

firstHopDenomTrace := transfertypes.ParseDenomTrace(firstHopDenom)
secondHopDenomTrace := transfertypes.ParseDenomTrace(secondHopDenom)
thirdHopDenomTrace := transfertypes.ParseDenomTrace(thirdHopDenom)

firstHopIBCDenom := firstHopDenomTrace.IBCDenom()
secondHopIBCDenom := secondHopDenomTrace.IBCDenom()
thirdHopIBCDenom := thirdHopDenomTrace.IBCDenom()
firstHopIBCDenom := firstHopDenom.IBCDenom()
secondHopIBCDenom := secondHopDenom.IBCDenom()
thirdHopIBCDenom := thirdHopDenom.IBCDenom()

firstHopEscrowAccount := transfertypes.GetEscrowAddress(abChan.PortID, abChan.ChannelID).String()
secondHopEscrowAccount := transfertypes.GetEscrowAddress(bcChan.PortID, bcChan.ChannelID).String()
Expand Down Expand Up @@ -249,10 +245,10 @@ func TestTimeoutOnForward(t *testing.T) {
chainDBalance, err := chainD.GetBalance(ctx, userD.FormattedAddress(), thirdHopIBCDenom)
require.NoError(t, err)

require.True(t, chainABalance.Equal(initBal))
require.True(t, chainBBalance.Equal(zeroBal))
require.True(t, chainCBalance.Equal(zeroBal))
require.True(t, chainDBalance.Equal(zeroBal))
require.Equalf(t, initBal.Int64(), chainABalance.Int64(), "expected chain A balance %d, got %d", initBal.Int64(), chainABalance.Int64())
require.Equalf(t, zeroBal.Int64(), chainBBalance.Int64(), "expected chain B balance %d, got %d", zeroBal.Int64(), chainBBalance.Int64())
require.Equalf(t, zeroBal.Int64(), chainCBalance.Int64(), "expected chain C balance %d, got %d", zeroBal.Int64(), chainCBalance.Int64())
require.Equalf(t, zeroBal.Int64(), chainDBalance.Int64(), "expected chain D balance %d, got %d", zeroBal.Int64(), chainDBalance.Int64())

firstHopEscrowBalance, err := chainA.GetBalance(ctx, firstHopEscrowAccount, chainA.Config().Denom)
require.NoError(t, err)
Expand All @@ -263,9 +259,9 @@ func TestTimeoutOnForward(t *testing.T) {
thirdHopEscrowBalance, err := chainC.GetBalance(ctx, thirdHopEscrowAccount, secondHopIBCDenom)
require.NoError(t, err)

require.True(t, firstHopEscrowBalance.Equal(zeroBal))
require.True(t, secondHopEscrowBalance.Equal(zeroBal))
require.True(t, thirdHopEscrowBalance.Equal(zeroBal))
require.Equalf(t, zeroBal.Int64(), firstHopEscrowBalance.Int64(), "expected first hop escrow balance %d, got %d", zeroBal.Int64(), firstHopEscrowBalance.Int64())
require.Equalf(t, zeroBal.Int64(), secondHopEscrowBalance.Int64(), "expected second hop escrow balance %d, got %d", zeroBal.Int64(), secondHopEscrowBalance.Int64())
require.Equalf(t, zeroBal.Int64(), thirdHopEscrowBalance.Int64(), "expected third hop escrow balance %d, got %d", zeroBal.Int64(), thirdHopEscrowBalance.Int64())

// Send IBC transfer from ChainA -> ChainB -> ChainC -> ChainD that will succeed
secondHopMetadata = &PacketMetadata{
Expand Down Expand Up @@ -320,10 +316,10 @@ func TestTimeoutOnForward(t *testing.T) {
chainDBalance, err = chainD.GetBalance(ctx, userD.FormattedAddress(), thirdHopIBCDenom)
require.NoError(t, err)

require.True(t, chainABalance.Equal(initBal.Sub(transferAmount)))
require.True(t, chainBBalance.Equal(zeroBal))
require.True(t, chainCBalance.Equal(zeroBal))
require.True(t, chainDBalance.Equal(transferAmount))
require.Equalf(t, initBal.Sub(transferAmount).Int64(), chainABalance.Int64(), "expected chain A balance %d, got %d", initBal.Sub(transferAmount).Int64(), chainABalance.Int64())
require.Equalf(t, zeroBal.Int64(), chainBBalance.Int64(), "expected chain B balance %d, got %d", zeroBal.Int64(), chainBBalance.Int64())
require.Equalf(t, zeroBal.Int64(), chainCBalance.Int64(), "expected chain C balance %d, got %d", zeroBal.Int64(), chainCBalance.Int64())
require.Equalf(t, transferAmount.Int64(), chainDBalance.Int64(), "expected chain D balance %d, got %d", transferAmount.Int64(), chainDBalance.Int64())

firstHopEscrowBalance, err = chainA.GetBalance(ctx, firstHopEscrowAccount, chainA.Config().Denom)
require.NoError(t, err)
Expand All @@ -334,14 +330,14 @@ func TestTimeoutOnForward(t *testing.T) {
thirdHopEscrowBalance, err = chainC.GetBalance(ctx, thirdHopEscrowAccount, secondHopIBCDenom)
require.NoError(t, err)

require.True(t, firstHopEscrowBalance.Equal(transferAmount))
require.True(t, secondHopEscrowBalance.Equal(transferAmount))
require.True(t, thirdHopEscrowBalance.Equal(transferAmount))
require.Equalf(t, transferAmount.Int64(), firstHopEscrowBalance.Int64(), "expected first hop escrow balance %d, got %d", transferAmount.Int64(), firstHopEscrowBalance.Int64())
require.Equalf(t, transferAmount.Int64(), secondHopEscrowBalance.Int64(), "expected second hop escrow balance %d, got %d", transferAmount.Int64(), secondHopEscrowBalance.Int64())
require.Equalf(t, transferAmount.Int64(), thirdHopEscrowBalance.Int64(), "expected third hop escrow balance %d, got %d", transferAmount.Int64(), thirdHopEscrowBalance.Int64())

// Compose IBC tx that will attempt to go from ChainD -> ChainC -> ChainB -> ChainA but timeout between ChainB->ChainA
transfer = ibc.WalletAmount{
Address: userC.FormattedAddress(),
Denom: thirdHopDenom,
Denom: thirdHopDenom.Path(),
Amount: transferAmount,
}

Expand Down Expand Up @@ -394,10 +390,10 @@ func TestTimeoutOnForward(t *testing.T) {
chainDBalance, err = chainD.GetBalance(ctx, userD.FormattedAddress(), thirdHopIBCDenom)
require.NoError(t, err)

require.True(t, chainABalance.Equal(initBal.Sub(transferAmount)))
require.True(t, chainBBalance.Equal(zeroBal))
require.True(t, chainCBalance.Equal(zeroBal))
require.True(t, chainDBalance.Equal(transferAmount))
require.Equalf(t, initBal.Sub(transferAmount).Int64(), chainABalance.Int64(), "expected chain A balance %d, got %d", initBal.Sub(transferAmount).Int64(), chainABalance.Int64())
require.Equalf(t, zeroBal.Int64(), chainBBalance.Int64(), "expected chain B balance %d, got %d", zeroBal.Int64(), chainBBalance.Int64())
require.Equalf(t, zeroBal.Int64(), chainCBalance.Int64(), "expected chain C balance %d, got %d", zeroBal.Int64(), chainCBalance.Int64())
require.Equalf(t, transferAmount.Int64(), chainDBalance.Int64(), "expected chain D balance %d, got %d", transferAmount.Int64(), chainDBalance.Int64())

firstHopEscrowBalance, err = chainA.GetBalance(ctx, firstHopEscrowAccount, chainA.Config().Denom)
require.NoError(t, err)
Expand All @@ -408,16 +404,16 @@ func TestTimeoutOnForward(t *testing.T) {
thirdHopEscrowBalance, err = chainC.GetBalance(ctx, thirdHopEscrowAccount, secondHopIBCDenom)
require.NoError(t, err)

require.True(t, firstHopEscrowBalance.Equal(transferAmount))
require.True(t, secondHopEscrowBalance.Equal(transferAmount))
require.True(t, thirdHopEscrowBalance.Equal(transferAmount))
require.Equalf(t, transferAmount.Int64(), firstHopEscrowBalance.Int64(), "expected first hop escrow balance %d, got %d", transferAmount.Int64(), firstHopEscrowBalance.Int64())
require.Equalf(t, transferAmount.Int64(), secondHopEscrowBalance.Int64(), "expected second hop escrow balance %d, got %d", transferAmount.Int64(), secondHopEscrowBalance.Int64())
require.Equalf(t, transferAmount.Int64(), thirdHopEscrowBalance.Int64(), "expected third hop escrow balance %d, got %d", transferAmount.Int64(), thirdHopEscrowBalance.Int64())

// ---

// Compose IBC tx that will go from ChainD -> ChainC -> ChainB -> ChainA and succeed.
transfer = ibc.WalletAmount{
Address: userC.FormattedAddress(),
Denom: thirdHopDenom,
Denom: thirdHopDenom.Path(),
Amount: transferAmount,
}

Expand Down Expand Up @@ -469,10 +465,10 @@ func TestTimeoutOnForward(t *testing.T) {
chainDBalance, err = chainD.GetBalance(ctx, userD.FormattedAddress(), thirdHopIBCDenom)
require.NoError(t, err)

require.True(t, chainABalance.Equal(initBal))
require.True(t, chainBBalance.Equal(zeroBal))
require.True(t, chainCBalance.Equal(zeroBal))
require.True(t, chainDBalance.Equal(zeroBal))
require.Equalf(t, initBal.Int64(), chainABalance.Int64(), "expected chain A balance %d, got %d", initBal.Int64(), chainABalance.Int64())
require.Equalf(t, zeroBal.Int64(), chainBBalance.Int64(), "expected chain B balance %d, got %d", zeroBal.Int64(), chainBBalance.Int64())
require.Equalf(t, zeroBal.Int64(), chainCBalance.Int64(), "expected chain C balance %d, got %d", zeroBal.Int64(), chainCBalance.Int64())
require.Equalf(t, zeroBal.Int64(), chainDBalance.Int64(), "expected chain D balance %d, got %d", zeroBal.Int64(), chainDBalance.Int64())

firstHopEscrowBalance, err = chainA.GetBalance(ctx, firstHopEscrowAccount, chainA.Config().Denom)
require.NoError(t, err)
Expand All @@ -483,9 +479,9 @@ func TestTimeoutOnForward(t *testing.T) {
thirdHopEscrowBalance, err = chainC.GetBalance(ctx, thirdHopEscrowAccount, secondHopIBCDenom)
require.NoError(t, err)

require.True(t, firstHopEscrowBalance.Equal(zeroBal))
require.True(t, secondHopEscrowBalance.Equal(zeroBal))
require.True(t, thirdHopEscrowBalance.Equal(zeroBal))
require.Equalf(t, zeroBal.Int64(), firstHopEscrowBalance.Int64(), "expected first hop escrow balance %d, got %d", zeroBal.Int64(), firstHopEscrowBalance.Int64())
require.Equalf(t, zeroBal.Int64(), secondHopEscrowBalance.Int64(), "expected second hop escrow balance %d, got %d", zeroBal.Int64(), secondHopEscrowBalance.Int64())
require.Equalf(t, zeroBal.Int64(), thirdHopEscrowBalance.Int64(), "expected third hop escrow balance %d, got %d", zeroBal.Int64(), thirdHopEscrowBalance.Int64())

// ----- 2

Expand Down Expand Up @@ -533,10 +529,10 @@ func TestTimeoutOnForward(t *testing.T) {
chainDBalance, err = chainD.GetBalance(ctx, userD.FormattedAddress(), thirdHopIBCDenom)
require.NoError(t, err)

require.True(t, chainABalance.Equal(initBal))
require.True(t, chainBBalance.Equal(zeroBal))
require.True(t, chainCBalance.Equal(zeroBal))
require.True(t, chainDBalance.Equal(zeroBal))
require.Equalf(t, initBal.Int64(), chainABalance.Int64(), "expected chain A balance %d, got %d", initBal.Int64(), chainABalance.Int64())
require.Equalf(t, zeroBal.Int64(), chainBBalance.Int64(), "expected chain B balance %d, got %d", zeroBal.Int64(), chainBBalance.Int64())
require.Equalf(t, zeroBal.Int64(), chainCBalance.Int64(), "expected chain C balance %d, got %d", zeroBal.Int64(), chainCBalance.Int64())
require.Equalf(t, zeroBal.Int64(), chainDBalance.Int64(), "expected chain D balance %d, got %d", zeroBal.Int64(), chainDBalance.Int64())

firstHopEscrowBalance, err = chainA.GetBalance(ctx, firstHopEscrowAccount, chainA.Config().Denom)
require.NoError(t, err)
Expand All @@ -547,7 +543,7 @@ func TestTimeoutOnForward(t *testing.T) {
thirdHopEscrowBalance, err = chainC.GetBalance(ctx, thirdHopEscrowAccount, secondHopIBCDenom)
require.NoError(t, err)

require.True(t, firstHopEscrowBalance.Equal(zeroBal))
require.True(t, secondHopEscrowBalance.Equal(zeroBal))
require.True(t, thirdHopEscrowBalance.Equal(zeroBal))
require.Equalf(t, zeroBal.Int64(), firstHopEscrowBalance.Int64(), "expected first hop escrow balance %d, got %d", zeroBal.Int64(), firstHopEscrowBalance.Int64())
require.Equalf(t, zeroBal.Int64(), secondHopEscrowBalance.Int64(), "expected second hop escrow balance %d, got %d", zeroBal.Int64(), secondHopEscrowBalance.Int64())
require.Equalf(t, zeroBal.Int64(), thirdHopEscrowBalance.Int64(), "expected third hop escrow balance %d, got %d", zeroBal.Int64(), thirdHopEscrowBalance.Int64())
}
Loading