Skip to content

Commit

Permalink
Update RecordsKeeper.Transfer to use msgTransferResponse sequence num…
Browse files Browse the repository at this point in the history
…ber (#376)

Co-authored-by: Son Trinh <sontrinh@Sons-MacBook-Pro.local>
  • Loading branch information
sontrinh16 and Son Trinh authored Nov 25, 2022
1 parent 613e857 commit 0a2297e
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 18 deletions.
20 changes: 2 additions & 18 deletions x/records/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,13 @@ package keeper
import (
"fmt"

channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types"
ibckeeper "github.com/cosmos/ibc-go/v3/modules/core/keeper"
"github.com/tendermint/tendermint/libs/log"

icacallbackstypes "github.com/Stride-Labs/stride/v3/x/icacallbacks/types"

"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper"
capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types"
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
Expand Down Expand Up @@ -78,25 +76,11 @@ func (k *Keeper) ClaimCapability(ctx sdk.Context, cap *capabilitytypes.Capabilit

func (k Keeper) Transfer(ctx sdk.Context, msg *ibctypes.MsgTransfer, depositRecord types.DepositRecord) error {
goCtx := sdk.WrapSDKContext(ctx)

// because TransferKeeper.Transfer doesn't return a sequence number, we need to fetch it manually
// the sequence number isn't actually incremented here, that happens in `SendPacket`, which is triggered
// by calling `Transfer`
// see: https://github.com/cosmos/ibc-go/blob/48a6ae512b4ea42c29fdf6c6f5363f50645591a2/modules/core/04-channel/keeper/packet.go#L125
sequence, found := k.IBCKeeper.ChannelKeeper.GetNextSequenceSend(ctx, msg.SourcePort, msg.SourceChannel)
if !found {
return sdkerrors.Wrapf(
channeltypes.ErrSequenceSendNotFound,
"source port: %s, source channel: %s", msg.SourcePort, msg.SourceChannel,
)
}

// trigger transfer
_, err := k.TransferKeeper.Transfer(goCtx, msg)
msgTransferResponse, err := k.TransferKeeper.Transfer(goCtx, msg)
if err != nil {
return err
}

sequence := msgTransferResponse.Sequence
// add callback data
transferCallback := types.TransferCallback{
DepositRecordId: depositRecord.Id,
Expand Down
16 changes: 16 additions & 0 deletions x/records/keeper/transfer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,19 @@ func (s *KeeperTestSuite) TestTransfer_Successful() {
s.Require().True(found)
s.Require().Equal(record.Status, recordtypes.DepositRecord_TRANSFER_IN_PROGRESS, "deposit record status should be TRANSFER_IN_PROGRESS")
}

func (s *KeeperTestSuite) TestSequence_Equal() {
tc := s.SetupTransfer()
goCtx := sdk.WrapSDKContext(s.Ctx())
sequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx(),
tc.transferMsg.SourcePort, tc.transferMsg.SourceChannel)
s.Require().True(found)

msgTransferResponse, err := s.App.TransferKeeper.Transfer(goCtx, &tc.transferMsg)
s.Require().NoError(err)

checkSequence := msgTransferResponse.Sequence

// Confirm msg sequence are equal to next sequence
s.Require().Equal(checkSequence, sequence, "sequence should be equal")
}

0 comments on commit 0a2297e

Please sign in to comment.