diff --git a/x/group/CHANGELOG.md b/x/group/CHANGELOG.md index 0f6182d12b..1f682c85b9 100644 --- a/x/group/CHANGELOG.md +++ b/x/group/CHANGELOG.md @@ -32,6 +32,11 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### API Breaking Changes +* [#19916](https://github.com/cosmos/cosmos-sdk/pull/19916) Removes the use of Address String methods: + * `NewMsgCreateGroupPolicy` now takes a string as argument instead of an `AccAddress`. + * `NewMsgUpdateGroupPolicyDecisionPolicy` now takes strings as argument instead of `AccAddress`. + * `NewGroupPolicyInfo` address and admin arguments are now strings instead of `AccAddress`. + * `MigrateGenState` now takes an address codec as argument. * [#19638](https://github.com/cosmos/cosmos-sdk/pull/19638) Migrate module to use `appmodule.Environment` router service so no `baseapp.MessageRouter` is required is `NewKeeper` anymore. * [#19489](https://github.com/cosmos/cosmos-sdk/pull/19489) `appmodule.Environment` is received on the Keeper to get access to different application services. * [#19410](https://github.com/cosmos/cosmos-sdk/pull/19410) Migrate to Store Service. diff --git a/x/group/client/cli/tx.go b/x/group/client/cli/tx.go index 09b62061aa..52c998ebed 100644 --- a/x/group/client/cli/tx.go +++ b/x/group/client/cli/tx.go @@ -98,8 +98,13 @@ Where members.json contains: } } + admin, err := clientCtx.AddressCodec.BytesToString(clientCtx.GetFromAddress()) + if err != nil { + return err + } + msg := &group.MsgCreateGroup{ - Admin: clientCtx.GetFromAddress().String(), + Admin: admin, Members: members, Metadata: args[1], } @@ -174,8 +179,13 @@ Set a member's weight to "0" to delete it. return errZeroGroupID } + admin, err := clientCtx.AddressCodec.BytesToString(clientCtx.GetFromAddress()) + if err != nil { + return err + } + msg := &group.MsgUpdateGroupMembers{ - Admin: clientCtx.GetFromAddress().String(), + Admin: admin, MemberUpdates: members, GroupId: groupID, } @@ -268,8 +278,13 @@ and policy.json contains: return err } + admin, err := clientCtx.AddressCodec.BytesToString(clientCtx.GetFromAddress()) + if err != nil { + return err + } + msg, err := group.NewMsgCreateGroupWithPolicy( - clientCtx.GetFromAddress().String(), + admin, members, args[1], args[2], @@ -350,8 +365,13 @@ Here, we can use percentage decision policy when needed, where 0 < percentage <= return err } + admin, err := clientCtx.AddressCodec.BytesToString(clientCtx.GetFromAddress()) + if err != nil { + return err + } + msg, err := group.NewMsgCreateGroupPolicy( - clientCtx.GetFromAddress(), + admin, groupID, args[2], policy, @@ -398,9 +418,18 @@ func MsgUpdateGroupPolicyDecisionPolicyCmd() *cobra.Command { return err } + adminAddr, err := clientCtx.AddressCodec.BytesToString(clientCtx.GetFromAddress()) + if err != nil { + return err + } + accAddr, err := clientCtx.AddressCodec.BytesToString(accountAddress) + if err != nil { + return err + } + msg, err := group.NewMsgUpdateGroupPolicyDecisionPolicy( - clientCtx.GetFromAddress(), - accountAddress, + adminAddr, + accAddr, policy, ) if err != nil { diff --git a/x/group/client/cli/tx_test.go b/x/group/client/cli/tx_test.go index dbc768f2d4..8f68ad6790 100644 --- a/x/group/client/cli/tx_test.go +++ b/x/group/client/cli/tx_test.go @@ -72,6 +72,8 @@ func (s *CLITestSuite) SetupSuite() { accounts := testutil.CreateKeyringAccounts(s.T(), s.kr, 1) val := accounts[0] + valAddr, err := s.baseCtx.AddressCodec.BytesToString(val.Address) + s.Require().NoError(err) ctxGen := func() client.Context { bz, _ := s.encCfg.Codec.Marshal(&sdk.TxResponse{}) @@ -94,9 +96,14 @@ func (s *CLITestSuite) SetupSuite() { from := val.Address coins := sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(2000))) + fromAddr, err := s.baseCtx.AddressCodec.BytesToString(from) + s.Require().NoError(err) + toAddr, err := s.baseCtx.AddressCodec.BytesToString(account) + s.Require().NoError(err) + msgSend := &banktypes.MsgSend{ - FromAddress: from.String(), - ToAddress: account.String(), + FromAddress: fromAddr, + ToAddress: toAddr, Amount: coins, } @@ -113,12 +120,12 @@ func (s *CLITestSuite) SetupSuite() { "metadata": "%s" } ] - }`, val.Address.String(), validMetadata) + }`, valAddr, validMetadata) validMembersFile := testutil.WriteToNewTempFile(s.T(), validMembers) out, err := clitestutil.ExecTestCLICmd(s.clientCtx, groupcli.MsgCreateGroupCmd(), append( []string{ - val.Address.String(), + valAddr, validMetadata, validMembersFile.Name(), }, @@ -131,11 +138,13 @@ func (s *CLITestSuite) SetupSuite() { s.Require().NoError(s.clientCtx.Codec.UnmarshalJSON(out.Bytes(), &txResp), out.String()) s.Require().Equal(uint32(0), txResp.Code, out.String()) - s.group = &group.GroupInfo{Id: 1, Admin: val.Address.String(), Metadata: validMetadata, TotalWeight: "3", Version: 1} + s.group = &group.GroupInfo{Id: 1, Admin: valAddr, Metadata: validMetadata, TotalWeight: "3", Version: 1} } func (s *CLITestSuite) TestTxCreateGroup() { accounts := testutil.CreateKeyringAccounts(s.T(), s.kr, 1) + account0Addr, err := s.baseCtx.AddressCodec.BytesToString(accounts[0].Address) + s.Require().NoError(err) cmd := groupcli.MsgCreateGroupCmd() cmd.SetOutput(io.Discard) @@ -144,13 +153,13 @@ func (s *CLITestSuite) TestTxCreateGroup() { "address": "%s", "weight": "1", "metadata": "%s" - }]}`, accounts[0].Address.String(), validMetadata) + }]}`, account0Addr, validMetadata) validMembersFile := testutil.WriteToNewTempFile(s.T(), validMembers) invalidMembersWeight := fmt.Sprintf(`{"members": [{ "address": "%s", "weight": "0" - }]}`, accounts[0].Address.String()) + }]}`, account0Addr) invalidMembersWeightFile := testutil.WriteToNewTempFile(s.T(), invalidMembersWeight) testCases := []struct { @@ -163,34 +172,34 @@ func (s *CLITestSuite) TestTxCreateGroup() { name: "correct data", args: append( []string{ - accounts[0].Address.String(), + account0Addr, "", validMembersFile.Name(), }, s.commonFlags..., ), - expCmdOutput: fmt.Sprintf("%s %s %s", accounts[0].Address.String(), "", validMembersFile.Name()), + expCmdOutput: fmt.Sprintf("%s %s %s", account0Addr, "", validMembersFile.Name()), expectErrMsg: "", }, { "with amino-json", append( []string{ - accounts[0].Address.String(), + account0Addr, "", validMembersFile.Name(), fmt.Sprintf("--%s=%s", flags.FlagSignMode, flags.SignModeLegacyAminoJSON), }, s.commonFlags..., ), - fmt.Sprintf("%s %s %s", accounts[0].Address.String(), "", validMembersFile.Name()), + fmt.Sprintf("%s %s %s", account0Addr, "", validMembersFile.Name()), "", }, { "invalid members weight", append( []string{ - accounts[0].Address.String(), + account0Addr, "null", invalidMembersWeightFile.Name(), }, @@ -203,7 +212,7 @@ func (s *CLITestSuite) TestTxCreateGroup() { "no member provided", append( []string{ - accounts[0].Address.String(), + account0Addr, "null", "doesnotexist.json", }, @@ -244,6 +253,9 @@ func (s *CLITestSuite) TestTxUpdateGroupMembers() { accounts := testutil.CreateKeyringAccounts(s.T(), s.kr, 3) groupPolicyAddress := accounts[2] + account0Addr, err := s.baseCtx.AddressCodec.BytesToString(accounts[0].Address) + s.Require().NoError(err) + cmd := groupcli.MsgUpdateGroupMembersCmd() cmd.SetOutput(io.Discard) @@ -276,53 +288,53 @@ func (s *CLITestSuite) TestTxUpdateGroupMembers() { "correct data", append( []string{ - accounts[0].Address.String(), + account0Addr, groupID, validUpdatedMembersFileName, }, s.commonFlags..., ), - fmt.Sprintf("%s %s %s", accounts[0].Address.String(), groupID, validUpdatedMembersFileName), + fmt.Sprintf("%s %s %s", account0Addr, groupID, validUpdatedMembersFileName), "", }, { "with amino-json", append( []string{ - accounts[0].Address.String(), + account0Addr, groupID, validUpdatedMembersFileName, fmt.Sprintf("--%s=%s", flags.FlagSignMode, flags.SignModeLegacyAminoJSON), }, s.commonFlags..., ), - fmt.Sprintf("%s %s %s --%s=%s", accounts[0].Address.String(), groupID, validUpdatedMembersFileName, flags.FlagSignMode, flags.SignModeLegacyAminoJSON), + fmt.Sprintf("%s %s %s --%s=%s", account0Addr, groupID, validUpdatedMembersFileName, flags.FlagSignMode, flags.SignModeLegacyAminoJSON), "", }, { "group id invalid", append( []string{ - accounts[0].Address.String(), + account0Addr, "0", validUpdatedMembersFileName, }, s.commonFlags..., ), - fmt.Sprintf("%s %s %s", accounts[0].Address.String(), "0", validUpdatedMembersFileName), + fmt.Sprintf("%s %s %s", account0Addr, "0", validUpdatedMembersFileName), "group id cannot be 0", }, { "group member weight invalid", append( []string{ - accounts[0].Address.String(), + account0Addr, groupID, invalidMembersMetadataFileName, }, s.commonFlags..., ), - fmt.Sprintf("%s %s %s", accounts[0].Address.String(), groupID, invalidMembersMetadataFileName), + fmt.Sprintf("%s %s %s", account0Addr, groupID, invalidMembersMetadataFileName), "invalid weight -1", }, } @@ -358,6 +370,9 @@ func (s *CLITestSuite) TestTxUpdateGroupMembers() { func (s *CLITestSuite) TestTxCreateGroupWithPolicy() { accounts := testutil.CreateKeyringAccounts(s.T(), s.kr, 1) + account0Addr, err := s.baseCtx.AddressCodec.BytesToString(accounts[0].Address) + s.Require().NoError(err) + cmd := groupcli.MsgCreateGroupWithPolicyCmd() cmd.SetOutput(io.Discard) @@ -365,13 +380,13 @@ func (s *CLITestSuite) TestTxCreateGroupWithPolicy() { "address": "%s", "weight": "1", "metadata": "%s" - }]}`, accounts[0].Address.String(), validMetadata) + }]}`, account0Addr, validMetadata) validMembersFile := testutil.WriteToNewTempFile(s.T(), validMembers) invalidMembersWeight := fmt.Sprintf(`{"members": [{ "address": "%s", "weight": "0" - }]}`, accounts[0].Address.String()) + }]}`, account0Addr) invalidMembersWeightFile := testutil.WriteToNewTempFile(s.T(), invalidMembersWeight) thresholdDecisionPolicyFile := testutil.WriteToNewTempFile(s.T(), `{"@type": "/cosmos.group.v1.ThresholdDecisionPolicy","threshold": "1","windows": {"voting_period":"1s"}}`) @@ -386,7 +401,7 @@ func (s *CLITestSuite) TestTxCreateGroupWithPolicy() { "correct data", append( []string{ - accounts[0].Address.String(), + account0Addr, validMetadata, validMetadata, validMembersFile.Name(), @@ -396,13 +411,13 @@ func (s *CLITestSuite) TestTxCreateGroupWithPolicy() { s.commonFlags..., ), "", - fmt.Sprintf("%s %s %s %s %s --%s=%v", accounts[0].Address.String(), validMetadata, validMetadata, validMembersFile.Name(), thresholdDecisionPolicyFile.Name(), groupcli.FlagGroupPolicyAsAdmin, false), + fmt.Sprintf("%s %s %s %s %s --%s=%v", account0Addr, validMetadata, validMetadata, validMembersFile.Name(), thresholdDecisionPolicyFile.Name(), groupcli.FlagGroupPolicyAsAdmin, false), }, { "group-policy-as-admin is true", append( []string{ - accounts[0].Address.String(), + account0Addr, validMetadata, validMetadata, validMembersFile.Name(), @@ -412,13 +427,13 @@ func (s *CLITestSuite) TestTxCreateGroupWithPolicy() { s.commonFlags..., ), "", - fmt.Sprintf("%s %s %s %s %s --%s=%v", accounts[0].Address.String(), validMetadata, validMetadata, validMembersFile.Name(), thresholdDecisionPolicyFile.Name(), groupcli.FlagGroupPolicyAsAdmin, true), + fmt.Sprintf("%s %s %s %s %s --%s=%v", account0Addr, validMetadata, validMetadata, validMembersFile.Name(), thresholdDecisionPolicyFile.Name(), groupcli.FlagGroupPolicyAsAdmin, true), }, { "with amino-json", append( []string{ - accounts[0].Address.String(), + account0Addr, validMetadata, validMetadata, validMembersFile.Name(), @@ -429,13 +444,13 @@ func (s *CLITestSuite) TestTxCreateGroupWithPolicy() { s.commonFlags..., ), "", - fmt.Sprintf("%s %s %s %s %s --%s=%v --%s=%s", accounts[0].Address.String(), validMetadata, validMetadata, validMembersFile.Name(), thresholdDecisionPolicyFile.Name(), groupcli.FlagGroupPolicyAsAdmin, false, flags.FlagSignMode, flags.SignModeLegacyAminoJSON), + fmt.Sprintf("%s %s %s %s %s --%s=%v --%s=%s", account0Addr, validMetadata, validMetadata, validMembersFile.Name(), thresholdDecisionPolicyFile.Name(), groupcli.FlagGroupPolicyAsAdmin, false, flags.FlagSignMode, flags.SignModeLegacyAminoJSON), }, { "invalid members weight", append( []string{ - accounts[0].Address.String(), + account0Addr, validMetadata, validMetadata, invalidMembersWeightFile.Name(), @@ -445,7 +460,7 @@ func (s *CLITestSuite) TestTxCreateGroupWithPolicy() { s.commonFlags..., ), "weight must be positive", - fmt.Sprintf("%s %s %s %s %s --%s=%v", accounts[0].Address.String(), validMetadata, validMetadata, invalidMembersWeightFile.Name(), thresholdDecisionPolicyFile.Name(), groupcli.FlagGroupPolicyAsAdmin, false), + fmt.Sprintf("%s %s %s %s %s --%s=%v", account0Addr, validMetadata, validMetadata, invalidMembersWeightFile.Name(), thresholdDecisionPolicyFile.Name(), groupcli.FlagGroupPolicyAsAdmin, false), }, } for _, tc := range testCases { @@ -478,7 +493,8 @@ func (s *CLITestSuite) TestTxCreateGroupWithPolicy() { func (s *CLITestSuite) TestTxCreateGroupPolicy() { accounts := testutil.CreateKeyringAccounts(s.T(), s.kr, 2) - val := accounts[0] + valAddr, err := s.baseCtx.AddressCodec.BytesToString(accounts[0].Address) + s.Require().NoError(err) groupID := s.group.Id @@ -501,7 +517,7 @@ func (s *CLITestSuite) TestTxCreateGroupPolicy() { "correct data", append( []string{ - val.Address.String(), + valAddr, fmt.Sprintf("%v", groupID), validMetadata, thresholdDecisionPolicyFile.Name(), @@ -509,13 +525,13 @@ func (s *CLITestSuite) TestTxCreateGroupPolicy() { s.commonFlags..., ), "", - fmt.Sprintf("%s %s %s %s", val.Address.String(), fmt.Sprintf("%v", groupID), validMetadata, thresholdDecisionPolicyFile.Name()), + fmt.Sprintf("%s %s %s %s", valAddr, fmt.Sprintf("%v", groupID), validMetadata, thresholdDecisionPolicyFile.Name()), }, { "correct data with percentage decision policy", append( []string{ - val.Address.String(), + valAddr, fmt.Sprintf("%v", groupID), validMetadata, percentageDecisionPolicyFile.Name(), @@ -523,13 +539,13 @@ func (s *CLITestSuite) TestTxCreateGroupPolicy() { s.commonFlags..., ), "", - fmt.Sprintf("%s %s %s %s", val.Address.String(), fmt.Sprintf("%v", groupID), validMetadata, percentageDecisionPolicyFile.Name()), + fmt.Sprintf("%s %s %s %s", valAddr, fmt.Sprintf("%v", groupID), validMetadata, percentageDecisionPolicyFile.Name()), }, { "with amino-json", append( []string{ - val.Address.String(), + valAddr, fmt.Sprintf("%v", groupID), validMetadata, thresholdDecisionPolicyFile.Name(), @@ -538,7 +554,7 @@ func (s *CLITestSuite) TestTxCreateGroupPolicy() { s.commonFlags..., ), "", - fmt.Sprintf("%s %s %s %s --%s=%s", val.Address.String(), fmt.Sprintf("%v", groupID), validMetadata, thresholdDecisionPolicyFile.Name(), flags.FlagSignMode, flags.SignModeLegacyAminoJSON), + fmt.Sprintf("%s %s %s %s --%s=%s", valAddr, fmt.Sprintf("%v", groupID), validMetadata, thresholdDecisionPolicyFile.Name(), flags.FlagSignMode, flags.SignModeLegacyAminoJSON), }, { "wrong admin", @@ -558,7 +574,7 @@ func (s *CLITestSuite) TestTxCreateGroupPolicy() { "invalid percentage decision policy with negative value", append( []string{ - val.Address.String(), + valAddr, fmt.Sprintf("%v", groupID), validMetadata, invalidNegativePercentageDecisionPolicyFile.Name(), @@ -566,13 +582,13 @@ func (s *CLITestSuite) TestTxCreateGroupPolicy() { s.commonFlags..., ), "expected a positive decimal", - fmt.Sprintf("%s %s %s %s", val.Address.String(), fmt.Sprintf("%v", groupID), validMetadata, invalidNegativePercentageDecisionPolicyFile.Name()), + fmt.Sprintf("%s %s %s %s", valAddr, fmt.Sprintf("%v", groupID), validMetadata, invalidNegativePercentageDecisionPolicyFile.Name()), }, { "invalid percentage decision policy with value greater than 1", append( []string{ - val.Address.String(), + valAddr, fmt.Sprintf("%v", groupID), validMetadata, invalidPercentageDecisionPolicyFile.Name(), @@ -580,7 +596,7 @@ func (s *CLITestSuite) TestTxCreateGroupPolicy() { s.commonFlags..., ), "percentage must be > 0 and <= 1", - fmt.Sprintf("%s %s %s %s", val.Address.String(), fmt.Sprintf("%v", groupID), validMetadata, invalidPercentageDecisionPolicyFile.Name()), + fmt.Sprintf("%s %s %s %s", valAddr, fmt.Sprintf("%v", groupID), validMetadata, invalidPercentageDecisionPolicyFile.Name()), }, } @@ -614,9 +630,12 @@ func (s *CLITestSuite) TestTxCreateGroupPolicy() { func (s *CLITestSuite) TestTxUpdateGroupPolicyDecisionPolicy() { accounts := testutil.CreateKeyringAccounts(s.T(), s.kr, 3) - newAdmin := accounts[0] - groupPolicyAdmin := accounts[1] - groupPolicyAddress := accounts[2] + newAdmin, err := s.baseCtx.AddressCodec.BytesToString(accounts[0].Address) + s.Require().NoError(err) + groupPolicyAdmin, err := s.baseCtx.AddressCodec.BytesToString(accounts[1].Address) + s.Require().NoError(err) + groupPolicyAddress, err := s.baseCtx.AddressCodec.BytesToString(accounts[2].Address) + s.Require().NoError(err) commonFlags := s.commonFlags commonFlags = append(commonFlags, fmt.Sprintf("--%s=%d", flags.FlagGas, 300000)) @@ -637,53 +656,53 @@ func (s *CLITestSuite) TestTxUpdateGroupPolicyDecisionPolicy() { "correct data", append( []string{ - groupPolicyAdmin.Address.String(), - groupPolicyAddress.Address.String(), + groupPolicyAdmin, + groupPolicyAddress, thresholdDecisionPolicy.Name(), }, commonFlags..., ), - fmt.Sprintf("%s %s %s", groupPolicyAdmin.Address.String(), groupPolicyAddress.Address.String(), thresholdDecisionPolicy.Name()), + fmt.Sprintf("%s %s %s", groupPolicyAdmin, groupPolicyAddress, thresholdDecisionPolicy.Name()), "", }, { "correct data with percentage decision policy", append( []string{ - groupPolicyAdmin.Address.String(), - groupPolicyAddress.Address.String(), + groupPolicyAdmin, + groupPolicyAddress, percentageDecisionPolicy.Name(), }, commonFlags..., ), - fmt.Sprintf("%s %s %s", groupPolicyAdmin.Address.String(), groupPolicyAddress.Address.String(), percentageDecisionPolicy.Name()), + fmt.Sprintf("%s %s %s", groupPolicyAdmin, groupPolicyAddress, percentageDecisionPolicy.Name()), "", }, { "with amino-json", append( []string{ - groupPolicyAdmin.Address.String(), - groupPolicyAddress.Address.String(), + groupPolicyAdmin, + groupPolicyAddress, thresholdDecisionPolicy.Name(), fmt.Sprintf("--%s=%s", flags.FlagSignMode, flags.SignModeLegacyAminoJSON), }, commonFlags..., ), - fmt.Sprintf("%s %s %s --%s=%s", groupPolicyAdmin.Address.String(), groupPolicyAddress.Address.String(), thresholdDecisionPolicy.Name(), flags.FlagSignMode, flags.SignModeLegacyAminoJSON), + fmt.Sprintf("%s %s %s --%s=%s", groupPolicyAdmin, groupPolicyAddress, thresholdDecisionPolicy.Name(), flags.FlagSignMode, flags.SignModeLegacyAminoJSON), "", }, { "wrong admin", append( []string{ - newAdmin.Address.String(), + newAdmin, "invalid", thresholdDecisionPolicy.Name(), }, commonFlags..., ), - fmt.Sprintf("%s %s %s", newAdmin.Address.String(), "invalid", thresholdDecisionPolicy.Name()), + fmt.Sprintf("%s %s %s", newAdmin, "invalid", thresholdDecisionPolicy.Name()), "decoding bech32 failed", }, } @@ -718,13 +737,17 @@ func (s *CLITestSuite) TestTxUpdateGroupPolicyDecisionPolicy() { func (s *CLITestSuite) TestTxSubmitProposal() { accounts := testutil.CreateKeyringAccounts(s.T(), s.kr, 2) - groupPolicyAddress := accounts[1].Address + + groupPolicyAddress, err := s.baseCtx.AddressCodec.BytesToString(accounts[1].Address) + s.Require().NoError(err) + account0Addr, err := s.baseCtx.AddressCodec.BytesToString(accounts[0].Address) + s.Require().NoError(err) p := groupcli.Proposal{ - GroupPolicyAddress: groupPolicyAddress.String(), + GroupPolicyAddress: groupPolicyAddress, Messages: []json.RawMessage{}, Metadata: validMetadata, - Proposers: []string{accounts[0].Address.String()}, + Proposers: []string{account0Addr}, } bz, err := json.Marshal(&p) s.Require().NoError(err) diff --git a/x/group/genesis_test.go b/x/group/genesis_test.go index 500fad8ae7..1671908fd6 100644 --- a/x/group/genesis_test.go +++ b/x/group/genesis_test.go @@ -8,6 +8,7 @@ import ( banktypes "cosmossdk.io/x/bank/types" + codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -22,15 +23,21 @@ var ( func TestGenesisStateValidate(t *testing.T) { submittedAt := time.Now().UTC() timeout := submittedAt.Add(time.Second * 1).UTC() + addressCodec := codectestutil.CodecOptions{}.GetAddressCodec() + + accStrAddr, err := addressCodec.BytesToString(accAddr) + require.NoError(t, err) + memberStrAdrr, err := addressCodec.BytesToString(memberAddr) + require.NoError(t, err) groupPolicy := &GroupPolicyInfo{ - Address: accAddr.String(), + Address: accStrAddr, GroupId: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Version: 1, Metadata: "policy metadata", } - err := groupPolicy.SetDecisionPolicy(&ThresholdDecisionPolicy{ + err = groupPolicy.SetDecisionPolicy(&ThresholdDecisionPolicy{ Threshold: "1", Windows: &DecisionPolicyWindows{ VotingPeriod: time.Second, @@ -40,9 +47,9 @@ func TestGenesisStateValidate(t *testing.T) { // create another group policy to set invalid decision policy for testing groupPolicy2 := &GroupPolicyInfo{ - Address: accAddr.String(), + Address: accStrAddr, GroupId: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Version: 1, Metadata: "policy metadata", } @@ -56,12 +63,12 @@ func TestGenesisStateValidate(t *testing.T) { proposal := &Proposal{ Id: 1, - GroupPolicyAddress: accAddr.String(), + GroupPolicyAddress: accStrAddr, Metadata: "proposal metadata", GroupVersion: 1, GroupPolicyVersion: 1, Proposers: []string{ - memberAddr.String(), + memberStrAdrr, }, SubmitTime: submittedAt, Status: PROPOSAL_STATUS_ACCEPTED, @@ -75,8 +82,8 @@ func TestGenesisStateValidate(t *testing.T) { ExecutorResult: PROPOSAL_EXECUTOR_RESULT_SUCCESS, } err = proposal.SetMsgs([]sdk.Msg{&banktypes.MsgSend{ - FromAddress: accAddr.String(), - ToAddress: memberAddr.String(), + FromAddress: accStrAddr, + ToAddress: memberStrAdrr, Amount: sdk.Coins{sdk.NewInt64Coin("test", 100)}, }}) require.NoError(t, err) @@ -90,13 +97,13 @@ func TestGenesisStateValidate(t *testing.T) { "valid genesisState", GenesisState{ GroupSeq: 2, - Groups: []*GroupInfo{{Id: 1, Admin: accAddr.String(), Metadata: "1", Version: 1, TotalWeight: "1"}, {Id: 2, Admin: accAddr.String(), Metadata: "2", Version: 2, TotalWeight: "2"}}, - GroupMembers: []*GroupMember{{GroupId: 1, Member: &Member{Address: memberAddr.String(), Weight: "1", Metadata: "member metadata"}}, {GroupId: 2, Member: &Member{Address: memberAddr.String(), Weight: "2", Metadata: "member metadata"}}}, + Groups: []*GroupInfo{{Id: 1, Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1"}, {Id: 2, Admin: accStrAddr, Metadata: "2", Version: 2, TotalWeight: "2"}}, + GroupMembers: []*GroupMember{{GroupId: 1, Member: &Member{Address: memberStrAdrr, Weight: "1", Metadata: "member metadata"}}, {GroupId: 2, Member: &Member{Address: memberStrAdrr, Weight: "2", Metadata: "member metadata"}}}, GroupPolicySeq: 1, GroupPolicies: []*GroupPolicyInfo{groupPolicy}, ProposalSeq: 1, Proposals: []*Proposal{proposal}, - Votes: []*Vote{{ProposalId: proposal.Id, Voter: memberAddr.String(), SubmitTime: submittedAt, Option: VOTE_OPTION_YES}}, + Votes: []*Vote{{ProposalId: proposal.Id, Voter: memberStrAdrr, SubmitTime: submittedAt, Option: VOTE_OPTION_YES}}, }, false, }, @@ -111,7 +118,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 0, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -141,7 +148,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 0, TotalWeight: "1", @@ -156,7 +163,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "-1", @@ -171,7 +178,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -181,7 +188,7 @@ func TestGenesisStateValidate(t *testing.T) { { Address: "invalid address", GroupId: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Version: 1, Metadata: "policy metadata", }, @@ -195,7 +202,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -203,7 +210,7 @@ func TestGenesisStateValidate(t *testing.T) { }, GroupPolicies: []*GroupPolicyInfo{ { - Address: accAddr.String(), + Address: accStrAddr, GroupId: 1, Admin: "invalid admin", Version: 1, @@ -219,7 +226,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -227,9 +234,9 @@ func TestGenesisStateValidate(t *testing.T) { }, GroupPolicies: []*GroupPolicyInfo{ { - Address: accAddr.String(), + Address: accStrAddr, GroupId: 0, - Admin: accAddr.String(), + Admin: accStrAddr, Version: 1, Metadata: "policy metadata", }, @@ -243,7 +250,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -251,9 +258,9 @@ func TestGenesisStateValidate(t *testing.T) { }, GroupPolicies: []*GroupPolicyInfo{ { - Address: accAddr.String(), + Address: accStrAddr, GroupId: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Version: 0, Metadata: "policy metadata", }, @@ -267,7 +274,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -275,9 +282,9 @@ func TestGenesisStateValidate(t *testing.T) { }, GroupPolicies: []*GroupPolicyInfo{ { - Address: accAddr.String(), + Address: accStrAddr, GroupId: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Version: 1, Metadata: "policy metadata", DecisionPolicy: groupPolicy2.DecisionPolicy, @@ -292,7 +299,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -302,7 +309,7 @@ func TestGenesisStateValidate(t *testing.T) { { GroupId: 0, Member: &Member{ - Address: memberAddr.String(), + Address: memberStrAdrr, Weight: "1", Metadata: "member metadata", }, }, @@ -316,7 +323,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -340,7 +347,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -350,7 +357,7 @@ func TestGenesisStateValidate(t *testing.T) { { GroupId: 1, Member: &Member{ - Address: memberAddr.String(), + Address: memberStrAdrr, Weight: "-1", Metadata: "member metadata", }, }, @@ -364,7 +371,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -376,7 +383,7 @@ func TestGenesisStateValidate(t *testing.T) { Proposals: []*Proposal{ { Id: 0, - GroupPolicyAddress: accAddr.String(), + GroupPolicyAddress: accStrAddr, Metadata: "proposal metadata", GroupVersion: 1, GroupPolicyVersion: 1, @@ -391,7 +398,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -418,7 +425,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -430,7 +437,7 @@ func TestGenesisStateValidate(t *testing.T) { Proposals: []*Proposal{ { Id: 1, - GroupPolicyAddress: accAddr.String(), + GroupPolicyAddress: accStrAddr, Metadata: "proposal metadata", GroupVersion: 0, GroupPolicyVersion: 1, @@ -445,7 +452,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -457,7 +464,7 @@ func TestGenesisStateValidate(t *testing.T) { Proposals: []*Proposal{ { Id: 1, - GroupPolicyAddress: accAddr.String(), + GroupPolicyAddress: accStrAddr, Metadata: "proposal metadata", GroupVersion: 1, GroupPolicyVersion: 0, @@ -472,7 +479,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -484,12 +491,12 @@ func TestGenesisStateValidate(t *testing.T) { Proposals: []*Proposal{ { Id: 1, - GroupPolicyAddress: accAddr.String(), + GroupPolicyAddress: accStrAddr, Metadata: "proposal metadata", GroupVersion: 1, GroupPolicyVersion: 1, Proposers: []string{ - memberAddr.String(), + memberStrAdrr, }, SubmitTime: submittedAt, Status: PROPOSAL_STATUS_ACCEPTED, @@ -510,7 +517,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -522,12 +529,12 @@ func TestGenesisStateValidate(t *testing.T) { Proposals: []*Proposal{ { Id: 1, - GroupPolicyAddress: accAddr.String(), + GroupPolicyAddress: accStrAddr, Metadata: "proposal metadata", GroupVersion: 1, GroupPolicyVersion: 1, Proposers: []string{ - memberAddr.String(), + memberStrAdrr, }, SubmitTime: submittedAt, Status: PROPOSAL_STATUS_ACCEPTED, @@ -548,7 +555,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -560,12 +567,12 @@ func TestGenesisStateValidate(t *testing.T) { Proposals: []*Proposal{ { Id: 1, - GroupPolicyAddress: accAddr.String(), + GroupPolicyAddress: accStrAddr, Metadata: "proposal metadata", GroupVersion: 1, GroupPolicyVersion: 1, Proposers: []string{ - memberAddr.String(), + memberStrAdrr, }, SubmitTime: submittedAt, Status: PROPOSAL_STATUS_ACCEPTED, @@ -586,7 +593,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -598,12 +605,12 @@ func TestGenesisStateValidate(t *testing.T) { Proposals: []*Proposal{ { Id: 1, - GroupPolicyAddress: accAddr.String(), + GroupPolicyAddress: accStrAddr, Metadata: "proposal metadata", GroupVersion: 1, GroupPolicyVersion: 1, Proposers: []string{ - memberAddr.String(), + memberStrAdrr, }, SubmitTime: submittedAt, Status: PROPOSAL_STATUS_ACCEPTED, @@ -624,7 +631,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -653,7 +660,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -668,7 +675,7 @@ func TestGenesisStateValidate(t *testing.T) { Votes: []*Vote{ { ProposalId: 0, - Voter: memberAddr.String(), + Voter: memberStrAdrr, SubmitTime: submittedAt, Option: VOTE_OPTION_YES, }, @@ -682,7 +689,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -697,7 +704,7 @@ func TestGenesisStateValidate(t *testing.T) { Votes: []*Vote{ { ProposalId: 2, - Voter: memberAddr.String(), + Voter: memberStrAdrr, SubmitTime: submittedAt, Option: VOTE_OPTION_YES, }, @@ -711,7 +718,7 @@ func TestGenesisStateValidate(t *testing.T) { Groups: []*GroupInfo{ { Id: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1", @@ -726,7 +733,7 @@ func TestGenesisStateValidate(t *testing.T) { Votes: []*Vote{ { ProposalId: proposal.Id, - Voter: memberAddr.String(), + Voter: memberStrAdrr, SubmitTime: submittedAt, Option: VOTE_OPTION_UNSPECIFIED, }, diff --git a/x/group/keeper/abci_test.go b/x/group/keeper/abci_test.go index 8206cbd0b1..0db99839d5 100644 --- a/x/group/keeper/abci_test.go +++ b/x/group/keeper/abci_test.go @@ -71,16 +71,19 @@ func (s *IntegrationTestSuite) SetupTest() { func (s *IntegrationTestSuite) TestEndBlockerPruning() { ctx := s.ctx - addr1 := s.addrs[0] - addr2 := s.addrs[1] - addr3 := s.addrs[2] + addr1, err := s.addressCodec.BytesToString(s.addrs[0]) + s.Require().NoError(err) + addr2, err := s.addressCodec.BytesToString(s.addrs[1]) + s.Require().NoError(err) + addr3, err := s.addressCodec.BytesToString(s.addrs[2]) + s.Require().NoError(err) - addr1st, err := s.addressCodec.BytesToString(addr1) + addr1st, err := s.addressCodec.BytesToString(s.addrs[0]) s.Require().NoError(err) // Initial group, group policy and balance setup members := []group.MemberRequest{ - {Address: addr1st, Weight: "1"}, {Address: addr2.String(), Weight: "2"}, + {Address: addr1st, Weight: "1"}, {Address: addr2, Weight: "2"}, } groupRes, err := s.groupKeeper.CreateGroup(ctx, &group.MsgCreateGroup{ @@ -90,7 +93,7 @@ func (s *IntegrationTestSuite) TestEndBlockerPruning() { s.Require().NoError(err) groupRes2, err := s.groupKeeper.CreateGroup(ctx, &group.MsgCreateGroup{ - Admin: addr2.String(), + Admin: addr2, Members: members, }) s.Require().NoError(err) @@ -105,7 +108,7 @@ func (s *IntegrationTestSuite) TestEndBlockerPruning() { ) policyReq := &group.MsgCreateGroupPolicy{ - Admin: addr1.String(), + Admin: addr1, GroupId: groupID, } @@ -121,7 +124,7 @@ func (s *IntegrationTestSuite) TestEndBlockerPruning() { ) policyReq2 := &group.MsgCreateGroupPolicy{ - Admin: addr2.String(), + Admin: addr2, GroupId: groupID2, } @@ -142,15 +145,15 @@ func (s *IntegrationTestSuite) TestEndBlockerPruning() { msgSend1 := &banktypes.MsgSend{ FromAddress: policyRes.Address, - ToAddress: addr2.String(), + ToAddress: addr2, Amount: sdk.Coins{sdk.NewInt64Coin("test", 100)}, } msgSend2 := &banktypes.MsgSend{ FromAddress: policyRes2.Address, - ToAddress: addr2.String(), + ToAddress: addr2, Amount: sdk.Coins{sdk.NewInt64Coin("test", 100)}, } - proposers := []string{addr2.String()} + proposers := []string{addr2} specs := map[string]struct { setupProposal func(ctx sdk.Context) uint64 @@ -165,7 +168,7 @@ func (s *IntegrationTestSuite) TestEndBlockerPruning() { msgs := []sdk.Msg{msgSend1} pID, err := submitProposalAndVoteHelper(s, s.app, ctx, msgs, proposers, groupPolicyAddr, group.VOTE_OPTION_YES) s.Require().NoError(err) - _, err = s.groupKeeper.Exec(ctx, &group.MsgExec{Executor: addr3.String(), ProposalId: pID}) + _, err = s.groupKeeper.Exec(ctx, &group.MsgExec{Executor: addr3, ProposalId: pID}) s.Require().NoError(err) s.Require().NoError(testutil.FundAccount(ctx, s.bankKeeper, groupPolicyAddr, sdk.Coins{sdk.NewInt64Coin("test", 10002)})) @@ -180,7 +183,7 @@ func (s *IntegrationTestSuite) TestEndBlockerPruning() { msgs := []sdk.Msg{msgSend1, msgSend1} pID, err := submitProposalAndVoteHelper(s, s.app, ctx, msgs, proposers, groupPolicyAddr, group.VOTE_OPTION_YES) s.Require().NoError(err) - _, err = s.groupKeeper.Exec(ctx, &group.MsgExec{Executor: addr3.String(), ProposalId: pID}) + _, err = s.groupKeeper.Exec(ctx, &group.MsgExec{Executor: addr3, ProposalId: pID}) s.Require().NoError(err) s.Require().NoError(testutil.FundAccount(ctx, s.bankKeeper, groupPolicyAddr, sdk.Coins{sdk.NewInt64Coin("test", 10002)})) @@ -195,7 +198,7 @@ func (s *IntegrationTestSuite) TestEndBlockerPruning() { msgs := []sdk.Msg{msgSend1} pID, err := submitProposalAndVoteHelper(s, s.app, ctx, msgs, proposers, groupPolicyAddr, group.VOTE_OPTION_NO) s.Require().NoError(err) - _, err = s.groupKeeper.Exec(ctx, &group.MsgExec{Executor: addr3.String(), ProposalId: pID}) + _, err = s.groupKeeper.Exec(ctx, &group.MsgExec{Executor: addr3, ProposalId: pID}) s.Require().NoError(err) s.Require().NoError(testutil.FundAccount(ctx, s.bankKeeper, groupPolicyAddr, sdk.Coins{sdk.NewInt64Coin("test", 10002)})) @@ -210,7 +213,7 @@ func (s *IntegrationTestSuite) TestEndBlockerPruning() { setupProposal: func(ctx sdk.Context) uint64 { pID, err := submitProposalHelper(s, s.app, ctx, []sdk.Msg{msgSend1}, proposers, groupPolicyAddr) s.Require().NoError(err) - _, err = s.groupKeeper.Exec(ctx, &group.MsgExec{Executor: addr3.String(), ProposalId: pID}) + _, err = s.groupKeeper.Exec(ctx, &group.MsgExec{Executor: addr3, ProposalId: pID}) s.Require().NoError(err) s.Require().NoError(testutil.FundAccount(ctx, s.bankKeeper, groupPolicyAddr, sdk.Coins{sdk.NewInt64Coin("test", 10002)})) @@ -225,11 +228,11 @@ func (s *IntegrationTestSuite) TestEndBlockerPruning() { pID, err := submitProposalHelper(s, s.app, ctx, []sdk.Msg{msgSend1}, proposers, groupPolicyAddr) s.Require().NoError(err) _, err = s.groupKeeper.UpdateGroupPolicyMetadata(ctx, &group.MsgUpdateGroupPolicyMetadata{ - Admin: addr1.String(), + Admin: addr1, GroupPolicyAddress: policyRes.Address, }) s.Require().NoError(err) - _, err = s.groupKeeper.Exec(ctx, &group.MsgExec{Executor: addr3.String(), ProposalId: pID}) + _, err = s.groupKeeper.Exec(ctx, &group.MsgExec{Executor: addr3, ProposalId: pID}) s.Require().Error(err) // since proposal with status Aborted cannot be executed s.Require().NoError(testutil.FundAccount(ctx, s.bankKeeper, groupPolicyAddr, sdk.Coins{sdk.NewInt64Coin("test", 10002)})) @@ -244,7 +247,7 @@ func (s *IntegrationTestSuite) TestEndBlockerPruning() { msgs := []sdk.Msg{msgSend1} pID, err := submitProposalAndVoteHelper(s, s.app, ctx, msgs, proposers, groupPolicyAddr, group.VOTE_OPTION_YES) s.Require().NoError(err) - _, err = s.groupKeeper.Exec(ctx, &group.MsgExec{Executor: s.addrs[2].String(), ProposalId: pID}) + _, err = s.groupKeeper.Exec(ctx, &group.MsgExec{Executor: addr3, ProposalId: pID}) s.Require().NoError(err) return pID }, @@ -290,7 +293,7 @@ func (s *IntegrationTestSuite) TestEndBlockerPruning() { policy := group.NewThresholdDecisionPolicy("3", time.Second, 0) msg := &group.MsgUpdateGroupPolicyDecisionPolicy{ - Admin: s.addrs[1].String(), + Admin: addr2, GroupPolicyAddress: policyRes2.Address, } err = msg.SetDecisionPolicy(policy) @@ -312,7 +315,7 @@ func (s *IntegrationTestSuite) TestEndBlockerPruning() { policy := group.NewThresholdDecisionPolicy("3", time.Second, 0) msg := &group.MsgUpdateGroupPolicyDecisionPolicy{ - Admin: s.addrs[1].String(), + Admin: addr2, GroupPolicyAddress: policyRes2.Address, } err = msg.SetDecisionPolicy(policy) @@ -372,14 +375,22 @@ func (s *IntegrationTestSuite) TestEndBlockerTallying() { ctx := s.ctx addrs := s.addrs + addr0, err := s.addressCodec.BytesToString(addrs[0]) + s.Require().NoError(err) + addr1, err := s.addressCodec.BytesToString(addrs[1]) + s.Require().NoError(err) + addr2, err := s.addressCodec.BytesToString(addrs[2]) + s.Require().NoError(err) + addr3, err := s.addressCodec.BytesToString(addrs[3]) + s.Require().NoError(err) // Initial group, group policy and balance setup members := []group.MemberRequest{ - {Address: addrs[1].String(), Weight: "1"}, {Address: addrs[2].String(), Weight: "2"}, + {Address: addr1, Weight: "1"}, {Address: addr2, Weight: "2"}, } groupRes, err := s.groupKeeper.CreateGroup(ctx, &group.MsgCreateGroup{ - Admin: addrs[0].String(), + Admin: addr0, Members: members, }) s.Require().NoError(err) @@ -393,7 +404,7 @@ func (s *IntegrationTestSuite) TestEndBlockerTallying() { ) policyReq := &group.MsgCreateGroupPolicy{ - Admin: addrs[0].String(), + Admin: addr0, GroupId: groupID, } @@ -409,11 +420,11 @@ func (s *IntegrationTestSuite) TestEndBlockerTallying() { msgSend := &banktypes.MsgSend{ FromAddress: policyRes.Address, - ToAddress: addrs[3].String(), + ToAddress: addr3, Amount: sdk.Coins{sdk.NewInt64Coin("test", 100)}, } - proposers := []string{addrs[2].String()} + proposers := []string{addr2} specs := map[string]struct { preRun func(sdkCtx sdk.Context) uint64 @@ -461,7 +472,7 @@ func (s *IntegrationTestSuite) TestEndBlockerTallying() { "tally after voting period (not passing)": { preRun: func(sdkCtx sdk.Context) uint64 { // `addrs[1]` has weight 1 - pID, err := submitProposalAndVoteHelper(s, app, ctx, []sdk.Msg{msgSend}, []string{addrs[1].String()}, groupPolicyAddr, group.VOTE_OPTION_YES) + pID, err := submitProposalAndVoteHelper(s, app, ctx, []sdk.Msg{msgSend}, []string{addr1}, groupPolicyAddr, group.VOTE_OPTION_YES) s.Require().NoError(err) return pID @@ -556,11 +567,13 @@ func (s *IntegrationTestSuite) TestEndBlockerTallying() { } func submitProposalHelper(s *IntegrationTestSuite, app *runtime.App, ctx context.Context, msgs []sdk.Msg, proposers []string, groupPolicyAddr sdk.AccAddress) (uint64, error) { + gpAddr, err := s.addressCodec.BytesToString(groupPolicyAddr) + s.Require().NoError(err) proposalReq := &group.MsgSubmitProposal{ - GroupPolicyAddress: groupPolicyAddr.String(), + GroupPolicyAddress: gpAddr, Proposers: proposers, } - err := proposalReq.SetMsgs(msgs) + err = proposalReq.SetMsgs(msgs) if err != nil { return 0, err } diff --git a/x/group/keeper/genesis_test.go b/x/group/keeper/genesis_test.go index ee92089f8c..9e61244079 100644 --- a/x/group/keeper/genesis_test.go +++ b/x/group/keeper/genesis_test.go @@ -9,6 +9,7 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/suite" + coreaddress "cosmossdk.io/core/address" "cosmossdk.io/log" storetypes "cosmossdk.io/store/types" authtypes "cosmossdk.io/x/auth/types" @@ -32,10 +33,11 @@ import ( type GenesisTestSuite struct { suite.Suite - ctx context.Context - sdkCtx sdk.Context - keeper keeper.Keeper - cdc *codec.ProtoCodec + ctx context.Context + sdkCtx sdk.Context + keeper keeper.Keeper + cdc *codec.ProtoCodec + addressCodec coreaddress.Codec } func TestGenesisTestSuite(t *testing.T) { @@ -73,6 +75,7 @@ func (s *GenesisTestSuite) SetupTest() { s.sdkCtx = testCtx.Ctx s.cdc = codec.NewProtoCodec(encCfg.InterfaceRegistry) s.ctx = s.sdkCtx + s.addressCodec = address.NewBech32Codec("cosmos") env := runtime.NewEnvironment(storeService, log.NewNopLogger(), runtime.EnvWithRouterService(bApp.GRPCQueryRouter(), bApp.MsgServiceRouter())) s.keeper = keeper.NewKeeper(env, s.cdc, accountKeeper, group.DefaultConfig()) @@ -86,14 +89,19 @@ func (s *GenesisTestSuite) TestInitExportGenesis() { submittedAt := time.Now().UTC() timeout := submittedAt.Add(time.Second * 1).UTC() + accStrAddr, err := s.addressCodec.BytesToString(accAddr) + s.Require().NoError(err) + memberStrAddr, err := s.addressCodec.BytesToString(memberAddr) + s.Require().NoError(err) + groupPolicy := &group.GroupPolicyInfo{ - Address: accAddr.String(), + Address: accStrAddr, GroupId: 1, - Admin: accAddr.String(), + Admin: accStrAddr, Version: 1, Metadata: "policy metadata", } - err := groupPolicy.SetDecisionPolicy(&group.ThresholdDecisionPolicy{ + err = groupPolicy.SetDecisionPolicy(&group.ThresholdDecisionPolicy{ Threshold: "1", Windows: &group.DecisionPolicyWindows{ VotingPeriod: time.Second, @@ -103,12 +111,12 @@ func (s *GenesisTestSuite) TestInitExportGenesis() { proposal := &group.Proposal{ Id: 1, - GroupPolicyAddress: accAddr.String(), + GroupPolicyAddress: accStrAddr, Metadata: "proposal metadata", GroupVersion: 1, GroupPolicyVersion: 1, Proposers: []string{ - memberAddr.String(), + memberStrAddr, }, SubmitTime: submittedAt, Status: group.PROPOSAL_STATUS_ACCEPTED, @@ -122,21 +130,21 @@ func (s *GenesisTestSuite) TestInitExportGenesis() { ExecutorResult: group.PROPOSAL_EXECUTOR_RESULT_SUCCESS, } err = proposal.SetMsgs([]sdk.Msg{&banktypes.MsgSend{ - FromAddress: accAddr.String(), - ToAddress: memberAddr.String(), + FromAddress: accStrAddr, + ToAddress: memberStrAddr, Amount: sdk.Coins{sdk.NewInt64Coin("test", 100)}, }}) s.Require().NoError(err) genesisState := &group.GenesisState{ GroupSeq: 2, - Groups: []*group.GroupInfo{{Id: 1, Admin: accAddr.String(), Metadata: "1", Version: 1, TotalWeight: "1"}, {Id: 2, Admin: accAddr.String(), Metadata: "2", Version: 2, TotalWeight: "2"}}, - GroupMembers: []*group.GroupMember{{GroupId: 1, Member: &group.Member{Address: memberAddr.String(), Weight: "1", Metadata: "member metadata"}}, {GroupId: 2, Member: &group.Member{Address: memberAddr.String(), Weight: "2", Metadata: "member metadata"}}}, + Groups: []*group.GroupInfo{{Id: 1, Admin: accStrAddr, Metadata: "1", Version: 1, TotalWeight: "1"}, {Id: 2, Admin: accStrAddr, Metadata: "2", Version: 2, TotalWeight: "2"}}, + GroupMembers: []*group.GroupMember{{GroupId: 1, Member: &group.Member{Address: memberStrAddr, Weight: "1", Metadata: "member metadata"}}, {GroupId: 2, Member: &group.Member{Address: memberStrAddr, Weight: "2", Metadata: "member metadata"}}}, GroupPolicySeq: 1, GroupPolicies: []*group.GroupPolicyInfo{groupPolicy}, ProposalSeq: 1, Proposals: []*group.Proposal{proposal}, - Votes: []*group.Vote{{ProposalId: proposal.Id, Voter: memberAddr.String(), SubmitTime: submittedAt, Option: group.VOTE_OPTION_YES}}, + Votes: []*group.Vote{{ProposalId: proposal.Id, Voter: memberStrAddr, SubmitTime: submittedAt, Option: group.VOTE_OPTION_YES}}, } genesisBytes, err := cdc.MarshalJSON(genesisState) s.Require().NoError(err) diff --git a/x/group/keeper/grpc_query.go b/x/group/keeper/grpc_query.go index 5f3bc4cbc3..6884616d85 100644 --- a/x/group/keeper/grpc_query.go +++ b/x/group/keeper/grpc_query.go @@ -214,12 +214,12 @@ func (k Keeper) getProposal(ctx context.Context, proposalID uint64) (group.Propo // VoteByProposalVoter queries a vote given a voter and a proposal ID. func (k Keeper) VoteByProposalVoter(ctx context.Context, request *group.QueryVoteByProposalVoterRequest) (*group.QueryVoteByProposalVoterResponse, error) { - addr, err := k.accKeeper.AddressCodec().StringToBytes(request.Voter) + _, err := k.accKeeper.AddressCodec().StringToBytes(request.Voter) if err != nil { return nil, err } proposalID := request.ProposalId - vote, err := k.getVote(ctx, proposalID, addr) + vote, err := k.getVote(ctx, proposalID, request.Voter) if err != nil { return nil, err } @@ -309,9 +309,9 @@ func (k Keeper) GroupsByMember(ctx context.Context, request *group.QueryGroupsBy } // getVote gets the vote info for the given proposal id and voter address. -func (k Keeper) getVote(ctx context.Context, proposalID uint64, voter sdk.AccAddress) (group.Vote, error) { +func (k Keeper) getVote(ctx context.Context, proposalID uint64, voter string) (group.Vote, error) { var v group.Vote - return v, k.voteTable.GetOne(k.environment.KVStoreService.OpenKVStore(ctx), orm.PrimaryKey(&group.Vote{ProposalId: proposalID, Voter: voter.String()}), &v) + return v, k.voteTable.GetOne(k.environment.KVStoreService.OpenKVStore(ctx), orm.PrimaryKey(&group.Vote{ProposalId: proposalID, Voter: voter}), &v) } // getVotesByProposal returns an iterator for the given proposal id and page request. diff --git a/x/group/keeper/grpc_query_test.go b/x/group/keeper/grpc_query_test.go index dccc776569..d8da1ad1fc 100644 --- a/x/group/keeper/grpc_query_test.go +++ b/x/group/keeper/grpc_query_test.go @@ -32,7 +32,7 @@ type fixture struct { ctx types.Context keeper groupkeeper.Keeper queryClient group.QueryClient - addrs []types.AccAddress + addrs []string defaultGroup *group.MsgCreateGroupWithPolicyResponse } @@ -56,13 +56,19 @@ func initKeeper(t *testing.T) *fixture { encCfg.TxConfig.TxDecoder(), ) - addrs := simtestutil.CreateIncrementalAccounts(6) + addressCodec := address.NewBech32Codec("cosmos") + accAddrs := simtestutil.CreateIncrementalAccounts(6) + addrs := make([]string, len(accAddrs)) + ctrl := gomock.NewController(t) accountKeeper := grouptestutil.NewMockAccountKeeper(ctrl) - for _, addr := range addrs { + var err error + for i, addr := range accAddrs { accountKeeper.EXPECT().GetAccount(gomock.Any(), addr).Return(authtypes.NewBaseAccountWithAddress(addr)).AnyTimes() + addrs[i], err = addressCodec.BytesToString(addr) + require.NoError(t, err) } - accountKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes() + accountKeeper.EXPECT().AddressCodec().Return(addressCodec).AnyTimes() // group policy expected calls accountKeeper.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(nil).AnyTimes() @@ -77,13 +83,13 @@ func initKeeper(t *testing.T) *fixture { queryClient := group.NewQueryClient(queryHelper) msgGroupAndPolicy := &group.MsgCreateGroupWithPolicy{ - Admin: addrs[0].String(), + Admin: addrs[0], Members: []group.MemberRequest{ - {Address: addrs[1].String(), Weight: "1"}, - {Address: addrs[3].String(), Weight: "2"}, + {Address: addrs[1], Weight: "1"}, + {Address: addrs[3], Weight: "2"}, }, } - err := msgGroupAndPolicy.SetDecisionPolicy(group.NewThresholdDecisionPolicy("2", time.Second, 20)) + err = msgGroupAndPolicy.SetDecisionPolicy(group.NewThresholdDecisionPolicy("2", time.Second, 20)) require.NoError(t, err) resp, err := groupKeeper.CreateGroupWithPolicy(ctx, msgGroupAndPolicy) @@ -152,7 +158,7 @@ func TestQueryGroupPolicyInfo(t *testing.T) { }, { name: "unexisting address", - req: group.QueryGroupPolicyInfoRequest{Address: fixture.addrs[5].String()}, + req: group.QueryGroupPolicyInfoRequest{Address: fixture.addrs[5]}, expErrMsg: "group policy: not found", }, { @@ -232,13 +238,13 @@ func TestQueryGroupsByAdmin(t *testing.T) { }{ { name: "valid admin", - req: group.QueryGroupsByAdminRequest{Admin: fixture.addrs[0].String()}, + req: group.QueryGroupsByAdminRequest{Admin: fixture.addrs[0]}, postRun: func(resp *group.QueryGroupsByAdminResponse) { require.Len(t, resp.Groups, 1) }, expErrMsg: "", }, { name: "unexisting address", - req: group.QueryGroupsByAdminRequest{Admin: fixture.addrs[5].String()}, + req: group.QueryGroupsByAdminRequest{Admin: fixture.addrs[5]}, postRun: func(resp *group.QueryGroupsByAdminResponse) { require.Len(t, resp.Groups, 0) }, expErrMsg: "", }, @@ -319,13 +325,13 @@ func TestQueryGroupPoliciesByAdmin(t *testing.T) { }{ { name: "valid admin", - req: group.QueryGroupPoliciesByAdminRequest{Admin: fixture.addrs[0].String()}, + req: group.QueryGroupPoliciesByAdminRequest{Admin: fixture.addrs[0]}, postRun: func(resp *group.QueryGroupPoliciesByAdminResponse) { require.Len(t, resp.GroupPolicies, 1) }, expErrMsg: "", }, { name: "unexisting address", - req: group.QueryGroupPoliciesByAdminRequest{Admin: fixture.addrs[5].String()}, + req: group.QueryGroupPoliciesByAdminRequest{Admin: fixture.addrs[5]}, postRun: func(resp *group.QueryGroupPoliciesByAdminResponse) { require.Len(t, resp.GroupPolicies, 0) }, expErrMsg: "", }, @@ -358,31 +364,31 @@ func TestQueryGroupsByMember(t *testing.T) { fixture := initKeeper(t) members := []group.MemberRequest{ - {Address: fixture.addrs[3].String(), Weight: "1"}, {Address: fixture.addrs[4].String(), Weight: "2"}, + {Address: fixture.addrs[3], Weight: "1"}, {Address: fixture.addrs[4], Weight: "2"}, } _, err := fixture.keeper.CreateGroup(fixture.ctx, &group.MsgCreateGroup{ - Admin: fixture.addrs[1].String(), + Admin: fixture.addrs[1], Members: members, }) require.NoError(t, err) // not part of any group resp, err := fixture.queryClient.GroupsByMember(context.Background(), &group.QueryGroupsByMemberRequest{ - Address: fixture.addrs[5].String(), + Address: fixture.addrs[5], }) require.NoError(t, err) require.Len(t, resp.Groups, 0) // expect one group resp, err = fixture.queryClient.GroupsByMember(context.Background(), &group.QueryGroupsByMemberRequest{ - Address: fixture.addrs[4].String(), + Address: fixture.addrs[4], }) require.NoError(t, err) require.Len(t, resp.Groups, 1) // expect two groups resp, err = fixture.queryClient.GroupsByMember(context.Background(), &group.QueryGroupsByMemberRequest{ - Address: fixture.addrs[3].String(), + Address: fixture.addrs[3], }) require.NoError(t, err) require.Len(t, resp.Groups, 2) @@ -392,10 +398,10 @@ func TestQueryGroups(t *testing.T) { fixture := initKeeper(t) members := []group.MemberRequest{ - {Address: fixture.addrs[3].String(), Weight: "1"}, + {Address: fixture.addrs[3], Weight: "1"}, } _, err := fixture.keeper.CreateGroup(fixture.ctx, &group.MsgCreateGroup{ - Admin: fixture.addrs[2].String(), + Admin: fixture.addrs[2], Members: members, }) require.NoError(t, err) diff --git a/x/group/keeper/invariants_test.go b/x/group/keeper/invariants_test.go index d452fcc915..aef29597c6 100644 --- a/x/group/keeper/invariants_test.go +++ b/x/group/keeper/invariants_test.go @@ -15,6 +15,7 @@ import ( "cosmossdk.io/x/group/keeper" "github.com/cosmos/cosmos-sdk/codec" + codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/runtime" "github.com/cosmos/cosmos-sdk/testutil/testdata" @@ -52,6 +53,7 @@ func (s *invariantTestSuite) SetupSuite() { func (s *invariantTestSuite) TestGroupTotalWeightInvariant() { sdkCtx, _ := s.ctx.CacheContext() curCtx, cdc, key := sdkCtx, s.cdc, s.key + addressCodec := codectestutil.CodecOptions{}.GetAddressCodec() // Group Table groupTable, err := orm.NewAutoUInt64Table([2]byte{keeper.GroupTablePrefix}, keeper.GroupTableSeqPrefix, &group.GroupInfo{}, cdc) @@ -70,6 +72,11 @@ func (s *invariantTestSuite) TestGroupTotalWeightInvariant() { _, _, addr1 := testdata.KeyTestPubAddr() _, _, addr2 := testdata.KeyTestPubAddr() + addr1Str, err := addressCodec.BytesToString(addr1) + s.Require().NoError(err) + addr2Str, err := addressCodec.BytesToString(addr2) + s.Require().NoError(err) + specs := map[string]struct { groupsInfo *group.GroupInfo groupMembers []*group.GroupMember @@ -78,7 +85,7 @@ func (s *invariantTestSuite) TestGroupTotalWeightInvariant() { "invariant not broken": { groupsInfo: &group.GroupInfo{ Id: 1, - Admin: addr1.String(), + Admin: addr1Str, Version: 1, TotalWeight: "3", }, @@ -86,14 +93,14 @@ func (s *invariantTestSuite) TestGroupTotalWeightInvariant() { { GroupId: 1, Member: &group.Member{ - Address: addr1.String(), + Address: addr1Str, Weight: "1", }, }, { GroupId: 1, Member: &group.Member{ - Address: addr2.String(), + Address: addr2Str, Weight: "2", }, }, @@ -104,7 +111,7 @@ func (s *invariantTestSuite) TestGroupTotalWeightInvariant() { "group's TotalWeight must be equal to sum of its members weight ": { groupsInfo: &group.GroupInfo{ Id: 1, - Admin: addr1.String(), + Admin: addr1Str, Version: 1, TotalWeight: "3", }, @@ -112,14 +119,14 @@ func (s *invariantTestSuite) TestGroupTotalWeightInvariant() { { GroupId: 1, Member: &group.Member{ - Address: addr1.String(), + Address: addr1Str, Weight: "2", }, }, { GroupId: 1, Member: &group.Member{ - Address: addr2.String(), + Address: addr2Str, Weight: "2", }, }, diff --git a/x/group/keeper/keeper_test.go b/x/group/keeper/keeper_test.go index 4188ccd912..b6a61d1866 100644 --- a/x/group/keeper/keeper_test.go +++ b/x/group/keeper/keeper_test.go @@ -37,17 +37,19 @@ const minExecutionPeriod = 5 * time.Second type TestSuite struct { suite.Suite - sdkCtx sdk.Context - ctx context.Context - addrs []sdk.AccAddress - groupID uint64 - groupPolicyAddr sdk.AccAddress - policy group.DecisionPolicy - groupKeeper keeper.Keeper - blockTime time.Time - bankKeeper *grouptestutil.MockBankKeeper - accountKeeper *grouptestutil.MockAccountKeeper - environment appmodule.Environment + sdkCtx sdk.Context + ctx context.Context + addrs []sdk.AccAddress + addrsStr []string + groupID uint64 + groupPolicyAddr sdk.AccAddress + groupPolicyStrAddr string + policy group.DecisionPolicy + groupKeeper keeper.Keeper + blockTime time.Time + bankKeeper *grouptestutil.MockBankKeeper + accountKeeper *grouptestutil.MockAccountKeeper + environment appmodule.Environment } func (s *TestSuite) SetupTest() { @@ -56,15 +58,20 @@ func (s *TestSuite) SetupTest() { testCtx := testutil.DefaultContextWithDB(s.T(), key, storetypes.NewTransientStoreKey("transient_test")) encCfg := moduletestutil.MakeTestEncodingConfig(codectestutil.CodecOptions{}, module.AppModule{}, bank.AppModule{}) + addressCodec := address.NewBech32Codec("cosmos") s.addrs = simtestutil.CreateIncrementalAccounts(6) + s.addrsStr = make([]string, len(s.addrs)) // setup gomock and initialize some globally expected executions ctrl := gomock.NewController(s.T()) s.accountKeeper = grouptestutil.NewMockAccountKeeper(ctrl) + var err error for i := range s.addrs { s.accountKeeper.EXPECT().GetAccount(gomock.Any(), s.addrs[i]).Return(authtypes.NewBaseAccountWithAddress(s.addrs[i])).AnyTimes() + s.addrsStr[i], err = addressCodec.BytesToString(s.addrs[i]) + s.Require().NoError(err) } - s.accountKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes() + s.accountKeeper.EXPECT().AddressCodec().Return(addressCodec).AnyTimes() s.bankKeeper = grouptestutil.NewMockBankKeeper(ctrl) @@ -87,13 +94,13 @@ func (s *TestSuite) SetupTest() { // Initial group, group policy and balance setup members := []group.MemberRequest{ - {Address: s.addrs[4].String(), Weight: "1"}, {Address: s.addrs[1].String(), Weight: "2"}, + {Address: s.addrsStr[4], Weight: "1"}, {Address: s.addrsStr[1], Weight: "2"}, } s.setNextAccount() groupRes, err := s.groupKeeper.CreateGroup(s.ctx, &group.MsgCreateGroup{ - Admin: s.addrs[0].String(), + Admin: s.addrsStr[0], Members: members, }) s.Require().NoError(err) @@ -105,7 +112,7 @@ func (s *TestSuite) SetupTest() { minExecutionPeriod, // Must wait 5 seconds before executing proposal ) policyReq := &group.MsgCreateGroupPolicy{ - Admin: s.addrs[0].String(), + Admin: s.addrsStr[0], GroupId: s.groupID, } err = policyReq.SetDecisionPolicy(policy) @@ -118,11 +125,12 @@ func (s *TestSuite) SetupTest() { policyRes, err := s.groupKeeper.CreateGroupPolicy(s.ctx, policyReq) s.Require().NoError(err) - addrbz, err := address.NewBech32Codec("cosmos").StringToBytes(policyRes.Address) + addrbz, err := addressCodec.StringToBytes(policyRes.Address) s.Require().NoError(err) s.policy = policy s.groupPolicyAddr = addrbz - + s.groupPolicyStrAddr, err = addressCodec.BytesToString(s.groupPolicyAddr) + s.Require().NoError(err) s.bankKeeper.EXPECT().MintCoins(s.sdkCtx, minttypes.ModuleName, sdk.Coins{sdk.NewInt64Coin("test", 100000)}).Return(nil).AnyTimes() err = s.bankKeeper.MintCoins(s.sdkCtx, minttypes.ModuleName, sdk.Coins{sdk.NewInt64Coin("test", 100000)}) s.Require().NoError(err) @@ -157,20 +165,17 @@ func TestKeeperTestSuite(t *testing.T) { } func (s *TestSuite) TestProposalsByVPEnd() { - addrs := s.addrs - addr2 := addrs[1] - votingPeriod := s.policy.GetVotingPeriod() ctx := s.sdkCtx now := time.Now() msgSend := &banktypes.MsgSend{ - FromAddress: s.groupPolicyAddr.String(), - ToAddress: addr2.String(), + FromAddress: s.groupPolicyStrAddr, + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("test", 100)}, } - proposers := []string{addr2.String()} + proposers := []string{s.addrsStr[1]} specs := map[string]struct { preRun func(sdkCtx sdk.Context) uint64 @@ -225,7 +230,7 @@ func (s *TestSuite) TestProposalsByVPEnd() { "tally after voting period (not passing)": { preRun: func(sdkCtx sdk.Context) uint64 { // `s.addrs[4]` has weight 1 - return submitProposalAndVote(s.ctx, s, []sdk.Msg{msgSend}, []string{s.addrs[4].String()}, group.VOTE_OPTION_YES) + return submitProposalAndVote(s.ctx, s, []sdk.Msg{msgSend}, []string{s.addrsStr[4]}, group.VOTE_OPTION_YES) }, admin: proposers[0], newCtx: ctx.WithHeaderInfo(header.Info{Time: now.Add(votingPeriod).Add(time.Hour)}), @@ -297,19 +302,17 @@ func (s *TestSuite) TestProposalsByVPEnd() { } func (s *TestSuite) TestPruneProposals() { - addrs := s.addrs expirationTime := time.Hour * 24 * 15 // 15 days groupID := s.groupID - accountAddr := s.groupPolicyAddr msgSend := &banktypes.MsgSend{ - FromAddress: s.groupPolicyAddr.String(), - ToAddress: addrs[0].String(), + FromAddress: s.groupPolicyStrAddr, + ToAddress: s.addrsStr[0], Amount: sdk.Coins{sdk.NewInt64Coin("test", 100)}, } policyReq := &group.MsgCreateGroupPolicy{ - Admin: addrs[0].String(), + Admin: s.addrsStr[0], GroupId: groupID, } @@ -323,8 +326,8 @@ func (s *TestSuite) TestPruneProposals() { s.Require().NoError(err) req := &group.MsgSubmitProposal{ - GroupPolicyAddress: accountAddr.String(), - Proposers: []string{addrs[1].String()}, + GroupPolicyAddress: s.groupPolicyStrAddr, + Proposers: []string{s.addrsStr[1]}, } err = req.SetMsgs([]sdk.Msg{msgSend}) s.Require().NoError(err) @@ -351,7 +354,7 @@ func submitProposal( proposers []string, ) uint64 { proposalReq := &group.MsgSubmitProposal{ - GroupPolicyAddress: s.groupPolicyAddr.String(), + GroupPolicyAddress: s.groupPolicyStrAddr, Proposers: proposers, } err := proposalReq.SetMsgs(msgs) @@ -383,15 +386,18 @@ func (s *TestSuite) createGroupAndGroupPolicy( members []group.MemberRequest, policy group.DecisionPolicy, ) (policyAddr string, groupID uint64) { + adminAddr, err := s.accountKeeper.AddressCodec().BytesToString(admin) + s.Require().NoError(err) + groupRes, err := s.groupKeeper.CreateGroup(s.ctx, &group.MsgCreateGroup{ - Admin: admin.String(), + Admin: adminAddr, Members: members, }) s.Require().NoError(err) groupID = groupRes.GroupId groupPolicy := &group.MsgCreateGroupPolicy{ - Admin: admin.String(), + Admin: adminAddr, GroupId: groupID, } @@ -410,17 +416,14 @@ func (s *TestSuite) createGroupAndGroupPolicy( } func (s *TestSuite) TestTallyProposalsAtVPEnd() { - addrs := s.addrs - addr1 := addrs[0] - addr2 := addrs[1] votingPeriod := 4 * time.Minute minExecutionPeriod := votingPeriod + group.DefaultConfig().MaxExecutionPeriod groupMsg := &group.MsgCreateGroupWithPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: []group.MemberRequest{ - {Address: addr1.String(), Weight: "1"}, - {Address: addr2.String(), Weight: "1"}, + {Address: s.addrsStr[0], Weight: "1"}, + {Address: s.addrsStr[1], Weight: "1"}, }, } policy := group.NewThresholdDecisionPolicy( @@ -440,14 +443,14 @@ func (s *TestSuite) TestTallyProposalsAtVPEnd() { proposalRes, err := s.groupKeeper.SubmitProposal(s.ctx, &group.MsgSubmitProposal{ GroupPolicyAddress: accountAddr, - Proposers: []string{addr1.String()}, + Proposers: []string{s.addrsStr[0]}, Messages: nil, }) s.Require().NoError(err) _, err = s.groupKeeper.Vote(s.ctx, &group.MsgVote{ ProposalId: proposalRes.ProposalId, - Voter: addr1.String(), + Voter: s.addrsStr[0], Option: group.VOTE_OPTION_YES, }) s.Require().NoError(err) @@ -473,19 +476,15 @@ func (s *TestSuite) TestTallyProposalsAtVPEnd() { // TestTallyProposalsAtVPEnd_GroupMemberLeaving test that the node doesn't // panic if a member leaves after the voting period end. func (s *TestSuite) TestTallyProposalsAtVPEnd_GroupMemberLeaving() { - addrs := s.addrs - addr1 := addrs[0] - addr2 := addrs[1] - addr3 := addrs[2] votingPeriod := 4 * time.Minute minExecutionPeriod := votingPeriod + group.DefaultConfig().MaxExecutionPeriod groupMsg := &group.MsgCreateGroupWithPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: []group.MemberRequest{ - {Address: addr1.String(), Weight: "0.3"}, - {Address: addr2.String(), Weight: "7"}, - {Address: addr3.String(), Weight: "0.6"}, + {Address: s.addrsStr[0], Weight: "0.3"}, + {Address: s.addrsStr[1], Weight: "7"}, + {Address: s.addrsStr[2], Weight: "0.6"}, }, } policy := group.NewThresholdDecisionPolicy( @@ -505,7 +504,7 @@ func (s *TestSuite) TestTallyProposalsAtVPEnd_GroupMemberLeaving() { proposalRes, err := s.groupKeeper.SubmitProposal(s.ctx, &group.MsgSubmitProposal{ GroupPolicyAddress: accountAddr, - Proposers: []string{addr1.String()}, + Proposers: []string{s.addrsStr[0]}, Messages: nil, }) s.Require().NoError(err) @@ -513,13 +512,13 @@ func (s *TestSuite) TestTallyProposalsAtVPEnd_GroupMemberLeaving() { // group members vote _, err = s.groupKeeper.Vote(s.ctx, &group.MsgVote{ ProposalId: proposalRes.ProposalId, - Voter: addr1.String(), + Voter: s.addrsStr[0], Option: group.VOTE_OPTION_NO, }) s.Require().NoError(err) _, err = s.groupKeeper.Vote(s.ctx, &group.MsgVote{ ProposalId: proposalRes.ProposalId, - Voter: addr2.String(), + Voter: s.addrsStr[1], Option: group.VOTE_OPTION_NO, }) s.Require().NoError(err) @@ -538,7 +537,7 @@ func (s *TestSuite) TestTallyProposalsAtVPEnd_GroupMemberLeaving() { // member 2 (high weight) leaves group. _, err = s.groupKeeper.LeaveGroup(ctx, &group.MsgLeaveGroup{ - Address: addr2.String(), + Address: s.addrsStr[1], GroupId: groupRes.GroupId, }) s.Require().NoError(err) diff --git a/x/group/keeper/msg_server.go b/x/group/keeper/msg_server.go index 34bb77a7a5..caf0a1a47b 100644 --- a/x/group/keeper/msg_server.go +++ b/x/group/keeper/msg_server.go @@ -401,10 +401,15 @@ func (k Keeper) CreateGroupPolicy(ctx context.Context, msg *group.MsgCreateGroup break } + accountStrAddr, err := k.accKeeper.AddressCodec().BytesToString(accountAddr) + if err != nil { + return nil, errorsmod.Wrap(err, "could not generate address") + } + groupPolicy, err := group.NewGroupPolicyInfo( - accountAddr, + accountStrAddr, msg.GetGroupID(), - reqGroupAdmin, + msg.GetAdmin(), msg.GetMetadata(), 1, policy, @@ -418,11 +423,11 @@ func (k Keeper) CreateGroupPolicy(ctx context.Context, msg *group.MsgCreateGroup return nil, errorsmod.Wrap(err, "could not create group policy") } - if err := k.environment.EventService.EventManager(ctx).Emit(&group.EventCreateGroupPolicy{Address: accountAddr.String()}); err != nil { + if err := k.environment.EventService.EventManager(ctx).Emit(&group.EventCreateGroupPolicy{Address: accountStrAddr}); err != nil { return nil, err } - return &group.MsgCreateGroupPolicyResponse{Address: accountAddr.String()}, nil + return &group.MsgCreateGroupPolicyResponse{Address: accountStrAddr}, nil } func (k Keeper) UpdateGroupPolicyAdmin(ctx context.Context, msg *group.MsgUpdateGroupPolicyAdmin) (*group.MsgUpdateGroupPolicyAdminResponse, error) { @@ -579,7 +584,7 @@ func (k Keeper) SubmitProposal(ctx context.Context, msg *group.MsgSubmitProposal } // Check that if the messages require signers, they are all equal to the given account address of group policy. - if err := ensureMsgAuthZ(msgs, groupPolicyAddr, k.cdc); err != nil { + if err := ensureMsgAuthZ(msgs, groupPolicyAddr, k.cdc, k.accKeeper.AddressCodec()); err != nil { return nil, err } diff --git a/x/group/keeper/msg_server_test.go b/x/group/keeper/msg_server_test.go index b3024521d2..a5f3e58de8 100644 --- a/x/group/keeper/msg_server_test.go +++ b/x/group/keeper/msg_server_test.go @@ -41,8 +41,10 @@ func (s *TestSuite) createGroupAndGetMembers(numMembers int) []*group.GroupMembe addressPool := simtestutil.CreateIncrementalAccounts(numMembers) members := make([]group.MemberRequest, numMembers) for i := 0; i < len(members); i++ { + addr, err := s.accountKeeper.AddressCodec().BytesToString(addressPool[i]) + s.Require().NoError(err) members[i] = group.MemberRequest{ - Address: addressPool[i].String(), + Address: addr, Weight: "1", } s.accountKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes() @@ -64,17 +66,11 @@ func (s *TestSuite) createGroupAndGetMembers(numMembers int) []*group.GroupMembe } func (s *TestSuite) TestCreateGroup() { - addrs := s.addrs - addr1 := addrs[0] - addr3 := addrs[2] - addr5 := addrs[4] - addr6 := addrs[5] - members := []group.MemberRequest{{ - Address: addr5.String(), + Address: s.addrsStr[4], Weight: "1", }, { - Address: addr6.String(), + Address: s.addrsStr[5], Weight: "2", }} @@ -82,14 +78,14 @@ func (s *TestSuite) TestCreateGroup() { { Id: s.groupID, Version: 1, - Admin: addr1.String(), + Admin: s.addrsStr[0], TotalWeight: "3", CreatedAt: s.blockTime, }, { Id: 2, Version: 1, - Admin: addr1.String(), + Admin: s.addrsStr[0], TotalWeight: "3", CreatedAt: s.blockTime, }, @@ -103,14 +99,14 @@ func (s *TestSuite) TestCreateGroup() { }{ "all good": { req: &group.MsgCreateGroup{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: members, }, expGroups: expGroups, }, "group metadata: metadata too long": { req: &group.MsgCreateGroup{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: members, Metadata: strings.Repeat("a", 256), }, @@ -119,7 +115,7 @@ func (s *TestSuite) TestCreateGroup() { }, "invalid member address": { req: &group.MsgCreateGroup{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: []group.MemberRequest{{ Address: "invalid", Weight: "1", @@ -130,9 +126,9 @@ func (s *TestSuite) TestCreateGroup() { }, "member metadata too long": { req: &group.MsgCreateGroup{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: []group.MemberRequest{{ - Address: addr3.String(), + Address: s.addrsStr[2], Weight: "1", Metadata: strings.Repeat("a", 256), }}, @@ -142,9 +138,9 @@ func (s *TestSuite) TestCreateGroup() { }, "zero member weight": { req: &group.MsgCreateGroup{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: []group.MemberRequest{{ - Address: addr3.String(), + Address: s.addrsStr[2], Weight: "0", }}, }, @@ -153,9 +149,9 @@ func (s *TestSuite) TestCreateGroup() { }, "invalid member weight - Inf": { req: &group.MsgCreateGroup{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: []group.MemberRequest{{ - Address: addr3.String(), + Address: s.addrsStr[2], Weight: "inf", }}, }, @@ -164,9 +160,9 @@ func (s *TestSuite) TestCreateGroup() { }, "invalid member weight - NaN": { req: &group.MsgCreateGroup{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: []group.MemberRequest{{ - Address: addr3.String(), + Address: s.addrsStr[2], Weight: "NaN", }}, }, @@ -225,7 +221,7 @@ func (s *TestSuite) TestCreateGroup() { } // query groups by admin - groupsRes, err := s.groupKeeper.GroupsByAdmin(s.ctx, &group.QueryGroupsByAdminRequest{Admin: addr1.String()}) + groupsRes, err := s.groupKeeper.GroupsByAdmin(s.ctx, &group.QueryGroupsByAdminRequest{Admin: s.addrsStr[0]}) s.Require().NoError(err) loadedGroups := groupsRes.Groups s.Require().Equal(len(spec.expGroups), len(loadedGroups)) @@ -242,20 +238,14 @@ func (s *TestSuite) TestCreateGroup() { } func (s *TestSuite) TestUpdateGroupMembers() { - addrs := s.addrs - addr3 := addrs[2] - addr4 := addrs[3] - addr5 := addrs[4] - addr6 := addrs[5] - - member1 := addr5.String() - member2 := addr6.String() + member1 := s.addrsStr[4] + member2 := s.addrsStr[5] members := []group.MemberRequest{{ Address: member1, Weight: "1", }} - myAdmin := addr4.String() + myAdmin := s.addrsStr[3] groupRes, err := s.groupKeeper.CreateGroup(s.ctx, &group.MsgCreateGroup{ Admin: myAdmin, Members: members, @@ -460,7 +450,7 @@ func (s *TestSuite) TestUpdateGroupMembers() { GroupId: groupID, Admin: myAdmin, MemberUpdates: []group.MemberRequest{{ - Address: addr4.String(), + Address: s.addrsStr[3], Weight: "0", }}, }, @@ -483,7 +473,7 @@ func (s *TestSuite) TestUpdateGroupMembers() { "with wrong admin": { req: &group.MsgUpdateGroupMembers{ GroupId: groupID, - Admin: addr3.String(), + Admin: s.addrsStr[2], MemberUpdates: []group.MemberRequest{{ Address: member1, Weight: "2", @@ -578,18 +568,12 @@ func (s *TestSuite) TestUpdateGroupMembers() { } func (s *TestSuite) TestUpdateGroupAdmin() { - addrs := s.addrs - addr1 := addrs[0] - addr2 := addrs[1] - addr3 := addrs[2] - addr4 := addrs[3] - members := []group.MemberRequest{{ - Address: addr1.String(), + Address: s.addrsStr[0], Weight: "1", }} - oldAdmin := addr2.String() - newAdmin := addr3.String() + oldAdmin := s.addrsStr[1] + newAdmin := s.addrsStr[2] groupRes, err := s.groupKeeper.CreateGroup(s.ctx, &group.MsgCreateGroup{ Admin: oldAdmin, Members: members, @@ -637,7 +621,7 @@ func (s *TestSuite) TestUpdateGroupAdmin() { "with wrong admin": { req: &group.MsgUpdateGroupAdmin{ GroupId: groupID, - Admin: addr4.String(), + Admin: s.addrsStr[3], NewAdmin: newAdmin, }, expErr: true, @@ -696,11 +680,7 @@ func (s *TestSuite) TestUpdateGroupAdmin() { } func (s *TestSuite) TestUpdateGroupMetadata() { - addrs := s.addrs - addr1 := addrs[0] - addr3 := addrs[2] - - oldAdmin := addr1.String() + oldAdmin := s.addrsStr[0] groupID := s.groupID specs := map[string]struct { @@ -724,7 +704,7 @@ func (s *TestSuite) TestUpdateGroupMetadata() { "with wrong admin": { req: &group.MsgUpdateGroupMetadata{ GroupId: groupID, - Admin: addr3.String(), + Admin: s.addrsStr[2], }, expErr: true, expStored: &group.GroupInfo{ @@ -773,19 +753,13 @@ func (s *TestSuite) TestUpdateGroupMetadata() { } func (s *TestSuite) TestCreateGroupWithPolicy() { - addrs := s.addrs - addr1 := addrs[0] - addr3 := addrs[2] - addr5 := addrs[4] - addr6 := addrs[5] - s.setNextAccount() members := []group.MemberRequest{{ - Address: addr5.String(), + Address: s.addrsStr[4], Weight: "1", }, { - Address: addr6.String(), + Address: s.addrsStr[5], Weight: "2", }} @@ -798,7 +772,7 @@ func (s *TestSuite) TestCreateGroupWithPolicy() { }{ "all good": { req: &group.MsgCreateGroupWithPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: members, GroupPolicyAsAdmin: false, }, @@ -813,7 +787,7 @@ func (s *TestSuite) TestCreateGroupWithPolicy() { }, "group policy as admin is true": { req: &group.MsgCreateGroupWithPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: members, GroupPolicyAsAdmin: true, }, @@ -828,7 +802,7 @@ func (s *TestSuite) TestCreateGroupWithPolicy() { }, "group metadata too long": { req: &group.MsgCreateGroupWithPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: members, GroupPolicyAsAdmin: false, GroupMetadata: strings.Repeat("a", 256), @@ -843,7 +817,7 @@ func (s *TestSuite) TestCreateGroupWithPolicy() { }, "group policy metadata: metadata too long": { req: &group.MsgCreateGroupWithPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: members, GroupPolicyAsAdmin: false, GroupPolicyMetadata: strings.Repeat("a", 256), @@ -858,9 +832,9 @@ func (s *TestSuite) TestCreateGroupWithPolicy() { }, "member metadata too long": { req: &group.MsgCreateGroupWithPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: []group.MemberRequest{{ - Address: addr3.String(), + Address: s.addrsStr[2], Weight: "1", Metadata: strings.Repeat("a", 256), }}, @@ -876,9 +850,9 @@ func (s *TestSuite) TestCreateGroupWithPolicy() { }, "zero member weight": { req: &group.MsgCreateGroupWithPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: []group.MemberRequest{{ - Address: addr3.String(), + Address: s.addrsStr[2], Weight: "0", }}, GroupPolicyAsAdmin: false, @@ -893,7 +867,7 @@ func (s *TestSuite) TestCreateGroupWithPolicy() { }, "invalid member address": { req: &group.MsgCreateGroupWithPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: []group.MemberRequest{{ Address: "invalid", Weight: "1", @@ -910,7 +884,7 @@ func (s *TestSuite) TestCreateGroupWithPolicy() { }, "decision policy threshold > total group weight": { req: &group.MsgCreateGroupWithPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: members, GroupPolicyAsAdmin: false, }, @@ -999,13 +973,9 @@ func (s *TestSuite) TestCreateGroupWithPolicy() { } func (s *TestSuite) TestCreateGroupPolicy() { - addrs := s.addrs - addr1 := addrs[0] - addr4 := addrs[3] - s.setNextAccount() groupRes, err := s.groupKeeper.CreateGroup(s.ctx, &group.MsgCreateGroup{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: nil, }) s.Require().NoError(err) @@ -1019,7 +989,7 @@ func (s *TestSuite) TestCreateGroupPolicy() { }{ "all good": { req: &group.MsgCreateGroupPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], GroupId: myGroupID, }, policy: group.NewThresholdDecisionPolicy( @@ -1030,7 +1000,7 @@ func (s *TestSuite) TestCreateGroupPolicy() { }, "all good with percentage decision policy": { req: &group.MsgCreateGroupPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], GroupId: myGroupID, }, policy: group.NewPercentageDecisionPolicy( @@ -1041,7 +1011,7 @@ func (s *TestSuite) TestCreateGroupPolicy() { }, "decision policy threshold > total group weight": { req: &group.MsgCreateGroupPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], GroupId: myGroupID, }, policy: group.NewThresholdDecisionPolicy( @@ -1052,7 +1022,7 @@ func (s *TestSuite) TestCreateGroupPolicy() { }, "group id does not exists": { req: &group.MsgCreateGroupPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], GroupId: 9999, }, policy: group.NewThresholdDecisionPolicy( @@ -1065,7 +1035,7 @@ func (s *TestSuite) TestCreateGroupPolicy() { }, "admin not group admin": { req: &group.MsgCreateGroupPolicy{ - Admin: addr4.String(), + Admin: s.addrsStr[3], GroupId: myGroupID, }, policy: group.NewThresholdDecisionPolicy( @@ -1078,7 +1048,7 @@ func (s *TestSuite) TestCreateGroupPolicy() { }, "metadata too long": { req: &group.MsgCreateGroupPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], GroupId: myGroupID, Metadata: strings.Repeat("a", 256), }, @@ -1092,7 +1062,7 @@ func (s *TestSuite) TestCreateGroupPolicy() { }, "percentage decision policy with negative value": { req: &group.MsgCreateGroupPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], GroupId: myGroupID, }, policy: group.NewPercentageDecisionPolicy( @@ -1105,7 +1075,7 @@ func (s *TestSuite) TestCreateGroupPolicy() { }, "percentage decision policy with value greater than 1": { req: &group.MsgCreateGroupPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], GroupId: myGroupID, }, policy: group.NewPercentageDecisionPolicy( @@ -1162,9 +1132,13 @@ func (s *TestSuite) TestUpdateGroupPolicyAdmin() { addrs := s.addrs addr1 := addrs[0] addr2 := addrs[1] - addr5 := addrs[4] - admin, newAdmin := addr1, addr2 + admin := addr1 + adminAddr, err := s.accountKeeper.AddressCodec().BytesToString(admin) + s.Require().NoError(err) + newAdmin, err := s.accountKeeper.AddressCodec().BytesToString(addr2) + s.Require().NoError(err) + policy := group.NewThresholdDecisionPolicy( "1", time.Second, @@ -1181,12 +1155,12 @@ func (s *TestSuite) TestUpdateGroupPolicyAdmin() { }{ "with wrong admin": { req: &group.MsgUpdateGroupPolicyAdmin{ - Admin: addr5.String(), + Admin: s.addrsStr[4], GroupPolicyAddress: groupPolicyAddr, - NewAdmin: newAdmin.String(), + NewAdmin: newAdmin, }, expGroupPolicy: &group.GroupPolicyInfo{ - Admin: admin.String(), + Admin: adminAddr, Address: groupPolicyAddr, GroupId: myGroupID, Version: 2, @@ -1198,12 +1172,12 @@ func (s *TestSuite) TestUpdateGroupPolicyAdmin() { }, "with wrong group policy": { req: &group.MsgUpdateGroupPolicyAdmin{ - Admin: admin.String(), - GroupPolicyAddress: addr5.String(), - NewAdmin: newAdmin.String(), + Admin: adminAddr, + GroupPolicyAddress: s.addrsStr[4], + NewAdmin: newAdmin, }, expGroupPolicy: &group.GroupPolicyInfo{ - Admin: admin.String(), + Admin: adminAddr, Address: groupPolicyAddr, GroupId: myGroupID, Version: 2, @@ -1215,12 +1189,12 @@ func (s *TestSuite) TestUpdateGroupPolicyAdmin() { }, "correct data": { req: &group.MsgUpdateGroupPolicyAdmin{ - Admin: admin.String(), + Admin: adminAddr, GroupPolicyAddress: groupPolicyAddr, - NewAdmin: newAdmin.String(), + NewAdmin: newAdmin, }, expGroupPolicy: &group.GroupPolicyInfo{ - Admin: newAdmin.String(), + Admin: newAdmin, Address: groupPolicyAddr, GroupId: myGroupID, Version: 2, @@ -1231,12 +1205,12 @@ func (s *TestSuite) TestUpdateGroupPolicyAdmin() { }, "with invalid new admin address": { req: &group.MsgUpdateGroupPolicyAdmin{ - Admin: admin.String(), + Admin: adminAddr, GroupPolicyAddress: groupPolicyAddr, NewAdmin: "%s", }, expGroupPolicy: &group.GroupPolicyInfo{ - Admin: admin.String(), + Admin: adminAddr, Address: groupPolicyAddr, GroupId: myGroupID, Version: 2, @@ -1271,10 +1245,11 @@ func (s *TestSuite) TestUpdateGroupPolicyAdmin() { func (s *TestSuite) TestUpdateGroupPolicyDecisionPolicy() { addrs := s.addrs - addr1 := addrs[0] - addr5 := addrs[4] - admin := addr1 + admin := addrs[0] + adminAddr, err := s.accountKeeper.AddressCodec().BytesToString(admin) + s.Require().NoError(err) + policy := group.NewThresholdDecisionPolicy( "1", time.Second, @@ -1294,7 +1269,7 @@ func (s *TestSuite) TestUpdateGroupPolicyDecisionPolicy() { }{ "with wrong admin": { req: &group.MsgUpdateGroupPolicyDecisionPolicy{ - Admin: addr5.String(), + Admin: s.addrsStr[4], GroupPolicyAddress: groupPolicyAddr, }, policy: policy, @@ -1304,8 +1279,8 @@ func (s *TestSuite) TestUpdateGroupPolicyDecisionPolicy() { }, "with wrong group policy": { req: &group.MsgUpdateGroupPolicyDecisionPolicy{ - Admin: admin.String(), - GroupPolicyAddress: addr5.String(), + Admin: adminAddr, + GroupPolicyAddress: s.addrsStr[4], }, policy: policy, expGroupPolicy: &group.GroupPolicyInfo{}, @@ -1314,7 +1289,7 @@ func (s *TestSuite) TestUpdateGroupPolicyDecisionPolicy() { }, "invalid percentage decision policy with negative value": { req: &group.MsgUpdateGroupPolicyDecisionPolicy{ - Admin: admin.String(), + Admin: adminAddr, GroupPolicyAddress: groupPolicyAddr, }, policy: group.NewPercentageDecisionPolicy( @@ -1323,7 +1298,7 @@ func (s *TestSuite) TestUpdateGroupPolicyDecisionPolicy() { 0, ), expGroupPolicy: &group.GroupPolicyInfo{ - Admin: admin.String(), + Admin: adminAddr, Address: groupPolicyAddr, GroupId: myGroupID, Version: 2, @@ -1335,7 +1310,7 @@ func (s *TestSuite) TestUpdateGroupPolicyDecisionPolicy() { }, "invalid percentage decision policy with value greater than 1": { req: &group.MsgUpdateGroupPolicyDecisionPolicy{ - Admin: admin.String(), + Admin: adminAddr, GroupPolicyAddress: groupPolicyAddr, }, policy: group.NewPercentageDecisionPolicy( @@ -1344,7 +1319,7 @@ func (s *TestSuite) TestUpdateGroupPolicyDecisionPolicy() { 0, ), expGroupPolicy: &group.GroupPolicyInfo{ - Admin: admin.String(), + Admin: adminAddr, Address: groupPolicyAddr, GroupId: myGroupID, Version: 2, @@ -1356,7 +1331,7 @@ func (s *TestSuite) TestUpdateGroupPolicyDecisionPolicy() { }, "correct data": { req: &group.MsgUpdateGroupPolicyDecisionPolicy{ - Admin: admin.String(), + Admin: adminAddr, GroupPolicyAddress: groupPolicyAddr, }, policy: group.NewThresholdDecisionPolicy( @@ -1365,7 +1340,7 @@ func (s *TestSuite) TestUpdateGroupPolicyDecisionPolicy() { 0, ), expGroupPolicy: &group.GroupPolicyInfo{ - Admin: admin.String(), + Admin: adminAddr, Address: groupPolicyAddr, GroupId: myGroupID, Version: 2, @@ -1380,7 +1355,7 @@ func (s *TestSuite) TestUpdateGroupPolicyDecisionPolicy() { return s.createGroupAndGroupPolicy(admin, nil, policy) }, req: &group.MsgUpdateGroupPolicyDecisionPolicy{ - Admin: admin.String(), + Admin: adminAddr, GroupPolicyAddress: groupPolicyAddr, }, policy: group.NewPercentageDecisionPolicy( @@ -1389,7 +1364,7 @@ func (s *TestSuite) TestUpdateGroupPolicyDecisionPolicy() { 0, ), expGroupPolicy: &group.GroupPolicyInfo{ - Admin: admin.String(), + Admin: adminAddr, DecisionPolicy: nil, Version: 2, CreatedAt: s.blockTime, @@ -1435,11 +1410,10 @@ func (s *TestSuite) TestUpdateGroupPolicyDecisionPolicy() { } func (s *TestSuite) TestUpdateGroupPolicyMetadata() { - addrs := s.addrs - addr1 := addrs[0] - addr5 := addrs[4] + admin := s.addrs[0] + adminAddr, err := s.accountKeeper.AddressCodec().BytesToString(admin) + s.Require().NoError(err) - admin := addr1 policy := group.NewThresholdDecisionPolicy( "1", time.Second, @@ -1457,7 +1431,7 @@ func (s *TestSuite) TestUpdateGroupPolicyMetadata() { }{ "with wrong admin": { req: &group.MsgUpdateGroupPolicyMetadata{ - Admin: addr5.String(), + Admin: s.addrsStr[4], GroupPolicyAddress: groupPolicyAddr, }, expGroupPolicy: &group.GroupPolicyInfo{}, @@ -1466,8 +1440,8 @@ func (s *TestSuite) TestUpdateGroupPolicyMetadata() { }, "with wrong group policy": { req: &group.MsgUpdateGroupPolicyMetadata{ - Admin: admin.String(), - GroupPolicyAddress: addr5.String(), + Admin: adminAddr, + GroupPolicyAddress: s.addrsStr[4], }, expGroupPolicy: &group.GroupPolicyInfo{}, expErr: true, @@ -1475,7 +1449,7 @@ func (s *TestSuite) TestUpdateGroupPolicyMetadata() { }, "with metadata too long": { req: &group.MsgUpdateGroupPolicyMetadata{ - Admin: admin.String(), + Admin: adminAddr, GroupPolicyAddress: groupPolicyAddr, Metadata: strings.Repeat("a", 1001), }, @@ -1485,11 +1459,11 @@ func (s *TestSuite) TestUpdateGroupPolicyMetadata() { }, "correct data": { req: &group.MsgUpdateGroupPolicyMetadata{ - Admin: admin.String(), + Admin: adminAddr, GroupPolicyAddress: groupPolicyAddr, }, expGroupPolicy: &group.GroupPolicyInfo{ - Admin: admin.String(), + Admin: adminAddr, Address: groupPolicyAddr, GroupId: myGroupID, Version: 2, @@ -1540,12 +1514,12 @@ func (s *TestSuite) TestUpdateGroupPolicyMetadata() { func (s *TestSuite) TestGroupPoliciesByAdminOrGroup() { addrs := s.addrs - addr2 := addrs[1] - admin := addr2 + admin, err := s.accountKeeper.AddressCodec().BytesToString(addrs[1]) + s.Require().NoError(err) groupRes, err := s.groupKeeper.CreateGroup(s.ctx, &group.MsgCreateGroup{ - Admin: admin.String(), + Admin: admin, Members: nil, }) s.Require().NoError(err) @@ -1573,7 +1547,7 @@ func (s *TestSuite) TestGroupPoliciesByAdminOrGroup() { expectAccs := make([]*group.GroupPolicyInfo, count) for i := range expectAccs { req := &group.MsgCreateGroupPolicy{ - Admin: admin.String(), + Admin: admin, GroupId: myGroupID, } err := req.SetDecisionPolicy(policies[i]) @@ -1585,7 +1559,7 @@ func (s *TestSuite) TestGroupPoliciesByAdminOrGroup() { expectAcc := &group.GroupPolicyInfo{ Address: res.Address, - Admin: admin.String(), + Admin: admin, GroupId: myGroupID, Version: uint64(1), CreatedAt: s.blockTime, @@ -1621,7 +1595,7 @@ func (s *TestSuite) TestGroupPoliciesByAdminOrGroup() { // no group policy noPolicies, err := s.groupKeeper.GroupPoliciesByAdmin(s.ctx, &group.QueryGroupPoliciesByAdminRequest{ - Admin: addrs[2].String(), + Admin: s.addrsStr[2], }) s.Require().NoError(err) policyAccs = noPolicies.GroupPolicies @@ -1629,7 +1603,7 @@ func (s *TestSuite) TestGroupPoliciesByAdminOrGroup() { // query group policy by admin policiesByAdminRes, err := s.groupKeeper.GroupPoliciesByAdmin(s.ctx, &group.QueryGroupPoliciesByAdminRequest{ - Admin: admin.String(), + Admin: admin, }) s.Require().NoError(err) policyAccs = policiesByAdminRes.GroupPolicies @@ -1653,17 +1627,15 @@ func (s *TestSuite) TestGroupPoliciesByAdminOrGroup() { func (s *TestSuite) TestSubmitProposal() { addrs := s.addrs - addr1 := addrs[0] addr2 := addrs[1] // Has weight 2 - addr4 := addrs[3] - addr5 := addrs[4] // Has weight 1 myGroupID := s.groupID - accountAddr := s.groupPolicyAddr + accountAddr, err := s.accountKeeper.AddressCodec().BytesToString(s.groupPolicyAddr) + s.Require().NoError(err) // Create a new group policy to test TRY_EXEC policyReq := &group.MsgCreateGroupPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], GroupId: myGroupID, } noMinExecPeriodPolicy := group.NewThresholdDecisionPolicy( @@ -1671,7 +1643,7 @@ func (s *TestSuite) TestSubmitProposal() { time.Second, 0, // no MinExecutionPeriod to test TRY_EXEC ) - err := policyReq.SetDecisionPolicy(noMinExecPeriodPolicy) + err = policyReq.SetDecisionPolicy(noMinExecPeriodPolicy) s.Require().NoError(err) s.setNextAccount() res, err := s.groupKeeper.CreateGroupPolicy(s.ctx, policyReq) @@ -1695,11 +1667,11 @@ func (s *TestSuite) TestSubmitProposal() { msgSend := &banktypes.MsgSend{ FromAddress: res.Address, - ToAddress: addr2.String(), + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("test", 100)}, } defaultProposal := group.Proposal{ - GroupPolicyAddress: accountAddr.String(), + GroupPolicyAddress: accountAddr, Status: group.PROPOSAL_STATUS_SUBMITTED, FinalTallyResult: group.TallyResult{ YesCount: "0", @@ -1720,20 +1692,20 @@ func (s *TestSuite) TestSubmitProposal() { }{ "all good with minimal fields set": { req: &group.MsgSubmitProposal{ - GroupPolicyAddress: accountAddr.String(), - Proposers: []string{addr2.String()}, + GroupPolicyAddress: accountAddr, + Proposers: []string{s.addrsStr[1]}, }, expProposal: defaultProposal, postRun: func(sdkCtx sdk.Context) {}, }, "all good with good msg payload": { req: &group.MsgSubmitProposal{ - GroupPolicyAddress: accountAddr.String(), - Proposers: []string{addr2.String()}, + GroupPolicyAddress: accountAddr, + Proposers: []string{s.addrsStr[1]}, }, msgs: []sdk.Msg{&banktypes.MsgSend{ - FromAddress: accountAddr.String(), - ToAddress: addr2.String(), + FromAddress: accountAddr, + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("token", 100)}, }}, expProposal: defaultProposal, @@ -1741,8 +1713,8 @@ func (s *TestSuite) TestSubmitProposal() { }, "title != metadata.title": { req: &group.MsgSubmitProposal{ - GroupPolicyAddress: accountAddr.String(), - Proposers: []string{addr2.String()}, + GroupPolicyAddress: accountAddr, + Proposers: []string{s.addrsStr[1]}, Metadata: "{\"title\":\"title\",\"summary\":\"description\"}", Title: "title2", Summary: "description", @@ -1753,8 +1725,8 @@ func (s *TestSuite) TestSubmitProposal() { }, "summary != metadata.summary": { req: &group.MsgSubmitProposal{ - GroupPolicyAddress: accountAddr.String(), - Proposers: []string{addr2.String()}, + GroupPolicyAddress: accountAddr, + Proposers: []string{s.addrsStr[1]}, Metadata: "{\"title\":\"title\",\"summary\":\"description of proposal\"}", Title: "title", Summary: "description", @@ -1765,8 +1737,8 @@ func (s *TestSuite) TestSubmitProposal() { }, "metadata too long": { req: &group.MsgSubmitProposal{ - GroupPolicyAddress: accountAddr.String(), - Proposers: []string{addr2.String()}, + GroupPolicyAddress: accountAddr, + Proposers: []string{s.addrsStr[1]}, Metadata: strings.Repeat("a", 256), }, expErr: true, @@ -1775,8 +1747,8 @@ func (s *TestSuite) TestSubmitProposal() { }, "summary too long": { req: &group.MsgSubmitProposal{ - GroupPolicyAddress: accountAddr.String(), - Proposers: []string{addr2.String()}, + GroupPolicyAddress: accountAddr, + Proposers: []string{s.addrsStr[1]}, Metadata: "{\"title\":\"title\",\"summary\":\"description\"}", Summary: strings.Repeat("a", 256*40), }, @@ -1786,7 +1758,7 @@ func (s *TestSuite) TestSubmitProposal() { }, "group policy required": { req: &group.MsgSubmitProposal{ - Proposers: []string{addr2.String()}, + Proposers: []string{s.addrsStr[1]}, }, expErr: true, expErrMsg: "empty address string is not allowed", @@ -1794,8 +1766,8 @@ func (s *TestSuite) TestSubmitProposal() { }, "existing group policy required": { req: &group.MsgSubmitProposal{ - GroupPolicyAddress: addr1.String(), - Proposers: []string{addr2.String()}, + GroupPolicyAddress: s.addrsStr[0], + Proposers: []string{s.addrsStr[1]}, }, expErr: true, expErrMsg: "not found", @@ -1804,7 +1776,7 @@ func (s *TestSuite) TestSubmitProposal() { "decision policy threshold > total group weight": { req: &group.MsgSubmitProposal{ GroupPolicyAddress: bigThresholdAddr, - Proposers: []string{addr2.String()}, + Proposers: []string{s.addrsStr[1]}, }, expErr: false, expProposal: group.Proposal{ @@ -1817,8 +1789,8 @@ func (s *TestSuite) TestSubmitProposal() { }, "only group members can create a proposal": { req: &group.MsgSubmitProposal{ - GroupPolicyAddress: accountAddr.String(), - Proposers: []string{addr4.String()}, + GroupPolicyAddress: accountAddr, + Proposers: []string{s.addrsStr[3]}, }, expErr: true, expErrMsg: "not in group", @@ -1826,8 +1798,8 @@ func (s *TestSuite) TestSubmitProposal() { }, "all proposers must be in group": { req: &group.MsgSubmitProposal{ - GroupPolicyAddress: accountAddr.String(), - Proposers: []string{addr2.String(), addr4.String()}, + GroupPolicyAddress: accountAddr, + Proposers: []string{s.addrsStr[1], s.addrsStr[3]}, }, expErr: true, expErrMsg: "not in group", @@ -1835,8 +1807,8 @@ func (s *TestSuite) TestSubmitProposal() { }, "admin that is not a group member can not create proposal": { req: &group.MsgSubmitProposal{ - GroupPolicyAddress: accountAddr.String(), - Proposers: []string{addr1.String()}, + GroupPolicyAddress: accountAddr, + Proposers: []string{s.addrsStr[0]}, }, expErr: true, expErrMsg: "not in group", @@ -1844,10 +1816,10 @@ func (s *TestSuite) TestSubmitProposal() { }, "reject msgs that are not authz by group policy": { req: &group.MsgSubmitProposal{ - GroupPolicyAddress: accountAddr.String(), - Proposers: []string{addr2.String()}, + GroupPolicyAddress: accountAddr, + Proposers: []string{s.addrsStr[1]}, }, - msgs: []sdk.Msg{&testdata.TestMsg{Signers: []string{addr1.String()}}}, + msgs: []sdk.Msg{&testdata.TestMsg{Signers: []string{s.addrsStr[0]}}}, expErr: true, expErrMsg: "msg does not have group policy authorization", postRun: func(sdkCtx sdk.Context) {}, @@ -1860,7 +1832,7 @@ func (s *TestSuite) TestSubmitProposal() { }, req: &group.MsgSubmitProposal{ GroupPolicyAddress: res.Address, - Proposers: []string{addr2.String()}, + Proposers: []string{s.addrsStr[1]}, Exec: group.Exec_EXEC_TRY, }, msgs: []sdk.Msg{msgSend}, @@ -1890,7 +1862,7 @@ func (s *TestSuite) TestSubmitProposal() { "with try exec, not enough yes votes for proposal to pass": { req: &group.MsgSubmitProposal{ GroupPolicyAddress: res.Address, - Proposers: []string{addr5.String()}, + Proposers: []string{s.addrsStr[4]}, Exec: group.Exec_EXEC_TRY, }, msgs: []sdk.Msg{msgSend}, @@ -1959,17 +1931,13 @@ func (s *TestSuite) TestSubmitProposal() { } func (s *TestSuite) TestWithdrawProposal() { - addrs := s.addrs - addr2 := addrs[1] - addr5 := addrs[4] - msgSend := &banktypes.MsgSend{ - FromAddress: s.groupPolicyAddr.String(), - ToAddress: addr2.String(), + FromAddress: s.groupPolicyStrAddr, + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("test", 100)}, } - proposers := []string{addr2.String()} + proposers := []string{s.addrsStr[1]} proposalID := submitProposal(s.ctx, s, []sdk.Msg{msgSend}, proposers) specs := map[string]struct { @@ -1983,7 +1951,7 @@ func (s *TestSuite) TestWithdrawProposal() { preRun: func(sdkCtx sdk.Context) uint64 { return submitProposal(s.ctx, s, []sdk.Msg{msgSend}, proposers) }, - admin: addr5.String(), + admin: s.addrsStr[4], expErrMsg: "unauthorized", postRun: func(sdkCtx sdk.Context) {}, }, @@ -2065,19 +2033,14 @@ func (s *TestSuite) TestWithdrawProposal() { } func (s *TestSuite) TestVote() { - addrs := s.addrs - addr1 := addrs[0] - addr2 := addrs[1] - addr3 := addrs[2] - addr4 := addrs[3] - addr5 := addrs[4] + addr5 := s.addrs[4] members := []group.MemberRequest{ - {Address: addr4.String(), Weight: "1"}, - {Address: addr3.String(), Weight: "2"}, + {Address: s.addrsStr[3], Weight: "1"}, + {Address: s.addrsStr[2], Weight: "2"}, } groupRes, err := s.groupKeeper.CreateGroup(s.ctx, &group.MsgCreateGroup{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: members, }) s.Require().NoError(err) @@ -2089,7 +2052,7 @@ func (s *TestSuite) TestVote() { 0, ) policyReq := &group.MsgCreateGroupPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], GroupId: myGroupID, } err = policyReq.SetDecisionPolicy(policy) @@ -2109,12 +2072,12 @@ func (s *TestSuite) TestVote() { req := &group.MsgSubmitProposal{ GroupPolicyAddress: accountAddr, - Proposers: []string{addr4.String()}, + Proposers: []string{s.addrsStr[3]}, Messages: nil, } msg := &banktypes.MsgSend{ FromAddress: accountAddr, - ToAddress: addr5.String(), + ToAddress: s.addrsStr[4], Amount: sdk.Coins{sdk.NewInt64Coin("test", 100)}, } err = req.SetMsgs([]sdk.Msg{msg}) @@ -2126,7 +2089,7 @@ func (s *TestSuite) TestVote() { // no group policy proposalsRes, err := s.groupKeeper.ProposalsByGroupPolicy(s.ctx, &group.QueryProposalsByGroupPolicyRequest{ - Address: addrs[2].String(), + Address: s.addrsStr[2], }) s.Require().NoError(err) proposals := proposalsRes.Proposals @@ -2174,7 +2137,7 @@ func (s *TestSuite) TestVote() { "vote yes": { req: &group.MsgVote{ ProposalId: myProposalID, - Voter: addr4.String(), + Voter: s.addrsStr[3], Option: group.VOTE_OPTION_YES, }, expTallyResult: group.TallyResult{ @@ -2190,7 +2153,7 @@ func (s *TestSuite) TestVote() { "with try exec": { req: &group.MsgVote{ ProposalId: myProposalID, - Voter: addr3.String(), + Voter: s.addrsStr[2], Option: group.VOTE_OPTION_YES, Exec: group.Exec_EXEC_TRY, }, @@ -2219,7 +2182,7 @@ func (s *TestSuite) TestVote() { "with try exec, not enough yes votes for proposal to pass": { req: &group.MsgVote{ ProposalId: myProposalID, - Voter: addr4.String(), + Voter: s.addrsStr[3], Option: group.VOTE_OPTION_YES, Exec: group.Exec_EXEC_TRY, }, @@ -2236,7 +2199,7 @@ func (s *TestSuite) TestVote() { "vote no": { req: &group.MsgVote{ ProposalId: myProposalID, - Voter: addr4.String(), + Voter: s.addrsStr[3], Option: group.VOTE_OPTION_NO, }, expTallyResult: group.TallyResult{ @@ -2252,7 +2215,7 @@ func (s *TestSuite) TestVote() { "vote abstain": { req: &group.MsgVote{ ProposalId: myProposalID, - Voter: addr4.String(), + Voter: s.addrsStr[3], Option: group.VOTE_OPTION_ABSTAIN, }, expTallyResult: group.TallyResult{ @@ -2268,7 +2231,7 @@ func (s *TestSuite) TestVote() { "vote veto": { req: &group.MsgVote{ ProposalId: myProposalID, - Voter: addr4.String(), + Voter: s.addrsStr[3], Option: group.VOTE_OPTION_NO_WITH_VETO, }, expTallyResult: group.TallyResult{ @@ -2284,7 +2247,7 @@ func (s *TestSuite) TestVote() { "apply decision policy early": { req: &group.MsgVote{ ProposalId: myProposalID, - Voter: addr3.String(), + Voter: s.addrsStr[2], Option: group.VOTE_OPTION_YES, }, expTallyResult: group.TallyResult{ @@ -2300,13 +2263,13 @@ func (s *TestSuite) TestVote() { "reject new votes when final decision is made already": { req: &group.MsgVote{ ProposalId: myProposalID, - Voter: addr4.String(), + Voter: s.addrsStr[3], Option: group.VOTE_OPTION_YES, }, doBefore: func(ctx context.Context) { _, err := s.groupKeeper.Vote(ctx, &group.MsgVote{ ProposalId: myProposalID, - Voter: addr3.String(), + Voter: s.addrsStr[2], Option: group.VOTE_OPTION_NO_WITH_VETO, Exec: 1, // Execute the proposal so that its status is final }) @@ -2319,7 +2282,7 @@ func (s *TestSuite) TestVote() { "metadata too long": { req: &group.MsgVote{ ProposalId: myProposalID, - Voter: addr4.String(), + Voter: s.addrsStr[3], Option: group.VOTE_OPTION_NO, Metadata: strings.Repeat("a", 256), }, @@ -2330,7 +2293,7 @@ func (s *TestSuite) TestVote() { "existing proposal required": { req: &group.MsgVote{ ProposalId: 999, - Voter: addr4.String(), + Voter: s.addrsStr[3], Option: group.VOTE_OPTION_NO, }, expErr: true, @@ -2340,7 +2303,7 @@ func (s *TestSuite) TestVote() { "empty vote option": { req: &group.MsgVote{ ProposalId: myProposalID, - Voter: addr4.String(), + Voter: s.addrsStr[3], }, expErr: true, expErrMsg: "vote option: value is empty", @@ -2349,7 +2312,7 @@ func (s *TestSuite) TestVote() { "invalid vote option": { req: &group.MsgVote{ ProposalId: myProposalID, - Voter: addr4.String(), + Voter: s.addrsStr[3], Option: 5, }, expErr: true, @@ -2359,7 +2322,7 @@ func (s *TestSuite) TestVote() { "voter must be in group": { req: &group.MsgVote{ ProposalId: myProposalID, - Voter: addr2.String(), + Voter: s.addrsStr[1], Option: group.VOTE_OPTION_NO, }, expErr: true, @@ -2369,7 +2332,7 @@ func (s *TestSuite) TestVote() { "admin that is not a group member can not vote": { req: &group.MsgVote{ ProposalId: myProposalID, - Voter: addr1.String(), + Voter: s.addrsStr[0], Option: group.VOTE_OPTION_NO, }, expErr: true, @@ -2379,7 +2342,7 @@ func (s *TestSuite) TestVote() { "on voting period end": { req: &group.MsgVote{ ProposalId: myProposalID, - Voter: addr4.String(), + Voter: s.addrsStr[3], Option: group.VOTE_OPTION_NO, }, srcCtx: s.sdkCtx.WithHeaderInfo(header.Info{Time: s.sdkCtx.HeaderInfo().Time.Add(time.Second)}), @@ -2390,7 +2353,7 @@ func (s *TestSuite) TestVote() { "vote closed already": { req: &group.MsgVote{ ProposalId: myProposalID, - Voter: addr4.String(), + Voter: s.addrsStr[3], Option: group.VOTE_OPTION_NO, }, doBefore: func(ctx context.Context) { @@ -2398,7 +2361,7 @@ func (s *TestSuite) TestVote() { _, err := s.groupKeeper.Vote(ctx, &group.MsgVote{ ProposalId: myProposalID, - Voter: addr3.String(), + Voter: s.addrsStr[2], Option: group.VOTE_OPTION_YES, Exec: 1, // Execute to close the proposal. }) @@ -2411,13 +2374,13 @@ func (s *TestSuite) TestVote() { "voted already": { req: &group.MsgVote{ ProposalId: myProposalID, - Voter: addr4.String(), + Voter: s.addrsStr[3], Option: group.VOTE_OPTION_NO, }, doBefore: func(ctx context.Context) { _, err := s.groupKeeper.Vote(ctx, &group.MsgVote{ ProposalId: myProposalID, - Voter: addr4.String(), + Voter: s.addrsStr[3], Option: group.VOTE_OPTION_YES, }) s.Require().NoError(err) @@ -2515,12 +2478,12 @@ func (s *TestSuite) TestVote() { s.T().Log("test tally result should not take into account the member who left the group") members = []group.MemberRequest{ - {Address: addr2.String(), Weight: "3"}, - {Address: addr3.String(), Weight: "2"}, - {Address: addr4.String(), Weight: "1"}, + {Address: s.addrsStr[1], Weight: "3"}, + {Address: s.addrsStr[2], Weight: "2"}, + {Address: s.addrsStr[3], Weight: "1"}, } reqCreate := &group.MsgCreateGroupWithPolicy{ - Admin: addr1.String(), + Admin: s.addrsStr[0], Members: members, GroupMetadata: "metadata", } @@ -2541,11 +2504,11 @@ func (s *TestSuite) TestVote() { groupID := result.GroupId reqProposal := &group.MsgSubmitProposal{ GroupPolicyAddress: policyAddr, - Proposers: []string{addr4.String()}, + Proposers: []string{s.addrsStr[3]}, } s.Require().NoError(reqProposal.SetMsgs([]sdk.Msg{&banktypes.MsgSend{ FromAddress: policyAddr, - ToAddress: addr5.String(), + ToAddress: s.addrsStr[4], Amount: sdk.Coins{sdk.NewInt64Coin("test", 100)}, }})) @@ -2554,7 +2517,7 @@ func (s *TestSuite) TestVote() { s.Require().NotNil(resSubmitProposal) proposalID := resSubmitProposal.ProposalId - for _, voter := range []string{addr4.String(), addr3.String(), addr2.String()} { + for _, voter := range []string{s.addrsStr[3], s.addrsStr[2], s.addrsStr[1]} { _, err := s.groupKeeper.Vote(s.ctx, &group.MsgVote{ProposalId: proposalID, Voter: voter, Option: group.VOTE_OPTION_YES}, ) @@ -2569,7 +2532,7 @@ func (s *TestSuite) TestVote() { tallyResult, err := s.groupKeeper.Tally(s.sdkCtx, *qProposals.Proposal, groupID) s.Require().NoError(err) - _, err = s.groupKeeper.LeaveGroup(s.ctx, &group.MsgLeaveGroup{Address: addr4.String(), GroupId: groupID}) + _, err = s.groupKeeper.LeaveGroup(s.ctx, &group.MsgLeaveGroup{Address: s.addrsStr[3], GroupId: groupID}) s.Require().NoError(err) tallyResult1, err := s.groupKeeper.Tally(s.sdkCtx, *qProposals.Proposal, groupID) @@ -2579,20 +2542,19 @@ func (s *TestSuite) TestVote() { func (s *TestSuite) TestExecProposal() { addrs := s.addrs - addr1 := addrs[0] addr2 := addrs[1] msgSend1 := &banktypes.MsgSend{ - FromAddress: s.groupPolicyAddr.String(), - ToAddress: addr2.String(), + FromAddress: s.groupPolicyStrAddr, + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("test", 100)}, } msgSend2 := &banktypes.MsgSend{ - FromAddress: s.groupPolicyAddr.String(), - ToAddress: addr2.String(), + FromAddress: s.groupPolicyStrAddr, + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("test", 10001)}, } - proposers := []string{addr2.String()} + proposers := []string{s.addrsStr[1]} specs := map[string]struct { srcBlockTime time.Time @@ -2731,7 +2693,7 @@ func (s *TestSuite) TestExecProposal() { // Wait after min execution period end before Exec sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx = sdkCtx.WithHeaderInfo(header.Info{Time: sdkCtx.HeaderInfo().Time.Add(minExecutionPeriod)}) // MinExecutionPeriod is 5s - _, err := s.groupKeeper.Exec(sdkCtx, &group.MsgExec{Executor: addr1.String(), ProposalId: myProposalID}) + _, err := s.groupKeeper.Exec(sdkCtx, &group.MsgExec{Executor: s.addrsStr[0], ProposalId: myProposalID}) s.Require().NoError(err) return myProposalID }, @@ -2767,7 +2729,7 @@ func (s *TestSuite) TestExecProposal() { sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx = sdkCtx.WithHeaderInfo(header.Info{Time: sdkCtx.HeaderInfo().Time.Add(minExecutionPeriod)}) // MinExecutionPeriod is 5s s.bankKeeper.EXPECT().Send(gomock.Any(), msgSend2).Return(nil, fmt.Errorf("error")) - _, err := s.groupKeeper.Exec(sdkCtx, &group.MsgExec{Executor: addr1.String(), ProposalId: myProposalID}) + _, err := s.groupKeeper.Exec(sdkCtx, &group.MsgExec{Executor: s.addrsStr[0], ProposalId: myProposalID}) s.bankKeeper.EXPECT().Send(gomock.Any(), msgSend2).Return(nil, nil) s.Require().NoError(err) @@ -2791,7 +2753,7 @@ func (s *TestSuite) TestExecProposal() { sdkCtx = sdkCtx.WithHeaderInfo(header.Info{Time: spec.srcBlockTime}) } - _, err := s.groupKeeper.Exec(sdkCtx, &group.MsgExec{Executor: addr1.String(), ProposalId: proposalID}) + _, err := s.groupKeeper.Exec(sdkCtx, &group.MsgExec{Executor: s.addrsStr[0], ProposalId: proposalID}) if spec.expErr { s.Require().Error(err) s.Require().Contains(err.Error(), spec.expErrMsg) @@ -2831,11 +2793,7 @@ func (s *TestSuite) TestExecProposal() { } func (s *TestSuite) TestExecPrunedProposalsAndVotes() { - addrs := s.addrs - addr1 := addrs[0] - addr2 := addrs[1] - - proposers := []string{addr2.String()} + proposers := []string{s.addrsStr[1]} specs := map[string]struct { srcBlockTime time.Time setupProposal func(ctx context.Context) uint64 @@ -2846,8 +2804,8 @@ func (s *TestSuite) TestExecPrunedProposalsAndVotes() { "proposal pruned after executor result success": { setupProposal: func(ctx context.Context) uint64 { msgSend1 := &banktypes.MsgSend{ - FromAddress: s.groupPolicyAddr.String(), - ToAddress: addr2.String(), + FromAddress: s.groupPolicyStrAddr, + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("test", 101)}, } msgs := []sdk.Msg{msgSend1} @@ -2860,8 +2818,8 @@ func (s *TestSuite) TestExecPrunedProposalsAndVotes() { "proposal with multiple messages pruned when executed with result success": { setupProposal: func(ctx context.Context) uint64 { msgSend1 := &banktypes.MsgSend{ - FromAddress: s.groupPolicyAddr.String(), - ToAddress: addr2.String(), + FromAddress: s.groupPolicyStrAddr, + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("test", 102)}, } s.bankKeeper.EXPECT().Send(gomock.Any(), msgSend1).Return(nil, nil).MaxTimes(2) @@ -2875,8 +2833,8 @@ func (s *TestSuite) TestExecPrunedProposalsAndVotes() { "proposal not pruned when not executed and rejected": { setupProposal: func(ctx context.Context) uint64 { msgSend1 := &banktypes.MsgSend{ - FromAddress: s.groupPolicyAddr.String(), - ToAddress: addr2.String(), + FromAddress: s.groupPolicyStrAddr, + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("test", 103)}, } msgs := []sdk.Msg{msgSend1} @@ -2887,8 +2845,8 @@ func (s *TestSuite) TestExecPrunedProposalsAndVotes() { "open proposal is not pruned which must not fail ": { setupProposal: func(ctx context.Context) uint64 { msgSend1 := &banktypes.MsgSend{ - FromAddress: s.groupPolicyAddr.String(), - ToAddress: addr2.String(), + FromAddress: s.groupPolicyStrAddr, + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("test", 104)}, } return submitProposal(ctx, s, []sdk.Msg{msgSend1}, proposers) @@ -2898,15 +2856,15 @@ func (s *TestSuite) TestExecPrunedProposalsAndVotes() { "proposal not pruned with group modified before tally": { setupProposal: func(ctx context.Context) uint64 { msgSend1 := &banktypes.MsgSend{ - FromAddress: s.groupPolicyAddr.String(), - ToAddress: addr2.String(), + FromAddress: s.groupPolicyStrAddr, + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("test", 105)}, } myProposalID := submitProposal(ctx, s, []sdk.Msg{msgSend1}, proposers) // then modify group _, err := s.groupKeeper.UpdateGroupMetadata(ctx, &group.MsgUpdateGroupMetadata{ - Admin: addr1.String(), + Admin: s.addrsStr[0], GroupId: s.groupID, }) s.Require().NoError(err) @@ -2917,15 +2875,15 @@ func (s *TestSuite) TestExecPrunedProposalsAndVotes() { "proposal not pruned with group policy modified before tally": { setupProposal: func(ctx context.Context) uint64 { msgSend1 := &banktypes.MsgSend{ - FromAddress: s.groupPolicyAddr.String(), - ToAddress: addr2.String(), + FromAddress: s.groupPolicyStrAddr, + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("test", 106)}, } myProposalID := submitProposal(ctx, s, []sdk.Msg{msgSend1}, proposers) _, err := s.groupKeeper.UpdateGroupPolicyMetadata(ctx, &group.MsgUpdateGroupPolicyMetadata{ - Admin: addr1.String(), - GroupPolicyAddress: s.groupPolicyAddr.String(), + Admin: s.addrsStr[0], + GroupPolicyAddress: s.groupPolicyStrAddr, }) s.Require().NoError(err) return myProposalID @@ -2937,14 +2895,14 @@ func (s *TestSuite) TestExecPrunedProposalsAndVotes() { "proposal exists when rollback all msg updates on failure": { setupProposal: func(ctx context.Context) uint64 { msgSend1 := &banktypes.MsgSend{ - FromAddress: s.groupPolicyAddr.String(), - ToAddress: addr2.String(), + FromAddress: s.groupPolicyStrAddr, + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("test", 107)}, } msgSend2 := &banktypes.MsgSend{ - FromAddress: s.groupPolicyAddr.String(), - ToAddress: addr2.String(), + FromAddress: s.groupPolicyStrAddr, + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("test", 10002)}, } @@ -2958,8 +2916,8 @@ func (s *TestSuite) TestExecPrunedProposalsAndVotes() { "pruned when proposal is executable when failed before": { setupProposal: func(ctx context.Context) uint64 { msgSend2 := &banktypes.MsgSend{ - FromAddress: s.groupPolicyAddr.String(), - ToAddress: addr2.String(), + FromAddress: s.groupPolicyStrAddr, + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("test", 10003)}, } @@ -2972,7 +2930,7 @@ func (s *TestSuite) TestExecPrunedProposalsAndVotes() { // Wait for min execution period end sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx = sdkCtx.WithHeaderInfo(header.Info{Time: sdkCtx.HeaderInfo().Time.Add(minExecutionPeriod)}) - _, err := s.groupKeeper.Exec(sdkCtx, &group.MsgExec{Executor: addr1.String(), ProposalId: myProposalID}) + _, err := s.groupKeeper.Exec(sdkCtx, &group.MsgExec{Executor: s.addrsStr[0], ProposalId: myProposalID}) s.bankKeeper.EXPECT().Send(gomock.Any(), msgSend2).Return(nil, nil) s.Require().NoError(err) @@ -2994,7 +2952,7 @@ func (s *TestSuite) TestExecPrunedProposalsAndVotes() { // Wait for min execution period end sdkCtx = sdkCtx.WithHeaderInfo(header.Info{Time: sdkCtx.HeaderInfo().Time.Add(minExecutionPeriod)}) - _, err := s.groupKeeper.Exec(sdkCtx, &group.MsgExec{Executor: addr1.String(), ProposalId: proposalID}) + _, err := s.groupKeeper.Exec(sdkCtx, &group.MsgExec{Executor: s.addrsStr[0], ProposalId: proposalID}) if spec.expErr { s.Require().Error(err) s.Require().Contains(err.Error(), spec.expErrMsg) @@ -3032,26 +2990,30 @@ func (s *TestSuite) TestLeaveGroup() { addrs := simtestutil.CreateIncrementalAccounts(7) admin1 := addrs[0] - member1 := addrs[1] - member2 := addrs[2] - member3 := addrs[3] - member4 := addrs[4] + member1, err := s.accountKeeper.AddressCodec().BytesToString(addrs[1]) + s.Require().NoError(err) + member2, err := s.accountKeeper.AddressCodec().BytesToString(addrs[2]) + s.Require().NoError(err) + member3, err := s.accountKeeper.AddressCodec().BytesToString(addrs[3]) + s.Require().NoError(err) + member4, err := s.accountKeeper.AddressCodec().BytesToString(addrs[4]) + s.Require().NoError(err) admin2 := addrs[5] admin3 := addrs[6] members := []group.MemberRequest{ { - Address: member1.String(), + Address: member1, Weight: "1", Metadata: "metadata", }, { - Address: member2.String(), + Address: member2, Weight: "2", Metadata: "metadata", }, { - Address: member3.String(), + Address: member3, Weight: "3", Metadata: "metadata", }, @@ -3066,7 +3028,7 @@ func (s *TestSuite) TestLeaveGroup() { members = []group.MemberRequest{ { - Address: member1.String(), + Address: member1, Weight: "1", Metadata: "metadata", }, @@ -3077,12 +3039,12 @@ func (s *TestSuite) TestLeaveGroup() { members = []group.MemberRequest{ { - Address: member1.String(), + Address: member1, Weight: "1", Metadata: "metadata", }, { - Address: member2.String(), + Address: member2, Weight: "2", Metadata: "metadata", }, @@ -3107,7 +3069,7 @@ func (s *TestSuite) TestLeaveGroup() { "group not found", &group.MsgLeaveGroup{ GroupId: 100000, - Address: member1.String(), + Address: member1, }, true, "group: not found", @@ -3129,7 +3091,7 @@ func (s *TestSuite) TestLeaveGroup() { "member not part of group", &group.MsgLeaveGroup{ GroupId: groupID1, - Address: member4.String(), + Address: member4, }, true, "not part of group", @@ -3140,7 +3102,7 @@ func (s *TestSuite) TestLeaveGroup() { "valid testcase: decision policy is not present (and group total weight can be 0)", &group.MsgLeaveGroup{ GroupId: groupID2, - Address: member1.String(), + Address: member1, }, false, "", @@ -3151,7 +3113,7 @@ func (s *TestSuite) TestLeaveGroup() { "valid testcase: threshold decision policy", &group.MsgLeaveGroup{ GroupId: groupID1, - Address: member3.String(), + Address: member3, }, false, "", @@ -3162,7 +3124,7 @@ func (s *TestSuite) TestLeaveGroup() { "valid request: can leave group policy threshold more than group weight", &group.MsgLeaveGroup{ GroupId: groupID1, - Address: member2.String(), + Address: member2, }, false, "", @@ -3173,7 +3135,7 @@ func (s *TestSuite) TestLeaveGroup() { "valid request: can leave group (percentage decision policy)", &group.MsgLeaveGroup{ GroupId: groupID3, - Address: member2.String(), + Address: member2, }, false, "", @@ -3219,7 +3181,7 @@ func (s *TestSuite) TestLeaveGroup() { } func (s *TestSuite) TestExecProposalsWhenMemberLeavesOrIsUpdated() { - proposers := []string{s.addrs[1].String()} + proposers := []string{s.addrsStr[1]} specs := map[string]struct { votes []group.VoteOption @@ -3230,11 +3192,11 @@ func (s *TestSuite) TestExecProposalsWhenMemberLeavesOrIsUpdated() { }{ "member leaves while all others vote yes: proposal accepted": { members: []group.MemberRequest{ - {Address: s.addrs[4].String(), Weight: "1"}, - {Address: s.addrs[1].String(), Weight: "2"}, - {Address: s.addrs[3].String(), Weight: "1"}, - {Address: s.addrs[5].String(), Weight: "2"}, - {Address: s.addrs[2].String(), Weight: "2"}, + {Address: s.addrsStr[4], Weight: "1"}, + {Address: s.addrsStr[1], Weight: "2"}, + {Address: s.addrsStr[3], Weight: "1"}, + {Address: s.addrsStr[5], Weight: "2"}, + {Address: s.addrsStr[2], Weight: "2"}, }, votes: []group.VoteOption{ group.VOTE_OPTION_YES, group.VOTE_OPTION_YES, @@ -3244,7 +3206,7 @@ func (s *TestSuite) TestExecProposalsWhenMemberLeavesOrIsUpdated() { setupProposal: func(ctx context.Context, groupPolicyAddr string) uint64 { msgSend1 := &banktypes.MsgSend{ FromAddress: groupPolicyAddr, - ToAddress: s.addrs[1].String(), + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("test", 100)}, } @@ -3265,16 +3227,16 @@ func (s *TestSuite) TestExecProposalsWhenMemberLeavesOrIsUpdated() { return proposalRes.ProposalId }, malleate: func(ctx context.Context, k keeper.Keeper, _ string, groupID uint64) error { - _, err := k.LeaveGroup(ctx, &group.MsgLeaveGroup{GroupId: groupID, Address: s.addrs[5].String()}) + _, err := k.LeaveGroup(ctx, &group.MsgLeaveGroup{GroupId: groupID, Address: s.addrsStr[5]}) return err }, }, "member leaves while all others vote yes and no: proposal rejected": { members: []group.MemberRequest{ - {Address: s.addrs[4].String(), Weight: "2"}, - {Address: s.addrs[1].String(), Weight: "2"}, - {Address: s.addrs[3].String(), Weight: "2"}, - {Address: s.addrs[2].String(), Weight: "2"}, + {Address: s.addrsStr[4], Weight: "2"}, + {Address: s.addrsStr[1], Weight: "2"}, + {Address: s.addrsStr[3], Weight: "2"}, + {Address: s.addrsStr[2], Weight: "2"}, }, votes: []group.VoteOption{ group.VOTE_OPTION_NO, group.VOTE_OPTION_NO, @@ -3283,7 +3245,7 @@ func (s *TestSuite) TestExecProposalsWhenMemberLeavesOrIsUpdated() { setupProposal: func(ctx context.Context, groupPolicyAddr string) uint64 { msgSend1 := &banktypes.MsgSend{ FromAddress: groupPolicyAddr, - ToAddress: s.addrs[1].String(), + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("test", 100)}, } msgs := []sdk.Msg{msgSend1, msgSend1} @@ -3301,16 +3263,16 @@ func (s *TestSuite) TestExecProposalsWhenMemberLeavesOrIsUpdated() { return proposalRes.ProposalId }, malleate: func(ctx context.Context, k keeper.Keeper, _ string, groupID uint64) error { - _, err := k.LeaveGroup(ctx, &group.MsgLeaveGroup{GroupId: groupID, Address: s.addrs[3].String()}) + _, err := k.LeaveGroup(ctx, &group.MsgLeaveGroup{GroupId: groupID, Address: s.addrsStr[3]}) return err }, }, "member that leaves does affect the threshold policy outcome": { members: []group.MemberRequest{ - {Address: s.addrs[3].String(), Weight: "6"}, - {Address: s.addrs[1].String(), Weight: "1"}, - {Address: s.addrs[5].String(), Weight: "1"}, - {Address: s.addrs[2].String(), Weight: "1"}, + {Address: s.addrsStr[3], Weight: "6"}, + {Address: s.addrsStr[1], Weight: "1"}, + {Address: s.addrsStr[5], Weight: "1"}, + {Address: s.addrsStr[2], Weight: "1"}, }, votes: []group.VoteOption{ group.VOTE_OPTION_YES, group.VOTE_OPTION_NO, @@ -3319,7 +3281,7 @@ func (s *TestSuite) TestExecProposalsWhenMemberLeavesOrIsUpdated() { setupProposal: func(ctx context.Context, addr string) uint64 { msgSend1 := &banktypes.MsgSend{ FromAddress: addr, - ToAddress: s.addrs[1].String(), + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("test", 100)}, } msgs := []sdk.Msg{msgSend1, msgSend1} @@ -3337,16 +3299,16 @@ func (s *TestSuite) TestExecProposalsWhenMemberLeavesOrIsUpdated() { return proposalRes.ProposalId }, malleate: func(ctx context.Context, k keeper.Keeper, _ string, groupID uint64) error { - _, err := k.LeaveGroup(ctx, &group.MsgLeaveGroup{GroupId: groupID, Address: s.addrs[3].String()}) + _, err := k.LeaveGroup(ctx, &group.MsgLeaveGroup{GroupId: groupID, Address: s.addrsStr[3]}) return err }, }, "update group policy voids the proposal": { members: []group.MemberRequest{ - {Address: s.addrs[3].String(), Weight: "2"}, - {Address: s.addrs[2].String(), Weight: "2"}, - {Address: s.addrs[1].String(), Weight: "2"}, - {Address: s.addrs[4].String(), Weight: "2"}, + {Address: s.addrsStr[3], Weight: "2"}, + {Address: s.addrsStr[2], Weight: "2"}, + {Address: s.addrsStr[1], Weight: "2"}, + {Address: s.addrsStr[4], Weight: "2"}, }, votes: []group.VoteOption{ group.VOTE_OPTION_YES, group.VOTE_OPTION_NO, @@ -3355,7 +3317,7 @@ func (s *TestSuite) TestExecProposalsWhenMemberLeavesOrIsUpdated() { setupProposal: func(ctx context.Context, groupPolicyAddr string) uint64 { msgSend1 := &banktypes.MsgSend{ FromAddress: groupPolicyAddr, - ToAddress: s.addrs[1].String(), + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("test", 100)}, } msgs := []sdk.Msg{msgSend1, msgSend1} @@ -3373,7 +3335,7 @@ func (s *TestSuite) TestExecProposalsWhenMemberLeavesOrIsUpdated() { }, malleate: func(ctx context.Context, k keeper.Keeper, groupPolicyAddr string, groupID uint64) error { newGroupPolicy := &group.MsgUpdateGroupPolicyDecisionPolicy{ - Admin: s.addrs[0].String(), + Admin: s.addrsStr[0], GroupPolicyAddress: groupPolicyAddr, } err := newGroupPolicy.SetDecisionPolicy(group.NewThresholdDecisionPolicy("10", time.Second, minExecutionPeriod)) @@ -3393,7 +3355,7 @@ func (s *TestSuite) TestExecProposalsWhenMemberLeavesOrIsUpdated() { s.setNextAccount() groupRes, err := s.groupKeeper.CreateGroup(s.ctx, &group.MsgCreateGroup{ - Admin: s.addrs[0].String(), + Admin: s.addrsStr[0], Members: spec.members, }) s.Require().NoError(err) @@ -3401,7 +3363,7 @@ func (s *TestSuite) TestExecProposalsWhenMemberLeavesOrIsUpdated() { policy := group.NewThresholdDecisionPolicy("4", time.Second, minExecutionPeriod) policyReq := &group.MsgCreateGroupPolicy{ - Admin: s.addrs[0].String(), + Admin: s.addrsStr[0], GroupId: groupID, } err = policyReq.SetDecisionPolicy(policy) @@ -3431,7 +3393,7 @@ func (s *TestSuite) TestExecProposalsWhenMemberLeavesOrIsUpdated() { // travel in time sdkCtx = sdkCtx.WithHeaderInfo(header.Info{Time: s.blockTime.Add(minExecutionPeriod + 1)}) - _, err = s.groupKeeper.Exec(sdkCtx, &group.MsgExec{Executor: s.addrs[1].String(), ProposalId: proposalID}) + _, err = s.groupKeeper.Exec(sdkCtx, &group.MsgExec{Executor: s.addrsStr[1], ProposalId: proposalID}) if spec.expErrMsg != "" { s.Require().Contains(err.Error(), spec.expErrMsg) return diff --git a/x/group/keeper/proposal_executor.go b/x/group/keeper/proposal_executor.go index 148de9c741..7a3a530e78 100644 --- a/x/group/keeper/proposal_executor.go +++ b/x/group/keeper/proposal_executor.go @@ -4,6 +4,7 @@ import ( "bytes" "context" + "cosmossdk.io/core/address" errorsmod "cosmossdk.io/errors" "cosmossdk.io/x/group" "cosmossdk.io/x/group/errors" @@ -39,7 +40,7 @@ func (k Keeper) doExecuteMsgs(ctx context.Context, proposal group.Proposal, grou return err } - if err := ensureMsgAuthZ(msgs, groupPolicyAcc, k.cdc); err != nil { + if err := ensureMsgAuthZ(msgs, groupPolicyAcc, k.cdc, k.accKeeper.AddressCodec()); err != nil { return err } @@ -53,7 +54,7 @@ func (k Keeper) doExecuteMsgs(ctx context.Context, proposal group.Proposal, grou // ensureMsgAuthZ checks that if a message requires signers that all of them // are equal to the given account address of group policy. -func ensureMsgAuthZ(msgs []sdk.Msg, groupPolicyAcc sdk.AccAddress, cdc codec.Codec) error { +func ensureMsgAuthZ(msgs []sdk.Msg, groupPolicyAcc sdk.AccAddress, cdc codec.Codec, addressCodec address.Codec) error { for i := range msgs { // In practice, GetMsgV1Signers should return a non-empty array without duplicates. signers, _, err := cdc.GetMsgV1Signers(msgs[i]) @@ -65,7 +66,11 @@ func ensureMsgAuthZ(msgs []sdk.Msg, groupPolicyAcc sdk.AccAddress, cdc codec.Cod // But here, we loop through all the signers just to be sure. for _, acct := range signers { if !bytes.Equal(groupPolicyAcc, acct) { - return errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "msg does not have group policy authorization; expected %s, got %s", groupPolicyAcc.String(), acct) + groupPolicyAddr, err := addressCodec.BytesToString(groupPolicyAcc) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "msg does not have group policy authorization; error retrieving group policy address") + } + return errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "msg does not have group policy authorization; expected %s, got %s", groupPolicyAddr, acct) } } } diff --git a/x/group/keeper/tally_test.go b/x/group/keeper/tally_test.go index a74a6f9039..8052867514 100644 --- a/x/group/keeper/tally_test.go +++ b/x/group/keeper/tally_test.go @@ -11,15 +11,12 @@ import ( ) func (s *TestSuite) TestTally() { - addrs := s.addrs - addr2 := addrs[1] - msgSend1 := &banktypes.MsgSend{ - FromAddress: s.groupPolicyAddr.String(), - ToAddress: addr2.String(), + FromAddress: s.groupPolicyStrAddr, + ToAddress: s.addrsStr[1], Amount: sdk.Coins{sdk.NewInt64Coin("test", 100)}, } - proposers := []string{addr2.String()} + proposers := []string{s.addrsStr[1]} specs := map[string]struct { srcBlockTime time.Time diff --git a/x/group/migrations/v2/gen_state.go b/x/group/migrations/v2/gen_state.go index 0728a3430d..10918441a4 100644 --- a/x/group/migrations/v2/gen_state.go +++ b/x/group/migrations/v2/gen_state.go @@ -3,6 +3,7 @@ package v2 import ( "encoding/binary" + "cosmossdk.io/core/address" authtypes "cosmossdk.io/x/auth/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -11,7 +12,7 @@ import ( // MigrateGenState accepts exported v0.46 x/auth genesis state and migrates it to // v0.47 x/auth genesis state. The migration includes: // - If the group module is enabled, replace group policy accounts from module accounts to base accounts. -func MigrateGenState(oldState *authtypes.GenesisState) *authtypes.GenesisState { +func MigrateGenState(oldState *authtypes.GenesisState, addressCodec address.Codec) *authtypes.GenesisState { newState := *oldState accounts, err := authtypes.UnpackAccounts(newState.Accounts) @@ -26,7 +27,12 @@ func MigrateGenState(oldState *authtypes.GenesisState) *authtypes.GenesisState { continue } - if modAcc.GetName() != modAcc.GetAddress().String() { + modAddr, err := addressCodec.BytesToString(modAcc.GetAddress()) + if err != nil { + panic(err) + } + + if modAcc.GetName() != modAddr { continue } diff --git a/x/group/migrations/v2/gen_state_test.go b/x/group/migrations/v2/gen_state_test.go index 187515eb63..05b4d23935 100644 --- a/x/group/migrations/v2/gen_state_test.go +++ b/x/group/migrations/v2/gen_state_test.go @@ -9,6 +9,8 @@ import ( authtypes "cosmossdk.io/x/auth/types" "cosmossdk.io/x/group" v2 "cosmossdk.io/x/group/migrations/v2" + + codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" ) func TestMigrateGenState(t *testing.T) { @@ -73,7 +75,7 @@ func TestMigrateGenState(t *testing.T) { for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { require.Error(t, authtypes.ValidateGenesis(*tc.oldState)) - actualState := v2.MigrateGenState(tc.oldState) + actualState := v2.MigrateGenState(tc.oldState, codectestutil.CodecOptions{}.GetAddressCodec()) require.Equal(t, tc.newState, actualState) require.NoError(t, authtypes.ValidateGenesis(*actualState)) }) diff --git a/x/group/migrations/v2/migrate.go b/x/group/migrations/v2/migrate.go index ace1459675..c2db304432 100644 --- a/x/group/migrations/v2/migrate.go +++ b/x/group/migrations/v2/migrate.go @@ -39,7 +39,11 @@ func Migrate( derivationKey := make([]byte, 8) binary.BigEndian.PutUint64(derivationKey, i) groupPolicyAcc := sdk.AccAddress(address.Module(group.ModuleName, policyKey, derivationKey)) - groupPolicyAccountDerivationKey[groupPolicyAcc.String()] = derivationKey + groupPolicyAddr, err := accountKeeper.AddressCodec().BytesToString(groupPolicyAcc) + if err != nil { + return err + } + groupPolicyAccountDerivationKey[groupPolicyAddr] = derivationKey } // get all group policies diff --git a/x/group/migrations/v2/migrate_test.go b/x/group/migrations/v2/migrate_test.go index c06b975c82..80e42c0d28 100644 --- a/x/group/migrations/v2/migrate_test.go +++ b/x/group/migrations/v2/migrate_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" + "cosmossdk.io/core/address" corestore "cosmossdk.io/core/store" "cosmossdk.io/log" storetypes "cosmossdk.io/store/types" @@ -41,8 +42,9 @@ func TestMigrate(t *testing.T) { tKey := storetypes.NewTransientStoreKey("transient_test") ctx := testutil.DefaultContext(storeKey, tKey) - oldAccs, accountKeeper := createOldPolicyAccount(ctx, storeKey, cdc, policies) - groupPolicyTable, groupPolicySeq, err := createGroupPolicies(ctx, storeService, cdc, policies) + oldAccs, accountKeeper, err := createOldPolicyAccount(ctx, storeKey, cdc, policies) + require.NoError(t, err) + groupPolicyTable, groupPolicySeq, err := createGroupPolicies(ctx, storeService, cdc, policies, codectestutil.CodecOptions{}.GetAddressCodec()) require.NoError(t, err) require.NoError(t, v2.Migrate(ctx, storeService, accountKeeper, groupPolicySeq, groupPolicyTable)) @@ -57,7 +59,7 @@ func TestMigrate(t *testing.T) { } } -func createGroupPolicies(ctx sdk.Context, storeService corestore.KVStoreService, cdc codec.Codec, policies []sdk.AccAddress) (orm.PrimaryKeyTable, orm.Sequence, error) { +func createGroupPolicies(ctx sdk.Context, storeService corestore.KVStoreService, cdc codec.Codec, policies []sdk.AccAddress, addressCodec address.Codec) (orm.PrimaryKeyTable, orm.Sequence, error) { groupPolicyTable, err := orm.NewPrimaryKeyTable([2]byte{groupkeeper.GroupPolicyTablePrefix}, &group.GroupPolicyInfo{}, cdc) if err != nil { panic(err.Error()) @@ -66,8 +68,18 @@ func createGroupPolicies(ctx sdk.Context, storeService corestore.KVStoreService, groupPolicySeq := orm.NewSequence(v2.GroupPolicyTableSeqPrefix) kvStore := storeService.OpenKVStore(ctx) + authorityStrAddr, err := addressCodec.BytesToString(authorityAddr) + if err != nil { + return orm.PrimaryKeyTable{}, orm.Sequence{}, err + } + for _, policyAddr := range policies { - groupPolicyInfo, err := group.NewGroupPolicyInfo(policyAddr, 1, authorityAddr, "", 1, group.NewPercentageDecisionPolicy("1", 1, 1), ctx.HeaderInfo().Time) + policyStrAddr, err := addressCodec.BytesToString(policyAddr) + if err != nil { + return orm.PrimaryKeyTable{}, orm.Sequence{}, err + } + + groupPolicyInfo, err := group.NewGroupPolicyInfo(policyStrAddr, 1, authorityStrAddr, "", 1, group.NewPercentageDecisionPolicy("1", 1, 1), ctx.HeaderInfo().Time) if err != nil { return orm.PrimaryKeyTable{}, orm.Sequence{}, err } @@ -83,20 +95,29 @@ func createGroupPolicies(ctx sdk.Context, storeService corestore.KVStoreService, } // createOldPolicyAccount re-creates the group policy account using a module account -func createOldPolicyAccount(ctx sdk.Context, storeKey storetypes.StoreKey, cdc codec.Codec, policies []sdk.AccAddress) ([]*authtypes.ModuleAccount, group.AccountKeeper) { - accountKeeper := authkeeper.NewAccountKeeper(runtime.NewEnvironment(runtime.NewKVStoreService(storeKey.(*storetypes.KVStoreKey)), log.NewNopLogger()), cdc, authtypes.ProtoBaseAccount, nil, addresscodec.NewBech32Codec(sdk.Bech32MainPrefix), sdk.Bech32MainPrefix, authorityAddr.String()) +func createOldPolicyAccount(ctx sdk.Context, storeKey storetypes.StoreKey, cdc codec.Codec, policies []sdk.AccAddress) ([]*authtypes.ModuleAccount, group.AccountKeeper, error) { + addressCodec := addresscodec.NewBech32Codec(sdk.Bech32MainPrefix) + authorityStrAddr, err := addressCodec.BytesToString(authorityAddr) + if err != nil { + return nil, nil, err + } + accountKeeper := authkeeper.NewAccountKeeper(runtime.NewEnvironment(runtime.NewKVStoreService(storeKey.(*storetypes.KVStoreKey)), log.NewNopLogger()), cdc, authtypes.ProtoBaseAccount, nil, addressCodec, sdk.Bech32MainPrefix, authorityStrAddr) oldPolicyAccounts := make([]*authtypes.ModuleAccount, len(policies)) for i, policyAddr := range policies { + policyStrAddr, err := addressCodec.BytesToString(policyAddr) + if err != nil { + return nil, nil, err + } acc := accountKeeper.NewAccount(ctx, &authtypes.ModuleAccount{ BaseAccount: &authtypes.BaseAccount{ - Address: policyAddr.String(), + Address: policyStrAddr, }, - Name: policyAddr.String(), + Name: policyStrAddr, }) accountKeeper.SetAccount(ctx, acc) oldPolicyAccounts[i] = acc.(*authtypes.ModuleAccount) } - return oldPolicyAccounts, accountKeeper + return oldPolicyAccounts, accountKeeper, nil } diff --git a/x/group/msgs.go b/x/group/msgs.go index 59793d79ad..d9aad25d63 100644 --- a/x/group/msgs.go +++ b/x/group/msgs.go @@ -89,10 +89,10 @@ func (m MsgCreateGroupWithPolicy) UnpackInterfaces(unpacker types.AnyUnpacker) e } // NewMsgUpdateGroupPolicyDecisionPolicy creates a new MsgUpdateGroupPolicyDecisionPolicy. -func NewMsgUpdateGroupPolicyDecisionPolicy(admin, address sdk.AccAddress, decisionPolicy DecisionPolicy) (*MsgUpdateGroupPolicyDecisionPolicy, error) { +func NewMsgUpdateGroupPolicyDecisionPolicy(admin, address string, decisionPolicy DecisionPolicy) (*MsgUpdateGroupPolicyDecisionPolicy, error) { m := &MsgUpdateGroupPolicyDecisionPolicy{ - Admin: admin.String(), - GroupPolicyAddress: address.String(), + Admin: admin, + GroupPolicyAddress: address, } err := m.SetDecisionPolicy(decisionPolicy) if err != nil { @@ -132,9 +132,9 @@ func (m MsgUpdateGroupPolicyDecisionPolicy) UnpackInterfaces(unpacker types.AnyU } // NewMsgCreateGroupPolicy creates a new MsgCreateGroupPolicy. -func NewMsgCreateGroupPolicy(admin sdk.AccAddress, group uint64, metadata string, decisionPolicy DecisionPolicy) (*MsgCreateGroupPolicy, error) { +func NewMsgCreateGroupPolicy(admin string, group uint64, metadata string, decisionPolicy DecisionPolicy) (*MsgCreateGroupPolicy, error) { m := &MsgCreateGroupPolicy{ - Admin: admin.String(), + Admin: admin, GroupId: group, Metadata: metadata, } diff --git a/x/group/simulation/decoder_test.go b/x/group/simulation/decoder_test.go index 6eee5a2fbd..109d2b739a 100644 --- a/x/group/simulation/decoder_test.go +++ b/x/group/simulation/decoder_test.go @@ -28,14 +28,18 @@ func TestDecodeStore(t *testing.T) { require.NoError(t, err) _, _, addr := testdata.KeyTestPubAddr() + addrStr, err := codectestutil.CodecOptions{}.GetAddressCodec().BytesToString(addr) + require.NoError(t, err) member := group.GroupMember{GroupId: 1, Member: &group.Member{ - Address: addr.String(), + Address: addrStr, }} memberBz, err := cdc.Marshal(&member) require.NoError(t, err) _, _, accAddr := testdata.KeyTestPubAddr() - acc := group.GroupPolicyInfo{Address: accAddr.String()} + accStrAddr, err := codectestutil.CodecOptions{}.GetAddressCodec().BytesToString(accAddr) + require.NoError(t, err) + acc := group.GroupPolicyInfo{Address: accStrAddr} accBz, err := cdc.Marshal(&acc) require.NoError(t, err) @@ -43,7 +47,7 @@ func TestDecodeStore(t *testing.T) { proposalBz, err := cdc.Marshal(&proposal) require.NoError(t, err) - vote := group.Vote{Voter: addr.String(), ProposalId: 1} + vote := group.Vote{Voter: addrStr, ProposalId: 1} voteBz, err := cdc.Marshal(&vote) require.NoError(t, err) diff --git a/x/group/simulation/genesis.go b/x/group/simulation/genesis.go index 00f58a3ef7..2049e8a4ac 100644 --- a/x/group/simulation/genesis.go +++ b/x/group/simulation/genesis.go @@ -4,6 +4,7 @@ import ( "math/rand" "time" + "cosmossdk.io/core/address" banktypes "cosmossdk.io/x/bank/types" "cosmossdk.io/x/group" @@ -21,23 +22,26 @@ const ( GroupVote = "group-vote" ) -func checkAccExists(acc sdk.AccAddress, g []*group.GroupMember, lastIndex int) bool { - s := acc.String() +func checkAccExists(acc string, g []*group.GroupMember, lastIndex int) bool { for i := 0; i < lastIndex; i++ { - if g[i].Member.Address == s { + if g[i].Member.Address == acc { return true } } return false } -func getGroups(r *rand.Rand, accounts []simtypes.Account) []*group.GroupInfo { +func getGroups(r *rand.Rand, accounts []simtypes.Account, addressCodec address.Codec) []*group.GroupInfo { groups := make([]*group.GroupInfo, 3) for i := 0; i < 3; i++ { acc, _ := simtypes.RandomAcc(r, accounts) + accAddr, err := addressCodec.BytesToString(acc.Address) + if err != nil { + return nil + } groups[i] = &group.GroupInfo{ Id: uint64(i + 1), - Admin: acc.Address.String(), + Admin: accAddr, Metadata: simtypes.RandStringOfLength(r, 10), Version: 1, TotalWeight: "10", @@ -46,17 +50,25 @@ func getGroups(r *rand.Rand, accounts []simtypes.Account) []*group.GroupInfo { return groups } -func getGroupMembers(r *rand.Rand, accounts []simtypes.Account) []*group.GroupMember { +func getGroupMembers(r *rand.Rand, accounts []simtypes.Account, addressCodec address.Codec) []*group.GroupMember { groupMembers := make([]*group.GroupMember, 3) for i := 0; i < 3; i++ { acc, _ := simtypes.RandomAcc(r, accounts) - for checkAccExists(acc.Address, groupMembers, i) { + accAddr, err := addressCodec.BytesToString(acc.Address) + if err != nil { + return nil + } + for checkAccExists(accAddr, groupMembers, i) { acc, _ = simtypes.RandomAcc(r, accounts) + accAddr, err = addressCodec.BytesToString(acc.Address) + if err != nil { + return nil + } } groupMembers[i] = &group.GroupMember{ GroupId: uint64(i + 1), Member: &group.Member{ - Address: acc.Address.String(), + Address: accAddr, Weight: "10", Metadata: simtypes.RandStringOfLength(r, 10), }, @@ -71,8 +83,11 @@ func getGroupPolicies(r *rand.Rand, simState *module.SimulationState) []*group.G usedAccs := make(map[string]bool) for i := 0; i < 3; i++ { acc, _ := simtypes.RandomAcc(r, simState.Accounts) - - if usedAccs[acc.Address.String()] { + accAddr, err := simState.AddressCodec.BytesToString(acc.Address) + if err != nil { + return nil + } + if usedAccs[accAddr] { if len(usedAccs) != len(simState.Accounts) { // Go again if the account is used and there are more to take from i-- @@ -80,7 +95,7 @@ func getGroupPolicies(r *rand.Rand, simState *module.SimulationState) []*group.G continue } - usedAccs[acc.Address.String()] = true + usedAccs[accAddr] = true any, err := codectypes.NewAnyWithValue(group.NewThresholdDecisionPolicy("10", time.Second, 0)) if err != nil { @@ -88,8 +103,8 @@ func getGroupPolicies(r *rand.Rand, simState *module.SimulationState) []*group.G } groupPolicies = append(groupPolicies, &group.GroupPolicyInfo{ GroupId: uint64(i + 1), - Admin: acc.Address.String(), - Address: acc.Address.String(), + Admin: accAddr, + Address: accAddr, Version: 1, DecisionPolicy: any, Metadata: simtypes.RandStringOfLength(r, 10), @@ -100,7 +115,15 @@ func getGroupPolicies(r *rand.Rand, simState *module.SimulationState) []*group.G func getProposals(r *rand.Rand, simState *module.SimulationState, groupPolicies []*group.GroupPolicyInfo) []*group.Proposal { proposals := make([]*group.Proposal, 3) - proposers := []string{simState.Accounts[0].Address.String(), simState.Accounts[1].Address.String()} + addr0, err := simState.AddressCodec.BytesToString(simState.Accounts[0].Address) + if err != nil { + panic(err) + } + addr1, err := simState.AddressCodec.BytesToString(simState.Accounts[1].Address) + if err != nil { + panic(err) + } + proposers := []string{addr0, addr1} for i := 0; i < 3; i++ { idx := r.Intn(len(groupPolicies)) groupPolicyAddress := groupPolicies[idx].Address @@ -127,9 +150,15 @@ func getProposals(r *rand.Rand, simState *module.SimulationState, groupPolicies SubmitTime: submittedAt, VotingPeriodEnd: timeout, } - err := proposal.SetMsgs([]sdk.Msg{&banktypes.MsgSend{ + + toAddr, err := simState.AddressCodec.BytesToString(to.Address) + if err != nil { + panic(err) + } + + err = proposal.SetMsgs([]sdk.Msg{&banktypes.MsgSend{ FromAddress: groupPolicyAddress, - ToAddress: to.Address.String(), + ToAddress: toAddr, Amount: sdk.NewCoins(sdk.NewInt64Coin("test", 10)), }}) if err != nil { @@ -146,9 +175,13 @@ func getVotes(r *rand.Rand, simState *module.SimulationState) []*group.Vote { votes := make([]*group.Vote, 3) for i := 0; i < 3; i++ { + voterAddr, err := simState.AddressCodec.BytesToString(simState.Accounts[i].Address) + if err != nil { + return nil + } votes[i] = &group.Vote{ ProposalId: uint64(i + 1), - Voter: simState.Accounts[i].Address.String(), + Voter: voterAddr, Option: getVoteOption(i), Metadata: simtypes.RandStringOfLength(r, 50), SubmitTime: time.Unix(0, 0), @@ -180,11 +213,11 @@ func RandomizedGenState(simState *module.SimulationState) { // groups var groups []*group.GroupInfo - simState.AppParams.GetOrGenerate(GroupInfo, &groups, simState.Rand, func(r *rand.Rand) { groups = getGroups(r, simState.Accounts) }) + simState.AppParams.GetOrGenerate(GroupInfo, &groups, simState.Rand, func(r *rand.Rand) { groups = getGroups(r, simState.Accounts, simState.AddressCodec) }) // group members var members []*group.GroupMember - simState.AppParams.GetOrGenerate(GroupMembers, &members, simState.Rand, func(r *rand.Rand) { members = getGroupMembers(r, simState.Accounts) }) + simState.AppParams.GetOrGenerate(GroupMembers, &members, simState.Rand, func(r *rand.Rand) { members = getGroupMembers(r, simState.Accounts, simState.AddressCodec) }) // group policies var groupPolicies []*group.GroupPolicyInfo diff --git a/x/group/simulation/operations.go b/x/group/simulation/operations.go index 392ac9c275..df64641858 100644 --- a/x/group/simulation/operations.go +++ b/x/group/simulation/operations.go @@ -7,6 +7,7 @@ import ( "strings" "time" + "cosmossdk.io/core/address" "cosmossdk.io/x/group" "cosmossdk.io/x/group/keeper" @@ -228,7 +229,10 @@ func SimulateMsgCreateGroup( ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { acc, _ := simtypes.RandomAcc(r, accounts) account := ak.GetAccount(ctx, acc.Address) - accAddr := acc.Address.String() + accAddr, err := ak.AddressCodec().BytesToString(acc.Address) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgCreateGroup, "error getting account address"), nil, err + } spendableCoins := bk.SpendableCoins(ctx, account.GetAddress()) fees, err := simtypes.RandomFees(r, spendableCoins) @@ -236,7 +240,10 @@ func SimulateMsgCreateGroup( return simtypes.NoOpMsg(group.ModuleName, TypeMsgCreateGroup, "fee error"), nil, err } - members := genGroupMembers(r, accounts) + members, err := genGroupMembers(r, accounts, ak.AddressCodec()) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgCreateGroup, "error generating group members"), nil, err + } msg := &group.MsgCreateGroup{Admin: accAddr, Members: members, Metadata: simtypes.RandStringOfLength(r, 10)} tx, err := simtestutil.GenSignedMockTx( @@ -275,7 +282,10 @@ func SimulateMsgCreateGroupWithPolicy( ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { acc, _ := simtypes.RandomAcc(r, accounts) account := ak.GetAccount(ctx, acc.Address) - accAddr := acc.Address.String() + accAddr, err := ak.AddressCodec().BytesToString(acc.Address) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgCreateGroup, "error getting account address"), nil, err + } spendableCoins := bk.SpendableCoins(ctx, account.GetAddress()) fees, err := simtypes.RandomFees(r, spendableCoins) @@ -283,7 +293,10 @@ func SimulateMsgCreateGroupWithPolicy( return simtypes.NoOpMsg(group.ModuleName, TypeMsgCreateGroup, "fee error"), nil, err } - members := genGroupMembers(r, accounts) + members, err := genGroupMembers(r, accounts, ak.AddressCodec()) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgCreateGroup, "error generating group members"), nil, err + } decisionPolicy := &group.ThresholdDecisionPolicy{ Threshold: fmt.Sprintf("%d", simtypes.RandIntBetween(r, 1, 10)), Windows: &group.DecisionPolicyWindows{ @@ -353,8 +366,13 @@ func SimulateMsgCreateGroupPolicy( return simtypes.NoOpMsg(group.ModuleName, TypeMsgCreateGroupPolicy, "fee error"), nil, err } + accAddr, err := ak.AddressCodec().BytesToString(acc.Address) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgCreateGroupPolicy, "error generating admin address"), nil, err + } + msg, err := group.NewMsgCreateGroupPolicy( - acc.Address, + accAddr, groupID, simtypes.RandStringOfLength(r, 10), &group.ThresholdDecisionPolicy{ @@ -442,9 +460,14 @@ func SimulateMsgSubmitProposal( return simtypes.NoOpMsg(group.ModuleName, TypeMsgSubmitProposal, "fee error"), nil, err } + accAddr, err := ak.AddressCodec().BytesToString(acc.Address) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgSubmitProposal, "error getting account address"), nil, err + } + msg := &group.MsgSubmitProposal{ GroupPolicyAddress: groupPolicyAddr, - Proposers: []string{acc.Address.String()}, + Proposers: []string{accAddr}, Metadata: simtypes.RandStringOfLength(r, 10), Title: "Test Proposal", Summary: "Summary of the proposal", @@ -509,10 +532,18 @@ func SimulateMsgUpdateGroupAdmin( newAdmin, _ = simtypes.RandomAcc(r, accounts) } + accAddr, err := ak.AddressCodec().BytesToString(account.GetAddress()) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgUpdateGroupAdmin, "error getting admin address"), nil, err + } + newAdminAddr, err := ak.AddressCodec().BytesToString(newAdmin.Address) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgUpdateGroupAdmin, "error getting new admin address"), nil, err + } msg := &group.MsgUpdateGroupAdmin{ GroupId: groupID, - Admin: account.GetAddress().String(), - NewAdmin: newAdmin.Address.String(), + Admin: accAddr, + NewAdmin: newAdminAddr, } tx, err := simtestutil.GenSignedMockTx( @@ -565,9 +596,13 @@ func SimulateMsgUpdateGroupMetadata( return simtypes.NoOpMsg(group.ModuleName, TypeMsgUpdateGroupMetadata, "fee error"), nil, err } + adminAddr, err := ak.AddressCodec().BytesToString(account.GetAddress()) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgUpdateGroupMetadata, "error getting admin address"), nil, err + } msg := &group.MsgUpdateGroupMetadata{ GroupId: groupID, - Admin: account.GetAddress().String(), + Admin: adminAddr, Metadata: simtypes.RandStringOfLength(r, 10), } @@ -621,7 +656,10 @@ func SimulateMsgUpdateGroupMembers( return simtypes.NoOpMsg(group.ModuleName, TypeMsgUpdateGroupMembers, "fee error"), nil, err } - members := genGroupMembers(r, accounts) + members, err := genGroupMembers(r, accounts, ak.AddressCodec()) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgCreateGroup, "error generating group members"), nil, err + } ctx := sdk.UnwrapSDKContext(sdkCtx) res, err := k.GroupMembers(ctx, &group.QueryGroupMembersRequest{GroupId: groupID}) if err != nil { @@ -648,9 +686,13 @@ func SimulateMsgUpdateGroupMembers( } } + adminAddr, err := ak.AddressCodec().BytesToString(acc.Address) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgUpdateGroupMembers, "error getting admin address"), nil, err + } msg := &group.MsgUpdateGroupMembers{ GroupId: groupID, - Admin: acc.Address.String(), + Admin: adminAddr, MemberUpdates: members, } @@ -713,10 +755,18 @@ func SimulateMsgUpdateGroupPolicyAdmin( newAdmin, _ = simtypes.RandomAcc(r, accounts) } + adminAddr, err := ak.AddressCodec().BytesToString(acc.Address) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgUpdateGroupPolicyAdmin, "error getting admin address"), nil, err + } + newAdminAddr, err := ak.AddressCodec().BytesToString(newAdmin.Address) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgUpdateGroupPolicyAdmin, "error getting new admin address"), nil, err + } msg := &group.MsgUpdateGroupPolicyAdmin{ - Admin: acc.Address.String(), + Admin: adminAddr, GroupPolicyAddress: groupPolicyAddr, - NewAdmin: newAdmin.Address.String(), + NewAdmin: newAdminAddr, } tx, err := simtestutil.GenSignedMockTx( @@ -774,7 +824,16 @@ func SimulateMsgUpdateGroupPolicyDecisionPolicy( return simtypes.NoOpMsg(group.ModuleName, TypeMsgUpdateGroupPolicyDecisionPolicy, fmt.Sprintf("fail to decide bech32 address: %s", err.Error())), nil, nil } - msg, err := group.NewMsgUpdateGroupPolicyDecisionPolicy(acc.Address, groupPolicyBech32, &group.ThresholdDecisionPolicy{ + accAddr, err := ak.AddressCodec().BytesToString(acc.Address) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgUpdateGroupPolicyDecisionPolicy, "error getting admin address"), nil, err + } + groupPolicyStrAddr, err := ak.AddressCodec().BytesToString(groupPolicyBech32) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgUpdateGroupPolicyDecisionPolicy, "error group policy admin address"), nil, err + } + + msg, err := group.NewMsgUpdateGroupPolicyDecisionPolicy(accAddr, groupPolicyStrAddr, &group.ThresholdDecisionPolicy{ Threshold: fmt.Sprintf("%d", simtypes.RandIntBetween(r, 1, 10)), Windows: &group.DecisionPolicyWindows{ VotingPeriod: time.Second * time.Duration(simtypes.RandIntBetween(r, 100, 1000)), @@ -833,8 +892,12 @@ func SimulateMsgUpdateGroupPolicyMetadata( return simtypes.NoOpMsg(group.ModuleName, TypeMsgUpdateGroupPolicyMetadata, "fee error"), nil, err } + adminAddr, err := ak.AddressCodec().BytesToString(acc.Address) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgUpdateGroupPolicyMetadata, "error getting admin address"), nil, err + } msg := &group.MsgUpdateGroupPolicyMetadata{ - Admin: acc.Address.String(), + Admin: adminAddr, GroupPolicyAddress: groupPolicyAddr, Metadata: simtypes.RandStringOfLength(r, 10), } @@ -928,7 +991,10 @@ func SimulateMsgWithdrawProposal( // select a random proposer proposers := proposal.Proposers n := randIntInRange(r, len(proposers)) - proposerIdx := findAccount(accounts, proposers[n]) + proposerIdx, err := findAccount(accounts, proposers[n], ak.AddressCodec()) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgWithdrawProposal, "could not find account"), nil, err + } proposer := accounts[proposerIdx] proposerAcc := ak.GetAccount(sdkCtx, proposer.Address) @@ -938,9 +1004,14 @@ func SimulateMsgWithdrawProposal( return simtypes.NoOpMsg(group.ModuleName, TypeMsgWithdrawProposal, "fee error"), nil, err } + proposerAddr, err := ak.AddressCodec().BytesToString(proposer.Address) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgWithdrawProposal, "error getting voter address"), nil, err + } + msg := &group.MsgWithdrawProposal{ ProposalId: uint64(proposalID), - Address: proposer.Address.String(), + Address: proposerAddr, } tx, err := simtestutil.GenSignedMockTx( @@ -1035,9 +1106,14 @@ func SimulateMsgVote( return simtypes.NoOpMsg(group.ModuleName, TypeMsgVote, "no proposals found"), nil, nil } + voterAddr, err := ak.AddressCodec().BytesToString(acc.Address) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgVote, "error getting voter address"), nil, err + } + // Ensure member hasn't already voted res, _ := k.VoteByProposalVoter(sdkCtx, &group.QueryVoteByProposalVoterRequest{ - Voter: acc.Address.String(), + Voter: voterAddr, ProposalId: uint64(proposalID), }) if res != nil { @@ -1046,7 +1122,7 @@ func SimulateMsgVote( msg := &group.MsgVote{ ProposalId: uint64(proposalID), - Voter: acc.Address.String(), + Voter: voterAddr, Option: group.VOTE_OPTION_YES, Metadata: simtypes.RandStringOfLength(r, 10), } @@ -1126,9 +1202,13 @@ func SimulateMsgExec( return simtypes.NoOpMsg(group.ModuleName, TypeMsgExec, "no proposals found"), nil, nil } + accAddr, err := ak.AddressCodec().BytesToString(acc.Address) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgExec, "error getting executor address"), nil, err + } msg := &group.MsgExec{ ProposalId: uint64(proposalID), - Executor: acc.Address.String(), + Executor: accAddr, } tx, err := simtestutil.GenSignedMockTx( r, @@ -1192,8 +1272,12 @@ func SimulateMsgLeaveGroup( return simtypes.NoOpMsg(group.ModuleName, TypeMsgLeaveGroup, "fee error"), nil, err } + accAddr, err := ak.AddressCodec().BytesToString(acc.Address) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgLeaveGroup, "error getting account address"), nil, err + } msg := &group.MsgLeaveGroup{ - Address: acc.Address.String(), + Address: accAddr, GroupId: groupInfo.Id, } @@ -1252,7 +1336,11 @@ func randomGroup(r *rand.Rand, k keeper.Keeper, ak group.AccountKeeper, groupAdmin := groupInfo.Admin found := -1 for i := range accounts { - if accounts[i].Address.String() == groupAdmin { + addr, err := ak.AddressCodec().BytesToString(accounts[i].Address) + if err != nil { + return nil, simtypes.Account{}, nil, err + } + if addr == groupAdmin { found = i break } @@ -1288,7 +1376,11 @@ func randomGroupPolicy(r *rand.Rand, k keeper.Keeper, ak group.AccountKeeper, } groupPolicyInfo = result.GroupPolicies[n] - idx := findAccount(accounts, groupPolicyInfo.Admin) + idx, err := findAccount(accounts, groupPolicyInfo.Admin, ak.AddressCodec()) + if err != nil { + return groupInfo, nil, simtypes.Account{}, nil, nil + } + if idx < 0 { return groupInfo, nil, simtypes.Account{}, nil, nil } @@ -1310,7 +1402,10 @@ func randomMember(ctx context.Context, r *rand.Rand, k keeper.Keeper, ak group.A if n < 0 { return simtypes.Account{}, nil, err } - idx := findAccount(accounts, res.Members[n].Member.Address) + idx, err := findAccount(accounts, res.Members[n].Member.Address, ak.AddressCodec()) + if err != nil { + return simtypes.Account{}, nil, err + } if idx < 0 { return simtypes.Account{}, nil, err } @@ -1329,26 +1424,34 @@ func randIntInRange(r *rand.Rand, l int) int { return simtypes.RandIntBetween(r, 0, l-1) } -func findAccount(accounts []simtypes.Account, addr string) (idx int) { +func findAccount(accounts []simtypes.Account, addr string, addressCodec address.Codec) (idx int, err error) { idx = -1 for i := range accounts { - if accounts[i].Address.String() == addr { + accAddr, err := addressCodec.BytesToString(accounts[i].Address) + if err != nil { + return idx, err + } + if accAddr == addr { idx = i break } } - return idx + return idx, err } -func genGroupMembers(r *rand.Rand, accounts []simtypes.Account) []group.MemberRequest { +func genGroupMembers(r *rand.Rand, accounts []simtypes.Account, addressCodec address.Codec) ([]group.MemberRequest, error) { if len(accounts) == 1 { + addr, err := addressCodec.BytesToString(accounts[0].Address) + if err != nil { + return nil, err + } return []group.MemberRequest{ { - Address: accounts[0].Address.String(), + Address: addr, Weight: fmt.Sprintf("%d", simtypes.RandIntBetween(r, 1, 10)), Metadata: simtypes.RandStringOfLength(r, 10), }, - } + }, nil } max := 5 @@ -1360,12 +1463,16 @@ func genGroupMembers(r *rand.Rand, accounts []simtypes.Account) []group.MemberRe members := make([]group.MemberRequest, membersLen) for i := 0; i < membersLen; i++ { + addr, err := addressCodec.BytesToString(accounts[i].Address) + if err != nil { + return nil, err + } members[i] = group.MemberRequest{ - Address: accounts[i].Address.String(), + Address: addr, Weight: fmt.Sprintf("%d", simtypes.RandIntBetween(r, 1, 10)), Metadata: simtypes.RandStringOfLength(r, 10), } } - return members + return members, nil } diff --git a/x/group/simulation/operations_test.go b/x/group/simulation/operations_test.go index 433764d3f5..19b8a1cb0f 100644 --- a/x/group/simulation/operations_test.go +++ b/x/group/simulation/operations_test.go @@ -130,6 +130,8 @@ func (suite *SimTestSuite) TestSimulateCreateGroup() { accounts := suite.getTestingAccounts(r, 1) acc := accounts[0] + accAddr, err := suite.accountKeeper.AddressCodec().BytesToString(acc.Address) + suite.Require().NoError(err) // execute operation op := simulation.SimulateMsgCreateGroup(codec.NewProtoCodec(suite.interfaceRegistry), suite.txConfig, suite.accountKeeper, suite.bankKeeper) @@ -140,7 +142,7 @@ func (suite *SimTestSuite) TestSimulateCreateGroup() { err = proto.Unmarshal(operationMsg.Msg, &msg) suite.Require().NoError(err) suite.Require().True(operationMsg.OK) - suite.Require().Equal(acc.Address.String(), msg.Admin) + suite.Require().Equal(accAddr, msg.Admin) suite.Require().Len(futureOperations, 0) } @@ -151,6 +153,8 @@ func (suite *SimTestSuite) TestSimulateCreateGroupWithPolicy() { accounts := suite.getTestingAccounts(r, 1) acc := accounts[0] + accAddr, err := suite.accountKeeper.AddressCodec().BytesToString(acc.Address) + suite.Require().NoError(err) // execute operation op := simulation.SimulateMsgCreateGroupWithPolicy(codec.NewProtoCodec(suite.interfaceRegistry), suite.txConfig, suite.accountKeeper, suite.bankKeeper) @@ -161,7 +165,7 @@ func (suite *SimTestSuite) TestSimulateCreateGroupWithPolicy() { err = proto.Unmarshal(operationMsg.Msg, &msg) suite.Require().NoError(err) suite.Require().True(operationMsg.OK) - suite.Require().Equal(acc.Address.String(), msg.Admin) + suite.Require().Equal(accAddr, msg.Admin) suite.Require().Len(futureOperations, 0) } @@ -171,14 +175,16 @@ func (suite *SimTestSuite) TestSimulateCreateGroupPolicy() { r := rand.New(s) accounts := suite.getTestingAccounts(r, 1) acc := accounts[0] + accAddr, err := suite.accountKeeper.AddressCodec().BytesToString(acc.Address) + suite.Require().NoError(err) // setup a group - _, err := suite.groupKeeper.CreateGroup(suite.ctx, + _, err = suite.groupKeeper.CreateGroup(suite.ctx, &group.MsgCreateGroup{ - Admin: acc.Address.String(), + Admin: accAddr, Members: []group.MemberRequest{ { - Address: acc.Address.String(), + Address: accAddr, Weight: "1", }, }, @@ -195,7 +201,7 @@ func (suite *SimTestSuite) TestSimulateCreateGroupPolicy() { err = proto.Unmarshal(operationMsg.Msg, &msg) suite.Require().NoError(err) suite.Require().True(operationMsg.OK) - suite.Require().Equal(acc.Address.String(), msg.Admin) + suite.Require().Equal(accAddr, msg.Admin) suite.Require().Len(futureOperations, 0) } @@ -205,15 +211,17 @@ func (suite *SimTestSuite) TestSimulateSubmitProposal() { r := rand.New(s) accounts := suite.getTestingAccounts(r, 1) acc := accounts[0] + accAddr, err := suite.accountKeeper.AddressCodec().BytesToString(acc.Address) + suite.Require().NoError(err) // setup a group ctx := suite.ctx groupRes, err := suite.groupKeeper.CreateGroup(ctx, &group.MsgCreateGroup{ - Admin: acc.Address.String(), + Admin: accAddr, Members: []group.MemberRequest{ { - Address: acc.Address.String(), + Address: accAddr, Weight: "1", }, }, @@ -223,7 +231,7 @@ func (suite *SimTestSuite) TestSimulateSubmitProposal() { // setup a group account accountReq := &group.MsgCreateGroupPolicy{ - Admin: acc.Address.String(), + Admin: accAddr, GroupId: groupRes.GroupId, } err = accountReq.SetDecisionPolicy(group.NewThresholdDecisionPolicy("1", time.Hour, 0)) @@ -250,10 +258,12 @@ func (suite *SimTestSuite) TestWithdrawProposal() { r := rand.New(s) accounts := suite.getTestingAccounts(r, 3) acc := accounts[0] + accAddr, err := suite.accountKeeper.AddressCodec().BytesToString(acc.Address) + suite.Require().NoError(err) // setup a group ctx := suite.ctx - addr := acc.Address.String() + addr := accAddr groupRes, err := suite.groupKeeper.CreateGroup(ctx, &group.MsgCreateGroup{ Admin: addr, @@ -308,10 +318,12 @@ func (suite *SimTestSuite) TestSimulateVote() { r := rand.New(s) accounts := suite.getTestingAccounts(r, 1) acc := accounts[0] + accAddr, err := suite.accountKeeper.AddressCodec().BytesToString(acc.Address) + suite.Require().NoError(err) // setup a group ctx := suite.ctx - addr := acc.Address.String() + addr := accAddr groupRes, err := suite.groupKeeper.CreateGroup(ctx, &group.MsgCreateGroup{ Admin: addr, @@ -367,10 +379,12 @@ func (suite *SimTestSuite) TestSimulateExec() { r := rand.New(s) accounts := suite.getTestingAccounts(r, 1) acc := accounts[0] + accAddr, err := suite.accountKeeper.AddressCodec().BytesToString(acc.Address) + suite.Require().NoError(err) // setup a group ctx := suite.ctx - addr := acc.Address.String() + addr := accAddr groupRes, err := suite.groupKeeper.CreateGroup(ctx, &group.MsgCreateGroup{ Admin: addr, @@ -434,14 +448,16 @@ func (suite *SimTestSuite) TestSimulateUpdateGroupAdmin() { r := rand.New(s) accounts := suite.getTestingAccounts(r, 2) acc := accounts[0] + accAddr, err := suite.accountKeeper.AddressCodec().BytesToString(acc.Address) + suite.Require().NoError(err) // setup a group - _, err := suite.groupKeeper.CreateGroup(suite.ctx, + _, err = suite.groupKeeper.CreateGroup(suite.ctx, &group.MsgCreateGroup{ - Admin: acc.Address.String(), + Admin: accAddr, Members: []group.MemberRequest{ { - Address: acc.Address.String(), + Address: accAddr, Weight: "1", }, }, @@ -458,7 +474,7 @@ func (suite *SimTestSuite) TestSimulateUpdateGroupAdmin() { err = proto.Unmarshal(operationMsg.Msg, &msg) suite.Require().NoError(err) suite.Require().True(operationMsg.OK) - suite.Require().Equal(acc.Address.String(), msg.Admin) + suite.Require().Equal(accAddr, msg.Admin) suite.Require().Len(futureOperations, 0) } @@ -468,14 +484,16 @@ func (suite *SimTestSuite) TestSimulateUpdateGroupMetadata() { r := rand.New(s) accounts := suite.getTestingAccounts(r, 2) acc := accounts[0] + accAddr, err := suite.accountKeeper.AddressCodec().BytesToString(acc.Address) + suite.Require().NoError(err) // setup a group - _, err := suite.groupKeeper.CreateGroup(suite.ctx, + _, err = suite.groupKeeper.CreateGroup(suite.ctx, &group.MsgCreateGroup{ - Admin: acc.Address.String(), + Admin: accAddr, Members: []group.MemberRequest{ { - Address: acc.Address.String(), + Address: accAddr, Weight: "1", }, }, @@ -492,7 +510,7 @@ func (suite *SimTestSuite) TestSimulateUpdateGroupMetadata() { err = proto.Unmarshal(operationMsg.Msg, &msg) suite.Require().NoError(err) suite.Require().True(operationMsg.OK) - suite.Require().Equal(acc.Address.String(), msg.Admin) + suite.Require().Equal(accAddr, msg.Admin) suite.Require().Len(futureOperations, 0) } @@ -502,14 +520,16 @@ func (suite *SimTestSuite) TestSimulateUpdateGroupMembers() { r := rand.New(s) accounts := suite.getTestingAccounts(r, 2) acc := accounts[0] + accAddr, err := suite.accountKeeper.AddressCodec().BytesToString(acc.Address) + suite.Require().NoError(err) // setup a group - _, err := suite.groupKeeper.CreateGroup(suite.ctx, + _, err = suite.groupKeeper.CreateGroup(suite.ctx, &group.MsgCreateGroup{ - Admin: acc.Address.String(), + Admin: accAddr, Members: []group.MemberRequest{ { - Address: acc.Address.String(), + Address: accAddr, Weight: "1", }, }, @@ -526,7 +546,7 @@ func (suite *SimTestSuite) TestSimulateUpdateGroupMembers() { err = proto.Unmarshal(operationMsg.Msg, &msg) suite.Require().NoError(err) suite.Require().True(operationMsg.OK) - suite.Require().Equal(acc.Address.String(), msg.Admin) + suite.Require().Equal(accAddr, msg.Admin) suite.Require().Len(futureOperations, 0) } @@ -536,15 +556,17 @@ func (suite *SimTestSuite) TestSimulateUpdateGroupPolicyAdmin() { r := rand.New(s) accounts := suite.getTestingAccounts(r, 2) acc := accounts[0] + accAddr, err := suite.accountKeeper.AddressCodec().BytesToString(acc.Address) + suite.Require().NoError(err) // setup a group ctx := suite.ctx groupRes, err := suite.groupKeeper.CreateGroup(ctx, &group.MsgCreateGroup{ - Admin: acc.Address.String(), + Admin: accAddr, Members: []group.MemberRequest{ { - Address: acc.Address.String(), + Address: accAddr, Weight: "1", }, }, @@ -554,7 +576,7 @@ func (suite *SimTestSuite) TestSimulateUpdateGroupPolicyAdmin() { // setup a group account accountReq := &group.MsgCreateGroupPolicy{ - Admin: acc.Address.String(), + Admin: accAddr, GroupId: groupRes.GroupId, } err = accountReq.SetDecisionPolicy(group.NewThresholdDecisionPolicy("1", time.Hour, 0)) @@ -581,15 +603,17 @@ func (suite *SimTestSuite) TestSimulateUpdateGroupPolicyDecisionPolicy() { r := rand.New(s) accounts := suite.getTestingAccounts(r, 2) acc := accounts[0] + accAddr, err := suite.accountKeeper.AddressCodec().BytesToString(acc.Address) + suite.Require().NoError(err) // setup a group ctx := suite.ctx groupRes, err := suite.groupKeeper.CreateGroup(ctx, &group.MsgCreateGroup{ - Admin: acc.Address.String(), + Admin: accAddr, Members: []group.MemberRequest{ { - Address: acc.Address.String(), + Address: accAddr, Weight: "1", }, }, @@ -599,7 +623,7 @@ func (suite *SimTestSuite) TestSimulateUpdateGroupPolicyDecisionPolicy() { // setup a group account accountReq := &group.MsgCreateGroupPolicy{ - Admin: acc.Address.String(), + Admin: accAddr, GroupId: groupRes.GroupId, } err = accountReq.SetDecisionPolicy(group.NewThresholdDecisionPolicy("1", time.Hour, 0)) @@ -626,15 +650,17 @@ func (suite *SimTestSuite) TestSimulateUpdateGroupPolicyMetadata() { r := rand.New(s) accounts := suite.getTestingAccounts(r, 2) acc := accounts[0] + accAddr, err := suite.accountKeeper.AddressCodec().BytesToString(acc.Address) + suite.Require().NoError(err) // setup a group ctx := suite.ctx groupRes, err := suite.groupKeeper.CreateGroup(ctx, &group.MsgCreateGroup{ - Admin: acc.Address.String(), + Admin: accAddr, Members: []group.MemberRequest{ { - Address: acc.Address.String(), + Address: accAddr, Weight: "1", }, }, @@ -644,7 +670,7 @@ func (suite *SimTestSuite) TestSimulateUpdateGroupPolicyMetadata() { // setup a group account accountReq := &group.MsgCreateGroupPolicy{ - Admin: acc.Address.String(), + Admin: accAddr, GroupId: groupRes.GroupId, } err = accountReq.SetDecisionPolicy(group.NewThresholdDecisionPolicy("1", time.Hour, 0)) @@ -673,26 +699,31 @@ func (suite *SimTestSuite) TestSimulateLeaveGroup() { // setup 4 account accounts := suite.getTestingAccounts(r, 4) admin := accounts[0] - member1 := accounts[1] - member2 := accounts[2] - member3 := accounts[3] + adminAddr, err := suite.accountKeeper.AddressCodec().BytesToString(admin.Address) + suite.Require().NoError(err) + member1, err := suite.accountKeeper.AddressCodec().BytesToString(accounts[1].Address) + suite.Require().NoError(err) + member2, err := suite.accountKeeper.AddressCodec().BytesToString(accounts[2].Address) + suite.Require().NoError(err) + member3, err := suite.accountKeeper.AddressCodec().BytesToString(accounts[3].Address) + suite.Require().NoError(err) // setup a group ctx := suite.ctx groupRes, err := suite.groupKeeper.CreateGroup(ctx, &group.MsgCreateGroup{ - Admin: admin.Address.String(), + Admin: adminAddr, Members: []group.MemberRequest{ { - Address: member1.Address.String(), + Address: member1, Weight: "1", }, { - Address: member2.Address.String(), + Address: member2, Weight: "2", }, { - Address: member3.Address.String(), + Address: member3, Weight: "1", }, }, @@ -702,7 +733,7 @@ func (suite *SimTestSuite) TestSimulateLeaveGroup() { // setup a group account accountReq := &group.MsgCreateGroupPolicy{ - Admin: admin.Address.String(), + Admin: adminAddr, GroupId: groupRes.GroupId, Metadata: "", } diff --git a/x/group/types.go b/x/group/types.go index 16d155565b..3649bd0eb4 100644 --- a/x/group/types.go +++ b/x/group/types.go @@ -244,13 +244,13 @@ func (p PercentageDecisionPolicy) Allow(tally TallyResult, totalPower string) (D var _ orm.Validateable = GroupPolicyInfo{} // NewGroupPolicyInfo creates a new GroupPolicyInfo instance -func NewGroupPolicyInfo(address sdk.AccAddress, group uint64, admin sdk.AccAddress, metadata string, +func NewGroupPolicyInfo(address string, group uint64, admin, metadata string, version uint64, decisionPolicy DecisionPolicy, createdAt time.Time, ) (GroupPolicyInfo, error) { p := GroupPolicyInfo{ - Address: address.String(), + Address: address, GroupId: group, - Admin: admin.String(), + Admin: admin, Metadata: metadata, Version: version, CreatedAt: createdAt,