From 7c747c3f850a71e8d635804cfaab484ce228d9d6 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Mon, 14 Mar 2022 12:57:37 +0100 Subject: [PATCH 01/10] wip: handling ack for tx message set to the host --- x/inter-tx/ibc_module.go | 43 ++++++++++++++++++++++++++++++++++++- x/inter-tx/keeper/keeper.go | 10 +++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/x/inter-tx/ibc_module.go b/x/inter-tx/ibc_module.go index e39e2d2b..53ce1ca0 100644 --- a/x/inter-tx/ibc_module.go +++ b/x/inter-tx/ibc_module.go @@ -1,7 +1,11 @@ package inter_tx import ( + proto "github.com/gogo/protobuf/proto" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" "github.com/cosmos/interchain-accounts/x/inter-tx/keeper" @@ -108,7 +112,30 @@ func (im IBCModule) OnAcknowledgementPacket( acknowledgement []byte, relayer sdk.AccAddress, ) error { - return nil + var ack channeltypes.Acknowledgement + if err := channeltypes.SubModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { + return sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-27 packet acknowledgement: %v", err) + } + + txMsgData := &sdk.TxMsgData{} + if err := proto.Unmarshal(ack.Acknowledgement(), txMsgData); err != nil { + return err + } + + switch len(txMsgData.Data) { + case 0: + // TODO + return nil + default: + for _, msgData := range txMsgData.GetData() { + if response, err := handleMsgData(ctx, msgData); err != nil { + return err + } else { + im.keeper.Logger(ctx).Info("message response in ICS-27 packet response", "response", response) + } + } + return nil + } } // OnTimeoutPacket implements the IBCModule interface. @@ -131,3 +158,17 @@ func (im IBCModule) NegotiateAppVersion( ) (string, error) { return "", nil } + +func handleMsgData(ctx sdk.Context, msgData *sdk.MsgData) (string, error) { + switch msgData.GetMsgType() { + case banktypes.TypeMsgSend: + var msgResponse banktypes.MsgSendResponse + if err := banktypes.ModuleCdc.UnmarshalJSON(msgData.GetData(), &msgResponse); err != nil { + return "", sdkerrors.Wrapf(sdkerrors.ErrJSONUnmarshal, "cannot unmarshal send response message: %s", err.Error()) + } + + return msgResponse.String(), nil + default: + return "", nil + } +} diff --git a/x/inter-tx/keeper/keeper.go b/x/inter-tx/keeper/keeper.go index f789a577..70031538 100644 --- a/x/inter-tx/keeper/keeper.go +++ b/x/inter-tx/keeper/keeper.go @@ -1,12 +1,17 @@ package keeper import ( + "fmt" + + "github.com/tendermint/tendermint/libs/log" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" icacontrollerkeeper "github.com/cosmos/ibc-go/v3/modules/apps/27-interchain-accounts/controller/keeper" + host "github.com/cosmos/ibc-go/v3/modules/core/24-host" + "github.com/cosmos/interchain-accounts/x/inter-tx/types" ) type Keeper struct { @@ -28,6 +33,11 @@ func NewKeeper(cdc codec.Codec, storeKey sdk.StoreKey, iaKeeper icacontrollerkee } } +// Logger returns the application logger, scoped to the associated module +func (k Keeper) Logger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("module", fmt.Sprintf("x/%s-%s", host.ModuleName, types.ModuleName)) +} + // ClaimCapability claims the channel capability passed via the OnOpenChanInit callback func (k *Keeper) ClaimCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) error { return k.scopedKeeper.ClaimCapability(ctx, cap, name) From bf45725cbb981bd9a44d873f8058f66dc6f652ed Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Mon, 14 Mar 2022 16:58:33 +0100 Subject: [PATCH 02/10] fix 1 --- x/inter-tx/ibc_module.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/inter-tx/ibc_module.go b/x/inter-tx/ibc_module.go index 53ce1ca0..2f004fdd 100644 --- a/x/inter-tx/ibc_module.go +++ b/x/inter-tx/ibc_module.go @@ -118,7 +118,7 @@ func (im IBCModule) OnAcknowledgementPacket( } txMsgData := &sdk.TxMsgData{} - if err := proto.Unmarshal(ack.Acknowledgement(), txMsgData); err != nil { + if err := proto.Unmarshal(ack.GetResult(), txMsgData); err != nil { return err } From b1def1eb8dd3fc1fe8be629b82a91dd135846598 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Mon, 14 Mar 2022 22:12:41 +0100 Subject: [PATCH 03/10] handling acknowledgement fixes --- x/inter-tx/ibc_module.go | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/x/inter-tx/ibc_module.go b/x/inter-tx/ibc_module.go index 2f004fdd..133d0832 100644 --- a/x/inter-tx/ibc_module.go +++ b/x/inter-tx/ibc_module.go @@ -114,20 +114,20 @@ func (im IBCModule) OnAcknowledgementPacket( ) error { var ack channeltypes.Acknowledgement if err := channeltypes.SubModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { + ctx.Logger().Info("point 2") return sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-27 packet acknowledgement: %v", err) } txMsgData := &sdk.TxMsgData{} if err := proto.Unmarshal(ack.GetResult(), txMsgData); err != nil { - return err + return sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-27 tx message data: %v", err) } - switch len(txMsgData.Data) { case 0: - // TODO + // TODO: handle for sdk 0.44.x return nil default: - for _, msgData := range txMsgData.GetData() { + for _, msgData := range txMsgData.Data { if response, err := handleMsgData(ctx, msgData); err != nil { return err } else { @@ -160,14 +160,18 @@ func (im IBCModule) NegotiateAppVersion( } func handleMsgData(ctx sdk.Context, msgData *sdk.MsgData) (string, error) { - switch msgData.GetMsgType() { - case banktypes.TypeMsgSend: - var msgResponse banktypes.MsgSendResponse - if err := banktypes.ModuleCdc.UnmarshalJSON(msgData.GetData(), &msgResponse); err != nil { + sdkMsgs := []sdk.Msg{&banktypes.MsgSend{}} + + switch msgData.MsgType { + case sdk.MsgTypeURL(sdkMsgs[0]): + msgResponse := &banktypes.MsgSendResponse{} + if err := proto.Unmarshal(msgData.Data, msgResponse); err != nil { return "", sdkerrors.Wrapf(sdkerrors.ErrJSONUnmarshal, "cannot unmarshal send response message: %s", err.Error()) } - return msgResponse.String(), nil + + // TODO: handle other messages + default: return "", nil } From d7356f0d337182db660c6e16df4de8b460b87686 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Mon, 14 Mar 2022 22:36:28 +0100 Subject: [PATCH 04/10] remove debug logging --- x/inter-tx/ibc_module.go | 1 - 1 file changed, 1 deletion(-) diff --git a/x/inter-tx/ibc_module.go b/x/inter-tx/ibc_module.go index 133d0832..bd3926d3 100644 --- a/x/inter-tx/ibc_module.go +++ b/x/inter-tx/ibc_module.go @@ -114,7 +114,6 @@ func (im IBCModule) OnAcknowledgementPacket( ) error { var ack channeltypes.Acknowledgement if err := channeltypes.SubModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { - ctx.Logger().Info("point 2") return sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-27 packet acknowledgement: %v", err) } From 80d8df4d41d69ca4ae2a501a3959673b1533c5f4 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Tue, 15 Mar 2022 12:40:54 +0100 Subject: [PATCH 05/10] fix typo --- x/inter-tx/ibc_module.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/inter-tx/ibc_module.go b/x/inter-tx/ibc_module.go index d20c3e11..0676d0c1 100644 --- a/x/inter-tx/ibc_module.go +++ b/x/inter-tx/ibc_module.go @@ -124,7 +124,7 @@ func (im IBCModule) OnAcknowledgementPacket( } switch len(txMsgData.Data) { case 0: - // TODO: handle for sdk 0.44.x + // TODO: handle for sdk 0.46.x return nil default: for _, msgData := range txMsgData.Data { From bfd7f3b2a2fcea9ff7651382e40131bd3eaf5ad2 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Tue, 15 Mar 2022 12:57:32 +0100 Subject: [PATCH 06/10] review comment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> --- x/inter-tx/ibc_module.go | 1 + 1 file changed, 1 insertion(+) diff --git a/x/inter-tx/ibc_module.go b/x/inter-tx/ibc_module.go index 0676d0c1..785c1a12 100644 --- a/x/inter-tx/ibc_module.go +++ b/x/inter-tx/ibc_module.go @@ -122,6 +122,7 @@ func (im IBCModule) OnAcknowledgementPacket( if err := proto.Unmarshal(ack.GetResult(), txMsgData); err != nil { return sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-27 tx message data: %v", err) } + switch len(txMsgData.Data) { case 0: // TODO: handle for sdk 0.46.x From de24198d45f64a2f564956e8dde4215cbc021041 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Tue, 15 Mar 2022 12:57:48 +0100 Subject: [PATCH 07/10] review comment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> --- x/inter-tx/ibc_module.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/x/inter-tx/ibc_module.go b/x/inter-tx/ibc_module.go index 785c1a12..65993f51 100644 --- a/x/inter-tx/ibc_module.go +++ b/x/inter-tx/ibc_module.go @@ -131,9 +131,10 @@ func (im IBCModule) OnAcknowledgementPacket( for _, msgData := range txMsgData.Data { if response, err := handleMsgData(ctx, msgData); err != nil { return err - } else { - im.keeper.Logger(ctx).Info("message response in ICS-27 packet response", "response", response) } + + im.keeper.Logger(ctx).Info("message response in ICS-27 packet response", "response", response) + } return nil } From f3cd70dfa62aa9ea36a844b4f690ac196aeb87d7 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Tue, 15 Mar 2022 12:57:58 +0100 Subject: [PATCH 08/10] review comment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> --- x/inter-tx/ibc_module.go | 1 + 1 file changed, 1 insertion(+) diff --git a/x/inter-tx/ibc_module.go b/x/inter-tx/ibc_module.go index 65993f51..f869dbc0 100644 --- a/x/inter-tx/ibc_module.go +++ b/x/inter-tx/ibc_module.go @@ -170,6 +170,7 @@ func handleMsgData(ctx sdk.Context, msgData *sdk.MsgData) (string, error) { if err := proto.Unmarshal(msgData.Data, msgResponse); err != nil { return "", sdkerrors.Wrapf(sdkerrors.ErrJSONUnmarshal, "cannot unmarshal send response message: %s", err.Error()) } + return msgResponse.String(), nil // TODO: handle other messages From 0d8fca51c9b57e86d7eda54549a1eb08555b77a5 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Tue, 15 Mar 2022 22:15:32 +0100 Subject: [PATCH 09/10] improvement --- x/inter-tx/ibc_module.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x/inter-tx/ibc_module.go b/x/inter-tx/ibc_module.go index 0676d0c1..c46c78d2 100644 --- a/x/inter-tx/ibc_module.go +++ b/x/inter-tx/ibc_module.go @@ -160,10 +160,10 @@ func (im IBCModule) NegotiateAppVersion( } func handleMsgData(ctx sdk.Context, msgData *sdk.MsgData) (string, error) { - sdkMsgs := []sdk.Msg{&banktypes.MsgSend{}} + //sdkMsgs := []sdk.Msg{&banktypes.MsgSend{}} switch msgData.MsgType { - case sdk.MsgTypeURL(sdkMsgs[0]): + case sdk.MsgTypeURL(&banktypes.MsgSend{}): msgResponse := &banktypes.MsgSendResponse{} if err := proto.Unmarshal(msgData.Data, msgResponse); err != nil { return "", sdkerrors.Wrapf(sdkerrors.ErrJSONUnmarshal, "cannot unmarshal send response message: %s", err.Error()) From eb3be30d0dca0d9903ce2f4c4963ef9e0458d0c8 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Tue, 15 Mar 2022 22:19:57 +0100 Subject: [PATCH 10/10] fixes --- x/inter-tx/ibc_module.go | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/x/inter-tx/ibc_module.go b/x/inter-tx/ibc_module.go index f117cb25..d67604e3 100644 --- a/x/inter-tx/ibc_module.go +++ b/x/inter-tx/ibc_module.go @@ -122,19 +122,19 @@ func (im IBCModule) OnAcknowledgementPacket( if err := proto.Unmarshal(ack.GetResult(), txMsgData); err != nil { return sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-27 tx message data: %v", err) } - + switch len(txMsgData.Data) { case 0: // TODO: handle for sdk 0.46.x return nil default: for _, msgData := range txMsgData.Data { - if response, err := handleMsgData(ctx, msgData); err != nil { + response, err := handleMsgData(ctx, msgData) + if err != nil { return err } - + im.keeper.Logger(ctx).Info("message response in ICS-27 packet response", "response", response) - } return nil } @@ -162,15 +162,13 @@ func (im IBCModule) NegotiateAppVersion( } func handleMsgData(ctx sdk.Context, msgData *sdk.MsgData) (string, error) { - //sdkMsgs := []sdk.Msg{&banktypes.MsgSend{}} - switch msgData.MsgType { case sdk.MsgTypeURL(&banktypes.MsgSend{}): msgResponse := &banktypes.MsgSendResponse{} if err := proto.Unmarshal(msgData.Data, msgResponse); err != nil { return "", sdkerrors.Wrapf(sdkerrors.ErrJSONUnmarshal, "cannot unmarshal send response message: %s", err.Error()) } - + return msgResponse.String(), nil // TODO: handle other messages