Skip to content

Commit

Permalink
fix: don't unescrow tokens that are moved between escrow accounts (#230)
Browse files Browse the repository at this point in the history
* fix: don't unescrow tokens that are moved between escrow accounts

* add more tests

* consolidate new tests

* feat(pfm): Migration to align expected escrow state (#231)

* feat(packetforward): Bump consensus version from 2 to 3

* feat(packetforward): Add empty migration setup

* test(packetforward): Initialize mocks and tests for migration

* feat(packetforward): Implement migration

* fix(packetforward): Use correct expected keeper method names and parameters

* docs: Migration test steps

* test(packetforward): Upgrade e2e test

* fix: Upgrade in app

* fix: Use preblock for upgrade

* fix: Set missing app PreBlocker

* fix: Use corrected 8.1.0 pre-upgrade image

SetPreBlocker was not set, so upgrade module did not trigger. Also,
upgrade handlers should not be set in the previous binary.

* ci: Update deprecated artifacts actions

* ci: Update golangci/golangci-lint-action

* docs: Remove inaccurate previous image upgrade info

* ci: Update e2e test to use 8.1.0 pre-upgrade docker image

* docs: Test case docs

* build: Replace 8.1.0 pre-upgrade image with linux/amd64

* test: Enable upgrade handlers in local simapp for upgrade e2e test

---------

Co-authored-by: drklee3 <github@dlee.dev>
(cherry picked from commit 515bdca)

# Conflicts:
#	middleware/packet-forward-middleware/Dockerfile
#	middleware/packet-forward-middleware/e2e/upgrade_test.go
#	middleware/packet-forward-middleware/packetforward/types/expected_keepers.go
#	middleware/packet-forward-middleware/testing/simapp/app.go
  • Loading branch information
wllmshao authored and mergify[bot] committed Feb 11, 2025
1 parent 3a75835 commit 6c5e8f7
Show file tree
Hide file tree
Showing 17 changed files with 805 additions and 54 deletions.
8 changes: 4 additions & 4 deletions .github/workflows/packet-forward-middleware.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
- uses: actions/checkout@v3

- name: golangci-lint
uses: golangci/golangci-lint-action@v2
uses: golangci/golangci-lint-action@v6
with:
version: ${{ env.LINT_VERSION }}
working-directory: ${{ env.WORKING_DIRECTORY }}
Expand Down Expand Up @@ -64,7 +64,7 @@ jobs:
outputs: type=docker,dest=${{ env.TAR_PATH }}

- name: Upload artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: ${{ env.IMAGE_NAME }}
path: ${{ env.TAR_PATH }}
Expand Down Expand Up @@ -94,15 +94,15 @@ jobs:
- uses: actions/checkout@v4

- name: Download Tarball Artifact
uses: actions/download-artifact@v3
uses: actions/download-artifact@v4
with:
name: ${{ env.IMAGE_NAME }}
path: /tmp

- name: Load Docker Image
run: |
docker image load -i ${{ env.TAR_PATH }}
docker image load -i testing/previous_images/pfm_7_0_1.tar
docker image load -i testing/previous_images/pfm_8_1_0.tar
docker image ls -a
- name: Run Test
Expand Down
4 changes: 4 additions & 0 deletions middleware/packet-forward-middleware/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
# docker build . -t pfm:local
# docker run --rm -it pfm:local q ibc-router

<<<<<<< HEAD
FROM golang:1.22-alpine3.20 as builder
=======
FROM golang:1.21-alpine3.18 AS builder
>>>>>>> 515bdca (fix: don't unescrow tokens that are moved between escrow accounts (#230))
RUN set -eux; apk add --no-cache git libusb-dev linux-headers gcc musl-dev make;
Expand Down
44 changes: 44 additions & 0 deletions middleware/packet-forward-middleware/e2e/packet_forward_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package e2e
import (
"context"
"encoding/json"
"fmt"
"testing"
"time"

Expand All @@ -17,6 +18,8 @@ import (
"github.com/strangelove-ventures/interchaintest/v7/testutil"
"github.com/stretchr/testify/require"
"go.uber.org/zap/zaptest"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
)

type PacketMetadata struct {
Expand Down Expand Up @@ -633,6 +636,47 @@ func TestPacketForwardMiddleware(t *testing.T) {
require.True(t, baEscrowBalance.Equal(transferAmount))
require.True(t, bcEscrowBalance.Equal(zeroBal))
require.True(t, cdEscrowBalance.Equal(zeroBal))

conn, err := grpc.Dial(chainB.GetHostGRPCAddress(), grpc.WithTransportCredentials(insecure.NewCredentials()))
require.NoError(t, err)
defer conn.Close()

queryClient := transfertypes.NewQueryClient(conn)

req := &transfertypes.QueryTotalEscrowForDenomRequest{Denom: chainB.Config().Denom}
res, err := queryClient.TotalEscrowForDenom(ctx, req)
require.NoError(t, err)

// assert reported total escrow balance does not change
require.True(t, baEscrowBalance.Equal(res.Amount.Amount), fmt.Sprintf("expected B->A escrow amount %s to equal reported B total escrow %s", baEscrowBalance.String(), res.Amount.Amount.String()))

// verify that failing another A->B->C->D works
chainAHeight, err = chainA.Height(ctx)
require.NoError(t, err)

transferTx, err = chainA.SendIBCTransfer(ctx, abChan.ChannelID, userA.KeyName(), transfer, ibc.TransferOptions{Memo: string(memo)})
require.NoError(t, err)
_, err = testutil.PollForAck(ctx, chainA, chainAHeight, chainAHeight+30, transferTx.Packet)
require.NoError(t, err)
err = testutil.WaitForBlocks(ctx, waitBlocks, chainA)
require.NoError(t, err)

// verify that unwinding from A to B works
aToBTransfer := ibc.WalletAmount{
Address: userB.FormattedAddress(),
Denom: baIBCDenom,
Amount: transferAmount,
}

chainAHeight, err = chainA.Height(ctx)
require.NoError(t, err)

transferTx, err = chainA.SendIBCTransfer(ctx, abChan.ChannelID, userA.KeyName(), aToBTransfer, ibc.TransferOptions{})
require.NoError(t, err)
_, err = testutil.PollForAck(ctx, chainA, chainAHeight, chainAHeight+10, transferTx.Packet)
require.NoError(t, err)
err = testutil.WaitForBlocks(ctx, waitBlocks, chainA)
require.NoError(t, err)
})

t.Run("forward a->b->a", func(t *testing.T) {
Expand Down
Loading

0 comments on commit 6c5e8f7

Please # to comment.