Skip to content

Commit 08653c8

Browse files
agouinmergify[bot]
authored andcommitted
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: # docs/ibc/proto-docs.md # modules/apps/transfer/keeper/msg_server.go # modules/apps/transfer/keeper/relay.go # modules/apps/transfer/types/tx.pb.go
1 parent 1564e79 commit 08653c8

File tree

7 files changed

+130
-14
lines changed

7 files changed

+130
-14
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

+8
Original file line numberDiff line numberDiff line change
@@ -1107,8 +1107,16 @@ identifier fields.
11071107

11081108
<a name="ibc.core.channel.v1.Packet"></a>
11091109

1110+
<<<<<<< HEAD
11101111
### Packet
11111112
Packet defines a type that carries data across different chains through IBC
1113+
=======
1114+
| Field | Type | Label | Description |
1115+
| ----- | ---- | ----- | ----------- |
1116+
| `sequence` | [uint64](#uint64) | | sequence number of the packet on the channel. |
1117+
1118+
1119+
>>>>>>> 3363917 (MsgTransferResponse add sequence (#2377))
11121120
11131121

11141122
| Field | Type | Label | Description |

modules/apps/transfer/keeper/msg_server.go

+7-2
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,14 @@ func (k Keeper) Transfer(goCtx context.Context, msg *types.MsgTransfer) (*types.
1919
return nil, err
2020
}
2121

22+
<<<<<<< HEAD
2223
if err := k.SendTransfer(
24+
=======
25+
sequence, err := k.sendTransfer(
26+
>>>>>>> 3363917 (MsgTransferResponse add sequence (#2377))
2327
ctx, msg.SourcePort, msg.SourceChannel, msg.Token, sender, msg.Receiver, msg.TimeoutHeight, msg.TimeoutTimestamp,
24-
); err != nil {
28+
)
29+
if err != nil {
2530
return nil, err
2631
}
2732

@@ -39,5 +44,5 @@ func (k Keeper) Transfer(goCtx context.Context, msg *types.MsgTransfer) (*types.
3944
),
4045
})
4146

42-
return &types.MsgTransferResponse{}, nil
47+
return &types.MsgTransferResponse{Sequence: sequence}, nil
4348
}

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

+37-10
Original file line numberDiff line numberDiff line change
@@ -60,17 +60,44 @@ func (k Keeper) SendTransfer(
6060
timeoutHeight clienttypes.Height,
6161
timeoutTimestamp uint64,
6262
) error {
63+
<<<<<<< HEAD
64+
=======
65+
_, err := k.sendTransfer(
66+
ctx,
67+
sourcePort,
68+
sourceChannel,
69+
token,
70+
sender,
71+
receiver,
72+
timeoutHeight,
73+
timeoutTimestamp,
74+
)
75+
return err
76+
}
77+
78+
// sendTransfer handles transfer sending logic.
79+
func (k Keeper) sendTransfer(
80+
ctx sdk.Context,
81+
sourcePort,
82+
sourceChannel string,
83+
token sdk.Coin,
84+
sender sdk.AccAddress,
85+
receiver string,
86+
timeoutHeight clienttypes.Height,
87+
timeoutTimestamp uint64,
88+
) (uint64, error) {
89+
>>>>>>> 3363917 (MsgTransferResponse add sequence (#2377))
6390
if !k.GetSendEnabled(ctx) {
64-
return types.ErrSendDisabled
91+
return 0, types.ErrSendDisabled
6592
}
6693

6794
if k.bankKeeper.BlockedAddr(sender) {
68-
return sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to send funds", sender)
95+
return 0, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to send funds", sender)
6996
}
7097

7198
sourceChannelEnd, found := k.channelKeeper.GetChannel(ctx, sourcePort, sourceChannel)
7299
if !found {
73-
return sdkerrors.Wrapf(channeltypes.ErrChannelNotFound, "port ID (%s) channel ID (%s)", sourcePort, sourceChannel)
100+
return 0, sdkerrors.Wrapf(channeltypes.ErrChannelNotFound, "port ID (%s) channel ID (%s)", sourcePort, sourceChannel)
74101
}
75102

76103
destinationPort := sourceChannelEnd.GetCounterparty().GetPortID()
@@ -79,7 +106,7 @@ func (k Keeper) SendTransfer(
79106
// get the next sequence
80107
sequence, found := k.channelKeeper.GetNextSequenceSend(ctx, sourcePort, sourceChannel)
81108
if !found {
82-
return sdkerrors.Wrapf(
109+
return 0, sdkerrors.Wrapf(
83110
channeltypes.ErrSequenceSendNotFound,
84111
"source port: %s, source channel: %s", sourcePort, sourceChannel,
85112
)
@@ -89,7 +116,7 @@ func (k Keeper) SendTransfer(
89116
// See spec for this logic: https://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer#packet-relay
90117
channelCap, ok := k.scopedKeeper.GetCapability(ctx, host.ChannelCapabilityPath(sourcePort, sourceChannel))
91118
if !ok {
92-
return sdkerrors.Wrap(channeltypes.ErrChannelCapabilityNotFound, "module does not own channel capability")
119+
return 0, sdkerrors.Wrap(channeltypes.ErrChannelCapabilityNotFound, "module does not own channel capability")
93120
}
94121

95122
// NOTE: denomination and hex hash correctness checked during msg.ValidateBasic
@@ -102,7 +129,7 @@ func (k Keeper) SendTransfer(
102129
if strings.HasPrefix(token.Denom, "ibc/") {
103130
fullDenomPath, err = k.DenomPathFromHash(ctx, token.Denom)
104131
if err != nil {
105-
return err
132+
return 0, err
106133
}
107134
}
108135

@@ -125,7 +152,7 @@ func (k Keeper) SendTransfer(
125152
if err := k.bankKeeper.SendCoins(
126153
ctx, sender, escrowAddress, sdk.NewCoins(token),
127154
); err != nil {
128-
return err
155+
return 0, err
129156
}
130157

131158
} else {
@@ -135,7 +162,7 @@ func (k Keeper) SendTransfer(
135162
if err := k.bankKeeper.SendCoinsFromAccountToModule(
136163
ctx, sender, types.ModuleName, sdk.NewCoins(token),
137164
); err != nil {
138-
return err
165+
return 0, err
139166
}
140167

141168
if err := k.bankKeeper.BurnCoins(
@@ -164,7 +191,7 @@ func (k Keeper) SendTransfer(
164191
)
165192

166193
if err := k.ics4Wrapper.SendPacket(ctx, channelCap, packet); err != nil {
167-
return err
194+
return 0, err
168195
}
169196

170197
defer func() {
@@ -183,7 +210,7 @@ func (k Keeper) SendTransfer(
183210
)
184211
}()
185212

186-
return nil
213+
return sequence, nil
187214
}
188215

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

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

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