Skip to content

Commit 3363917

Browse files
authored
MsgTransferResponse add sequence (cosmos#2377)
## Description Returns sequence from `sendTransfer`, and returns it with the `MsgTransferResponse`. This is not an API breaking change. Retrieving the sequence at the time of creating the transfer is necessary in the packet forward middleware for correlation with multihop packet flows. strangelove-ventures/packet-forward-middleware#33 strangelove-ventures/interchaintest#306 Closes cosmos#1969 --- - [x] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [x] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [x] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [x] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) Existing test coverage exercises this new method due to the re-routing of `SendTransfer` through `SendPacketTransfer` - [x] Updated relevant documentation (`docs/`) or specification (`x/<module>/spec/`) - [x] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [x] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [x] Re-reviewed `Files changed` in the Github PR explorer - [x] Review `Codecov Report` in the comment section below once CI passes
1 parent 8c80802 commit 3363917

File tree

7 files changed

+97
-47
lines changed

7 files changed

+97
-47
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ Ref: https://keepachangelog.com/en/1.0.0/
6565

6666
### State Machine Breaking
6767

68+
* (transfer) [\#2377](https://github.com/cosmos/ibc-go/pull/2377) Adding `sequence` to `MsgTransferResponse`.
69+
6870
### Improvements
6971

7072
* (modules/light-clients/07-tendermint) [\#1713](https://github.com/cosmos/ibc-go/pull/1713) Allow client upgrade proposals to update `TrustingPeriod`. See ADR-026 for context.

docs/ibc/proto-docs.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2267,6 +2267,11 @@ https://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transf
22672267
MsgTransferResponse defines the Msg/Transfer response type.
22682268

22692269

2270+
| Field | Type | Label | Description |
2271+
| ----- | ---- | ----- | ----------- |
2272+
| `sequence` | [uint64](#uint64) | | sequence number of the packet on the channel. |
2273+
2274+
22702275

22712276

22722277

modules/apps/transfer/keeper/msg_server.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@ func (k Keeper) Transfer(goCtx context.Context, msg *types.MsgTransfer) (*types.
1919
return nil, err
2020
}
2121

22-
if err := k.sendTransfer(
22+
sequence, err := k.sendTransfer(
2323
ctx, msg.SourcePort, msg.SourceChannel, msg.Token, sender, msg.Receiver, msg.TimeoutHeight, msg.TimeoutTimestamp,
24-
); err != nil {
24+
)
25+
if err != nil {
2526
return nil, err
2627
}
2728

@@ -39,5 +40,5 @@ func (k Keeper) Transfer(goCtx context.Context, msg *types.MsgTransfer) (*types.
3940
),
4041
})
4142

42-
return &types.MsgTransferResponse{}, nil
43+
return &types.MsgTransferResponse{Sequence: sequence}, nil
4344
}

modules/apps/transfer/keeper/msg_server_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ func (suite *KeeperTestSuite) TestMsgTransfer() {
6161
res, err := suite.chainA.GetSimApp().TransferKeeper.Transfer(sdk.WrapSDKContext(suite.chainA.GetContext()), msg)
6262

6363
if tc.expPass {
64+
suite.Require().NotEqual(res.Sequence, uint64(0))
6465
suite.Require().NoError(err)
6566
suite.Require().NotNil(res)
6667
} else {

modules/apps/transfer/keeper/relay.go

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func (k Keeper) SendTransfer(
6060
timeoutHeight clienttypes.Height,
6161
timeoutTimestamp uint64,
6262
) error {
63-
return k.sendTransfer(
63+
_, err := k.sendTransfer(
6464
ctx,
6565
sourcePort,
6666
sourceChannel,
@@ -70,6 +70,7 @@ func (k Keeper) SendTransfer(
7070
timeoutHeight,
7171
timeoutTimestamp,
7272
)
73+
return err
7374
}
7475

7576
// sendTransfer handles transfer sending logic.
@@ -82,18 +83,18 @@ func (k Keeper) sendTransfer(
8283
receiver string,
8384
timeoutHeight clienttypes.Height,
8485
timeoutTimestamp uint64,
85-
) error {
86+
) (uint64, error) {
8687
if !k.GetSendEnabled(ctx) {
87-
return types.ErrSendDisabled
88+
return 0, types.ErrSendDisabled
8889
}
8990

9091
if k.bankKeeper.BlockedAddr(sender) {
91-
return sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to send funds", sender)
92+
return 0, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to send funds", sender)
9293
}
9394

9495
sourceChannelEnd, found := k.channelKeeper.GetChannel(ctx, sourcePort, sourceChannel)
9596
if !found {
96-
return sdkerrors.Wrapf(channeltypes.ErrChannelNotFound, "port ID (%s) channel ID (%s)", sourcePort, sourceChannel)
97+
return 0, sdkerrors.Wrapf(channeltypes.ErrChannelNotFound, "port ID (%s) channel ID (%s)", sourcePort, sourceChannel)
9798
}
9899

99100
destinationPort := sourceChannelEnd.GetCounterparty().GetPortID()
@@ -102,7 +103,7 @@ func (k Keeper) sendTransfer(
102103
// get the next sequence
103104
sequence, found := k.channelKeeper.GetNextSequenceSend(ctx, sourcePort, sourceChannel)
104105
if !found {
105-
return sdkerrors.Wrapf(
106+
return 0, sdkerrors.Wrapf(
106107
channeltypes.ErrSequenceSendNotFound,
107108
"source port: %s, source channel: %s", sourcePort, sourceChannel,
108109
)
@@ -112,7 +113,7 @@ func (k Keeper) sendTransfer(
112113
// See spec for this logic: https://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer#packet-relay
113114
channelCap, ok := k.scopedKeeper.GetCapability(ctx, host.ChannelCapabilityPath(sourcePort, sourceChannel))
114115
if !ok {
115-
return sdkerrors.Wrap(channeltypes.ErrChannelCapabilityNotFound, "module does not own channel capability")
116+
return 0, sdkerrors.Wrap(channeltypes.ErrChannelCapabilityNotFound, "module does not own channel capability")
116117
}
117118

118119
// NOTE: denomination and hex hash correctness checked during msg.ValidateBasic
@@ -125,7 +126,7 @@ func (k Keeper) sendTransfer(
125126
if strings.HasPrefix(token.Denom, "ibc/") {
126127
fullDenomPath, err = k.DenomPathFromHash(ctx, token.Denom)
127128
if err != nil {
128-
return err
129+
return 0, err
129130
}
130131
}
131132

@@ -148,7 +149,7 @@ func (k Keeper) sendTransfer(
148149
if err := k.bankKeeper.SendCoins(
149150
ctx, sender, escrowAddress, sdk.NewCoins(token),
150151
); err != nil {
151-
return err
152+
return 0, err
152153
}
153154

154155
} else {
@@ -158,7 +159,7 @@ func (k Keeper) sendTransfer(
158159
if err := k.bankKeeper.SendCoinsFromAccountToModule(
159160
ctx, sender, types.ModuleName, sdk.NewCoins(token),
160161
); err != nil {
161-
return err
162+
return 0, err
162163
}
163164

164165
if err := k.bankKeeper.BurnCoins(
@@ -187,7 +188,7 @@ func (k Keeper) sendTransfer(
187188
)
188189

189190
if err := k.ics4Wrapper.SendPacket(ctx, channelCap, packet); err != nil {
190-
return err
191+
return 0, err
191192
}
192193

193194
defer func() {
@@ -206,7 +207,7 @@ func (k Keeper) sendTransfer(
206207
)
207208
}()
208209

209-
return nil
210+
return sequence, nil
210211
}
211212

212213
// OnRecvPacket processes a cross chain fungible token transfer. If the

modules/apps/transfer/types/tx.pb.go

Lines changed: 68 additions & 31 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

proto/ibc/applications/transfer/v1/tx.proto

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,7 @@ message MsgTransfer {
4141
}
4242

4343
// MsgTransferResponse defines the Msg/Transfer response type.
44-
message MsgTransferResponse {}
44+
message MsgTransferResponse {
45+
// sequence number of the transfer packet sent
46+
uint64 sequence = 1;
47+
}

0 commit comments

Comments
 (0)