Skip to content

Commit de520ed

Browse files
damiannolanmergify[bot]
authored andcommitted
chore: adding sdk.Msg impl for ics27 MsgRegisterAccount (#2081)
* adding new controller msg service, register account types, register interfaces and boilerplate * fixing typo * fixing protodoc and regenerate godocs * adding channel id to MsgRegisterAccountResponse * adding sdk.Msg impl for MsgRegisterAccount * formatting imports * adding additional tests with multiple versions, creating TestAccAddress const (cherry picked from commit 94d0840) # Conflicts: # modules/apps/27-interchain-accounts/controller/types/msgs.go # testing/values.go
1 parent d8d0a7e commit de520ed

File tree

3 files changed

+151
-0
lines changed

3 files changed

+151
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package types
2+
3+
import (
4+
"strings"
5+
6+
sdk "github.com/cosmos/cosmos-sdk/types"
7+
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
8+
9+
host "github.com/cosmos/ibc-go/v5/modules/core/24-host"
10+
)
11+
12+
var _ sdk.Msg = &MsgRegisterAccount{}
13+
14+
// NewMsgRegisterAccount creates a new instance of MsgRegisterAccount
15+
func NewMsgRegisterAccount(connectionID, owner, version string) *MsgRegisterAccount {
16+
return &MsgRegisterAccount{
17+
ConnectionId: connectionID,
18+
Owner: owner,
19+
Version: version,
20+
}
21+
}
22+
23+
// ValidateBasic implements sdk.Msg
24+
func (msg MsgRegisterAccount) ValidateBasic() error {
25+
if err := host.ConnectionIdentifierValidator(msg.ConnectionId); err != nil {
26+
return sdkerrors.Wrap(err, "invalid connection ID")
27+
}
28+
29+
if strings.TrimSpace(msg.Owner) == "" {
30+
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "owner address cannot be empty")
31+
}
32+
33+
if _, err := sdk.AccAddressFromBech32(msg.Owner); err != nil {
34+
return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "failed to parse owner address: %s", msg.Owner)
35+
}
36+
37+
return nil
38+
}
39+
40+
// GetSigners implements sdk.Msg
41+
func (msg MsgRegisterAccount) GetSigners() []sdk.AccAddress {
42+
accAddr, err := sdk.AccAddressFromBech32(msg.Owner)
43+
if err != nil {
44+
panic(err)
45+
}
46+
47+
return []sdk.AccAddress{accAddr}
48+
}
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package types_test
2+
3+
import (
4+
"testing"
5+
6+
sdk "github.com/cosmos/cosmos-sdk/types"
7+
"github.com/stretchr/testify/require"
8+
9+
"github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/controller/types"
10+
icatypes "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/types"
11+
feetypes "github.com/cosmos/ibc-go/v5/modules/apps/29-fee/types"
12+
ibctesting "github.com/cosmos/ibc-go/v5/testing"
13+
)
14+
15+
func TestMsgRegisterAccountValidateBasic(t *testing.T) {
16+
var msg *types.MsgRegisterAccount
17+
18+
testCases := []struct {
19+
name string
20+
malleate func()
21+
expPass bool
22+
}{
23+
{
24+
"success",
25+
func() {},
26+
true,
27+
},
28+
{
29+
"success: with empty channel version",
30+
func() {
31+
msg.Version = ""
32+
},
33+
true,
34+
},
35+
{
36+
"success: with fee enabled channel version",
37+
func() {
38+
feeMetadata := feetypes.Metadata{
39+
FeeVersion: feetypes.Version,
40+
AppVersion: icatypes.NewDefaultMetadataString(ibctesting.FirstConnectionID, ibctesting.FirstConnectionID),
41+
}
42+
43+
bz := feetypes.ModuleCdc.MustMarshalJSON(&feeMetadata)
44+
msg.Version = string(bz)
45+
},
46+
true,
47+
},
48+
{
49+
"connection id is invalid",
50+
func() {
51+
msg.ConnectionId = ""
52+
},
53+
false,
54+
},
55+
{
56+
"owner address is empty",
57+
func() {
58+
msg.Owner = ""
59+
},
60+
false,
61+
},
62+
{
63+
"owner address is invalid",
64+
func() {
65+
msg.Owner = "invalid_address"
66+
},
67+
false,
68+
},
69+
}
70+
71+
for i, tc := range testCases {
72+
73+
msg = types.NewMsgRegisterAccount(
74+
ibctesting.FirstConnectionID,
75+
ibctesting.TestAccAddress,
76+
icatypes.NewDefaultMetadataString(ibctesting.FirstConnectionID, ibctesting.FirstConnectionID),
77+
)
78+
79+
tc.malleate()
80+
81+
err := msg.ValidateBasic()
82+
if tc.expPass {
83+
require.NoError(t, err, "valid test case %d failed: %s", i, tc.name)
84+
} else {
85+
require.Error(t, err, "invalid test case %d passed: %s", i, tc.name)
86+
}
87+
}
88+
}
89+
90+
func TestMsgRegisterAccountGetSigners(t *testing.T) {
91+
expSigner, err := sdk.AccAddressFromBech32(ibctesting.TestAccAddress)
92+
require.NoError(t, err)
93+
94+
msg := types.NewMsgRegisterAccount(ibctesting.FirstConnectionID, ibctesting.TestAccAddress, "")
95+
require.Equal(t, []sdk.AccAddress{expSigner}, msg.GetSigners())
96+
}

testing/values.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,15 @@ var (
4747
DefaultOpenInitVersion *connectiontypes.Version
4848

4949
// DefaultTrustLevel sets params variables used to create a TM client
50+
<<<<<<< HEAD
5051
DefaultTrustLevel = ibctmtypes.DefaultTrustLevel
5152
TestCoin = sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100))
53+
=======
54+
DefaultTrustLevel = ibctm.DefaultTrustLevel
55+
56+
TestAccAddress = "cosmos17dtl0mjt3t77kpuhg2edqzjpszulwhgzuj9ljs"
57+
TestCoin = sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100))
58+
>>>>>>> 94d0840 (chore: adding `sdk.Msg` impl for ics27 `MsgRegisterAccount` (#2081))
5259

5360
UpgradePath = []string{"upgrade", "upgradedIBCState"}
5461

0 commit comments

Comments
 (0)