refactor(gov): remove global bech32 (#15682)

This commit is contained in:
Marko 2023-04-06 10:56:12 +02:00 committed by GitHub
parent b6bc636b4d
commit f5993b1c62
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 198 additions and 70 deletions

View File

@ -8,6 +8,7 @@ import (
"github.com/stretchr/testify/suite"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/cosmos/cosmos-sdk/codec/address"
"github.com/cosmos/cosmos-sdk/testutil"
clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli"
"github.com/cosmos/cosmos-sdk/testutil/network"
@ -56,7 +57,7 @@ func (s *DepositTestSuite) submitProposal(val *network.Validator, initialDeposit
s.Require().NoError(s.network.WaitForNextBlock())
// query proposals, return the last's id
cmd := cli.GetCmdQueryProposals()
cmd := cli.GetCmdQueryProposals(address.NewBech32Codec("cosmos"))
args := []string{fmt.Sprintf("--%s=json", flags.FlagOutput)}
res, err := clitestutil.ExecTestCLICmd(val.ClientCtx, cmd, args)
s.Require().NoError(err)
@ -130,7 +131,7 @@ func (s *DepositTestSuite) TestQueryProposalAfterVotingPeriod() {
proposalID := strconv.FormatUint(id, 10)
args := []string{fmt.Sprintf("--%s=json", flags.FlagOutput)}
cmd := cli.GetCmdQueryProposals()
cmd := cli.GetCmdQueryProposals(address.NewBech32Codec("cosmos"))
_, err := clitestutil.ExecTestCLICmd(val.ClientCtx, cmd, args)
s.Require().NoError(err)

View File

@ -5,6 +5,7 @@ import (
"strings"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/cosmos/cosmos-sdk/codec/address"
clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/gov/client/cli"
@ -305,7 +306,7 @@ func (s *E2ETestSuite) TestCmdGetProposals() {
tc := tc
s.Run(tc.name, func() {
cmd := cli.GetCmdQueryProposals()
cmd := cli.GetCmdQueryProposals(address.NewBech32Codec("cosmos"))
clientCtx := val.ClientCtx
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
@ -532,7 +533,7 @@ func (s *E2ETestSuite) TestCmdQueryVote() {
for _, tc := range testCases {
tc := tc
s.Run(tc.name, func() {
cmd := cli.GetCmdQueryVote()
cmd := cli.GetCmdQueryVote(address.NewBech32Codec("cosmos"))
clientCtx := val.ClientCtx
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)

View File

@ -5,11 +5,11 @@ import (
"strconv"
"strings"
"cosmossdk.io/core/address"
"github.com/spf13/cobra"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/flags"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/version"
gcutils "github.com/cosmos/cosmos-sdk/x/gov/client/utils"
"github.com/cosmos/cosmos-sdk/x/gov/types"
@ -17,7 +17,7 @@ import (
)
// GetQueryCmd returns the cli query commands for this module
func GetQueryCmd() *cobra.Command {
func GetQueryCmd(ac address.Codec) *cobra.Command {
// Group gov queries under a subcommand
govQueryCmd := &cobra.Command{
Use: types.ModuleName,
@ -29,8 +29,8 @@ func GetQueryCmd() *cobra.Command {
govQueryCmd.AddCommand(
GetCmdQueryProposal(),
GetCmdQueryProposals(),
GetCmdQueryVote(),
GetCmdQueryProposals(ac),
GetCmdQueryVote(ac),
GetCmdQueryVotes(),
GetCmdQueryParams(),
GetCmdQueryParam(),
@ -93,7 +93,7 @@ $ %s query gov proposal 1
// GetCmdQueryProposals implements a query proposals command. Command to Get
// Proposals Information.
func GetCmdQueryProposals() *cobra.Command {
func GetCmdQueryProposals(ac address.Codec) *cobra.Command {
cmd := &cobra.Command{
Use: "proposals",
Short: "Query proposals with optional filters",
@ -117,14 +117,14 @@ $ %s query gov proposals --page=2 --limit=100
var proposalStatus v1.ProposalStatus
if len(bechDepositorAddr) != 0 {
_, err := sdk.AccAddressFromBech32(bechDepositorAddr)
_, err := ac.StringToBytes(bechDepositorAddr)
if err != nil {
return err
}
}
if len(bechVoterAddr) != 0 {
_, err := sdk.AccAddressFromBech32(bechVoterAddr)
_, err := ac.StringToBytes(bechVoterAddr)
if err != nil {
return err
}
@ -181,7 +181,7 @@ $ %s query gov proposals --page=2 --limit=100
// GetCmdQueryVote implements the query proposal vote command. Command to Get a
// Vote Information.
func GetCmdQueryVote() *cobra.Command {
func GetCmdQueryVote(ac address.Codec) *cobra.Command {
cmd := &cobra.Command{
Use: "vote [proposal-id] [voter-addr]",
Args: cobra.ExactArgs(2),
@ -218,7 +218,7 @@ $ %s query gov vote 1 cosmos1skjwj5whet0lpe65qaq4rpq03hjxlwd9nf39lk
return fmt.Errorf("failed to fetch proposal-id %d: %s", proposalID, err)
}
voterAddr, err := sdk.AccAddressFromBech32(args[1])
voterAddr, err := ac.StringToBytes(args[1])
if err != nil {
return err
}

View File

@ -4,6 +4,7 @@ import (
"fmt"
"strings"
"github.com/cosmos/cosmos-sdk/codec/address"
clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli"
"github.com/cosmos/cosmos-sdk/client/flags"
@ -214,7 +215,7 @@ func (s *CLITestSuite) TestCmdGetProposals() {
tc := tc
s.Run(tc.name, func() {
cmd := cli.GetCmdQueryProposals()
cmd := cli.GetCmdQueryProposals(address.NewBech32Codec("cosmos"))
cmd.SetArgs(tc.args)
s.Require().Contains(fmt.Sprint(cmd), strings.TrimSpace(tc.expCmdOutput))
})
@ -374,7 +375,7 @@ func (s *CLITestSuite) TestCmdQueryVote() {
for _, tc := range testCases {
tc := tc
s.Run(tc.name, func() {
cmd := cli.GetCmdQueryVote()
cmd := cli.GetCmdQueryVote(address.NewBech32Codec("cosmos"))
cmd.SetArgs(tc.args)
if len(tc.args) != 0 {

View File

@ -79,10 +79,14 @@ func setupGovKeeper(t *testing.T) (
acctKeeper.EXPECT().GetModuleAddress(types.ModuleName).Return(govAcct).AnyTimes()
acctKeeper.EXPECT().GetModuleAddress(disttypes.ModuleName).Return(distAcct).AnyTimes()
acctKeeper.EXPECT().GetModuleAccount(gomock.Any(), types.ModuleName).Return(authtypes.NewEmptyModuleAccount(types.ModuleName)).AnyTimes()
acctKeeper.EXPECT().StringToBytes(govAcct.String()).Return(govAcct, nil).AnyTimes()
acctKeeper.EXPECT().BytesToString(govAcct).Return(govAcct.String(), nil).AnyTimes()
trackMockBalances(bankKeeper, distributionKeeper)
stakingKeeper.EXPECT().TokensFromConsensusPower(ctx, gomock.Any()).DoAndReturn(func(ctx sdk.Context, power int64) math.Int {
return sdk.TokensFromConsensusPower(power, math.NewIntFromUint64(1000000))
}).AnyTimes()
stakingKeeper.EXPECT().BondDenom(ctx).Return("stake").AnyTimes()
stakingKeeper.EXPECT().IterateBondedValidatorsByPower(gomock.Any(), gomock.Any()).AnyTimes()
stakingKeeper.EXPECT().IterateDelegations(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes()

View File

@ -30,7 +30,10 @@ func (keeper Keeper) GetDeposit(ctx sdk.Context, proposalID uint64, depositorAdd
func (keeper Keeper) SetDeposit(ctx sdk.Context, deposit v1.Deposit) {
store := ctx.KVStore(keeper.storeKey)
bz := keeper.cdc.MustMarshal(&deposit)
depositor := sdk.MustAccAddressFromBech32(deposit.Depositor)
depositor, err := keeper.authKeeper.StringToBytes(deposit.Depositor)
if err != nil {
panic(err)
}
store.Set(types.DepositKey(deposit.ProposalId, depositor), bz)
}
@ -65,7 +68,10 @@ func (keeper Keeper) DeleteAndBurnDeposits(ctx sdk.Context, proposalID uint64) {
panic(err)
}
depositor := sdk.MustAccAddressFromBech32(deposit.Depositor)
depositor, err := keeper.authKeeper.StringToBytes(deposit.Depositor)
if err != nil {
panic(err)
}
store.Delete(types.DepositKey(proposalID, depositor))
return false
@ -176,7 +182,11 @@ func (keeper Keeper) ChargeDeposit(ctx sdk.Context, proposalID uint64, destAddre
var cancellationCharges sdk.Coins
for _, deposit := range keeper.GetDeposits(ctx, proposalID) {
depositerAddress := sdk.MustAccAddressFromBech32(deposit.Depositor)
depositerAddress, err := keeper.authKeeper.StringToBytes(deposit.Depositor)
if err != nil {
return err
}
var remainingAmount sdk.Coins
for _, coins := range deposit.Amount {
@ -225,8 +235,11 @@ func (keeper Keeper) ChargeDeposit(ctx sdk.Context, proposalID uint64, destAddre
return err
}
default:
destAccAddress := sdk.MustAccAddressFromBech32(destAddress)
err := keeper.bankKeeper.SendCoinsFromModuleToAccount(
destAccAddress, err := keeper.authKeeper.StringToBytes(destAddress)
if err != nil {
return err
}
err = keeper.bankKeeper.SendCoinsFromModuleToAccount(
ctx, types.ModuleName, destAccAddress, cancellationCharges,
)
if err != nil {
@ -243,9 +256,12 @@ func (keeper Keeper) RefundAndDeleteDeposits(ctx sdk.Context, proposalID uint64)
store := ctx.KVStore(keeper.storeKey)
keeper.IterateDeposits(ctx, proposalID, func(deposit v1.Deposit) bool {
depositor := sdk.MustAccAddressFromBech32(deposit.Depositor)
depositor, err := keeper.authKeeper.StringToBytes(deposit.Depositor)
if err != nil {
panic(err)
}
err := keeper.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, depositor, deposit.Amount)
err = keeper.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, depositor, deposit.Amount)
if err != nil {
panic(err)
}

View File

@ -7,6 +7,7 @@ import (
sdkmath "cosmossdk.io/math"
"github.com/stretchr/testify/require"
"github.com/cosmos/cosmos-sdk/codec/address"
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
sdk "github.com/cosmos/cosmos-sdk/types"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
@ -35,7 +36,7 @@ func TestDeposits(t *testing.T) {
for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
govKeeper, _, bankKeeper, stakingKeeper, distKeeper, _, ctx := setupGovKeeper(t)
govKeeper, authKeeper, bankKeeper, stakingKeeper, distKeeper, _, ctx := setupGovKeeper(t)
trackMockBalances(bankKeeper, distKeeper)
// With expedited proposals the minimum deposit is higher, so we must
@ -47,6 +48,10 @@ func TestDeposits(t *testing.T) {
}
TestAddrs := simtestutil.AddTestAddrsIncremental(bankKeeper, stakingKeeper, ctx, 2, sdkmath.NewInt(10000000*depositMultiplier))
for _, addr := range TestAddrs {
authKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
authKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
}
tp := TestProposal
proposal, err := govKeeper.SubmitProposal(ctx, tp, "", "title", "summary", TestAddrs[0], tc.expedited)
@ -297,10 +302,14 @@ func TestChargeDeposit(t *testing.T) {
}
t.Run(testName(i), func(t *testing.T) {
govKeeper, _, bankKeeper, stakingKeeper, _, _, ctx := setupGovKeeper(t)
govKeeper, authKeeper, bankKeeper, stakingKeeper, _, _, ctx := setupGovKeeper(t)
params := v1.DefaultParams()
params.ProposalCancelRatio = tc.proposalCancelRatio
TestAddrs := simtestutil.AddTestAddrsIncremental(bankKeeper, stakingKeeper, ctx, 2, sdk.NewInt(10000000000))
for _, addr := range TestAddrs {
authKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
authKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
}
switch i {
case 0:
@ -326,10 +335,12 @@ func TestChargeDeposit(t *testing.T) {
_, err = govKeeper.AddDeposit(ctx, proposalID, TestAddrs[0], fiveStake)
require.NoError(t, err)
codec := address.NewBech32Codec("cosmos")
// get balances of dest address
var prevBalance sdk.Coin
if len(params.ProposalCancelDest) != 0 {
accAddr := sdk.MustAccAddressFromBech32(params.ProposalCancelDest)
accAddr, err := codec.StringToBytes(params.ProposalCancelDest)
require.NoError(t, err)
prevBalance = bankKeeper.GetBalance(ctx, accAddr, sdk.DefaultBondDenom)
}
@ -345,7 +356,8 @@ func TestChargeDeposit(t *testing.T) {
require.NoError(t, err)
if len(params.ProposalCancelDest) != 0 {
accAddr := sdk.MustAccAddressFromBech32(params.ProposalCancelDest)
accAddr, err := codec.StringToBytes(params.ProposalCancelDest)
require.NoError(t, err)
newBalanceAfterCancelProposal := bankKeeper.GetBalance(ctx, accAddr, sdk.DefaultBondDenom)
cancellationCharges := sdkmath.NewInt(0)
for _, deposits := range allDeposits {

View File

@ -67,7 +67,7 @@ func (q Keeper) Proposals(c context.Context, req *v1.QueryProposalsRequest) (*v1
// match voter address (if supplied)
if len(req.Voter) > 0 {
voter, err := sdk.AccAddressFromBech32(req.Voter)
voter, err := q.authKeeper.StringToBytes(req.Voter)
if err != nil {
return nil, err
}
@ -77,7 +77,7 @@ func (q Keeper) Proposals(c context.Context, req *v1.QueryProposalsRequest) (*v1
// match depositor (if supplied)
if len(req.Depositor) > 0 {
depositor, err := sdk.AccAddressFromBech32(req.Depositor)
depositor, err := q.authKeeper.StringToBytes(req.Depositor)
if err != nil {
return nil, err
}
@ -115,7 +115,7 @@ func (q Keeper) Vote(c context.Context, req *v1.QueryVoteRequest) (*v1.QueryVote
ctx := sdk.UnwrapSDKContext(c)
voter, err := sdk.AccAddressFromBech32(req.Voter)
voter, err := q.authKeeper.StringToBytes(req.Voter)
if err != nil {
return nil, err
}
@ -211,7 +211,7 @@ func (q Keeper) Deposit(c context.Context, req *v1.QueryDepositRequest) (*v1.Que
ctx := sdk.UnwrapSDKContext(c)
depositor, err := sdk.AccAddressFromBech32(req.Depositor)
depositor, err := q.authKeeper.StringToBytes(req.Depositor)
if err != nil {
return nil, err
}

View File

@ -9,6 +9,8 @@ import (
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/codec/address"
"github.com/cosmos/cosmos-sdk/types/query"
v3 "github.com/cosmos/cosmos-sdk/x/gov/migrations/v3"
v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
@ -657,8 +659,10 @@ func (suite *KeeperTestSuite) TestGRPCQueryVotes() {
{ProposalId: proposal.Id, Voter: addrs[0].String(), Options: v1.NewNonSplitVoteOption(v1.OptionAbstain)},
{ProposalId: proposal.Id, Voter: addrs[1].String(), Options: v1.NewNonSplitVoteOption(v1.OptionYes)},
}
accAddr1, err1 := sdk.AccAddressFromBech32(votes[0].Voter)
accAddr2, err2 := sdk.AccAddressFromBech32(votes[1].Voter)
codec := address.NewBech32Codec("cosmos")
accAddr1, err1 := codec.StringToBytes(votes[0].Voter)
accAddr2, err2 := codec.StringToBytes(votes[1].Voter)
suite.Require().NoError(err1)
suite.Require().NoError(err2)
suite.Require().NoError(suite.govKeeper.AddVote(ctx, proposal.Id, accAddr1, votes[0].Options, ""))
@ -759,8 +763,10 @@ func (suite *KeeperTestSuite) TestLegacyGRPCQueryVotes() {
{ProposalId: proposal.Id, Voter: addrs[0].String(), Options: v1beta1.NewNonSplitVoteOption(v1beta1.OptionAbstain)},
{ProposalId: proposal.Id, Voter: addrs[1].String(), Options: v1beta1.NewNonSplitVoteOption(v1beta1.OptionYes)},
}
accAddr1, err1 := sdk.AccAddressFromBech32(votes[0].Voter)
accAddr2, err2 := sdk.AccAddressFromBech32(votes[1].Voter)
codec := address.NewBech32Codec("cosmos")
accAddr1, err1 := codec.StringToBytes(votes[0].Voter)
accAddr2, err2 := codec.StringToBytes(votes[1].Voter)
suite.Require().NoError(err1)
suite.Require().NoError(err2)
suite.Require().NoError(suite.govKeeper.AddVote(ctx, proposal.Id, accAddr1, v1.NewNonSplitVoteOption(v1.OptionAbstain), ""))

View File

@ -47,9 +47,14 @@ func (h *MockGovHooksReceiver) AfterProposalVotingPeriodEnded(ctx sdk.Context, p
func TestHooks(t *testing.T) {
minDeposit := v1.DefaultParams().MinDeposit
govKeeper, _, bankKeeper, stakingKeeper, _, _, ctx := setupGovKeeper(t)
govKeeper, authKeeper, bankKeeper, stakingKeeper, _, _, ctx := setupGovKeeper(t)
addrs := simtestutil.AddTestAddrs(bankKeeper, stakingKeeper, ctx, 1, minDeposit[0].Amount)
for _, addr := range addrs {
authKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
authKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
}
govHooksReceiver := MockGovHooksReceiver{}
keeper.UnsafeSetHooks(

View File

@ -68,7 +68,7 @@ func NewKeeper(
panic(fmt.Sprintf("%s module account has not been set", types.ModuleName))
}
if _, err := sdk.AccAddressFromBech32(authority); err != nil {
if _, err := authKeeper.StringToBytes(authority); err != nil {
panic(fmt.Sprintf("invalid authority address: %s", authority))
}

View File

@ -10,6 +10,7 @@ import (
"github.com/cosmos/cosmos-sdk/baseapp"
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/codec/address"
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/gov/keeper"
@ -20,6 +21,8 @@ import (
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
)
var address1 = "cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"
type KeeperTestSuite struct {
suite.Suite
@ -72,34 +75,51 @@ func (suite *KeeperTestSuite) reset() {
suite.legacyMsgSrvr = keeper.NewLegacyMsgServerImpl(govAcct.String(), suite.msgSrvr)
suite.addrs = simtestutil.AddTestAddrsIncremental(bankKeeper, stakingKeeper, ctx, 3, sdkmath.NewInt(30000000))
for _, addr := range suite.addrs {
suite.acctKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
suite.acctKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
}
}
func TestIncrementProposalNumber(t *testing.T) {
govKeeper, _, _, _, _, _, ctx := setupGovKeeper(t)
govKeeper, authKeeper, _, _, _, _, ctx := setupGovKeeper(t)
ac := address.NewBech32Codec("cosmos")
addrBz, err := ac.StringToBytes(address1)
require.NoError(t, err)
authKeeper.EXPECT().StringToBytes(address1).Return(addrBz, nil).AnyTimes()
authKeeper.EXPECT().BytesToString(addrBz).Return(address1, nil).AnyTimes()
tp := TestProposal
_, err := govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), false)
_, err = govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, false)
require.NoError(t, err)
_, err = govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), false)
_, err = govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, false)
require.NoError(t, err)
_, err = govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), true)
_, err = govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, true)
require.NoError(t, err)
_, err = govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), true)
_, err = govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, true)
require.NoError(t, err)
_, err = govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), false)
_, err = govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, false)
require.NoError(t, err)
proposal6, err := govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), false)
proposal6, err := govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, false)
require.NoError(t, err)
require.Equal(t, uint64(6), proposal6.Id)
}
func TestProposalQueues(t *testing.T) {
govKeeper, _, _, _, _, _, ctx := setupGovKeeper(t)
govKeeper, authKeeper, _, _, _, _, ctx := setupGovKeeper(t)
ac := address.NewBech32Codec("cosmos")
addrBz, err := ac.StringToBytes(address1)
require.NoError(t, err)
authKeeper.EXPECT().StringToBytes(address1).Return(addrBz, nil).AnyTimes()
authKeeper.EXPECT().BytesToString(addrBz).Return(address1, nil).AnyTimes()
// create test proposals
tp := TestProposal
proposal, err := govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), false)
proposal, err := govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, false)
require.NoError(t, err)
inactiveIterator := govKeeper.InactiveProposalQueueIterator(ctx, *proposal.DepositEndTime)

View File

@ -37,7 +37,7 @@ func (k msgServer) SubmitProposal(goCtx context.Context, msg *v1.MsgSubmitPropos
return nil, err
}
proposer, err := sdk.AccAddressFromBech32(msg.GetProposer())
proposer, err := k.authKeeper.StringToBytes(msg.GetProposer())
if err != nil {
return nil, err
}
@ -86,7 +86,7 @@ func (k msgServer) SubmitProposal(goCtx context.Context, msg *v1.MsgSubmitPropos
// CancelProposals implements the MsgServer.CancelProposal method.
func (k msgServer) CancelProposal(goCtx context.Context, msg *v1.MsgCancelProposal) (*v1.MsgCancelProposalResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
_, err := sdk.AccAddressFromBech32(msg.Proposer)
_, err := k.authKeeper.StringToBytes(msg.Proposer)
if err != nil {
return nil, err
}
@ -140,7 +140,7 @@ func (k msgServer) ExecLegacyContent(goCtx context.Context, msg *v1.MsgExecLegac
// Vote implements the MsgServer.Vote method.
func (k msgServer) Vote(goCtx context.Context, msg *v1.MsgVote) (*v1.MsgVoteResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
accAddr, err := sdk.AccAddressFromBech32(msg.Voter)
accAddr, err := k.authKeeper.StringToBytes(msg.Voter)
if err != nil {
return nil, err
}
@ -163,7 +163,7 @@ func (k msgServer) Vote(goCtx context.Context, msg *v1.MsgVote) (*v1.MsgVoteResp
// VoteWeighted implements the MsgServer.VoteWeighted method.
func (k msgServer) VoteWeighted(goCtx context.Context, msg *v1.MsgVoteWeighted) (*v1.MsgVoteWeightedResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
accAddr, accErr := sdk.AccAddressFromBech32(msg.Voter)
accAddr, accErr := k.authKeeper.StringToBytes(msg.Voter)
if accErr != nil {
return nil, accErr
}
@ -186,7 +186,7 @@ func (k msgServer) VoteWeighted(goCtx context.Context, msg *v1.MsgVoteWeighted)
// Deposit implements the MsgServer.Deposit method.
func (k msgServer) Deposit(goCtx context.Context, msg *v1.MsgDeposit) (*v1.MsgDepositResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
accAddr, err := sdk.AccAddressFromBech32(msg.Depositor)
accAddr, err := k.authKeeper.StringToBytes(msg.Depositor)
if err != nil {
return nil, err
}

View File

@ -1,6 +1,7 @@
package keeper_test
import (
"errors"
"strings"
"time"
@ -13,6 +14,11 @@ import (
"github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
)
var (
longAddress = "cosmos1v9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpv9skzctpg0s5ed"
longAddressError = "address max length is 255"
)
func (suite *KeeperTestSuite) TestSubmitProposalReq() {
suite.reset()
govAcct := suite.govKeeper.GetGovernanceAccount(suite.ctx).GetAddress()
@ -233,6 +239,8 @@ func (suite *KeeperTestSuite) TestVoteReq() {
)
suite.Require().NoError(err)
suite.acctKeeper.EXPECT().StringToBytes(longAddress).Return(nil, errors.New(longAddressError)).AnyTimes()
res, err := suite.msgSrvr.SubmitProposal(suite.ctx, msg)
suite.Require().NoError(err)
suite.Require().NotNil(res.ProposalId)
@ -288,7 +296,7 @@ func (suite *KeeperTestSuite) TestVoteReq() {
voter: sdk.AccAddress(strings.Repeat("a", 300)),
metadata: "",
expErr: true,
expErrMsg: "address max length is 255",
expErrMsg: longAddressError,
},
"all good": {
preRun: func() uint64 {
@ -360,6 +368,8 @@ func (suite *KeeperTestSuite) TestVoteWeightedReq() {
suite.Require().NotNil(res.ProposalId)
proposalID := res.ProposalId
suite.acctKeeper.EXPECT().StringToBytes(longAddress).Return(nil, errors.New(longAddressError)).AnyTimes()
cases := map[string]struct {
preRun func() uint64
vote *v1.MsgVote
@ -411,7 +421,7 @@ func (suite *KeeperTestSuite) TestVoteWeightedReq() {
voter: sdk.AccAddress(strings.Repeat("a", 300)),
metadata: "",
expErr: true,
expErrMsg: "address max length is 255",
expErrMsg: longAddressError,
},
"all good": {
preRun: func() uint64 {
@ -603,6 +613,8 @@ func (suite *KeeperTestSuite) TestLegacyMsgVote() {
suite.Require().NotNil(res.ProposalId)
proposalID := res.ProposalId
suite.acctKeeper.EXPECT().StringToBytes(longAddress).Return(nil, errors.New(longAddressError)).AnyTimes()
cases := map[string]struct {
preRun func() uint64
expErr bool
@ -643,7 +655,7 @@ func (suite *KeeperTestSuite) TestLegacyMsgVote() {
voter: sdk.AccAddress(strings.Repeat("a", 300)),
metadata: "",
expErr: true,
expErrMsg: "address max length is 255",
expErrMsg: longAddressError,
},
"all good": {
preRun: func() uint64 {
@ -715,6 +727,8 @@ func (suite *KeeperTestSuite) TestLegacyVoteWeighted() {
suite.Require().NotNil(res.ProposalId)
proposalID := res.ProposalId
suite.acctKeeper.EXPECT().StringToBytes(longAddress).Return(nil, errors.New(longAddressError)).AnyTimes()
cases := map[string]struct {
preRun func() uint64
vote *v1beta1.MsgVote
@ -756,7 +770,7 @@ func (suite *KeeperTestSuite) TestLegacyVoteWeighted() {
voter: sdk.AccAddress(strings.Repeat("a", 300)),
metadata: "",
expErr: true,
expErrMsg: "address max length is 255",
expErrMsg: longAddressError,
},
"all good": {
preRun: func() uint64 {
@ -1192,6 +1206,9 @@ func (suite *KeeperTestSuite) TestSubmitProposal_InitialDeposit() {
govKeeper, ctx := suite.govKeeper, suite.ctx
address := simtestutil.AddTestAddrs(suite.bankKeeper, suite.stakingKeeper, ctx, 1, tc.accountBalance[0].Amount)[0]
suite.acctKeeper.EXPECT().StringToBytes(address.String()).Return(address, nil).AnyTimes()
suite.acctKeeper.EXPECT().BytesToString(address).Return(address.String(), nil).AnyTimes()
params := v1.DefaultParams()
params.MinDeposit = tc.minDeposit
params.MinInitialDepositRatio = tc.minInitialDepositRatio.String()

View File

@ -28,7 +28,7 @@ func (suite *KeeperTestSuite) TestGetSetProposal() {
for _, tc := range testCases {
tp := TestProposal
proposal, err := suite.govKeeper.SubmitProposal(suite.ctx, tp, "", "test", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), tc.expedited)
proposal, err := suite.govKeeper.SubmitProposal(suite.ctx, tp, "", "test", "summary", suite.addrs[0], tc.expedited)
suite.Require().NoError(err)
proposalID := proposal.Id
suite.govKeeper.SetProposal(suite.ctx, proposal)
@ -57,7 +57,7 @@ func (suite *KeeperTestSuite) TestDeleteProposal() {
},
)
tp := TestProposal
proposal, err := suite.govKeeper.SubmitProposal(suite.ctx, tp, "", "test", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), tc.expedited)
proposal, err := suite.govKeeper.SubmitProposal(suite.ctx, tp, "", "test", "summary", suite.addrs[0], tc.expedited)
suite.Require().NoError(err)
proposalID := proposal.Id
suite.govKeeper.SetProposal(suite.ctx, proposal)
@ -78,7 +78,7 @@ func (suite *KeeperTestSuite) TestActivateVotingPeriod() {
for _, tc := range testCases {
tp := TestProposal
proposal, err := suite.govKeeper.SubmitProposal(suite.ctx, tp, "", "test", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), tc.expedited)
proposal, err := suite.govKeeper.SubmitProposal(suite.ctx, tp, "", "test", "summary", suite.addrs[0], tc.expedited)
suite.Require().NoError(err)
suite.Require().Nil(proposal.VotingStartTime)
@ -115,7 +115,7 @@ func (suite *KeeperTestSuite) TestDeleteProposalInVotingPeriod() {
for _, tc := range testCases {
suite.reset()
tp := TestProposal
proposal, err := suite.govKeeper.SubmitProposal(suite.ctx, tp, "", "test", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), tc.expedited)
proposal, err := suite.govKeeper.SubmitProposal(suite.ctx, tp, "", "test", "summary", suite.addrs[0], tc.expedited)
suite.Require().NoError(err)
suite.Require().Nil(proposal.VotingStartTime)
@ -134,7 +134,7 @@ func (suite *KeeperTestSuite) TestDeleteProposalInVotingPeriod() {
// add vote
voteOptions := []*v1.WeightedVoteOption{{Option: v1.OptionYes, Weight: "1.0"}}
err = suite.govKeeper.AddVote(suite.ctx, proposal.Id, sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), voteOptions, "")
err = suite.govKeeper.AddVote(suite.ctx, proposal.Id, suite.addrs[0], voteOptions, "")
suite.Require().NoError(err)
suite.Require().NotPanics(func() {
@ -142,7 +142,7 @@ func (suite *KeeperTestSuite) TestDeleteProposalInVotingPeriod() {
}, "")
// add vote but proposal is deleted along with its VotingPeriodProposalKey
err = suite.govKeeper.AddVote(suite.ctx, proposal.Id, sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), voteOptions, "")
err = suite.govKeeper.AddVote(suite.ctx, proposal.Id, suite.addrs[0], voteOptions, "")
suite.Require().ErrorContains(err, ": inactive proposal")
}
}
@ -181,7 +181,7 @@ func (suite *KeeperTestSuite) TestSubmitProposal() {
for i, tc := range testCases {
prop, err := v1.NewLegacyContent(tc.content, tc.authority)
suite.Require().NoError(err)
_, err = suite.govKeeper.SubmitProposal(suite.ctx, []sdk.Msg{prop}, tc.metadata, "title", "", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), tc.expedited)
_, err = suite.govKeeper.SubmitProposal(suite.ctx, []sdk.Msg{prop}, tc.metadata, "title", "", suite.addrs[0], tc.expedited)
suite.Require().True(errors.Is(tc.expectedErr, err), "tc #%d; got: %v, expected: %v", i, err, tc.expectedErr)
}
}
@ -190,11 +190,11 @@ func (suite *KeeperTestSuite) TestGetProposalsFiltered() {
proposalID := uint64(1)
status := []v1.ProposalStatus{v1.StatusDepositPeriod, v1.StatusVotingPeriod}
addr1 := sdk.AccAddress("foo_________________")
addr1 := suite.addrs[1]
for _, s := range status {
for i := 0; i < 50; i++ {
p, err := v1.NewProposal(TestProposal, proposalID, time.Now(), time.Now(), "metadata", "title", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), false)
p, err := v1.NewProposal(TestProposal, proposalID, time.Now(), time.Now(), "metadata", "title", "summary", suite.addrs[0], false)
suite.Require().NoError(err)
p.Status = s

View File

@ -36,9 +36,12 @@ func (keeper Keeper) Tally(ctx sdk.Context, proposal v1.Proposal) (passes, burnD
keeper.IterateVotes(ctx, proposal.Id, func(vote v1.Vote) bool {
// if validator, just record it in the map
voter := sdk.MustAccAddressFromBech32(vote.Voter)
voter, err := keeper.authKeeper.StringToBytes(vote.Voter)
if err != nil {
panic(err)
}
valAddrStr := sdk.ValAddress(voter.Bytes()).String()
valAddrStr := sdk.ValAddress(voter).String()
if val, ok := currValidators[valAddrStr]; ok {
val.Vote = vote.Options
currValidators[valAddrStr] = val

View File

@ -82,7 +82,10 @@ func (keeper Keeper) GetVote(ctx sdk.Context, proposalID uint64, voterAddr sdk.A
func (keeper Keeper) SetVote(ctx sdk.Context, vote v1.Vote) {
store := ctx.KVStore(keeper.storeKey)
bz := keeper.cdc.MustMarshal(&vote)
addr := sdk.MustAccAddressFromBech32(vote.Voter)
addr, err := keeper.authKeeper.StringToBytes(vote.Voter)
if err != nil {
panic(err)
}
store.Set(types.VoteKey(vote.ProposalId, addr), bz)
}

View File

@ -12,8 +12,12 @@ import (
)
func TestVotes(t *testing.T) {
govKeeper, _, bankKeeper, stakingKeeper, _, _, ctx := setupGovKeeper(t)
govKeeper, authKeeper, bankKeeper, stakingKeeper, _, _, ctx := setupGovKeeper(t)
addrs := simtestutil.AddTestAddrsIncremental(bankKeeper, stakingKeeper, ctx, 2, sdkmath.NewInt(10000000))
for _, addr := range addrs {
authKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
authKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
}
tp := TestProposal
proposal, err := govKeeper.SubmitProposal(ctx, tp, "", "title", "description", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), false)

View File

@ -13,6 +13,7 @@ import (
"golang.org/x/exp/slices"
modulev1 "cosmossdk.io/api/cosmos/gov/module/v1"
"cosmossdk.io/core/address"
"cosmossdk.io/core/appmodule"
"cosmossdk.io/depinject"
@ -47,6 +48,7 @@ var (
type AppModuleBasic struct {
cdc codec.Codec
legacyProposalHandlers []govclient.ProposalHandler // legacy proposal handlers which live in governance cli and rest
ac address.Codec
}
// NewAppModuleBasic creates a new AppModuleBasic object
@ -109,8 +111,8 @@ func getProposalCLIHandlers(handlers []govclient.ProposalHandler) []*cobra.Comma
}
// GetQueryCmd returns the root query command for the gov module.
func (AppModuleBasic) GetQueryCmd() *cobra.Command {
return cli.GetQueryCmd()
func (ab AppModuleBasic) GetQueryCmd() *cobra.Command {
return cli.GetQueryCmd(ab.ac)
}
// RegisterInterfaces implements InterfaceModule.RegisterInterfaces
@ -137,7 +139,7 @@ func NewAppModule(
ak govtypes.AccountKeeper, bk govtypes.BankKeeper, ss govtypes.ParamSubspace,
) AppModule {
return AppModule{
AppModuleBasic: AppModuleBasic{cdc: cdc},
AppModuleBasic: AppModuleBasic{cdc: cdc, ac: ak},
keeper: keeper,
accountKeeper: ak,
bankKeeper: bk,

View File

@ -40,6 +40,21 @@ func (m *MockAccountKeeper) EXPECT() *MockAccountKeeperMockRecorder {
return m.recorder
}
// BytesToString mocks base method.
func (m *MockAccountKeeper) BytesToString(bz []byte) (string, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "BytesToString", bz)
ret0, _ := ret[0].(string)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// BytesToString indicates an expected call of BytesToString.
func (mr *MockAccountKeeperMockRecorder) BytesToString(bz interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BytesToString", reflect.TypeOf((*MockAccountKeeper)(nil).BytesToString), bz)
}
// GetAccount mocks base method.
func (m *MockAccountKeeper) GetAccount(ctx context.Context, addr types.AccAddress) types.AccountI {
m.ctrl.T.Helper()
@ -106,6 +121,21 @@ func (mr *MockAccountKeeperMockRecorder) SetModuleAccount(arg0, arg1 interface{}
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetModuleAccount", reflect.TypeOf((*MockAccountKeeper)(nil).SetModuleAccount), arg0, arg1)
}
// StringToBytes mocks base method.
func (m *MockAccountKeeper) StringToBytes(text string) ([]byte, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "StringToBytes", text)
ret0, _ := ret[0].([]byte)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// StringToBytes indicates an expected call of StringToBytes.
func (mr *MockAccountKeeperMockRecorder) StringToBytes(text interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StringToBytes", reflect.TypeOf((*MockAccountKeeper)(nil).StringToBytes), text)
}
// MockBankKeeper is a mock of BankKeeper interface.
type MockBankKeeper struct {
ctrl *gomock.Controller

View File

@ -3,6 +3,7 @@ package types
import (
"context"
addresscodec "cosmossdk.io/core/address"
"cosmossdk.io/math"
sdk "github.com/cosmos/cosmos-sdk/types"
@ -36,6 +37,8 @@ type DistributionKeeper interface {
// AccountKeeper defines the expected account keeper (noalias)
type AccountKeeper interface {
addresscodec.Codec
GetAccount(ctx context.Context, addr sdk.AccAddress) sdk.AccountI
GetModuleAddress(name string) sdk.AccAddress