refactor(x/group)!: remove Address.String() (#19916)
This commit is contained in:
parent
80e1a45e70
commit
f4af84f89f
@ -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.
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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,
|
||||
},
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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",
|
||||
},
|
||||
},
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
@ -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))
|
||||
})
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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,
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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: "",
|
||||
}
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user