Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ICS 20 Cleanup and Tests #5577

Merged
merged 23 commits into from
Feb 20, 2020
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
d3ee967
Add comments, remove unused code and attempt to point to places where…
jackzampolin Jan 27, 2020
6adb6ed
Merge branch 'ibc-alpha' of https://github.com/cosmos/cosmos-sdk into…
fedekunze Jan 31, 2020
c6e2321
close channel when transfer fails
fedekunze Jan 31, 2020
965440f
rename packer data transfer to align to spec; refactor table tests
fedekunze Feb 3, 2020
05fee3f
ICS 20 implementation cleanup work (#5602)
cwgoes Feb 3, 2020
4ddaf28
Merge branch 'ibc-alpha' into jack/ics-20
cwgoes Feb 3, 2020
f068bf8
merge ibc-alpha
fedekunze Feb 18, 2020
61b7eee
Merge branch 'ibc-alpha' of https://github.com/cosmos/cosmos-sdk into…
fedekunze Feb 18, 2020
7dfd6b9
Merge PR #5603: Remove acknowledgement interface in favour of []byte
cwgoes Feb 18, 2020
6f5ad5c
fixes and cleanup
fedekunze Feb 19, 2020
f9fcce8
ibc alpha changes
fedekunze Feb 19, 2020
f56fd31
spec compliance
fedekunze Feb 19, 2020
1068bb5
refactor relay prefixes and tests
fedekunze Feb 19, 2020
37436b1
Fix test compilation
jackzampolin Feb 19, 2020
dac12e8
Merge branch 'ibc-alpha' of https://github.com/cosmos/cosmos-sdk into…
fedekunze Feb 20, 2020
05b3e48
cleanup; add notes and additional test case
fedekunze Feb 20, 2020
4f9763e
Receive transfer test
fedekunze Feb 20, 2020
4db79ba
Apply suggestions from code review
cwgoes Feb 20, 2020
e8cca15
Fix autolinter application
cwgoes Feb 20, 2020
4d14d36
Add testcase with incorrect prefix
cwgoes Feb 20, 2020
b31d01b
golangcibot fixes
fedekunze Feb 20, 2020
06fa17c
timeout test
fedekunze Feb 20, 2020
74815b6
delete extra comment
fedekunze Feb 20, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion x/ibc/04-channel/keeper/handshake.go
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ func (k Keeper) ChanCloseInit(

channel.State = exported.CLOSED
k.SetChannel(ctx, portID, channelID, channel)

k.Logger(ctx).Info("channel close initialized: portID (%s), channelID (%s)", portID, channelID)
return nil
}

Expand Down
2 changes: 1 addition & 1 deletion x/ibc/04-channel/types/msgs.go
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,7 @@ func (msg MsgPacket) GetSigners() []sdk.AccAddress {

var _ sdk.Msg = MsgTimeout{}

// MsgTimeout receives timeouted packet
// MsgTimeout receives timed-out packet
type MsgTimeout struct {
Packet `json:"packet" yaml:"packet"`
NextSequenceRecv uint64 `json:"next_sequence_recv" yaml:"next_sequence_recv"`
Expand Down
1 change: 0 additions & 1 deletion x/ibc/20-transfer/alias.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,5 @@ type (
ConnectionKeeper = types.ConnectionKeeper
SupplyKeeper = types.SupplyKeeper
MsgTransfer = types.MsgTransfer
MsgRecvPacket = types.MsgRecvPacket
PacketDataTransfer = types.PacketDataTransfer
)
1 change: 0 additions & 1 deletion x/ibc/20-transfer/client/cli/cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ func GetTxCmd(cdc *codec.Codec) *cobra.Command {

ics20TransferTxCmd.AddCommand(flags.PostCommands(
GetTransferTxCmd(cdc),
// GetMsgRecvPacketCmd(cdc),
)...)

return ics20TransferTxCmd
Expand Down
7 changes: 0 additions & 7 deletions x/ibc/20-transfer/client/rest/swagger.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,4 @@ type (
Signatures []auth.StdSignature `json:"signatures" yaml:"signatures"`
Memo string `json:"memo" yaml:"memo"`
}

PostRecvPacket struct {
Msgs []types.MsgRecvPacket `json:"msg" yaml:"msg"`
Fee auth.StdFee `json:"fee" yaml:"fee"`
Signatures []auth.StdSignature `json:"signatures" yaml:"signatures"`
Memo string `json:"memo" yaml:"memo"`
}
)
49 changes: 31 additions & 18 deletions x/ibc/20-transfer/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
)

// NewHandler returns sdk.Handler for IBC token transfer module messages
// See NewHandler function in ADR15: https://github.com/cosmos/ics/tree/master/spec/ics-020-fungible-token-transfer#packet-relay
func NewHandler(k Keeper) sdk.Handler {
return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) {
switch msg := msg.(type) {
Expand All @@ -19,24 +20,26 @@ func NewHandler(k Keeper) sdk.Handler {
case PacketDataTransfer: // i.e fulfills the Data interface
return handlePacketDataTransfer(ctx, k, msg, data)
default:
return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized ics20 packet data type: %T", msg)
return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized ICS-20 transfer packet data type: %T", msg)
}
case channeltypes.MsgTimeout:
switch data := msg.Data.(type) {
case PacketDataTransfer:
return handleTimeoutDataTransfer(ctx, k, msg, data)
default:
return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized ics20 packet data type: %T", data)
return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized ICS-20 transfer packet data type: %T", data)
}
default:
return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized ics20 message type: %T", msg)
return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized ICS-20 transfer message type: %T", msg)
}
}
}

// See createOutgoingPacket in spec:https://github.com/cosmos/ics/tree/master/spec/ics-020-fungible-token-transfer#packet-relay
func handleMsgTransfer(ctx sdk.Context, k Keeper, msg MsgTransfer) (*sdk.Result, error) {
err := k.SendTransfer(ctx, msg.SourcePort, msg.SourceChannel, msg.Amount, msg.Sender, msg.Receiver, msg.Source)
if err != nil {
if err := k.SendTransfer(
ctx, msg.SourcePort, msg.SourceChannel, msg.Amount, msg.Sender, msg.Receiver, msg.Source,
); err != nil {
return nil, err
}

Expand All @@ -54,19 +57,27 @@ func handleMsgTransfer(ctx sdk.Context, k Keeper, msg MsgTransfer) (*sdk.Result,
}, nil
}

func handlePacketDataTransfer(ctx sdk.Context, k Keeper, msg channeltypes.MsgPacket, data types.PacketDataTransfer) (*sdk.Result, error) {
// See onRecvPacket in spec: https://github.com/cosmos/ics/tree/master/spec/ics-020-fungible-token-transfer#packet-relay
func handlePacketDataTransfer(
ctx sdk.Context, k Keeper, msg channeltypes.MsgPacket, data types.PacketDataTransfer,
) (*sdk.Result, error) {
packet := msg.Packet
err := k.ReceiveTransfer(ctx, packet.SourcePort, packet.SourceChannel, packet.DestinationPort, packet.DestinationChannel, data)
if err != nil {
panic(err)
// TODO: Source chain sent invalid packet, shutdown channel
if err := k.ReceiveTransfer(
ctx, packet.SourcePort, packet.SourceChannel, packet.DestinationPort, packet.DestinationChannel, data,
); err != nil {
// TODO: handle packet receipt that due to an error (specify)
// the receiving chain couldn't process the transfer

// source chain sent invalid packet, shutdown our channel end
if err := k.ChanCloseInit(ctx, packet.DestinationPort, packet.DestinationChannel); err != nil {
return nil, err
}
return nil, err
}

acknowledgement := types.AckDataTransfer{}
err = k.PacketExecuted(ctx, packet, acknowledgement)
if err != nil {
panic(err)
// TODO: This should not happen
if err := k.PacketExecuted(ctx, packet, acknowledgement); err != nil {
return nil, err
}

ctx.EventManager().EmitEvent(
Expand All @@ -83,13 +94,15 @@ func handlePacketDataTransfer(ctx sdk.Context, k Keeper, msg channeltypes.MsgPac
}, nil
}

// See onTimeoutPacket in spec: https://github.com/cosmos/ics/tree/master/spec/ics-020-fungible-token-transfer#packet-relay
func handleTimeoutDataTransfer(ctx sdk.Context, k Keeper, msg channeltypes.MsgTimeout, data types.PacketDataTransfer) (*sdk.Result, error) {
packet := msg.Packet
err := k.TimeoutTransfer(ctx, packet.SourcePort, packet.SourceChannel, packet.DestinationPort, packet.DestinationChannel, data)
if err != nil {
// This chain sent invalid packet
panic(err)
if err := k.TimeoutTransfer(
ctx, packet.SourcePort, packet.SourceChannel, packet.DestinationPort, packet.DestinationChannel, data,
); err != nil {
return nil, err
}

// packet timeout should not fail
return &sdk.Result{
Events: ctx.EventManager().Events(),
Expand Down
172 changes: 0 additions & 172 deletions x/ibc/20-transfer/keeper/callbacks.go

This file was deleted.

51 changes: 0 additions & 51 deletions x/ibc/20-transfer/keeper/callbacks_test.go

This file was deleted.

6 changes: 6 additions & 0 deletions x/ibc/20-transfer/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,3 +68,9 @@ func (k Keeper) GetTransferAccount(ctx sdk.Context) supplyexported.ModuleAccount
func (k Keeper) PacketExecuted(ctx sdk.Context, packet channelexported.PacketI, acknowledgement channelexported.PacketDataI) error {
return k.channelKeeper.PacketExecuted(ctx, packet, acknowledgement)
}

// ChanCloseInit defines a wrapper function for the channel Keeper's function
// in order to expose it to the ICS20 trasfer handler.
func (k Keeper) ChanCloseInit( ctx sdk.Context, portID, channelID string) error {
return k.channelKeeper.ChanCloseInit(ctx,portID, channelID)
}
Loading