Skip to content

Commit 515bdca

Browse files
wllmshaodrklee3
andauthored
fix: don't unescrow tokens that are moved between escrow accounts (#230)
* 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 <[email protected]>
1 parent 64c5cd5 commit 515bdca

File tree

17 files changed

+734
-58
lines changed

17 files changed

+734
-58
lines changed

.github/workflows/packet-forward-middleware.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222
- uses: actions/checkout@v3
2323

2424
- name: golangci-lint
25-
uses: golangci/golangci-lint-action@v2
25+
uses: golangci/golangci-lint-action@v6
2626
with:
2727
version: ${{ env.LINT_VERSION }}
2828
working-directory: ${{ env.WORKING_DIRECTORY }}
@@ -64,7 +64,7 @@ jobs:
6464
outputs: type=docker,dest=${{ env.TAR_PATH }}
6565

6666
- name: Upload artifact
67-
uses: actions/upload-artifact@v3
67+
uses: actions/upload-artifact@v4
6868
with:
6969
name: ${{ env.IMAGE_NAME }}
7070
path: ${{ env.TAR_PATH }}
@@ -94,15 +94,15 @@ jobs:
9494
- uses: actions/checkout@v4
9595

9696
- name: Download Tarball Artifact
97-
uses: actions/download-artifact@v3
97+
uses: actions/download-artifact@v4
9898
with:
9999
name: ${{ env.IMAGE_NAME }}
100100
path: /tmp
101101

102102
- name: Load Docker Image
103103
run: |
104104
docker image load -i ${{ env.TAR_PATH }}
105-
docker image load -i testing/previous_images/pfm_7_0_1.tar
105+
docker image load -i testing/previous_images/pfm_8_1_0.tar
106106
docker image ls -a
107107
108108
- name: Run Test

middleware/packet-forward-middleware/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# docker build . -t pfm:local
22
# docker run --rm -it pfm:local q ibc-router
33

4-
FROM golang:1.21-alpine3.18 as builder
4+
FROM golang:1.21-alpine3.18 AS builder
55

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

middleware/packet-forward-middleware/e2e/packet_forward_test.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package e2e
33
import (
44
"context"
55
"encoding/json"
6+
"fmt"
67
"testing"
78
"time"
89

@@ -17,6 +18,8 @@ import (
1718
"github.com/strangelove-ventures/interchaintest/v8/testutil"
1819
"github.com/stretchr/testify/require"
1920
"go.uber.org/zap/zaptest"
21+
"google.golang.org/grpc"
22+
"google.golang.org/grpc/credentials/insecure"
2023
)
2124

2225
type PacketMetadata struct {
@@ -633,6 +636,47 @@ func TestPacketForwardMiddleware(t *testing.T) {
633636
require.True(t, baEscrowBalance.Equal(transferAmount))
634637
require.True(t, bcEscrowBalance.Equal(zeroBal))
635638
require.True(t, cdEscrowBalance.Equal(zeroBal))
639+
640+
conn, err := grpc.Dial(chainB.GetHostGRPCAddress(), grpc.WithTransportCredentials(insecure.NewCredentials()))
641+
require.NoError(t, err)
642+
defer conn.Close()
643+
644+
queryClient := transfertypes.NewQueryClient(conn)
645+
646+
req := &transfertypes.QueryTotalEscrowForDenomRequest{Denom: chainB.Config().Denom}
647+
res, err := queryClient.TotalEscrowForDenom(ctx, req)
648+
require.NoError(t, err)
649+
650+
// assert reported total escrow balance does not change
651+
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()))
652+
653+
// verify that failing another A->B->C->D works
654+
chainAHeight, err = chainA.Height(ctx)
655+
require.NoError(t, err)
656+
657+
transferTx, err = chainA.SendIBCTransfer(ctx, abChan.ChannelID, userA.KeyName(), transfer, ibc.TransferOptions{Memo: string(memo)})
658+
require.NoError(t, err)
659+
_, err = testutil.PollForAck(ctx, chainA, chainAHeight, chainAHeight+30, transferTx.Packet)
660+
require.NoError(t, err)
661+
err = testutil.WaitForBlocks(ctx, waitBlocks, chainA)
662+
require.NoError(t, err)
663+
664+
// verify that unwinding from A to B works
665+
aToBTransfer := ibc.WalletAmount{
666+
Address: userB.FormattedAddress(),
667+
Denom: baIBCDenom,
668+
Amount: transferAmount,
669+
}
670+
671+
chainAHeight, err = chainA.Height(ctx)
672+
require.NoError(t, err)
673+
674+
transferTx, err = chainA.SendIBCTransfer(ctx, abChan.ChannelID, userA.KeyName(), aToBTransfer, ibc.TransferOptions{})
675+
require.NoError(t, err)
676+
_, err = testutil.PollForAck(ctx, chainA, chainAHeight, chainAHeight+10, transferTx.Packet)
677+
require.NoError(t, err)
678+
err = testutil.WaitForBlocks(ctx, waitBlocks, chainA)
679+
require.NoError(t, err)
636680
})
637681

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

0 commit comments

Comments
 (0)