refactor(staking): remove account address bech32 global (#15598)

This commit is contained in:
Marko 2023-04-02 21:53:59 +02:00 committed by GitHub
parent 0c905e8707
commit 7f0e05ebb9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 241 additions and 86 deletions

View File

@ -14,6 +14,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/crypto/hd"
"github.com/cosmos/cosmos-sdk/crypto/keyring"
"github.com/cosmos/cosmos-sdk/testutil"
@ -403,7 +404,7 @@ func (s *E2ETestSuite) TestGetCmdQueryDelegation() {
for _, tc := range testCases {
tc := tc
s.Run(tc.name, func() {
cmd := cli.GetCmdQueryDelegation()
cmd := cli.GetCmdQueryDelegation(address.NewBech32Codec("cosmos"))
clientCtx := val.ClientCtx
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
@ -459,7 +460,7 @@ func (s *E2ETestSuite) TestGetCmdQueryDelegations() {
for _, tc := range testCases {
tc := tc
s.Run(tc.name, func() {
cmd := cli.GetCmdQueryDelegations()
cmd := cli.GetCmdQueryDelegations(address.NewBech32Codec("cosmos"))
clientCtx := val.ClientCtx
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
@ -515,7 +516,7 @@ func (s *E2ETestSuite) TestGetCmdQueryValidatorDelegations() {
for _, tc := range testCases {
tc := tc
s.Run(tc.name, func() {
cmd := cli.GetCmdQueryDelegations()
cmd := cli.GetCmdQueryDelegations(address.NewBech32Codec("cosmos"))
clientCtx := val.ClientCtx
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
@ -559,7 +560,7 @@ func (s *E2ETestSuite) TestGetCmdQueryUnbondingDelegations() {
for _, tc := range testCases {
tc := tc
s.Run(tc.name, func() {
cmd := cli.GetCmdQueryUnbondingDelegations()
cmd := cli.GetCmdQueryUnbondingDelegations(address.NewBech32Codec("cosmos"))
clientCtx := val.ClientCtx
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
@ -618,7 +619,7 @@ func (s *E2ETestSuite) TestGetCmdQueryUnbondingDelegation() {
for _, tc := range testCases {
tc := tc
s.Run(tc.name, func() {
cmd := cli.GetCmdQueryUnbondingDelegation()
cmd := cli.GetCmdQueryUnbondingDelegation(address.NewBech32Codec("cosmos"))
clientCtx := val.ClientCtx
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
@ -716,7 +717,7 @@ func (s *E2ETestSuite) TestGetCmdQueryRedelegations() {
for _, tc := range testCases {
tc := tc
s.Run(tc.name, func() {
cmd := cli.GetCmdQueryRedelegations()
cmd := cli.GetCmdQueryRedelegations(address.NewBech32Codec("cosmos"))
clientCtx := val.ClientCtx
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
@ -792,7 +793,7 @@ func (s *E2ETestSuite) TestGetCmdQueryRedelegation() {
for _, tc := range testCases {
tc := tc
s.Run(tc.name, func() {
cmd := cli.GetCmdQueryRedelegation()
cmd := cli.GetCmdQueryRedelegation(address.NewBech32Codec("cosmos"))
clientCtx := val.ClientCtx
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)

View File

@ -5,6 +5,7 @@ import (
"strconv"
"strings"
"cosmossdk.io/core/address"
"github.com/spf13/cobra"
"github.com/cosmos/cosmos-sdk/client"
@ -15,7 +16,7 @@ import (
)
// GetQueryCmd returns the cli query commands for this module
func GetQueryCmd() *cobra.Command {
func GetQueryCmd(ac address.Codec) *cobra.Command {
stakingQueryCmd := &cobra.Command{
Use: types.ModuleName,
Short: "Querying commands for the staking module",
@ -25,12 +26,12 @@ func GetQueryCmd() *cobra.Command {
}
stakingQueryCmd.AddCommand(
GetCmdQueryDelegation(),
GetCmdQueryDelegations(),
GetCmdQueryUnbondingDelegation(),
GetCmdQueryUnbondingDelegations(),
GetCmdQueryRedelegation(),
GetCmdQueryRedelegations(),
GetCmdQueryDelegation(ac),
GetCmdQueryDelegations(ac),
GetCmdQueryUnbondingDelegation(ac),
GetCmdQueryUnbondingDelegations(ac),
GetCmdQueryRedelegation(ac),
GetCmdQueryRedelegations(ac),
GetCmdQueryValidator(),
GetCmdQueryValidators(),
GetCmdQueryValidatorDelegations(),
@ -242,22 +243,13 @@ $ %s query staking redelegations-from %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
}
// GetCmdQueryDelegation the query delegation command.
func GetCmdQueryDelegation() *cobra.Command {
bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix()
bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix()
func GetCmdQueryDelegation(ac address.Codec) *cobra.Command {
cmd := &cobra.Command{
Use: "delegation [delegator-addr] [validator-addr]",
Short: "Query a delegation based on address and validator address",
Long: strings.TrimSpace(
fmt.Sprintf(`Query delegations for an individual delegator on an individual validator.
Example:
$ %s query staking delegation %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
`,
version.AppName, bech32PrefixAccAddr, bech32PrefixValAddr,
),
),
Example: fmt.Sprintf(`%s query staking delegation [delegator-address] [validator-address]`,
version.AppName),
Long: "Query delegations for an individual delegator on an individual validator",
Args: cobra.ExactArgs(2),
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientQueryContext(cmd)
@ -266,7 +258,7 @@ $ %s query staking delegation %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p %s1gghju
}
queryClient := types.NewQueryClient(clientCtx)
delAddr, err := sdk.AccAddressFromBech32(args[0])
_, err = ac.StringToBytes(args[0])
if err != nil {
return err
}
@ -277,7 +269,7 @@ $ %s query staking delegation %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p %s1gghju
}
params := &types.QueryDelegationRequest{
DelegatorAddr: delAddr.String(),
DelegatorAddr: args[0],
ValidatorAddr: valAddr.String(),
}
@ -297,7 +289,7 @@ $ %s query staking delegation %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p %s1gghju
// GetCmdQueryDelegations implements the command to query all the delegations
// made from one delegator.
func GetCmdQueryDelegations() *cobra.Command {
func GetCmdQueryDelegations(ac address.Codec) *cobra.Command {
bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix()
cmd := &cobra.Command{
@ -320,7 +312,7 @@ $ %s query staking delegations %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p
}
queryClient := types.NewQueryClient(clientCtx)
delAddr, err := sdk.AccAddressFromBech32(args[0])
_, err = ac.StringToBytes(args[0])
if err != nil {
return err
}
@ -331,7 +323,7 @@ $ %s query staking delegations %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p
}
params := &types.QueryDelegatorDelegationsRequest{
DelegatorAddr: delAddr.String(),
DelegatorAddr: args[0],
Pagination: pageReq,
}
@ -407,7 +399,7 @@ $ %s query staking delegations-to %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
// GetCmdQueryUnbondingDelegation implements the command to query a single
// unbonding-delegation record.
func GetCmdQueryUnbondingDelegation() *cobra.Command {
func GetCmdQueryUnbondingDelegation(ac address.Codec) *cobra.Command {
bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix()
bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix()
@ -436,13 +428,13 @@ $ %s query staking unbonding-delegation %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9
return err
}
delAddr, err := sdk.AccAddressFromBech32(args[0])
_, err = ac.StringToBytes(args[0])
if err != nil {
return err
}
params := &types.QueryUnbondingDelegationRequest{
DelegatorAddr: delAddr.String(),
DelegatorAddr: args[0],
ValidatorAddr: valAddr.String(),
}
@ -462,7 +454,7 @@ $ %s query staking unbonding-delegation %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9
// GetCmdQueryUnbondingDelegations implements the command to query all the
// unbonding-delegation records for a delegator.
func GetCmdQueryUnbondingDelegations() *cobra.Command {
func GetCmdQueryUnbondingDelegations(ac address.Codec) *cobra.Command {
bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix()
cmd := &cobra.Command{
@ -485,7 +477,7 @@ $ %s query staking unbonding-delegations %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru
}
queryClient := types.NewQueryClient(clientCtx)
delegatorAddr, err := sdk.AccAddressFromBech32(args[0])
_, err = ac.StringToBytes(args[0])
if err != nil {
return err
}
@ -496,7 +488,7 @@ $ %s query staking unbonding-delegations %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru
}
params := &types.QueryDelegatorUnbondingDelegationsRequest{
DelegatorAddr: delegatorAddr.String(),
DelegatorAddr: args[0],
Pagination: pageReq,
}
@ -517,7 +509,7 @@ $ %s query staking unbonding-delegations %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru
// GetCmdQueryRedelegation implements the command to query a single
// redelegation record.
func GetCmdQueryRedelegation() *cobra.Command {
func GetCmdQueryRedelegation(ac address.Codec) *cobra.Command {
bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix()
bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix()
@ -541,7 +533,7 @@ $ %s query staking redelegation %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p %s1l2r
}
queryClient := types.NewQueryClient(clientCtx)
delAddr, err := sdk.AccAddressFromBech32(args[0])
_, err = ac.StringToBytes(args[0])
if err != nil {
return err
}
@ -557,7 +549,7 @@ $ %s query staking redelegation %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p %s1l2r
}
params := &types.QueryRedelegationsRequest{
DelegatorAddr: delAddr.String(),
DelegatorAddr: args[0],
DstValidatorAddr: valDstAddr.String(),
SrcValidatorAddr: valSrcAddr.String(),
}
@ -578,7 +570,7 @@ $ %s query staking redelegation %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p %s1l2r
// GetCmdQueryRedelegations implements the command to query all the
// redelegation records for a delegator.
func GetCmdQueryRedelegations() *cobra.Command {
func GetCmdQueryRedelegations(ac address.Codec) *cobra.Command {
bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix()
cmd := &cobra.Command{
@ -601,7 +593,7 @@ $ %s query staking redelegation %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p
}
queryClient := types.NewQueryClient(clientCtx)
delAddr, err := sdk.AccAddressFromBech32(args[0])
_, err = ac.StringToBytes(args[0])
if err != nil {
return err
}
@ -612,7 +604,7 @@ $ %s query staking redelegation %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p
}
params := &types.QueryRedelegationsRequest{
DelegatorAddr: delAddr.String(),
DelegatorAddr: args[0],
Pagination: pageReq,
}

View File

@ -7,6 +7,7 @@ import (
"github.com/cosmos/gogoproto/proto"
"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/staking/client/cli"
@ -124,7 +125,7 @@ func (s *CLITestSuite) TestGetCmdQueryDelegation() {
for _, tc := range testCases {
tc := tc
s.Run(tc.name, func() {
cmd := cli.GetCmdQueryDelegation()
cmd := cli.GetCmdQueryDelegation(address.NewBech32Codec("cosmos"))
clientCtx := s.clientCtx
_, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
@ -169,7 +170,7 @@ func (s *CLITestSuite) TestGetCmdQueryDelegations() {
for _, tc := range testCases {
tc := tc
s.Run(tc.name, func() {
cmd := cli.GetCmdQueryDelegations()
cmd := cli.GetCmdQueryDelegations(address.NewBech32Codec("cosmos"))
clientCtx := s.clientCtx
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
@ -215,7 +216,7 @@ func (s *CLITestSuite) TestGetCmdQueryValidatorDelegations() {
for _, tc := range testCases {
tc := tc
s.Run(tc.name, func() {
cmd := cli.GetCmdQueryDelegations()
cmd := cli.GetCmdQueryDelegations(address.NewBech32Codec("cosmos"))
clientCtx := s.clientCtx
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
@ -256,7 +257,7 @@ func (s *CLITestSuite) TestGetCmdQueryUnbondingDelegations() {
for _, tc := range testCases {
tc := tc
s.Run(tc.name, func() {
cmd := cli.GetCmdQueryUnbondingDelegations()
cmd := cli.GetCmdQueryUnbondingDelegations(address.NewBech32Codec("cosmos"))
clientCtx := s.clientCtx
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
@ -311,7 +312,7 @@ func (s *CLITestSuite) TestGetCmdQueryUnbondingDelegation() {
for _, tc := range testCases {
tc := tc
s.Run(tc.name, func() {
cmd := cli.GetCmdQueryUnbondingDelegation()
cmd := cli.GetCmdQueryUnbondingDelegation(address.NewBech32Codec("cosmos"))
clientCtx := s.clientCtx
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
@ -398,7 +399,7 @@ func (s *CLITestSuite) TestGetCmdQueryRedelegations() {
for _, tc := range testCases {
tc := tc
s.Run(tc.name, func() {
cmd := cli.GetCmdQueryRedelegations()
cmd := cli.GetCmdQueryRedelegations(address.NewBech32Codec("cosmos"))
clientCtx := s.clientCtx
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
@ -465,7 +466,7 @@ func (s *CLITestSuite) TestGetCmdQueryRedelegation() {
for _, tc := range testCases {
tc := tc
s.Run(tc.name, func() {
cmd := cli.GetCmdQueryRedelegation()
cmd := cli.GetCmdQueryRedelegation(address.NewBech32Codec("cosmos"))
clientCtx := s.clientCtx
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)

View File

@ -95,7 +95,10 @@ func (k Keeper) GetDelegatorDelegations(ctx sdk.Context, delegator sdk.AccAddres
// SetDelegation sets a delegation.
func (k Keeper) SetDelegation(ctx sdk.Context, delegation types.Delegation) {
delegatorAddress := sdk.MustAccAddressFromBech32(delegation.DelegatorAddress)
delegatorAddress, err := k.authKeeper.StringToBytes(delegation.DelegatorAddress)
if err != nil {
panic(err)
}
store := ctx.KVStore(k.storeKey)
b := types.MustMarshalDelegation(k.cdc, delegation)
@ -104,7 +107,10 @@ func (k Keeper) SetDelegation(ctx sdk.Context, delegation types.Delegation) {
// RemoveDelegation removes a delegation
func (k Keeper) RemoveDelegation(ctx sdk.Context, delegation types.Delegation) error {
delegatorAddress := sdk.MustAccAddressFromBech32(delegation.DelegatorAddress)
delegatorAddress, err := k.authKeeper.StringToBytes(delegation.DelegatorAddress)
if err != nil {
panic(err)
}
// TODO: Consider calling hooks outside of the store wrapper functions, it's unobvious.
if err := k.Hooks().BeforeDelegationRemoved(ctx, delegatorAddress, delegation.GetValidatorAddr()); err != nil {
@ -275,7 +281,10 @@ func (k Keeper) HasMaxUnbondingDelegationEntries(ctx sdk.Context, delegatorAddr
// SetUnbondingDelegation sets the unbonding delegation and associated index.
func (k Keeper) SetUnbondingDelegation(ctx sdk.Context, ubd types.UnbondingDelegation) {
delAddr := sdk.MustAccAddressFromBech32(ubd.DelegatorAddress)
delAddr, err := k.authKeeper.StringToBytes(ubd.DelegatorAddress)
if err != nil {
panic(err)
}
store := ctx.KVStore(k.storeKey)
bz := types.MustMarshalUBD(k.cdc, ubd)
@ -290,7 +299,10 @@ func (k Keeper) SetUnbondingDelegation(ctx sdk.Context, ubd types.UnbondingDeleg
// RemoveUnbondingDelegation removes the unbonding delegation object and associated index.
func (k Keeper) RemoveUnbondingDelegation(ctx sdk.Context, ubd types.UnbondingDelegation) {
delegatorAddress := sdk.MustAccAddressFromBech32(ubd.DelegatorAddress)
delegatorAddress, err := k.authKeeper.StringToBytes(ubd.DelegatorAddress)
if err != nil {
panic(err)
}
store := ctx.KVStore(k.storeKey)
addr, err := sdk.ValAddressFromBech32(ubd.ValidatorAddress)
@ -473,7 +485,10 @@ func (k Keeper) HasMaxRedelegationEntries(ctx sdk.Context, delegatorAddr sdk.Acc
// SetRedelegation set a redelegation and associated index.
func (k Keeper) SetRedelegation(ctx sdk.Context, red types.Redelegation) {
delegatorAddress := sdk.MustAccAddressFromBech32(red.DelegatorAddress)
delegatorAddress, err := k.authKeeper.StringToBytes(red.DelegatorAddress)
if err != nil {
panic(err)
}
store := ctx.KVStore(k.storeKey)
bz := types.MustMarshalRED(k.cdc, red)
@ -538,7 +553,10 @@ func (k Keeper) IterateRedelegations(ctx sdk.Context, fn func(index int64, red t
// RemoveRedelegation removes a redelegation object and associated index.
func (k Keeper) RemoveRedelegation(ctx sdk.Context, red types.Redelegation) {
delegatorAddress := sdk.MustAccAddressFromBech32(red.DelegatorAddress)
delegatorAddress, err := k.authKeeper.StringToBytes(red.DelegatorAddress)
if err != nil {
panic(err)
}
store := ctx.KVStore(k.storeKey)
valSrcAddr, err := sdk.ValAddressFromBech32(red.ValidatorSrcAddress)
@ -659,7 +677,10 @@ func (k Keeper) Delegate(
return math.LegacyZeroDec(), err
}
delegatorAddress := sdk.MustAccAddressFromBech32(delegation.DelegatorAddress)
delegatorAddress, err := k.authKeeper.StringToBytes(delegation.DelegatorAddress)
if err != nil {
panic(err)
}
// if subtractAccount is true then we are
// performing a delegation and not a redelegation, thus the source tokens are
@ -745,12 +766,12 @@ func (k Keeper) Unbond(
// subtract shares from delegation
delegation.Shares = delegation.Shares.Sub(shares)
delegatorAddress, err := sdk.AccAddressFromBech32(delegation.DelegatorAddress)
delegatorAddress, err := k.authKeeper.StringToBytes(delegation.DelegatorAddress)
if err != nil {
return amount, err
}
isValidatorOperator := delegatorAddress.Equals(validator.GetOperator())
isValidatorOperator := bytes.Equal(delegatorAddress, validator.GetOperator())
// If the delegation is the operator of the validator and undelegating will decrease the validator's
// self-delegation below their minimum, we jail the validator.
@ -858,7 +879,7 @@ func (k Keeper) CompleteUnbonding(ctx sdk.Context, delAddr sdk.AccAddress, valAd
balances := sdk.NewCoins()
ctxTime := ctx.BlockHeader().Time
delegatorAddress, err := sdk.AccAddressFromBech32(ubd.DelegatorAddress)
delegatorAddress, err := k.authKeeper.StringToBytes(ubd.DelegatorAddress)
if err != nil {
return nil, err
}

View File

@ -27,6 +27,11 @@ func (s *KeeperTestSuite) TestDelegation() {
addrDels, valAddrs := createValAddrs(3)
for _, addr := range addrDels {
s.accountKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
s.accountKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
}
// construct the validators
amts := []math.Int{sdk.NewInt(9), sdk.NewInt(8), sdk.NewInt(7)}
var validators [3]stakingtypes.Validator
@ -146,6 +151,11 @@ func (s *KeeperTestSuite) TestUnbondingDelegation() {
delAddrs, valAddrs := createValAddrs(2)
for _, addr := range delAddrs {
s.accountKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
s.accountKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
}
ubd := stakingtypes.NewUnbondingDelegation(
delAddrs[0],
valAddrs[0],
@ -196,6 +206,11 @@ func (s *KeeperTestSuite) TestUnbondDelegation() {
require := s.Require()
delAddrs, valAddrs := createValAddrs(1)
for _, addr := range delAddrs {
s.accountKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
s.accountKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
}
startTokens := keeper.TokensFromConsensusPower(ctx, 10)
validator := testutil.NewValidator(s.T(), valAddrs[0], PKs[0])
@ -231,6 +246,10 @@ func (s *KeeperTestSuite) TestUndelegateSelfDelegationBelowMinSelfDelegation() {
require := s.Require()
addrDels, addrVals := createValAddrs(1)
for _, addr := range addrDels {
s.accountKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
s.accountKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
}
delTokens := keeper.TokensFromConsensusPower(ctx, 10)
// create a validator with a self-delegation
@ -280,6 +299,10 @@ func (s *KeeperTestSuite) TestUndelegateFromUnbondingValidator() {
delTokens := keeper.TokensFromConsensusPower(ctx, 10)
addrDels, addrVals := createValAddrs(2)
for _, addr := range addrDels {
s.accountKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
s.accountKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
}
// create a validator with a self-delegation
validator := testutil.NewValidator(s.T(), addrVals[0], PKs[0])
@ -355,6 +378,10 @@ func (s *KeeperTestSuite) TestUndelegateFromUnbondedValidator() {
delTokens := keeper.TokensFromConsensusPower(ctx, 10)
addrDels, addrVals := createValAddrs(2)
for _, addr := range addrDels {
s.accountKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
s.accountKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
}
// create a validator with a self-delegation
validator := testutil.NewValidator(s.T(), addrVals[0], PKs[0])
@ -431,6 +458,10 @@ func (s *KeeperTestSuite) TestUnbondingAllDelegationFromValidator() {
delTokens := keeper.TokensFromConsensusPower(ctx, 10)
addrDels, addrVals := createValAddrs(2)
for _, addr := range addrDels {
s.accountKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
s.accountKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
}
// create a validator with a self-delegation
validator := testutil.NewValidator(s.T(), addrVals[0], PKs[0])
@ -498,6 +529,11 @@ func (s *KeeperTestSuite) TestGetRedelegationsFromSrcValidator() {
addrDels, addrVals := createValAddrs(2)
for _, addr := range addrDels {
s.accountKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
s.accountKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
}
rd := stakingtypes.NewRedelegation(addrDels[0], addrVals[0], addrVals[1], 0,
time.Unix(0, 0), sdk.NewInt(5),
math.LegacyNewDec(5), 0)
@ -524,6 +560,10 @@ func (s *KeeperTestSuite) TestRedelegation() {
require := s.Require()
addrDels, addrVals := createValAddrs(2)
for _, addr := range addrDels {
s.accountKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
s.accountKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
}
rd := stakingtypes.NewRedelegation(addrDels[0], addrVals[0], addrVals[1], 0,
time.Unix(0, 0).UTC(), sdk.NewInt(5),
@ -599,6 +639,10 @@ func (s *KeeperTestSuite) TestRedelegateToSameValidator() {
require.True(validator.IsBonded())
val0AccAddr := sdk.AccAddress(addrVals[0].Bytes())
s.accountKeeper.EXPECT().StringToBytes(val0AccAddr.String()).Return(val0AccAddr, nil).AnyTimes()
s.accountKeeper.EXPECT().BytesToString(val0AccAddr).Return(val0AccAddr.String(), nil).AnyTimes()
selfDelegation := stakingtypes.NewDelegation(val0AccAddr, addrVals[0], issuedShares)
keeper.SetDelegation(ctx, selfDelegation)
@ -621,6 +665,8 @@ func (s *KeeperTestSuite) TestRedelegationMaxEntries() {
s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.NotBondedPoolName, stakingtypes.BondedPoolName, gomock.Any())
_ = stakingkeeper.TestingUpdateValidator(keeper, ctx, validator, true)
val0AccAddr := sdk.AccAddress(addrVals[0].Bytes())
s.accountKeeper.EXPECT().StringToBytes(val0AccAddr.String()).Return(val0AccAddr, nil).AnyTimes()
s.accountKeeper.EXPECT().BytesToString(val0AccAddr).Return(val0AccAddr.String(), nil).AnyTimes()
selfDelegation := stakingtypes.NewDelegation(val0AccAddr, addrVals[0], issuedShares)
keeper.SetDelegation(ctx, selfDelegation)
@ -662,6 +708,15 @@ func (s *KeeperTestSuite) TestRedelegateSelfDelegation() {
require := s.Require()
addrDels, addrVals := createValAddrs(2)
for _, addr := range addrDels {
s.accountKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
s.accountKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
}
for _, addr := range addrDels {
s.accountKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
s.accountKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
}
// create a validator with a self-delegation
validator := testutil.NewValidator(s.T(), addrVals[0], PKs[0])
@ -713,6 +768,10 @@ func (s *KeeperTestSuite) TestRedelegateFromUnbondingValidator() {
require := s.Require()
addrDels, addrVals := createValAddrs(2)
for _, addr := range addrDels {
s.accountKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
s.accountKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
}
// create a validator with a self-delegation
validator := testutil.NewValidator(s.T(), addrVals[0], PKs[0])
@ -793,6 +852,15 @@ func (s *KeeperTestSuite) TestRedelegateFromUnbondedValidator() {
require := s.Require()
addrDels, addrVals := createValAddrs(2)
for _, addr := range addrDels {
s.accountKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
s.accountKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
}
for _, addr := range addrDels {
s.accountKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
s.accountKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
}
// create a validator with a self-delegation
validator := testutil.NewValidator(s.T(), addrVals[0], PKs[0])

View File

@ -64,7 +64,10 @@ func (k Keeper) InitGenesis(ctx sdk.Context, data *types.GenesisState) (res []ab
}
for _, delegation := range data.Delegations {
delegatorAddress := sdk.MustAccAddressFromBech32(delegation.DelegatorAddress)
delegatorAddress, err := k.authKeeper.StringToBytes(delegation.DelegatorAddress)
if err != nil {
panic(fmt.Errorf("invalid delegator address: %s", err))
}
// Call the before-creation hook if not exported
if !data.Exported {

View File

@ -185,7 +185,7 @@ func (k Querier) Delegation(c context.Context, req *types.QueryDelegationRequest
}
ctx := sdk.UnwrapSDKContext(c)
delAddr, err := sdk.AccAddressFromBech32(req.DelegatorAddr)
delAddr, err := k.authKeeper.StringToBytes(req.DelegatorAddr)
if err != nil {
return nil, err
}
@ -226,7 +226,7 @@ func (k Querier) UnbondingDelegation(c context.Context, req *types.QueryUnbondin
ctx := sdk.UnwrapSDKContext(c)
delAddr, err := sdk.AccAddressFromBech32(req.DelegatorAddr)
delAddr, err := k.authKeeper.StringToBytes(req.DelegatorAddr)
if err != nil {
return nil, err
}
@ -259,7 +259,7 @@ func (k Querier) DelegatorDelegations(c context.Context, req *types.QueryDelegat
var delegations types.Delegations
ctx := sdk.UnwrapSDKContext(c)
delAddr, err := sdk.AccAddressFromBech32(req.DelegatorAddr)
delAddr, err := k.authKeeper.StringToBytes(req.DelegatorAddr)
if err != nil {
return nil, err
}
@ -300,7 +300,7 @@ func (k Querier) DelegatorValidator(c context.Context, req *types.QueryDelegator
}
ctx := sdk.UnwrapSDKContext(c)
delAddr, err := sdk.AccAddressFromBech32(req.DelegatorAddr)
delAddr, err := k.authKeeper.StringToBytes(req.DelegatorAddr)
if err != nil {
return nil, err
}
@ -331,7 +331,7 @@ func (k Querier) DelegatorUnbondingDelegations(c context.Context, req *types.Que
ctx := sdk.UnwrapSDKContext(c)
store := ctx.KVStore(k.storeKey)
delAddr, err := sdk.AccAddressFromBech32(req.DelegatorAddr)
delAddr, err := k.authKeeper.StringToBytes(req.DelegatorAddr)
if err != nil {
return nil, err
}
@ -416,7 +416,7 @@ func (k Querier) DelegatorValidators(c context.Context, req *types.QueryDelegato
ctx := sdk.UnwrapSDKContext(c)
store := ctx.KVStore(k.storeKey)
delAddr, err := sdk.AccAddressFromBech32(req.DelegatorAddr)
delAddr, err := k.authKeeper.StringToBytes(req.DelegatorAddr)
if err != nil {
return nil, err
}
@ -467,7 +467,7 @@ func (k Querier) Params(c context.Context, _ *types.QueryParamsRequest) (*types.
}
func queryRedelegation(ctx sdk.Context, k Querier, req *types.QueryRedelegationsRequest) (redels types.Redelegations, err error) {
delAddr, err := sdk.AccAddressFromBech32(req.DelegatorAddr)
delAddr, err := k.authKeeper.StringToBytes(req.DelegatorAddr)
if err != nil {
return nil, err
}
@ -517,7 +517,7 @@ func queryRedelegationsFromSrcValidator(store storetypes.KVStore, k Querier, req
}
func queryAllRedelegations(store storetypes.KVStore, k Querier, req *types.QueryRedelegationsRequest) (redels types.Redelegations, res *query.PageResponse, err error) {
delAddr, err := sdk.AccAddressFromBech32(req.DelegatorAddr)
delAddr, err := k.authKeeper.StringToBytes(req.DelegatorAddr)
if err != nil {
return nil, nil, err
}
@ -543,7 +543,7 @@ func DelegationToDelegationResponse(ctx sdk.Context, k *Keeper, del types.Delega
return types.DelegationResponse{}, types.ErrNoValidatorFound
}
delegatorAddress, err := sdk.AccAddressFromBech32(del.DelegatorAddress)
delegatorAddress, err := k.authKeeper.StringToBytes(del.DelegatorAddress)
if err != nil {
return types.DelegationResponse{}, err
}
@ -584,7 +584,10 @@ func RedelegationsToRedelegationResponses(ctx sdk.Context, k *Keeper, redels typ
panic(err)
}
delegatorAddress := sdk.MustAccAddressFromBech32(redel.DelegatorAddress)
delegatorAddress, err := k.authKeeper.StringToBytes(redel.DelegatorAddress)
if err != nil {
return nil, err
}
val, found := k.GetValidator(ctx, valDstAddr)
if !found {

View File

@ -47,7 +47,7 @@ func NewKeeper(
}
// ensure that authority is a valid AccAddress
if _, err := sdk.AccAddressFromBech32(authority); err != nil {
if _, err := ak.StringToBytes(authority); err != nil {
panic("authority is not a valid acc address")
}

View File

@ -50,6 +50,8 @@ func (s *KeeperTestSuite) SetupTest() {
accountKeeper := stakingtestutil.NewMockAccountKeeper(ctrl)
accountKeeper.EXPECT().GetModuleAddress(stakingtypes.BondedPoolName).Return(bondedAcc.GetAddress())
accountKeeper.EXPECT().GetModuleAddress(stakingtypes.NotBondedPoolName).Return(notBondedAcc.GetAddress())
accountKeeper.EXPECT().StringToBytes(authtypes.NewModuleAddress(govtypes.ModuleName).String()).Return(authtypes.NewModuleAddress(govtypes.ModuleName), nil).AnyTimes()
accountKeeper.EXPECT().BytesToString(authtypes.NewModuleAddress(govtypes.ModuleName)).Return(authtypes.NewModuleAddress(govtypes.ModuleName).String(), nil).AnyTimes()
bankKeeper := stakingtestutil.NewMockBankKeeper(ctrl)
keeper := stakingkeeper.NewKeeper(

View File

@ -205,7 +205,7 @@ func (k msgServer) Delegate(goCtx context.Context, msg *types.MsgDelegate) (*typ
return nil, types.ErrNoValidatorFound
}
delegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)
delegatorAddress, err := k.authKeeper.StringToBytes(msg.DelegatorAddress)
if err != nil {
return nil, err
}
@ -253,7 +253,7 @@ func (k msgServer) BeginRedelegate(goCtx context.Context, msg *types.MsgBeginRed
if err != nil {
return nil, err
}
delegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)
delegatorAddress, err := k.authKeeper.StringToBytes(msg.DelegatorAddress)
if err != nil {
return nil, err
}
@ -317,7 +317,7 @@ func (k msgServer) Undelegate(goCtx context.Context, msg *types.MsgUndelegate) (
if err != nil {
return nil, err
}
delegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)
delegatorAddress, err := k.authKeeper.StringToBytes(msg.DelegatorAddress)
if err != nil {
return nil, err
}
@ -378,7 +378,7 @@ func (k msgServer) CancelUnbondingDelegation(goCtx context.Context, msg *types.M
return nil, err
}
delegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)
delegatorAddress, err := k.authKeeper.StringToBytes(msg.DelegatorAddress)
if err != nil {
return nil, err
}

View File

@ -271,7 +271,10 @@ func (k Keeper) SlashRedelegation(ctx sdk.Context, srcValidator types.Validator,
panic(err)
}
delegatorAddress := sdk.MustAccAddressFromBech32(redelegation.DelegatorAddress)
delegatorAddress, err := k.authKeeper.StringToBytes(redelegation.DelegatorAddress)
if err != nil {
panic(err)
}
delegation, found := k.GetDelegation(ctx, delegatorAddress, valDstAddr)
if !found {

View File

@ -128,7 +128,10 @@ func (k Keeper) GetValidatorByUnbondingID(ctx sdk.Context, id uint64) (val types
// Note, it does not set the unbonding delegation itself, use SetUnbondingDelegation(ctx, ubd) for that
func (k Keeper) SetUnbondingDelegationByUnbondingID(ctx sdk.Context, ubd types.UnbondingDelegation, id uint64) {
store := ctx.KVStore(k.storeKey)
delAddr := sdk.MustAccAddressFromBech32(ubd.DelegatorAddress)
delAddr, err := k.authKeeper.StringToBytes(ubd.DelegatorAddress)
if err != nil {
panic(err)
}
valAddr, err := sdk.ValAddressFromBech32(ubd.ValidatorAddress)
if err != nil {
panic(err)
@ -146,7 +149,10 @@ func (k Keeper) SetUnbondingDelegationByUnbondingID(ctx sdk.Context, ubd types.U
func (k Keeper) SetRedelegationByUnbondingID(ctx sdk.Context, red types.Redelegation, id uint64) {
store := ctx.KVStore(k.storeKey)
delAddr := sdk.MustAccAddressFromBech32(red.DelegatorAddress)
delAddr, err := k.authKeeper.StringToBytes(red.DelegatorAddress)
if err != nil {
panic(err)
}
valSrcAddr, err := sdk.ValAddressFromBech32(red.ValidatorSrcAddress)
if err != nil {
@ -260,7 +266,7 @@ func (k Keeper) unbondingDelegationEntryCanComplete(ctx sdk.Context, id uint64)
// Check if entry is matured.
if !ubd.Entries[i].OnHold() && ubd.Entries[i].IsMature(ctx.BlockHeader().Time) {
// If matured, complete it.
delegatorAddress, err := sdk.AccAddressFromBech32(ubd.DelegatorAddress)
delegatorAddress, err := k.authKeeper.StringToBytes(ubd.DelegatorAddress)
if err != nil {
return err
}

View File

@ -56,6 +56,10 @@ func (s *KeeperTestSuite) TestUnbondingTypeAccessors() {
func (s *KeeperTestSuite) TestUnbondingDelegationByUnbondingIDAccessors() {
delAddrs, valAddrs := createValAddrs(2)
for _, addr := range delAddrs {
s.accountKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
s.accountKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
}
type exists struct {
setUnbondingDelegation bool
@ -129,6 +133,11 @@ func (s *KeeperTestSuite) TestUnbondingDelegationByUnbondingIDAccessors() {
func (s *KeeperTestSuite) TestRedelegationByUnbondingIDAccessors() {
delAddrs, valAddrs := createValAddrs(2)
for _, addr := range delAddrs {
s.accountKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
s.accountKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
}
type exists struct {
setRedelegation bool
setRedelegationByUnbondingID bool
@ -257,6 +266,10 @@ func (s *KeeperTestSuite) TestValidatorByUnbondingIDAccessors() {
func (s *KeeperTestSuite) TestUnbondingCanComplete() {
delAddrs, valAddrs := createValAddrs(3)
for _, addr := range delAddrs {
s.accountKeeper.EXPECT().StringToBytes(addr.String()).Return(addr, nil).AnyTimes()
s.accountKeeper.EXPECT().BytesToString(addr).Return(addr.String(), nil).AnyTimes()
}
unbondingID := uint64(1)
// no unbondingID set

View File

@ -41,7 +41,10 @@ func (k Keeper) BlockValidatorUpdates(ctx sdk.Context) []abci.ValidatorUpdate {
if err != nil {
panic(err)
}
delegatorAddress := sdk.MustAccAddressFromBech32(dvPair.DelegatorAddress)
delegatorAddress, err := k.authKeeper.StringToBytes(dvPair.DelegatorAddress)
if err != nil {
panic(err)
}
balances, err := k.CompleteUnbonding(ctx, delegatorAddress, addr)
if err != nil {
@ -69,7 +72,10 @@ func (k Keeper) BlockValidatorUpdates(ctx sdk.Context) []abci.ValidatorUpdate {
if err != nil {
panic(err)
}
delegatorAddress := sdk.MustAccAddressFromBech32(dvvTriplet.DelegatorAddress)
delegatorAddress, err := k.authKeeper.StringToBytes(dvvTriplet.DelegatorAddress)
if err != nil {
panic(err)
}
balances, err := k.CompleteRedelegation(
ctx,

View File

@ -46,6 +46,7 @@ var (
// AppModuleBasic defines the basic application module used by the staking module.
type AppModuleBasic struct {
cdc codec.Codec
ak types.AccountKeeper
}
var _ module.AppModuleBasic = AppModuleBasic{}
@ -94,8 +95,8 @@ func (AppModuleBasic) GetTxCmd() *cobra.Command {
}
// GetQueryCmd returns no root query command for the staking module.
func (AppModuleBasic) GetQueryCmd() *cobra.Command {
return cli.GetQueryCmd()
func (ab AppModuleBasic) GetQueryCmd() *cobra.Command {
return cli.GetQueryCmd(ab.ak)
}
// AppModule implements an application module for the staking module.
@ -119,7 +120,7 @@ func NewAppModule(
ls exported.Subspace,
) AppModule {
return AppModule{
AppModuleBasic: AppModuleBasic{cdc: cdc},
AppModuleBasic: AppModuleBasic{cdc: cdc, ak: ak},
keeper: keeper,
accountKeeper: ak,
bankKeeper: bk,

View File

@ -88,6 +88,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()
@ -154,6 +169,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

@ -24,6 +24,11 @@ type AccountKeeper interface {
// TODO remove with genesis 2-phases refactor https://github.com/cosmos/cosmos-sdk/issues/2862
SetModuleAccount(context.Context, sdk.ModuleAccountI)
// StringToBytes decodes address strings to bytes
StringToBytes(text string) ([]byte, error)
// BytesToString encodes address bytes to text
BytesToString(bz []byte) (string, error)
}
// BankKeeper defines the expected interface needed to retrieve account balances.