Skip to content

Commit 90b43f2

Browse files
mergify[bot]agouindamiannolancrodriguezvega
authored
MsgTransferResponse add sequence (backport #2377) (#2467)
* MsgTransferResponse add sequence (#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 #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 (cherry picked from commit 3363917) # Conflicts: # modules/apps/transfer/keeper/msg_server.go # modules/apps/transfer/keeper/relay.go # modules/apps/transfer/types/tx.pb.go * resolving conflicts * fix conflicts Co-authored-by: Andrew Gouin <andrew@gouin.io> Co-authored-by: Damian Nolan <damiannolan@gmail.com> Co-authored-by: crodriguezvega <carlos@interchain.io>
1 parent 99730fe commit 90b43f2

File tree

7 files changed

+118
-45
lines changed

7 files changed

+118
-45
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ Ref: https://keepachangelog.com/en/1.0.0/
4242

4343
### State Machine Breaking
4444

45+
* (transfer) [\#2377](https://github.com/cosmos/ibc-go/pull/2377) Adding `sequence` to `MsgTransferResponse`.
46+
4547
### Improvements
4648

4749
### Features

docs/ibc/proto-docs.md

+5
Original file line numberDiff line numberDiff line change
@@ -2158,6 +2158,11 @@ https://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transf
21582158
MsgTransferResponse defines the Msg/Transfer response type.
21592159

21602160

2161+
| Field | Type | Label | Description |
2162+
| ----- | ---- | ----- | ----------- |
2163+
| `sequence` | [uint64](#uint64) | | sequence number of the transfer packet sent |
2164+
2165+
21612166

21622167

21632168

modules/apps/transfer/keeper/msg_server.go

+4-3
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

+1
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

+34-10
Original file line numberDiff line numberDiff line change
@@ -60,17 +60,41 @@ func (k Keeper) SendTransfer(
6060
timeoutHeight clienttypes.Height,
6161
timeoutTimestamp uint64,
6262
) error {
63+
_, err := k.sendTransfer(
64+
ctx,
65+
sourcePort,
66+
sourceChannel,
67+
token,
68+
sender,
69+
receiver,
70+
timeoutHeight,
71+
timeoutTimestamp,
72+
)
73+
return err
74+
}
75+
76+
// sendTransfer handles transfer sending logic.
77+
func (k Keeper) sendTransfer(
78+
ctx sdk.Context,
79+
sourcePort,
80+
sourceChannel string,
81+
token sdk.Coin,
82+
sender sdk.AccAddress,
83+
receiver string,
84+
timeoutHeight clienttypes.Height,
85+
timeoutTimestamp uint64,
86+
) (uint64, error) {
6387
if !k.GetSendEnabled(ctx) {
64-
return types.ErrSendDisabled
88+
return 0, types.ErrSendDisabled
6589
}
6690

6791
if k.bankKeeper.BlockedAddr(sender) {
68-
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)
6993
}
7094

7195
sourceChannelEnd, found := k.channelKeeper.GetChannel(ctx, sourcePort, sourceChannel)
7296
if !found {
73-
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)
7498
}
7599

76100
destinationPort := sourceChannelEnd.GetCounterparty().GetPortID()
@@ -79,7 +103,7 @@ func (k Keeper) SendTransfer(
79103
// get the next sequence
80104
sequence, found := k.channelKeeper.GetNextSequenceSend(ctx, sourcePort, sourceChannel)
81105
if !found {
82-
return sdkerrors.Wrapf(
106+
return 0, sdkerrors.Wrapf(
83107
channeltypes.ErrSequenceSendNotFound,
84108
"source port: %s, source channel: %s", sourcePort, sourceChannel,
85109
)
@@ -89,7 +113,7 @@ func (k Keeper) SendTransfer(
89113
// See spec for this logic: https://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer#packet-relay
90114
channelCap, ok := k.scopedKeeper.GetCapability(ctx, host.ChannelCapabilityPath(sourcePort, sourceChannel))
91115
if !ok {
92-
return sdkerrors.Wrap(channeltypes.ErrChannelCapabilityNotFound, "module does not own channel capability")
116+
return 0, sdkerrors.Wrap(channeltypes.ErrChannelCapabilityNotFound, "module does not own channel capability")
93117
}
94118

95119
// NOTE: denomination and hex hash correctness checked during msg.ValidateBasic
@@ -102,7 +126,7 @@ func (k Keeper) SendTransfer(
102126
if strings.HasPrefix(token.Denom, "ibc/") {
103127
fullDenomPath, err = k.DenomPathFromHash(ctx, token.Denom)
104128
if err != nil {
105-
return err
129+
return 0, err
106130
}
107131
}
108132

@@ -125,7 +149,7 @@ func (k Keeper) SendTransfer(
125149
if err := k.bankKeeper.SendCoins(
126150
ctx, sender, escrowAddress, sdk.NewCoins(token),
127151
); err != nil {
128-
return err
152+
return 0, err
129153
}
130154

131155
} else {
@@ -135,7 +159,7 @@ func (k Keeper) SendTransfer(
135159
if err := k.bankKeeper.SendCoinsFromAccountToModule(
136160
ctx, sender, types.ModuleName, sdk.NewCoins(token),
137161
); err != nil {
138-
return err
162+
return 0, err
139163
}
140164

141165
if err := k.bankKeeper.BurnCoins(
@@ -164,7 +188,7 @@ func (k Keeper) SendTransfer(
164188
)
165189

166190
if err := k.ics4Wrapper.SendPacket(ctx, channelCap, packet); err != nil {
167-
return err
191+
return 0, err
168192
}
169193

170194
defer func() {
@@ -183,7 +207,7 @@ func (k Keeper) SendTransfer(
183207
)
184208
}()
185209

186-
return nil
210+
return sequence, nil
187211
}
188212

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

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

+68-31
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

+4-1
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)