Co-authored-by: Julien Robert <julien@rbrt.fr>
This commit is contained in:
parent
e350809209
commit
cbef7f32f0
|
@ -39,6 +39,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
|
* (cli) [#14655](https://github.com/cosmos/cosmos-sdk/pull/14655) Add a new command to list supported algos.
|
||||||
* (x/genutil,cli) [#15147](https://github.com/cosmos/cosmos-sdk/pull/15147) Add `--initial-height` flag to cli init cmd to provide `genesis.json` with user defined initial block height.
|
* (x/genutil,cli) [#15147](https://github.com/cosmos/cosmos-sdk/pull/15147) Add `--initial-height` flag to cli init cmd to provide `genesis.json` with user defined initial block height.
|
||||||
|
|
||||||
### Improvements
|
### Improvements
|
||||||
|
|
|
@ -73,7 +73,7 @@ const (
|
||||||
FlagOffset = "offset"
|
FlagOffset = "offset"
|
||||||
FlagCountTotal = "count-total"
|
FlagCountTotal = "count-total"
|
||||||
FlagTimeoutHeight = "timeout-height"
|
FlagTimeoutHeight = "timeout-height"
|
||||||
FlagKeyAlgorithm = "algo"
|
FlagKeyType = "key-type"
|
||||||
FlagFeePayer = "fee-payer"
|
FlagFeePayer = "fee-payer"
|
||||||
FlagFeeGranter = "fee-granter"
|
FlagFeeGranter = "fee-granter"
|
||||||
FlagReverse = "reverse"
|
FlagReverse = "reverse"
|
||||||
|
|
|
@ -10,6 +10,7 @@ import (
|
||||||
|
|
||||||
"github.com/cosmos/go-bip39"
|
"github.com/cosmos/go-bip39"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
"github.com/spf13/pflag"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
|
@ -77,7 +78,16 @@ Example:
|
||||||
f.Uint32(flagCoinType, sdk.GetConfig().GetCoinType(), "coin type number for HD derivation")
|
f.Uint32(flagCoinType, sdk.GetConfig().GetCoinType(), "coin type number for HD derivation")
|
||||||
f.Uint32(flagAccount, 0, "Account number for HD derivation (less than equal 2147483647)")
|
f.Uint32(flagAccount, 0, "Account number for HD derivation (less than equal 2147483647)")
|
||||||
f.Uint32(flagIndex, 0, "Address index number for HD derivation (less than equal 2147483647)")
|
f.Uint32(flagIndex, 0, "Address index number for HD derivation (less than equal 2147483647)")
|
||||||
f.String(flags.FlagKeyAlgorithm, string(hd.Secp256k1Type), "Key signing algorithm to generate keys for")
|
f.String(flags.FlagKeyType, string(hd.Secp256k1Type), "Key signing algorithm to generate keys for")
|
||||||
|
|
||||||
|
// support old flags name for backwards compatibility
|
||||||
|
f.SetNormalizeFunc(func(f *pflag.FlagSet, name string) pflag.NormalizedName {
|
||||||
|
if name == "algo" {
|
||||||
|
name = flags.FlagKeyType
|
||||||
|
}
|
||||||
|
|
||||||
|
return pflag.NormalizedName(name)
|
||||||
|
})
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
@ -113,7 +123,7 @@ func runAddCmd(ctx client.Context, cmd *cobra.Command, args []string, inBuf *buf
|
||||||
outputFormat := ctx.OutputFormat
|
outputFormat := ctx.OutputFormat
|
||||||
|
|
||||||
keyringAlgos, _ := kb.SupportedAlgorithms()
|
keyringAlgos, _ := kb.SupportedAlgorithms()
|
||||||
algoStr, _ := cmd.Flags().GetString(flags.FlagKeyAlgorithm)
|
algoStr, _ := cmd.Flags().GetString(flags.FlagKeyType)
|
||||||
algo, err := keyring.NewSigningAlgoFromString(algoStr, keyringAlgos)
|
algo, err := keyring.NewSigningAlgoFromString(algoStr, keyringAlgos)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -55,7 +55,7 @@ func Test_runAddCmdLedgerWithCustomCoinType(t *testing.T) {
|
||||||
fmt.Sprintf("--%s=0", flagIndex),
|
fmt.Sprintf("--%s=0", flagIndex),
|
||||||
fmt.Sprintf("--%s=330", flagCoinType),
|
fmt.Sprintf("--%s=330", flagCoinType),
|
||||||
fmt.Sprintf("--%s=%s", cli.OutputFlag, OutputFormatText),
|
fmt.Sprintf("--%s=%s", cli.OutputFlag, OutputFormatText),
|
||||||
fmt.Sprintf("--%s=%s", flags.FlagKeyAlgorithm, hd.Secp256k1Type),
|
fmt.Sprintf("--%s=%s", flags.FlagKeyType, hd.Secp256k1Type),
|
||||||
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest),
|
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ func Test_runAddCmdLedger(t *testing.T) {
|
||||||
"keyname1",
|
"keyname1",
|
||||||
fmt.Sprintf("--%s=true", flags.FlagUseLedger),
|
fmt.Sprintf("--%s=true", flags.FlagUseLedger),
|
||||||
fmt.Sprintf("--%s=%s", cli.OutputFlag, OutputFormatText),
|
fmt.Sprintf("--%s=%s", cli.OutputFlag, OutputFormatText),
|
||||||
fmt.Sprintf("--%s=%s", flags.FlagKeyAlgorithm, hd.Secp256k1Type),
|
fmt.Sprintf("--%s=%s", flags.FlagKeyType, hd.Secp256k1Type),
|
||||||
fmt.Sprintf("--%s=%d", flagCoinType, sdk.CoinType),
|
fmt.Sprintf("--%s=%d", flagCoinType, sdk.CoinType),
|
||||||
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest),
|
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest),
|
||||||
})
|
})
|
||||||
|
|
|
@ -45,7 +45,7 @@ func Test_runAddCmdBasic(t *testing.T) {
|
||||||
"keyname1",
|
"keyname1",
|
||||||
fmt.Sprintf("--%s=%s", flags.FlagHome, kbHome),
|
fmt.Sprintf("--%s=%s", flags.FlagHome, kbHome),
|
||||||
fmt.Sprintf("--%s=%s", cli.OutputFlag, OutputFormatText),
|
fmt.Sprintf("--%s=%s", cli.OutputFlag, OutputFormatText),
|
||||||
fmt.Sprintf("--%s=%s", flags.FlagKeyAlgorithm, hd.Secp256k1Type),
|
fmt.Sprintf("--%s=%s", flags.FlagKeyType, hd.Secp256k1Type),
|
||||||
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest),
|
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest),
|
||||||
})
|
})
|
||||||
mockIn.Reset("y\n")
|
mockIn.Reset("y\n")
|
||||||
|
@ -58,7 +58,7 @@ func Test_runAddCmdBasic(t *testing.T) {
|
||||||
"keyname2",
|
"keyname2",
|
||||||
fmt.Sprintf("--%s=%s", flags.FlagHome, kbHome),
|
fmt.Sprintf("--%s=%s", flags.FlagHome, kbHome),
|
||||||
fmt.Sprintf("--%s=%s", cli.OutputFlag, OutputFormatText),
|
fmt.Sprintf("--%s=%s", cli.OutputFlag, OutputFormatText),
|
||||||
fmt.Sprintf("--%s=%s", flags.FlagKeyAlgorithm, hd.Secp256k1Type),
|
fmt.Sprintf("--%s=%s", flags.FlagKeyType, hd.Secp256k1Type),
|
||||||
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest),
|
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ func Test_runAddCmdBasic(t *testing.T) {
|
||||||
"keyname4",
|
"keyname4",
|
||||||
fmt.Sprintf("--%s=%s", flags.FlagHome, kbHome),
|
fmt.Sprintf("--%s=%s", flags.FlagHome, kbHome),
|
||||||
fmt.Sprintf("--%s=%s", cli.OutputFlag, OutputFormatText),
|
fmt.Sprintf("--%s=%s", cli.OutputFlag, OutputFormatText),
|
||||||
fmt.Sprintf("--%s=%s", flags.FlagKeyAlgorithm, hd.Secp256k1Type),
|
fmt.Sprintf("--%s=%s", flags.FlagKeyType, hd.Secp256k1Type),
|
||||||
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest),
|
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ func Test_runAddCmdBasic(t *testing.T) {
|
||||||
fmt.Sprintf("--%s=%s", flags.FlagHome, kbHome),
|
fmt.Sprintf("--%s=%s", flags.FlagHome, kbHome),
|
||||||
fmt.Sprintf("--%s=true", flags.FlagDryRun),
|
fmt.Sprintf("--%s=true", flags.FlagDryRun),
|
||||||
fmt.Sprintf("--%s=%s", cli.OutputFlag, OutputFormatText),
|
fmt.Sprintf("--%s=%s", cli.OutputFlag, OutputFormatText),
|
||||||
fmt.Sprintf("--%s=%s", flags.FlagKeyAlgorithm, hd.Secp256k1Type),
|
fmt.Sprintf("--%s=%s", flags.FlagKeyType, hd.Secp256k1Type),
|
||||||
})
|
})
|
||||||
|
|
||||||
require.NoError(t, cmd.ExecuteContext(ctx))
|
require.NoError(t, cmd.ExecuteContext(ctx))
|
||||||
|
@ -247,7 +247,7 @@ func TestAddRecoverFileBackend(t *testing.T) {
|
||||||
"keyname1",
|
"keyname1",
|
||||||
fmt.Sprintf("--%s=%s", flags.FlagHome, kbHome),
|
fmt.Sprintf("--%s=%s", flags.FlagHome, kbHome),
|
||||||
fmt.Sprintf("--%s=%s", cli.OutputFlag, OutputFormatText),
|
fmt.Sprintf("--%s=%s", cli.OutputFlag, OutputFormatText),
|
||||||
fmt.Sprintf("--%s=%s", flags.FlagKeyAlgorithm, hd.Secp256k1Type),
|
fmt.Sprintf("--%s=%s", flags.FlagKeyType, hd.Secp256k1Type),
|
||||||
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendFile),
|
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendFile),
|
||||||
fmt.Sprintf("--%s", flagRecover),
|
fmt.Sprintf("--%s", flagRecover),
|
||||||
})
|
})
|
||||||
|
|
|
@ -48,3 +48,23 @@ func runListCmd(cmd *cobra.Command, _ []string) error {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ListKeyTypesCmd lists all key types.
|
||||||
|
func ListKeyTypesCmd() *cobra.Command {
|
||||||
|
return &cobra.Command{
|
||||||
|
Use: "list-key-types",
|
||||||
|
Short: "List all key types",
|
||||||
|
Long: `Return a list of all supported key types (also known as algos)`,
|
||||||
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
clientCtx, err := client.GetClientQueryContext(cmd)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd.Println("Supported key types/algos:")
|
||||||
|
keyring, _ := clientCtx.Keyring.SupportedAlgorithms()
|
||||||
|
cmd.Printf("%+q\n", keyring)
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -3,9 +3,10 @@ package keys
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"gotest.tools/v3/assert"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
|
@ -13,6 +14,7 @@ import (
|
||||||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||||
"github.com/cosmos/cosmos-sdk/testutil"
|
"github.com/cosmos/cosmos-sdk/testutil"
|
||||||
|
clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli"
|
||||||
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
)
|
)
|
||||||
|
@ -37,14 +39,14 @@ func Test_runListCmd(t *testing.T) {
|
||||||
mockIn := testutil.ApplyMockIODiscardOutErr(cmd)
|
mockIn := testutil.ApplyMockIODiscardOutErr(cmd)
|
||||||
cdc := clienttestutil.MakeTestCodec(t)
|
cdc := clienttestutil.MakeTestCodec(t)
|
||||||
kb, err := keyring.New(sdk.KeyringServiceName(), keyring.BackendTest, kbHome2, mockIn, cdc)
|
kb, err := keyring.New(sdk.KeyringServiceName(), keyring.BackendTest, kbHome2, mockIn, cdc)
|
||||||
require.NoError(t, err)
|
assert.NilError(t, err)
|
||||||
|
|
||||||
clientCtx := client.Context{}.WithKeyring(kb)
|
clientCtx := client.Context{}.WithKeyring(kb)
|
||||||
ctx := context.WithValue(context.Background(), client.ClientContextKey, &clientCtx)
|
ctx := context.WithValue(context.Background(), client.ClientContextKey, &clientCtx)
|
||||||
|
|
||||||
path := "" // sdk.GetConfig().GetFullBIP44Path()
|
path := "" // sdk.GetConfig().GetFullBIP44Path()
|
||||||
_, err = kb.NewAccount("something", testdata.TestMnemonic, "", path, hd.Secp256k1)
|
_, err = kb.NewAccount("something", testdata.TestMnemonic, "", path, hd.Secp256k1)
|
||||||
require.NoError(t, err)
|
assert.NilError(t, err)
|
||||||
|
|
||||||
t.Cleanup(cleanupKeys(t, kb, "something"))
|
t.Cleanup(cleanupKeys(t, kb, "something"))
|
||||||
|
|
||||||
|
@ -79,3 +81,22 @@ func Test_runListCmd(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_runListKeyTypeCmd(t *testing.T) {
|
||||||
|
cmd := ListKeyTypesCmd()
|
||||||
|
|
||||||
|
cdc := clienttestutil.MakeTestCodec(t)
|
||||||
|
kbHome := t.TempDir()
|
||||||
|
mockIn := testutil.ApplyMockIODiscardOutErr(cmd)
|
||||||
|
|
||||||
|
kb, err := keyring.New(sdk.KeyringServiceName(), keyring.BackendTest, kbHome, mockIn, cdc)
|
||||||
|
assert.NilError(t, err)
|
||||||
|
|
||||||
|
clientCtx := client.Context{}.
|
||||||
|
WithKeyringDir(kbHome).
|
||||||
|
WithKeyring(kb)
|
||||||
|
|
||||||
|
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{})
|
||||||
|
assert.NilError(t, err)
|
||||||
|
assert.Assert(t, strings.Contains(out.String(), string(hd.Secp256k1Type)))
|
||||||
|
}
|
||||||
|
|
|
@ -43,6 +43,7 @@ The pass backend requires GnuPG: https://gnupg.org/
|
||||||
ExportKeyCommand(),
|
ExportKeyCommand(),
|
||||||
ImportKeyCommand(),
|
ImportKeyCommand(),
|
||||||
ListKeysCmd(),
|
ListKeysCmd(),
|
||||||
|
ListKeyTypesCmd(),
|
||||||
ShowKeysCmd(),
|
ShowKeysCmd(),
|
||||||
DeleteKeyCommand(),
|
DeleteKeyCommand(),
|
||||||
RenameKeyCommand(),
|
RenameKeyCommand(),
|
||||||
|
|
|
@ -3,13 +3,13 @@ package keys
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"gotest.tools/v3/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCommands(t *testing.T) {
|
func TestCommands(t *testing.T) {
|
||||||
rootCommands := Commands("home")
|
rootCommands := Commands("home")
|
||||||
assert.NotNil(t, rootCommands)
|
assert.Assert(t, rootCommands != nil)
|
||||||
|
|
||||||
// Commands are registered
|
// Commands are registered
|
||||||
assert.Equal(t, 10, len(rootCommands.Commands()))
|
assert.Equal(t, 11, len(rootCommands.Commands()))
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ import (
|
||||||
"github.com/cometbft/cometbft/types"
|
"github.com/cometbft/cometbft/types"
|
||||||
tmtime "github.com/cometbft/cometbft/types/time"
|
tmtime "github.com/cometbft/cometbft/types/time"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
"github.com/spf13/pflag"
|
||||||
|
|
||||||
"cosmossdk.io/math"
|
"cosmossdk.io/math"
|
||||||
|
|
||||||
|
@ -81,7 +82,16 @@ func addTestnetFlagsToCmd(cmd *cobra.Command) {
|
||||||
cmd.Flags().StringP(flagOutputDir, "o", "./.testnets", "Directory to store initialization data for the testnet")
|
cmd.Flags().StringP(flagOutputDir, "o", "./.testnets", "Directory to store initialization data for the testnet")
|
||||||
cmd.Flags().String(flags.FlagChainID, "", "genesis file chain-id, if left blank will be randomly created")
|
cmd.Flags().String(flags.FlagChainID, "", "genesis file chain-id, if left blank will be randomly created")
|
||||||
cmd.Flags().String(server.FlagMinGasPrices, fmt.Sprintf("0.000006%s", sdk.DefaultBondDenom), "Minimum gas prices to accept for transactions; All fees in a tx must meet this minimum (e.g. 0.01photino,0.001stake)")
|
cmd.Flags().String(server.FlagMinGasPrices, fmt.Sprintf("0.000006%s", sdk.DefaultBondDenom), "Minimum gas prices to accept for transactions; All fees in a tx must meet this minimum (e.g. 0.01photino,0.001stake)")
|
||||||
cmd.Flags().String(flags.FlagKeyAlgorithm, string(hd.Secp256k1Type), "Key signing algorithm to generate keys for")
|
cmd.Flags().String(flags.FlagKeyType, string(hd.Secp256k1Type), "Key signing algorithm to generate keys for")
|
||||||
|
|
||||||
|
// support old flags name for backwards compatibility
|
||||||
|
cmd.Flags().SetNormalizeFunc(func(f *pflag.FlagSet, name string) pflag.NormalizedName {
|
||||||
|
if name == "algo" {
|
||||||
|
name = flags.FlagKeyType
|
||||||
|
}
|
||||||
|
|
||||||
|
return pflag.NormalizedName(name)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewTestnetCmd creates a root testnet command with subcommands to run an in-process testnet or initialize
|
// NewTestnetCmd creates a root testnet command with subcommands to run an in-process testnet or initialize
|
||||||
|
@ -135,7 +145,7 @@ Example:
|
||||||
args.nodeDaemonHome, _ = cmd.Flags().GetString(flagNodeDaemonHome)
|
args.nodeDaemonHome, _ = cmd.Flags().GetString(flagNodeDaemonHome)
|
||||||
args.startingIPAddress, _ = cmd.Flags().GetString(flagStartingIPAddress)
|
args.startingIPAddress, _ = cmd.Flags().GetString(flagStartingIPAddress)
|
||||||
args.numValidators, _ = cmd.Flags().GetInt(flagNumValidators)
|
args.numValidators, _ = cmd.Flags().GetInt(flagNumValidators)
|
||||||
args.algo, _ = cmd.Flags().GetString(flags.FlagKeyAlgorithm)
|
args.algo, _ = cmd.Flags().GetString(flags.FlagKeyType)
|
||||||
|
|
||||||
return initTestnetFiles(clientCtx, cmd, config, mbm, genBalIterator, args)
|
return initTestnetFiles(clientCtx, cmd, config, mbm, genBalIterator, args)
|
||||||
},
|
},
|
||||||
|
@ -168,7 +178,7 @@ Example:
|
||||||
args.chainID, _ = cmd.Flags().GetString(flags.FlagChainID)
|
args.chainID, _ = cmd.Flags().GetString(flags.FlagChainID)
|
||||||
args.minGasPrices, _ = cmd.Flags().GetString(server.FlagMinGasPrices)
|
args.minGasPrices, _ = cmd.Flags().GetString(server.FlagMinGasPrices)
|
||||||
args.numValidators, _ = cmd.Flags().GetInt(flagNumValidators)
|
args.numValidators, _ = cmd.Flags().GetInt(flagNumValidators)
|
||||||
args.algo, _ = cmd.Flags().GetString(flags.FlagKeyAlgorithm)
|
args.algo, _ = cmd.Flags().GetString(flags.FlagKeyType)
|
||||||
args.enableLogging, _ = cmd.Flags().GetBool(flagEnableLogging)
|
args.enableLogging, _ = cmd.Flags().GetBool(flagEnableLogging)
|
||||||
args.rpcAddress, _ = cmd.Flags().GetString(flagRPCAddress)
|
args.rpcAddress, _ = cmd.Flags().GetString(flagRPCAddress)
|
||||||
args.apiAddress, _ = cmd.Flags().GetString(flagAPIAddress)
|
args.apiAddress, _ = cmd.Flags().GetString(flagAPIAddress)
|
||||||
|
|
Loading…
Reference in New Issue