refactor(x/group)!: remove Address.String() (#19916)

This commit is contained in:
Julián Toledano 2024-04-02 15:59:30 +02:00 committed by GitHub
parent 80e1a45e70
commit f4af84f89f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
24 changed files with 948 additions and 674 deletions

View File

@ -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.

View File

@ -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 {

View File

@ -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)

View File

@ -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,
},

View File

@ -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
}

View File

@ -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)

View File

@ -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.

View File

@ -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)

View File

@ -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",
},
},

View File

@ -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)

View File

@ -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
}

File diff suppressed because it is too large Load Diff

View File

@ -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)
}
}
}

View File

@ -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

View File

@ -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
}

View File

@ -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))
})

View File

@ -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

View File

@ -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
}

View File

@ -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,
}

View File

@ -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)

View File

@ -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

View File

@ -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
}

View File

@ -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: "",
}

View File

@ -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,