From db3cdd5163d8dbec8ff314166ff99ed5e15c19e3 Mon Sep 17 00:00:00 2001 From: Devon Bear Date: Sun, 23 Jul 2023 21:55:24 +0200 Subject: [PATCH 01/12] fix codec --- x/staking/keeper/msg_server.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go index 04fb625f104d..283216993679 100644 --- a/x/staking/keeper/msg_server.go +++ b/x/staking/keeper/msg_server.go @@ -33,7 +33,7 @@ var _ types.MsgServer = msgServer{} // CreateValidator defines a method for creating a new validator func (k msgServer) CreateValidator(ctx context.Context, msg *types.MsgCreateValidator) (*types.MsgCreateValidatorResponse, error) { - valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) + valAddr, err := k.validatorAddressCodec.StringToBytes(msg.ValidatorAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err) } @@ -157,7 +157,7 @@ func (k msgServer) CreateValidator(ctx context.Context, msg *types.MsgCreateVali // EditValidator defines a method for editing an existing validator func (k msgServer) EditValidator(ctx context.Context, msg *types.MsgEditValidator) (*types.MsgEditValidatorResponse, error) { - valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) + valAddr, err := k.validatorAddressCodec.StringToBytes(msg.ValidatorAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err) } @@ -303,12 +303,12 @@ func (k msgServer) Delegate(ctx context.Context, msg *types.MsgDelegate) (*types // BeginRedelegate defines a method for performing a redelegation of coins from a source validator to a destination validator of given delegator func (k msgServer) BeginRedelegate(ctx context.Context, msg *types.MsgBeginRedelegate) (*types.MsgBeginRedelegateResponse, error) { - valSrcAddr, err := sdk.ValAddressFromBech32(msg.ValidatorSrcAddress) + valSrcAddr, err := k.validatorAddressCodec.StringToBytes(msg.ValidatorSrcAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid source validator address: %s", err) } - valDstAddr, err := sdk.ValAddressFromBech32(msg.ValidatorDstAddress) + valDstAddr, err := k.validatorAddressCodec.StringToBytes(msg.ValidatorDstAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid destination validator address: %s", err) } @@ -379,7 +379,7 @@ func (k msgServer) BeginRedelegate(ctx context.Context, msg *types.MsgBeginRedel // Undelegate defines a method for performing an undelegation from a delegate and a validator func (k msgServer) Undelegate(ctx context.Context, msg *types.MsgUndelegate) (*types.MsgUndelegateResponse, error) { - addr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) + addr, err := k.validatorAddressCodec.StringToBytes(msg.ValidatorAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err) } @@ -451,7 +451,7 @@ func (k msgServer) Undelegate(ctx context.Context, msg *types.MsgUndelegate) (*t // CancelUnbondingDelegation defines a method for canceling the unbonding delegation // and delegate back to the validator. func (k msgServer) CancelUnbondingDelegation(ctx context.Context, msg *types.MsgCancelUnbondingDelegation) (*types.MsgCancelUnbondingDelegationResponse, error) { - valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) + valAddr, err := k.validatorAddressCodec.StringToBytes(msg.ValidatorAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err) } From bf9f85a2d961da5cbcb746a9922fd95d77ba984b Mon Sep 17 00:00:00 2001 From: Devon Bear Date: Sun, 23 Jul 2023 23:31:16 +0200 Subject: [PATCH 02/12] refactor(x/staking): Use ValidatorAddrCodec (#17095) --- x/staking/keeper/msg_server.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go index 04fb625f104d..283216993679 100644 --- a/x/staking/keeper/msg_server.go +++ b/x/staking/keeper/msg_server.go @@ -33,7 +33,7 @@ var _ types.MsgServer = msgServer{} // CreateValidator defines a method for creating a new validator func (k msgServer) CreateValidator(ctx context.Context, msg *types.MsgCreateValidator) (*types.MsgCreateValidatorResponse, error) { - valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) + valAddr, err := k.validatorAddressCodec.StringToBytes(msg.ValidatorAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err) } @@ -157,7 +157,7 @@ func (k msgServer) CreateValidator(ctx context.Context, msg *types.MsgCreateVali // EditValidator defines a method for editing an existing validator func (k msgServer) EditValidator(ctx context.Context, msg *types.MsgEditValidator) (*types.MsgEditValidatorResponse, error) { - valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) + valAddr, err := k.validatorAddressCodec.StringToBytes(msg.ValidatorAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err) } @@ -303,12 +303,12 @@ func (k msgServer) Delegate(ctx context.Context, msg *types.MsgDelegate) (*types // BeginRedelegate defines a method for performing a redelegation of coins from a source validator to a destination validator of given delegator func (k msgServer) BeginRedelegate(ctx context.Context, msg *types.MsgBeginRedelegate) (*types.MsgBeginRedelegateResponse, error) { - valSrcAddr, err := sdk.ValAddressFromBech32(msg.ValidatorSrcAddress) + valSrcAddr, err := k.validatorAddressCodec.StringToBytes(msg.ValidatorSrcAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid source validator address: %s", err) } - valDstAddr, err := sdk.ValAddressFromBech32(msg.ValidatorDstAddress) + valDstAddr, err := k.validatorAddressCodec.StringToBytes(msg.ValidatorDstAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid destination validator address: %s", err) } @@ -379,7 +379,7 @@ func (k msgServer) BeginRedelegate(ctx context.Context, msg *types.MsgBeginRedel // Undelegate defines a method for performing an undelegation from a delegate and a validator func (k msgServer) Undelegate(ctx context.Context, msg *types.MsgUndelegate) (*types.MsgUndelegateResponse, error) { - addr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) + addr, err := k.validatorAddressCodec.StringToBytes(msg.ValidatorAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err) } @@ -451,7 +451,7 @@ func (k msgServer) Undelegate(ctx context.Context, msg *types.MsgUndelegate) (*t // CancelUnbondingDelegation defines a method for canceling the unbonding delegation // and delegate back to the validator. func (k msgServer) CancelUnbondingDelegation(ctx context.Context, msg *types.MsgCancelUnbondingDelegation) (*types.MsgCancelUnbondingDelegationResponse, error) { - valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) + valAddr, err := k.validatorAddressCodec.StringToBytes(msg.ValidatorAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err) } From f02802da600e0ae65a98199302b25c30c6f0f8a5 Mon Sep 17 00:00:00 2001 From: Devon Bear Date: Mon, 24 Jul 2023 01:02:32 +0200 Subject: [PATCH 03/12] push --- simapp/simd/cmd/testnet.go | 11 ++++-- tests/e2e/authz/tx.go | 2 +- tests/e2e/distribution/withdraw_all_suite.go | 2 +- tests/e2e/staking/suite.go | 2 +- tests/e2e/staking/test_helpers.go | 5 ++- tests/e2e/tx/benchmarks_test.go | 4 +- tests/e2e/tx/service_test.go | 6 +-- testutil/network/util.go | 2 +- x/genutil/client/cli/collect.go | 5 ++- x/genutil/client/cli/commands.go | 4 +- x/genutil/client/cli/genaccount.go | 6 ++- x/genutil/client/cli/genaccount_test.go | 3 +- x/genutil/client/cli/gentx.go | 2 +- x/genutil/collect.go | 9 +++-- x/genutil/collect_test.go | 4 +- x/staking/client/cli/flags.go | 6 +-- x/staking/client/cli/tx.go | 41 +++++++++----------- x/staking/client/cli/tx_test.go | 9 +++-- x/staking/module.go | 4 +- 19 files changed, 68 insertions(+), 59 deletions(-) diff --git a/simapp/simd/cmd/testnet.go b/simapp/simd/cmd/testnet.go index cd539255b189..7b9cb81ce364 100644 --- a/simapp/simd/cmd/testnet.go +++ b/simapp/simd/cmd/testnet.go @@ -23,6 +23,7 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/hd" "github.com/cosmos/cosmos-sdk/crypto/keyring" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + "github.com/cosmos/cosmos-sdk/runtime" "github.com/cosmos/cosmos-sdk/server" srvconfig "github.com/cosmos/cosmos-sdk/server/config" "github.com/cosmos/cosmos-sdk/testutil" @@ -144,7 +145,7 @@ Example: args.numValidators, _ = cmd.Flags().GetInt(flagNumValidators) args.algo, _ = cmd.Flags().GetString(flags.FlagKeyType) - return initTestnetFiles(clientCtx, cmd, config, mbm, genBalIterator, args) + return initTestnetFiles(clientCtx, cmd, config, mbm, genBalIterator, clientCtx.TxConfig.SigningContext().ValidatorAddressCodec(), args) }, } @@ -204,6 +205,7 @@ func initTestnetFiles( nodeConfig *cmtconfig.Config, mbm module.BasicManager, genBalIterator banktypes.GenesisBalancesIterator, + valAddrCodec runtime.ValidatorAddressCodec, args initArgs, ) error { if args.chainID == "" { @@ -345,7 +347,7 @@ func initTestnetFiles( err := collectGenFiles( clientCtx, nodeConfig, args.chainID, nodeIDs, valPubKeys, args.numValidators, - args.outputDir, args.nodeDirPrefix, args.nodeDaemonHome, genBalIterator, + args.outputDir, args.nodeDirPrefix, args.nodeDaemonHome, genBalIterator, valAddrCodec, ) if err != nil { return err @@ -402,7 +404,7 @@ func initGenFiles( func collectGenFiles( clientCtx client.Context, nodeConfig *cmtconfig.Config, chainID string, nodeIDs []string, valPubKeys []cryptotypes.PubKey, numValidators int, - outputDir, nodeDirPrefix, nodeDaemonHome string, genBalIterator banktypes.GenesisBalancesIterator, + outputDir, nodeDirPrefix, nodeDaemonHome string, genBalIterator banktypes.GenesisBalancesIterator, valAddrCodec runtime.ValidatorAddressCodec, ) error { var appState json.RawMessage genTime := cmttime.Now() @@ -423,7 +425,8 @@ func collectGenFiles( return err } - nodeAppState, err := genutil.GenAppStateFromConfig(clientCtx.Codec, clientCtx.TxConfig, nodeConfig, initCfg, appGenesis, genBalIterator, genutiltypes.DefaultMessageValidator) + nodeAppState, err := genutil.GenAppStateFromConfig(clientCtx.Codec, clientCtx.TxConfig, nodeConfig, initCfg, appGenesis, genBalIterator, genutiltypes.DefaultMessageValidator, + valAddrCodec) if err != nil { return err } diff --git a/tests/e2e/authz/tx.go b/tests/e2e/authz/tx.go index cc93b99855a8..d43714b34bad 100644 --- a/tests/e2e/authz/tx.go +++ b/tests/e2e/authz/tx.go @@ -172,7 +172,7 @@ var ( ) func execDelegate(val *network.Validator, args []string) (testutil.BufferWriter, error) { - cmd := stakingcli.NewDelegateCmd() + cmd := stakingcli.NewDelegateCmd(addresscodec.NewBech32Codec("cosmos")) clientCtx := val.ClientCtx return clitestutil.ExecTestCLICmd(clientCtx, cmd, args) } diff --git a/tests/e2e/distribution/withdraw_all_suite.go b/tests/e2e/distribution/withdraw_all_suite.go index 555dc25587e2..9ecb634f9303 100644 --- a/tests/e2e/distribution/withdraw_all_suite.go +++ b/tests/e2e/distribution/withdraw_all_suite.go @@ -82,7 +82,7 @@ func (s *WithdrawAllTestSuite) TestNewWithdrawAllRewardsGenerateOnly() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, math.NewInt(10))).String()), } - cmd := stakingcli.NewDelegateCmd() + cmd := stakingcli.NewDelegateCmd(clientCtx.InterfaceRegistry.SigningContext().ValidatorAddressCodec()) _, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, args) require.NoError(err) require.NoError(s.network.WaitForNextBlock()) diff --git a/tests/e2e/staking/suite.go b/tests/e2e/staking/suite.go index c88f5ad74e71..1e4ee3469df2 100644 --- a/tests/e2e/staking/suite.go +++ b/tests/e2e/staking/suite.go @@ -115,7 +115,7 @@ func (s *E2ETestSuite) TestBlockResults() { require.NoError(s.network.WaitForNextBlock()) // Use CLI to create a delegation from the new account to validator `val`. - cmd := cli.NewDelegateCmd() + cmd := cli.NewDelegateCmd(addresscodec.NewBech32Codec("cosmos")) _, err = clitestutil.ExecTestCLICmd(val.ClientCtx, cmd, []string{ val.ValAddress.String(), sdk.NewCoin(s.cfg.BondDenom, math.NewInt(150)).String(), diff --git a/tests/e2e/staking/test_helpers.go b/tests/e2e/staking/test_helpers.go index e2951834d101..baae411b1f3e 100644 --- a/tests/e2e/staking/test_helpers.go +++ b/tests/e2e/staking/test_helpers.go @@ -7,6 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" "github.com/cosmos/cosmos-sdk/testutil" clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" sdk "github.com/cosmos/cosmos-sdk/types" @@ -31,7 +32,7 @@ func MsgRedelegateExec(clientCtx client.Context, from, src, dst, amount fmt.Stri args = append(args, extraArgs...) args = append(args, commonArgs...) - return clitestutil.ExecTestCLICmd(clientCtx, stakingcli.NewRedelegateCmd(), args) + return clitestutil.ExecTestCLICmd(clientCtx, stakingcli.NewRedelegateCmd(addresscodec.NewBech32Codec("cosmos")), args) } // MsgUnbondExec creates a unbond message. @@ -47,5 +48,5 @@ func MsgUnbondExec(clientCtx client.Context, from, valAddress, args = append(args, commonArgs...) args = append(args, extraArgs...) - return clitestutil.ExecTestCLICmd(clientCtx, stakingcli.NewUnbondCmd(), args) + return clitestutil.ExecTestCLICmd(clientCtx, stakingcli.NewUnbondCmd(addresscodec.NewBech32Codec("cosmos")), args) } diff --git a/tests/e2e/tx/benchmarks_test.go b/tests/e2e/tx/benchmarks_test.go index e323ddb91e26..e1bed2a0dbef 100644 --- a/tests/e2e/tx/benchmarks_test.go +++ b/tests/e2e/tx/benchmarks_test.go @@ -112,7 +112,7 @@ func NewE2EBenchmarkSuite(tb testing.TB) *E2EBenchmarkSuite { sdk.NewCoins( sdk.NewCoin(s.cfg.BondDenom, sdkmath.NewInt(10)), ), - addresscodec.NewBech32Codec("cosmos"), + addresscodec.NewBech32Codec("cosmosvaloper"), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdkmath.NewInt(10))).String()), @@ -130,7 +130,7 @@ func NewE2EBenchmarkSuite(tb testing.TB) *E2EBenchmarkSuite { sdk.NewCoins( sdk.NewCoin(s.cfg.BondDenom, sdkmath.NewInt(1)), ), - addresscodec.NewBech32Codec("cosmos"), + addresscodec.NewBech32Codec("cosmosvaloper"), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s", flags.FlagOffline), fmt.Sprintf("--%s=0", flags.FlagAccountNumber), diff --git a/tests/e2e/tx/service_test.go b/tests/e2e/tx/service_test.go index cee50c6a5a62..2a0a820a75b9 100644 --- a/tests/e2e/tx/service_test.go +++ b/tests/e2e/tx/service_test.go @@ -75,7 +75,7 @@ func (s *E2ETestSuite) SetupSuite() { sdk.NewCoins( sdk.NewCoin(s.cfg.BondDenom, math.NewInt(10)), ), - addresscodec.NewBech32Codec("cosmos"), + addresscodec.NewBech32Codec("cosmosvaloper"), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, math.NewInt(10))).String()), @@ -93,7 +93,7 @@ func (s *E2ETestSuite) SetupSuite() { sdk.NewCoins( sdk.NewCoin(s.cfg.BondDenom, math.NewInt(1)), ), - addresscodec.NewBech32Codec("cosmos"), + addresscodec.NewBech32Codec("cosmosvaloper"), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s", flags.FlagOffline), fmt.Sprintf("--%s=0", flags.FlagAccountNumber), @@ -600,7 +600,7 @@ func (s *E2ETestSuite) TestSimMultiSigTx() { val1.Address, addr, sdk.NewCoins(coins), - addresscodec.NewBech32Codec("cosmos"), + addresscodec.NewBech32Codec("cosmosvaloper"), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, math.NewInt(10))).String()), diff --git a/testutil/network/util.go b/testutil/network/util.go index c70108535c74..17eb64c0c05d 100644 --- a/testutil/network/util.go +++ b/testutil/network/util.go @@ -142,7 +142,7 @@ func collectGenFiles(cfg Config, vals []*Validator, outputDir string) error { } appState, err := genutil.GenAppStateFromConfig(cfg.Codec, cfg.TxConfig, - cmtCfg, initCfg, appGenesis, banktypes.GenesisBalancesIterator{}, genutiltypes.DefaultMessageValidator) + cmtCfg, initCfg, appGenesis, banktypes.GenesisBalancesIterator{}, genutiltypes.DefaultMessageValidator, cfg.TxConfig.SigningContext().AddressCodec()) if err != nil { return err } diff --git a/x/genutil/client/cli/collect.go b/x/genutil/client/cli/collect.go index a3821e458e96..5502445960d7 100644 --- a/x/genutil/client/cli/collect.go +++ b/x/genutil/client/cli/collect.go @@ -10,6 +10,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/runtime" "github.com/cosmos/cosmos-sdk/server" "github.com/cosmos/cosmos-sdk/x/genutil" "github.com/cosmos/cosmos-sdk/x/genutil/types" @@ -18,7 +19,7 @@ import ( const flagGenTxDir = "gentx-dir" // CollectGenTxsCmd - return the cobra command to collect genesis transactions -func CollectGenTxsCmd(genBalIterator types.GenesisBalancesIterator, defaultNodeHome string, validator types.MessageValidator) *cobra.Command { +func CollectGenTxsCmd(genBalIterator types.GenesisBalancesIterator, defaultNodeHome string, validator types.MessageValidator, valAddrCodec runtime.ValidatorAddressCodec) *cobra.Command { cmd := &cobra.Command{ Use: "collect-gentxs", Short: "Collect genesis txs and output a genesis.json file", @@ -50,7 +51,7 @@ func CollectGenTxsCmd(genBalIterator types.GenesisBalancesIterator, defaultNodeH toPrint := newPrintInfo(config.Moniker, appGenesis.ChainID, nodeID, genTxsDir, json.RawMessage("")) initCfg := types.NewInitConfig(appGenesis.ChainID, genTxsDir, nodeID, valPubKey) - appMessage, err := genutil.GenAppStateFromConfig(cdc, clientCtx.TxConfig, config, initCfg, appGenesis, genBalIterator, validator) + appMessage, err := genutil.GenAppStateFromConfig(cdc, clientCtx.TxConfig, config, initCfg, appGenesis, genBalIterator, validator, valAddrCodec) if err != nil { return errors.Wrap(err, "failed to get genesis app state from config") } diff --git a/x/genutil/client/cli/commands.go b/x/genutil/client/cli/commands.go index d150bb4bcca2..ac179beb2538 100644 --- a/x/genutil/client/cli/commands.go +++ b/x/genutil/client/cli/commands.go @@ -36,9 +36,9 @@ func CommandsWithCustomMigrationMap(txConfig client.TxConfig, moduleBasics modul cmd.AddCommand( GenTxCmd(moduleBasics, txConfig, banktypes.GenesisBalancesIterator{}, defaultNodeHome), MigrateGenesisCmd(migrationMap), - CollectGenTxsCmd(banktypes.GenesisBalancesIterator{}, defaultNodeHome, gentxModule.GenTxValidator), + CollectGenTxsCmd(banktypes.GenesisBalancesIterator{}, defaultNodeHome, gentxModule.GenTxValidator, txConfig.SigningContext().ValidatorAddressCodec()), ValidateGenesisCmd(moduleBasics), - AddGenesisAccountCmd(defaultNodeHome), + AddGenesisAccountCmd(defaultNodeHome, txConfig.SigningContext().AddressCodec()), ) return cmd diff --git a/x/genutil/client/cli/genaccount.go b/x/genutil/client/cli/genaccount.go index 0bedc26a1ba6..100048751be7 100644 --- a/x/genutil/client/cli/genaccount.go +++ b/x/genutil/client/cli/genaccount.go @@ -6,6 +6,8 @@ import ( "github.com/spf13/cobra" + address "cosmossdk.io/core/address" + "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/crypto/keyring" @@ -24,7 +26,7 @@ const ( // AddGenesisAccountCmd returns add-genesis-account cobra Command. // This command is provided as a default, applications are expected to provide their own command if custom genesis accounts are needed. -func AddGenesisAccountCmd(defaultNodeHome string) *cobra.Command { +func AddGenesisAccountCmd(defaultNodeHome string, addressCodec address.Codec) *cobra.Command { cmd := &cobra.Command{ Use: "add-genesis-account [address_or_key_name] [coin][,[coin]]", Short: "Add a genesis account to genesis.json", @@ -42,7 +44,7 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa config.SetRoot(clientCtx.HomeDir) var kr keyring.Keyring - addr, err := sdk.AccAddressFromBech32(args[0]) + addr, err := addressCodec.StringToBytes(args[0]) if err != nil { inBuf := bufio.NewReader(cmd.InOrStdin()) keyringBackend, _ := cmd.Flags().GetString(flags.FlagKeyringBackend) diff --git a/x/genutil/client/cli/genaccount_test.go b/x/genutil/client/cli/genaccount_test.go index 5de4922ae386..573d9a41bbf8 100644 --- a/x/genutil/client/cli/genaccount_test.go +++ b/x/genutil/client/cli/genaccount_test.go @@ -12,6 +12,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" + addresscodec "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/server" @@ -90,7 +91,7 @@ func TestAddGenesisAccountCmd(t *testing.T) { ctx = context.WithValue(ctx, client.ClientContextKey, &clientCtx) ctx = context.WithValue(ctx, server.ServerContextKey, serverCtx) - cmd := genutilcli.AddGenesisAccountCmd(home) + cmd := genutilcli.AddGenesisAccountCmd(home, addresscodec.NewBech32Codec("cosmos")) cmd.SetArgs([]string{ tc.addr, tc.denom, diff --git a/x/genutil/client/cli/gentx.go b/x/genutil/client/cli/gentx.go index dfbcbab2a9f4..0fba3cc7b4be 100644 --- a/x/genutil/client/cli/gentx.go +++ b/x/genutil/client/cli/gentx.go @@ -37,7 +37,7 @@ func GenTxCmd(mbm module.BasicManager, txEncCfg client.TxEncodingConfig, genBalI Short: "Generate a genesis tx carrying a self delegation", Args: cobra.ExactArgs(2), Long: fmt.Sprintf(`Generate a genesis transaction that creates a validator with a self-delegation, -that is signed by the key in the Keyring referenced by a given name. A node ID and Bech32 consensus +that is signed by the key in the Keyring referenced by a given name. A node ID and consensus pubkey may optionally be provided. If they are omitted, they will be retrieved from the priv_validator.json file. The following default parameters are included: %s diff --git a/x/genutil/collect.go b/x/genutil/collect.go index d7fbf38dcdbb..422a278b5af3 100644 --- a/x/genutil/collect.go +++ b/x/genutil/collect.go @@ -14,6 +14,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" + sdkruntime "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" bankexported "github.com/cosmos/cosmos-sdk/x/bank/exported" "github.com/cosmos/cosmos-sdk/x/genutil/types" @@ -23,11 +24,11 @@ import ( // GenAppStateFromConfig gets the genesis app state from the config func GenAppStateFromConfig(cdc codec.JSONCodec, txEncodingConfig client.TxEncodingConfig, config *cfg.Config, initCfg types.InitConfig, genesis *types.AppGenesis, genBalIterator types.GenesisBalancesIterator, - validator types.MessageValidator, + validator types.MessageValidator, valAddrCodec sdkruntime.ValidatorAddressCodec, ) (appState json.RawMessage, err error) { // process genesis transactions, else create default genesis.json appGenTxs, persistentPeers, err := CollectTxs( - cdc, txEncodingConfig.TxJSONDecoder(), config.Moniker, initCfg.GenTxsDir, genesis, genBalIterator, validator) + cdc, txEncodingConfig.TxJSONDecoder(), config.Moniker, initCfg.GenTxsDir, genesis, genBalIterator, validator, valAddrCodec) if err != nil { return appState, err } @@ -66,7 +67,7 @@ func GenAppStateFromConfig(cdc codec.JSONCodec, txEncodingConfig client.TxEncodi // the list of appGenTxs, and persistent peers required to generate genesis.json. func CollectTxs(cdc codec.JSONCodec, txJSONDecoder sdk.TxDecoder, moniker, genTxsDir string, genesis *types.AppGenesis, genBalIterator types.GenesisBalancesIterator, - validator types.MessageValidator, + validator types.MessageValidator, valAddrCodec sdkruntime.ValidatorAddressCodec, ) (appGenTxs []sdk.Tx, persistentPeers string, err error) { // prepare a map of all balances in genesis state to then validate // against the validators addresses @@ -133,7 +134,7 @@ func CollectTxs(cdc codec.JSONCodec, txJSONDecoder sdk.TxDecoder, moniker, genTx msg := msgs[0].(*stakingtypes.MsgCreateValidator) // validate validator addresses and funds against the accounts in the state - valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) + valAddr, err := valAddrCodec.StringToBytes(msg.ValidatorAddress) if err != nil { return appGenTxs, persistentPeers, err } diff --git a/x/genutil/collect_test.go b/x/genutil/collect_test.go index 3f0a32a07915..5b8acac7656e 100644 --- a/x/genutil/collect_test.go +++ b/x/genutil/collect_test.go @@ -9,6 +9,7 @@ import ( "github.com/cosmos/gogoproto/proto" "github.com/cosmos/cosmos-sdk/codec" + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/server" sdk "github.com/cosmos/cosmos-sdk/types" @@ -59,7 +60,8 @@ func TestCollectTxsHandlesDirectories(t *testing.T) { balItr := new(doNothingIterator) dnc := &doNothingUnmarshalJSON{cdc} - if _, _, err := genutil.CollectTxs(dnc, txDecoder, "foo", testDir, genesis, balItr, types.DefaultMessageValidator); err != nil { + if _, _, err := genutil.CollectTxs(dnc, txDecoder, "foo", testDir, genesis, balItr, types.DefaultMessageValidator, + addresscodec.NewBech32Codec("cosmos")); err != nil { t.Fatal(err) } } diff --git a/x/staking/client/cli/flags.go b/x/staking/client/cli/flags.go index d4388e5c13f8..08789cfa6736 100644 --- a/x/staking/client/cli/flags.go +++ b/x/staking/client/cli/flags.go @@ -44,9 +44,9 @@ var ( func init() { fsShares.String(FlagSharesAmount, "", "Amount of source-shares to either unbond or redelegate as a positive integer or decimal") fsShares.String(FlagSharesFraction, "", "Fraction of source-shares to either unbond or redelegate as a positive integer or decimal >0 and <=1") - fsValidator.String(FlagAddressValidator, "", "The Bech32 address of the validator") - fsRedelegation.String(FlagAddressValidatorSrc, "", "The Bech32 address of the source validator") - fsRedelegation.String(FlagAddressValidatorDst, "", "The Bech32 address of the destination validator") + fsValidator.String(FlagAddressValidator, "", "The address of the validator") + fsRedelegation.String(FlagAddressValidatorSrc, "", "The address of the source validator") + fsRedelegation.String(FlagAddressValidatorDst, "", "The address of the destination validator") } // FlagSetCommissionCreate Returns the FlagSet used for commission create. diff --git a/x/staking/client/cli/tx.go b/x/staking/client/cli/tx.go index 0bf5411ae0cb..3e523e2c7289 100644 --- a/x/staking/client/cli/tx.go +++ b/x/staking/client/cli/tx.go @@ -16,6 +16,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/version" @@ -33,7 +34,7 @@ var ( ) // NewTxCmd returns a root CLI command handler for all x/staking transaction commands. -func NewTxCmd() *cobra.Command { +func NewTxCmd(valAddrCodec runtime.ValidatorAddressCodec) *cobra.Command { stakingTxCmd := &cobra.Command{ Use: types.ModuleName, Short: "Staking transaction subcommands", @@ -45,10 +46,10 @@ func NewTxCmd() *cobra.Command { stakingTxCmd.AddCommand( NewCreateValidatorCmd(), NewEditValidatorCmd(), - NewDelegateCmd(), - NewRedelegateCmd(), - NewUnbondCmd(), - NewCancelUnbondingDelegation(), + NewDelegateCmd(valAddrCodec), + NewRedelegateCmd(valAddrCodec), + NewUnbondCmd(valAddrCodec), + NewCancelUnbondingDelegation(valAddrCodec), ) return stakingTxCmd @@ -174,9 +175,7 @@ func NewEditValidatorCmd() *cobra.Command { } // NewDelegateCmd returns a CLI command handler for creating a MsgDelegate transaction. -func NewDelegateCmd() *cobra.Command { - bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix() - +func NewDelegateCmd(valAddrCodec runtime.ValidatorAddressCodec) *cobra.Command { cmd := &cobra.Command{ Use: "delegate [validator-addr] [amount]", Args: cobra.ExactArgs(2), @@ -185,9 +184,9 @@ func NewDelegateCmd() *cobra.Command { fmt.Sprintf(`Delegate an amount of liquid coins to a validator from your wallet. Example: -$ %s tx staking delegate %s1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm 1000stake --from mykey +$ %s tx staking delegate cosmoss1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm 1000stake --from mykey `, - version.AppName, bech32PrefixValAddr, + version.AppName, ), ), RunE: func(cmd *cobra.Command, args []string) error { @@ -201,7 +200,7 @@ $ %s tx staking delegate %s1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm 1000stake --f } delAddr := clientCtx.GetFromAddress() - valAddr, err := sdk.ValAddressFromBech32(args[0]) + valAddr, err := valAddrCodec.StringToBytes(args[0]) if err != nil { return err } @@ -218,9 +217,7 @@ $ %s tx staking delegate %s1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm 1000stake --f } // NewRedelegateCmd returns a CLI command handler for creating a MsgBeginRedelegate transaction. -func NewRedelegateCmd() *cobra.Command { - bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix() - +func NewRedelegateCmd(valAddrCodec runtime.ValidatorAddressCodec) *cobra.Command { cmd := &cobra.Command{ Use: "redelegate [src-validator-addr] [dst-validator-addr] [amount]", Short: "Redelegate illiquid tokens from one validator to another", @@ -229,9 +226,9 @@ func NewRedelegateCmd() *cobra.Command { fmt.Sprintf(`Redelegate an amount of illiquid staking tokens from one validator to another. Example: -$ %s tx staking redelegate %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj %s1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm 100stake --from mykey +$ %s tx staking redelegate cosmoss1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj cosmoss1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm 100stake --from mykey `, - version.AppName, bech32PrefixValAddr, bech32PrefixValAddr, + version.AppName, ), ), RunE: func(cmd *cobra.Command, args []string) error { @@ -240,12 +237,12 @@ $ %s tx staking redelegate %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj %s1l2rsakp3 return err } delAddr := clientCtx.GetFromAddress() - valSrcAddr, err := sdk.ValAddressFromBech32(args[0]) + valSrcAddr, err := valAddrCodec.StringToBytes(args[0]) if err != nil { return err } - valDstAddr, err := sdk.ValAddressFromBech32(args[1]) + valDstAddr, err := valAddrCodec.StringToBytes(args[1]) if err != nil { return err } @@ -267,7 +264,7 @@ $ %s tx staking redelegate %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj %s1l2rsakp3 } // NewUnbondCmd returns a CLI command handler for creating a MsgUndelegate transaction. -func NewUnbondCmd() *cobra.Command { +func NewUnbondCmd(valAddrCodec runtime.ValidatorAddressCodec) *cobra.Command { bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix() cmd := &cobra.Command{ @@ -290,7 +287,7 @@ $ %s tx staking unbond %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 100stake --from } delAddr := clientCtx.GetFromAddress() - valAddr, err := sdk.ValAddressFromBech32(args[0]) + valAddr, err := valAddrCodec.StringToBytes(args[0]) if err != nil { return err } @@ -312,7 +309,7 @@ $ %s tx staking unbond %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 100stake --from } // NewCancelUnbondingDelegation returns a CLI command handler for creating a MsgCancelUnbondingDelegation transaction. -func NewCancelUnbondingDelegation() *cobra.Command { +func NewCancelUnbondingDelegation(valAddrCodec runtime.ValidatorAddressCodec) *cobra.Command { bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix() cmd := &cobra.Command{ @@ -336,7 +333,7 @@ $ %s tx staking cancel-unbond %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 100stake return err } delAddr := clientCtx.GetFromAddress() - valAddr, err := sdk.ValAddressFromBech32(args[0]) + valAddr, err := valAddrCodec.StringToBytes(args[0]) if err != nil { return err } diff --git a/x/staking/client/cli/tx_test.go b/x/staking/client/cli/tx_test.go index ac3ceee290d8..0d30d2850f94 100644 --- a/x/staking/client/cli/tx_test.go +++ b/x/staking/client/cli/tx_test.go @@ -14,6 +14,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" + addresscodec "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/crypto/keys/ed25519" @@ -431,7 +432,7 @@ func (s *CLITestSuite) TestNewEditValidatorCmd() { } func (s *CLITestSuite) TestNewDelegateCmd() { - cmd := cli.NewDelegateCmd() + cmd := cli.NewDelegateCmd(addresscodec.NewBech32Codec("cosmosvaloper")) testCases := []struct { name string @@ -494,7 +495,7 @@ func (s *CLITestSuite) TestNewDelegateCmd() { } func (s *CLITestSuite) TestNewRedelegateCmd() { - cmd := cli.NewRedelegateCmd() + cmd := cli.NewRedelegateCmd(addresscodec.NewBech32Codec("cosmosvaloper")) testCases := []struct { name string @@ -576,7 +577,7 @@ func (s *CLITestSuite) TestNewRedelegateCmd() { } func (s *CLITestSuite) TestNewUnbondCmd() { - cmd := cli.NewUnbondCmd() + cmd := cli.NewUnbondCmd(addresscodec.NewBech32Codec("cosmosvaloper")) testCases := []struct { name string @@ -639,7 +640,7 @@ func (s *CLITestSuite) TestNewUnbondCmd() { } func (s *CLITestSuite) TestNewCancelUnbondingDelegationCmd() { - cmd := cli.NewCancelUnbondingDelegation() + cmd := cli.NewCancelUnbondingDelegation(addresscodec.NewBech32Codec("cosmosvaloper")) testCases := []struct { name string diff --git a/x/staking/module.go b/x/staking/module.go index d1e6edfe6038..e7c6b9655881 100644 --- a/x/staking/module.go +++ b/x/staking/module.go @@ -90,8 +90,8 @@ func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *g } // GetTxCmd returns the root tx command for the staking module. -func (AppModuleBasic) GetTxCmd() *cobra.Command { - return cli.NewTxCmd() +func (amb AppModuleBasic) GetTxCmd() *cobra.Command { + return cli.NewTxCmd(amb.cdc.InterfaceRegistry().SigningContext().ValidatorAddressCodec()) } // AppModule implements an application module for the staking module. From 76410aeeab5a2efb406a1ea40eeb18d8ce1ca1b9 Mon Sep 17 00:00:00 2001 From: Devon Bear Date: Mon, 24 Jul 2023 01:04:45 +0200 Subject: [PATCH 04/12] edit --- tests/e2e/tx/benchmarks_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/e2e/tx/benchmarks_test.go b/tests/e2e/tx/benchmarks_test.go index e1bed2a0dbef..e323ddb91e26 100644 --- a/tests/e2e/tx/benchmarks_test.go +++ b/tests/e2e/tx/benchmarks_test.go @@ -112,7 +112,7 @@ func NewE2EBenchmarkSuite(tb testing.TB) *E2EBenchmarkSuite { sdk.NewCoins( sdk.NewCoin(s.cfg.BondDenom, sdkmath.NewInt(10)), ), - addresscodec.NewBech32Codec("cosmosvaloper"), + addresscodec.NewBech32Codec("cosmos"), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdkmath.NewInt(10))).String()), @@ -130,7 +130,7 @@ func NewE2EBenchmarkSuite(tb testing.TB) *E2EBenchmarkSuite { sdk.NewCoins( sdk.NewCoin(s.cfg.BondDenom, sdkmath.NewInt(1)), ), - addresscodec.NewBech32Codec("cosmosvaloper"), + addresscodec.NewBech32Codec("cosmos"), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s", flags.FlagOffline), fmt.Sprintf("--%s=0", flags.FlagAccountNumber), From ef59256f8e243468b9fe349cd4a8cb5543a89457 Mon Sep 17 00:00:00 2001 From: marbar3778 Date: Sun, 23 Jul 2023 23:59:27 +0200 Subject: [PATCH 05/12] valAddress --- x/staking/keeper/delegation.go | 4 +-- x/staking/keeper/genesis.go | 6 +++- x/staking/keeper/grpc_query.go | 16 +++++------ x/staking/keeper/invariants.go | 12 ++++++-- x/staking/keeper/msg_server_test.go | 4 +-- x/staking/keeper/unbonding.go | 8 +++--- x/staking/keeper/val_state_change.go | 13 +++++---- x/staking/keeper/validator.go | 11 ++++---- x/staking/types/delegation.go | 42 ++++++++++++++++++++++------ 9 files changed, 77 insertions(+), 39 deletions(-) diff --git a/x/staking/keeper/delegation.go b/x/staking/keeper/delegation.go index e5849b8daa8e..85ec9ac3a7af 100644 --- a/x/staking/keeper/delegation.go +++ b/x/staking/keeper/delegation.go @@ -435,7 +435,7 @@ func (k Keeper) SetUnbondingDelegationEntry( if err == nil { isNewUbdEntry = ubd.AddEntry(creationHeight, minTime, balance, id) } else if errors.Is(err, types.ErrNoUnbondingDelegation) { - ubd = types.NewUnbondingDelegation(delegatorAddr, validatorAddr, creationHeight, minTime, balance, id) + ubd = types.NewUnbondingDelegation(delegatorAddr, validatorAddr, creationHeight, minTime, balance, id, k.validatorAddressCodec, k.authKeeper.AddressCodec()) } else { return ubd, err } @@ -691,7 +691,7 @@ func (k Keeper) SetRedelegationEntry(ctx context.Context, red.AddEntry(creationHeight, minTime, balance, sharesDst, id) } else if errors.Is(err, types.ErrNoRedelegation) { red = types.NewRedelegation(delegatorAddr, validatorSrcAddr, - validatorDstAddr, creationHeight, minTime, balance, sharesDst, id) + validatorDstAddr, creationHeight, minTime, balance, sharesDst, id, k.validatorAddressCodec, k.authKeeper.AddressCodec()) } else { return types.Redelegation{}, err } diff --git a/x/staking/keeper/genesis.go b/x/staking/keeper/genesis.go index 65a53c0cbe46..0daf243cc6d6 100644 --- a/x/staking/keeper/genesis.go +++ b/x/staking/keeper/genesis.go @@ -231,7 +231,11 @@ func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { var lastValidatorPowers []types.LastValidatorPower err = k.IterateLastValidatorPowers(ctx, func(addr sdk.ValAddress, power int64) (stop bool) { - lastValidatorPowers = append(lastValidatorPowers, types.LastValidatorPower{Address: addr.String(), Power: power}) + addrStr, err := k.validatorAddressCodec.BytesToString(addr) + if err != nil { + panic(err) + } + lastValidatorPowers = append(lastValidatorPowers, types.LastValidatorPower{Address: addrStr, Power: power}) return false }) if err != nil { diff --git a/x/staking/keeper/grpc_query.go b/x/staking/keeper/grpc_query.go index 7b72ec54a7a2..98ecf2336f74 100644 --- a/x/staking/keeper/grpc_query.go +++ b/x/staking/keeper/grpc_query.go @@ -617,16 +617,16 @@ func redelegationsToRedelegationResponses(ctx context.Context, k *Keeper, redels resp := make(types.RedelegationResponses, len(redels)) for i, redel := range redels { - valSrcAddr, err := sdk.ValAddressFromBech32(redel.ValidatorSrcAddress) + _, err := k.validatorAddressCodec.StringToBytes(redel.ValidatorSrcAddress) if err != nil { - panic(err) + return nil, err } - valDstAddr, err := sdk.ValAddressFromBech32(redel.ValidatorDstAddress) + valDstAddr, err := k.validatorAddressCodec.StringToBytes(redel.ValidatorDstAddress) if err != nil { - panic(err) + return nil, err } - delegatorAddress, err := k.authKeeper.AddressCodec().StringToBytes(redel.DelegatorAddress) + _, err = k.authKeeper.AddressCodec().StringToBytes(redel.DelegatorAddress) if err != nil { return nil, err } @@ -649,9 +649,9 @@ func redelegationsToRedelegationResponses(ctx context.Context, k *Keeper, redels } resp[i] = types.NewRedelegationResponse( - delegatorAddress, - valSrcAddr, - valDstAddr, + redel.DelegatorAddress, + redel.ValidatorSrcAddress, + redel.ValidatorDstAddress, entryResponses, ) } diff --git a/x/staking/keeper/invariants.go b/x/staking/keeper/invariants.go index 3c749925bc62..3f73f8a9bbc0 100644 --- a/x/staking/keeper/invariants.go +++ b/x/staking/keeper/invariants.go @@ -189,7 +189,11 @@ func DelegatorSharesInvariant(k *Keeper) sdk.Invariant { // initialize a map: validator -> its delegation shares for _, validator := range validators { - validatorsDelegationShares[validator.GetOperator().String()] = math.LegacyZeroDec() + addrStr, err := k.validatorAddressCodec.BytesToString(validator.GetOperator()) + if err != nil { + panic(err) + } + validatorsDelegationShares[addrStr] = math.LegacyZeroDec() } // iterate through all the delegations to calculate the total delegation shares for each validator @@ -207,7 +211,11 @@ func DelegatorSharesInvariant(k *Keeper) sdk.Invariant { // for each validator, check if its total delegation shares calculated from the step above equals to its expected delegation shares for _, validator := range validators { expValTotalDelShares := validator.GetDelegatorShares() - calculatedValTotalDelShares := validatorsDelegationShares[validator.GetOperator().String()] + addrStr, err := k.validatorAddressCodec.BytesToString(validator.GetOperator()) + if err != nil { + panic(err) + } + calculatedValTotalDelShares := validatorsDelegationShares[addrStr] if !calculatedValTotalDelShares.Equal(expValTotalDelShares) { broken = true msg += fmt.Sprintf("broken delegator shares invariance:\n"+ diff --git a/x/staking/keeper/msg_server_test.go b/x/staking/keeper/msg_server_test.go index 82b30abe13f0..99c800676a9c 100644 --- a/x/staking/keeper/msg_server_test.go +++ b/x/staking/keeper/msg_server_test.go @@ -827,7 +827,7 @@ func (s *KeeperTestSuite) TestMsgUndelegate() { } func (s *KeeperTestSuite) TestMsgCancelUnbondingDelegation() { - ctx, keeper, msgServer := s.ctx, s.stakingKeeper, s.msgServer + ctx, keeper, msgServer, ak := s.ctx, s.stakingKeeper, s.msgServer, s.accountKeeper require := s.Require() pk := ed25519.GenPrivKey().PubKey() @@ -851,7 +851,7 @@ func (s *KeeperTestSuite) TestMsgCancelUnbondingDelegation() { require.NoError(err) require.Equal(del, resDel) - ubd := stakingtypes.NewUnbondingDelegation(Addr, ValAddr, 10, ctx.BlockTime().Add(time.Minute*10), shares.RoundInt(), 0) + ubd := stakingtypes.NewUnbondingDelegation(Addr, ValAddr, 10, ctx.BlockTime().Add(time.Minute*10), shares.RoundInt(), 0, keeper.ValidatorAddressCodec(), ak.AddressCodec()) require.NoError(keeper.SetUnbondingDelegation(ctx, ubd)) resUnbond, err := keeper.GetUnbondingDelegation(ctx, Addr, ValAddr) require.NoError(err) diff --git a/x/staking/keeper/unbonding.go b/x/staking/keeper/unbonding.go index a0fb55de8c46..1813797b9761 100644 --- a/x/staking/keeper/unbonding.go +++ b/x/staking/keeper/unbonding.go @@ -172,7 +172,7 @@ func (k Keeper) SetUnbondingDelegationByUnbondingID(ctx context.Context, ubd typ if err != nil { return err } - valAddr, err := sdk.ValAddressFromBech32(ubd.ValidatorAddress) + valAddr, err := k.validatorAddressCodec.StringToBytes(ubd.ValidatorAddress) if err != nil { return err } @@ -196,12 +196,12 @@ func (k Keeper) SetRedelegationByUnbondingID(ctx context.Context, red types.Rede return err } - valSrcAddr, err := sdk.ValAddressFromBech32(red.ValidatorSrcAddress) + valSrcAddr, err := k.validatorAddressCodec.StringToBytes(red.ValidatorSrcAddress) if err != nil { return err } - valDstAddr, err := sdk.ValAddressFromBech32(red.ValidatorDstAddress) + valDstAddr, err := k.validatorAddressCodec.StringToBytes(red.ValidatorDstAddress) if err != nil { return err } @@ -220,7 +220,7 @@ func (k Keeper) SetRedelegationByUnbondingID(ctx context.Context, red types.Rede func (k Keeper) SetValidatorByUnbondingID(ctx context.Context, val types.Validator, id uint64) error { store := k.storeService.OpenKVStore(ctx) - valAddr, err := sdk.ValAddressFromBech32(val.OperatorAddress) + valAddr, err := k.validatorAddressCodec.StringToBytes(val.OperatorAddress) if err != nil { return err } diff --git a/x/staking/keeper/val_state_change.go b/x/staking/keeper/val_state_change.go index 43f1f463353d..af0e61cdf92f 100644 --- a/x/staking/keeper/val_state_change.go +++ b/x/staking/keeper/val_state_change.go @@ -9,6 +9,7 @@ import ( abci "github.com/cometbft/cometbft/abci/types" gogotypes "github.com/cosmos/gogoproto/types" + "cosmossdk.io/core/address" "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" @@ -46,7 +47,7 @@ func (k Keeper) BlockValidatorUpdates(ctx context.Context) ([]abci.ValidatorUpda } for _, dvPair := range matureUnbonds { - addr, err := sdk.ValAddressFromBech32(dvPair.ValidatorAddress) + addr, err := k.validatorAddressCodec.StringToBytes(dvPair.ValidatorAddress) if err != nil { return nil, err } @@ -77,11 +78,11 @@ func (k Keeper) BlockValidatorUpdates(ctx context.Context) ([]abci.ValidatorUpda } for _, dvvTriplet := range matureRedelegations { - valSrcAddr, err := sdk.ValAddressFromBech32(dvvTriplet.ValidatorSrcAddress) + valSrcAddr, err := k.validatorAddressCodec.StringToBytes(dvvTriplet.ValidatorSrcAddress) if err != nil { return nil, err } - valDstAddr, err := sdk.ValAddressFromBech32(dvvTriplet.ValidatorDstAddress) + valDstAddr, err := k.validatorAddressCodec.StringToBytes(dvvTriplet.ValidatorDstAddress) if err != nil { return nil, err } @@ -211,7 +212,7 @@ func (k Keeper) ApplyAndReturnValidatorSetUpdates(ctx context.Context) (updates totalPower = totalPower.Add(math.NewInt(newPower)) } - noLongerBonded, err := sortNoLongerBonded(last) + noLongerBonded, err := sortNoLongerBonded(last, k.validatorAddressCodec) if err != nil { return nil, err } @@ -472,13 +473,13 @@ func (k Keeper) getLastValidatorsByAddr(ctx context.Context) (validatorsByAddr, // given a map of remaining validators to previous bonded power // returns the list of validators to be unbonded, sorted by operator address -func sortNoLongerBonded(last validatorsByAddr) ([][]byte, error) { +func sortNoLongerBonded(last validatorsByAddr, ac address.Codec) ([][]byte, error) { // sort the map keys for determinism noLongerBonded := make([][]byte, len(last)) index := 0 for valAddrStr := range last { - valAddrBytes, err := sdk.ValAddressFromBech32(valAddrStr) + valAddrBytes, err := ac.StringToBytes(valAddrStr) if err != nil { return nil, err } diff --git a/x/staking/keeper/validator.go b/x/staking/keeper/validator.go index e92c49047157..4db228ec1ecb 100644 --- a/x/staking/keeper/validator.go +++ b/x/staking/keeper/validator.go @@ -1,6 +1,7 @@ package keeper import ( + "bytes" "context" "errors" "fmt" @@ -481,19 +482,19 @@ func (k Keeper) DeleteValidatorQueue(ctx context.Context, val types.Validator) e // since address string may change due to Bech32 prefix change, we parse the addresses into bytes // format for normalization - deletingAddr, err := sdk.ValAddressFromBech32(val.OperatorAddress) + deletingAddr, err := k.validatorAddressCodec.StringToBytes(val.OperatorAddress) if err != nil { return err } for _, addr := range addrs { - storedAddr, err := sdk.ValAddressFromBech32(addr) + storedAddr, err := k.validatorAddressCodec.StringToBytes(addr) if err != nil { // even if we don't error here, it will error in UnbondAllMatureValidators at unbond time return err } - if !storedAddr.Equals(deletingAddr) { - newAddrs = append(newAddrs, storedAddr.String()) + if !bytes.Equal(storedAddr, deletingAddr) { + newAddrs = append(newAddrs, addr) } } @@ -546,7 +547,7 @@ func (k Keeper) UnbondAllMatureValidators(ctx context.Context) error { } for _, valAddr := range addrs.Addresses { - addr, err := sdk.ValAddressFromBech32(valAddr) + addr, err := k.validatorAddressCodec.StringToBytes(valAddr) if err != nil { return err } diff --git a/x/staking/types/delegation.go b/x/staking/types/delegation.go index 3ebf5e6bb893..b241572187c6 100644 --- a/x/staking/types/delegation.go +++ b/x/staking/types/delegation.go @@ -5,6 +5,7 @@ import ( "strings" "time" + "cosmossdk.io/core/address" "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/codec" @@ -111,10 +112,19 @@ func UnmarshalUBDE(cdc codec.BinaryCodec, value []byte) (ubd UnbondingDelegation func NewUnbondingDelegation( delegatorAddr sdk.AccAddress, validatorAddr sdk.ValAddress, creationHeight int64, minTime time.Time, balance math.Int, id uint64, + valAc address.Codec, delAc address.Codec, ) UnbondingDelegation { + valAddr, err := valAc.BytesToString(validatorAddr) + if err != nil { + panic(err) + } + delAddr, err := delAc.BytesToString(delegatorAddr) + if err != nil { + panic(err) + } return UnbondingDelegation{ - DelegatorAddress: delegatorAddr.String(), - ValidatorAddress: validatorAddr.String(), + DelegatorAddress: delAddr, + ValidatorAddress: valAddr, Entries: []UnbondingDelegationEntry{ NewUnbondingDelegationEntry(creationHeight, minTime, balance, id), }, @@ -208,11 +218,25 @@ func (e RedelegationEntry) OnHold() bool { func NewRedelegation( delegatorAddr sdk.AccAddress, validatorSrcAddr, validatorDstAddr sdk.ValAddress, creationHeight int64, minTime time.Time, balance math.Int, sharesDst math.LegacyDec, id uint64, + valAc address.Codec, delAc address.Codec, ) Redelegation { + valSrcAddr, err := valAc.BytesToString(validatorSrcAddr) + if err != nil { + panic(err) + } + valDstAddr, err := valAc.BytesToString(validatorDstAddr) + if err != nil { + panic(err) + } + delAddr, err := delAc.BytesToString(delegatorAddr) + if err != nil { + panic(err) + } + return Redelegation{ - DelegatorAddress: delegatorAddr.String(), - ValidatorSrcAddress: validatorSrcAddr.String(), - ValidatorDstAddress: validatorDstAddr.String(), + DelegatorAddress: delAddr, + ValidatorSrcAddress: valSrcAddr, + ValidatorDstAddress: valDstAddr, Entries: []RedelegationEntry{ NewRedelegationEntry(creationHeight, minTime, balance, sharesDst, id), }, @@ -303,13 +327,13 @@ func (d DelegationResponses) String() (out string) { // NewRedelegationResponse crates a new RedelegationEntryResponse instance. func NewRedelegationResponse( - delegatorAddr sdk.AccAddress, validatorSrc, validatorDst sdk.ValAddress, entries []RedelegationEntryResponse, + delegatorAddr, validatorSrc, validatorDst string, entries []RedelegationEntryResponse, ) RedelegationResponse { return RedelegationResponse{ Redelegation: Redelegation{ - DelegatorAddress: delegatorAddr.String(), - ValidatorSrcAddress: validatorSrc.String(), - ValidatorDstAddress: validatorDst.String(), + DelegatorAddress: delegatorAddr, + ValidatorSrcAddress: validatorSrc, + ValidatorDstAddress: validatorDst, }, Entries: entries, } From b3a93e12bef15b1b16e67ce2607df25d844b2669 Mon Sep 17 00:00:00 2001 From: Devon Bear Date: Mon, 24 Jul 2023 01:07:23 +0200 Subject: [PATCH 06/12] revert change --- tests/e2e/tx/service_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/e2e/tx/service_test.go b/tests/e2e/tx/service_test.go index 2a0a820a75b9..2014d44bb288 100644 --- a/tests/e2e/tx/service_test.go +++ b/tests/e2e/tx/service_test.go @@ -75,7 +75,7 @@ func (s *E2ETestSuite) SetupSuite() { sdk.NewCoins( sdk.NewCoin(s.cfg.BondDenom, math.NewInt(10)), ), - addresscodec.NewBech32Codec("cosmosvaloper"), + addresscodec.NewBech32Codec("cosmos"), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, math.NewInt(10))).String()), @@ -93,7 +93,7 @@ func (s *E2ETestSuite) SetupSuite() { sdk.NewCoins( sdk.NewCoin(s.cfg.BondDenom, math.NewInt(1)), ), - addresscodec.NewBech32Codec("cosmosvaloper"), + addresscodec.NewBech32Codec("cosmos"), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s", flags.FlagOffline), fmt.Sprintf("--%s=0", flags.FlagAccountNumber), From e4e0eb3ac0440aff8a49afd028de8a28911f713d Mon Sep 17 00:00:00 2001 From: Marko Date: Mon, 24 Jul 2023 11:20:40 +0200 Subject: [PATCH 07/12] Update tests/e2e/authz/tx.go Co-authored-by: Julien Robert --- tests/e2e/authz/tx.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/authz/tx.go b/tests/e2e/authz/tx.go index d43714b34bad..c365fb1e409c 100644 --- a/tests/e2e/authz/tx.go +++ b/tests/e2e/authz/tx.go @@ -172,7 +172,7 @@ var ( ) func execDelegate(val *network.Validator, args []string) (testutil.BufferWriter, error) { - cmd := stakingcli.NewDelegateCmd(addresscodec.NewBech32Codec("cosmos")) + cmd := stakingcli.NewDelegateCmd(addresscodec.NewBech32Codec("cosmosvaloper")) clientCtx := val.ClientCtx return clitestutil.ExecTestCLICmd(clientCtx, cmd, args) } From d18729d2b35998801b0ad7e0bac6d4f3f18b5d6e Mon Sep 17 00:00:00 2001 From: Marko Date: Mon, 24 Jul 2023 11:20:51 +0200 Subject: [PATCH 08/12] Update tests/e2e/staking/suite.go Co-authored-by: Julien Robert --- tests/e2e/staking/suite.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/staking/suite.go b/tests/e2e/staking/suite.go index 1e4ee3469df2..b5b8129e6221 100644 --- a/tests/e2e/staking/suite.go +++ b/tests/e2e/staking/suite.go @@ -115,7 +115,7 @@ func (s *E2ETestSuite) TestBlockResults() { require.NoError(s.network.WaitForNextBlock()) // Use CLI to create a delegation from the new account to validator `val`. - cmd := cli.NewDelegateCmd(addresscodec.NewBech32Codec("cosmos")) + cmd := cli.NewDelegateCmd(addresscodec.NewBech32Codec("cosmosvaloper")) _, err = clitestutil.ExecTestCLICmd(val.ClientCtx, cmd, []string{ val.ValAddress.String(), sdk.NewCoin(s.cfg.BondDenom, math.NewInt(150)).String(), From b9ff556f9a5413ae1fdea7f735db11db45388df0 Mon Sep 17 00:00:00 2001 From: Marko Date: Mon, 24 Jul 2023 11:21:12 +0200 Subject: [PATCH 09/12] Update tests/e2e/staking/test_helpers.go Co-authored-by: Julien Robert --- tests/e2e/staking/test_helpers.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/staking/test_helpers.go b/tests/e2e/staking/test_helpers.go index baae411b1f3e..f58592cab5c7 100644 --- a/tests/e2e/staking/test_helpers.go +++ b/tests/e2e/staking/test_helpers.go @@ -32,7 +32,7 @@ func MsgRedelegateExec(clientCtx client.Context, from, src, dst, amount fmt.Stri args = append(args, extraArgs...) args = append(args, commonArgs...) - return clitestutil.ExecTestCLICmd(clientCtx, stakingcli.NewRedelegateCmd(addresscodec.NewBech32Codec("cosmos")), args) + return clitestutil.ExecTestCLICmd(clientCtx, stakingcli.NewRedelegateCmd(addresscodec.NewBech32Codec("cosmosvaloper")), args) } // MsgUnbondExec creates a unbond message. From 18808a88263db36fab2dcebf7cea3a8ba1bac2a4 Mon Sep 17 00:00:00 2001 From: Marko Date: Mon, 24 Jul 2023 11:21:28 +0200 Subject: [PATCH 10/12] Update tests/e2e/staking/test_helpers.go Co-authored-by: Julien Robert --- tests/e2e/staking/test_helpers.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/staking/test_helpers.go b/tests/e2e/staking/test_helpers.go index f58592cab5c7..e29715789a63 100644 --- a/tests/e2e/staking/test_helpers.go +++ b/tests/e2e/staking/test_helpers.go @@ -48,5 +48,5 @@ func MsgUnbondExec(clientCtx client.Context, from, valAddress, args = append(args, commonArgs...) args = append(args, extraArgs...) - return clitestutil.ExecTestCLICmd(clientCtx, stakingcli.NewUnbondCmd(addresscodec.NewBech32Codec("cosmos")), args) + return clitestutil.ExecTestCLICmd(clientCtx, stakingcli.NewUnbondCmd(addresscodec.NewBech32Codec("cosmosvaloper")), args) } From 1f1cb747b5d3c017b79ebcba212d7433ceca081d Mon Sep 17 00:00:00 2001 From: Marko Date: Mon, 24 Jul 2023 11:21:36 +0200 Subject: [PATCH 11/12] Update x/genutil/collect_test.go Co-authored-by: Julien Robert --- x/genutil/collect_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/genutil/collect_test.go b/x/genutil/collect_test.go index 5b8acac7656e..fa18cd6f5882 100644 --- a/x/genutil/collect_test.go +++ b/x/genutil/collect_test.go @@ -61,7 +61,7 @@ func TestCollectTxsHandlesDirectories(t *testing.T) { dnc := &doNothingUnmarshalJSON{cdc} if _, _, err := genutil.CollectTxs(dnc, txDecoder, "foo", testDir, genesis, balItr, types.DefaultMessageValidator, - addresscodec.NewBech32Codec("cosmos")); err != nil { + addresscodec.NewBech32Codec("cosmosvaloper")); err != nil { t.Fatal(err) } } From b8944d7dba12e40c00dc3f8c833d8ea2beb428f0 Mon Sep 17 00:00:00 2001 From: Marko Date: Mon, 24 Jul 2023 11:58:07 +0200 Subject: [PATCH 12/12] Update testutil/network/util.go Co-authored-by: Julien Robert --- testutil/network/util.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testutil/network/util.go b/testutil/network/util.go index 17eb64c0c05d..9615751600b9 100644 --- a/testutil/network/util.go +++ b/testutil/network/util.go @@ -142,7 +142,7 @@ func collectGenFiles(cfg Config, vals []*Validator, outputDir string) error { } appState, err := genutil.GenAppStateFromConfig(cfg.Codec, cfg.TxConfig, - cmtCfg, initCfg, appGenesis, banktypes.GenesisBalancesIterator{}, genutiltypes.DefaultMessageValidator, cfg.TxConfig.SigningContext().AddressCodec()) + cmtCfg, initCfg, appGenesis, banktypes.GenesisBalancesIterator{}, genutiltypes.DefaultMessageValidator, cfg.TxConfig.SigningContext().ValidatorAddressCodec()) if err != nil { return err }