Skip to content

Commit 064aa42

Browse files
authored
Rename DeserializeTx, enforce []sdk.Msg usage in SerializeCosmosTx (#457)
* rename DeserializeTx to DeserializeCosmosTx, simply serialization logic * improve godoc wording
1 parent e24294c commit 064aa42

File tree

3 files changed

+29
-19
lines changed

3 files changed

+29
-19
lines changed

modules/apps/27-interchain-accounts/keeper/keeper.go

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,7 @@ func NewKeeper(
5858
}
5959

6060
// SerializeCosmosTx marshals data to bytes using the provided codec
61-
func (k Keeper) SerializeCosmosTx(cdc codec.BinaryCodec, data interface{}) ([]byte, error) {
62-
msgs := make([]sdk.Msg, 0)
63-
switch data := data.(type) {
64-
case sdk.Msg:
65-
msgs = append(msgs, data)
66-
case []sdk.Msg:
67-
msgs = append(msgs, data...)
68-
default:
69-
return nil, types.ErrInvalidOutgoingData
70-
}
71-
61+
func (k Keeper) SerializeCosmosTx(cdc codec.BinaryCodec, msgs []sdk.Msg) ([]byte, error) {
7262
msgAnys := make([]*codectypes.Any, len(msgs))
7363

7464
for i, msg := range msgs {

modules/apps/27-interchain-accounts/keeper/relay.go

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,20 @@ func (k Keeper) createOutgoingPacket(
4646
return []byte{}, types.ErrInvalidOutgoingData
4747
}
4848

49-
txBytes, err := k.SerializeCosmosTx(k.cdc, data)
49+
var (
50+
txBytes []byte
51+
err error
52+
)
53+
54+
switch data := data.(type) {
55+
case []sdk.Msg:
56+
txBytes, err = k.SerializeCosmosTx(k.cdc, data)
57+
default:
58+
return nil, sdkerrors.Wrapf(types.ErrInvalidOutgoingData, "message type %T is not supported", data)
59+
}
60+
5061
if err != nil {
51-
return []byte{}, sdkerrors.Wrap(err, "invalid packet data or codec")
62+
return nil, sdkerrors.Wrap(err, "serialization of transaction data failed")
5263
}
5364

5465
channelCap, ok := k.scopedKeeper.GetCapability(ctx, host.ChannelCapabilityPath(sourcePort, sourceChannel))
@@ -86,7 +97,9 @@ func (k Keeper) createOutgoingPacket(
8697
return k.ComputeVirtualTxHash(packetData.Data, packet.Sequence), k.channelKeeper.SendPacket(ctx, channelCap, packet)
8798
}
8899

89-
func (k Keeper) DeserializeTx(_ sdk.Context, txBytes []byte) ([]sdk.Msg, error) {
100+
// DeserializeCosmosTx unmarshals and unpacks a slice of transaction bytes
101+
// into a slice of sdk.Msg's.
102+
func (k Keeper) DeserializeCosmosTx(_ sdk.Context, txBytes []byte) ([]sdk.Msg, error) {
90103
var txBody types.IBCTxBody
91104

92105
if err := k.cdc.Unmarshal(txBytes, &txBody); err != nil {
@@ -191,7 +204,7 @@ func (k Keeper) OnRecvPacket(ctx sdk.Context, packet channeltypes.Packet) error
191204

192205
switch data.Type {
193206
case types.EXECUTE_TX:
194-
msgs, err := k.DeserializeTx(ctx, data.Data)
207+
msgs, err := k.DeserializeCosmosTx(ctx, data.Data)
195208
if err != nil {
196209
return err
197210
}

modules/apps/27-interchain-accounts/keeper/relay_test.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ func (suite *KeeperTestSuite) TestTrySendTx() {
2929
"success", func() {
3030
amount, _ := sdk.ParseCoinsNormalized("100stake")
3131
interchainAccountAddr, _ := suite.chainB.GetSimApp().ICAKeeper.GetInterchainAccountAddress(suite.chainB.GetContext(), path.EndpointA.ChannelConfig.PortID)
32-
msg = &banktypes.MsgSend{FromAddress: interchainAccountAddr, ToAddress: suite.chainB.SenderAccount.GetAddress().String(), Amount: amount}
32+
msg = []sdk.Msg{&banktypes.MsgSend{FromAddress: interchainAccountAddr, ToAddress: suite.chainB.SenderAccount.GetAddress().String(), Amount: amount}}
3333
}, true,
3434
},
3535
{
36-
"success with []sdk.Message", func() {
36+
"success with multiple sdk.Msg", func() {
3737
amount, _ := sdk.ParseCoinsNormalized("100stake")
3838
interchainAccountAddr, _ := suite.chainB.GetSimApp().ICAKeeper.GetInterchainAccountAddress(suite.chainB.GetContext(), path.EndpointA.ChannelConfig.PortID)
3939
msg1 := &banktypes.MsgSend{FromAddress: interchainAccountAddr, ToAddress: suite.chainB.SenderAccount.GetAddress().String(), Amount: amount}
@@ -46,6 +46,13 @@ func (suite *KeeperTestSuite) TestTrySendTx() {
4646
msg = []byte{}
4747
}, false,
4848
},
49+
{
50+
"incorrect outgoing data - []sdk.Msg is not used", func() {
51+
amount, _ := sdk.ParseCoinsNormalized("100stake")
52+
interchainAccountAddr, _ := suite.chainB.GetSimApp().ICAKeeper.GetInterchainAccountAddress(suite.chainB.GetContext(), path.EndpointA.ChannelConfig.PortID)
53+
msg = &banktypes.MsgSend{FromAddress: interchainAccountAddr, ToAddress: suite.chainB.SenderAccount.GetAddress().String(), Amount: amount}
54+
}, false,
55+
},
4956
{
5057
"active channel not found", func() {
5158
amount, _ := sdk.ParseCoinsNormalized("100stake")
@@ -122,7 +129,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
122129
interchainAccountAddr, _ := suite.chainB.GetSimApp().ICAKeeper.GetInterchainAccountAddress(suite.chainB.GetContext(), path.EndpointA.ChannelConfig.PortID)
123130
msg = &banktypes.MsgSend{FromAddress: interchainAccountAddr, ToAddress: suite.chainB.SenderAccount.GetAddress().String(), Amount: amount}
124131
// build packet data
125-
txBytes, err := suite.chainA.GetSimApp().ICAKeeper.SerializeCosmosTx(suite.chainA.Codec, msg)
132+
txBytes, err := suite.chainA.GetSimApp().ICAKeeper.SerializeCosmosTx(suite.chainA.Codec, []sdk.Msg{msg})
126133
suite.Require().NoError(err)
127134

128135
data := types.InterchainAccountPacketData{Type: types.EXECUTE_TX,
@@ -165,7 +172,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
165172
// Incorrect FromAddress
166173
msg = &banktypes.MsgSend{FromAddress: suite.chainB.SenderAccount.GetAddress().String(), ToAddress: suite.chainB.SenderAccount.GetAddress().String(), Amount: amount}
167174
// build packet data
168-
txBytes, err := suite.chainA.GetSimApp().ICAKeeper.SerializeCosmosTx(suite.chainA.Codec, msg)
175+
txBytes, err := suite.chainA.GetSimApp().ICAKeeper.SerializeCosmosTx(suite.chainA.Codec, []sdk.Msg{msg})
169176
suite.Require().NoError(err)
170177
data := types.InterchainAccountPacketData{Type: types.EXECUTE_TX,
171178
Data: txBytes}

0 commit comments

Comments
 (0)