testnet custom algorithm (#441)

* testnet custom algorithm

* minor fixes
This commit is contained in:
Federico Kunze 2020-08-12 16:25:57 +02:00 committed by GitHub
parent a243f43fe2
commit a2a5799d13
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 45 additions and 7 deletions

View File

@ -34,6 +34,10 @@ func KeyCommands() *cobra.Command {
// support adding Ethereum supported keys // support adding Ethereum supported keys
addCmd := clientkeys.AddKeyCommand() addCmd := clientkeys.AddKeyCommand()
// update the default signing algorithm value to "eth_secp256k1"
algoFlag := addCmd.Flag("algo")
algoFlag.DefValue = string(crypto.EthSecp256k1)
addCmd.RunE = runAddCmd addCmd.RunE = runAddCmd
cmd.AddCommand( cmd.AddCommand(

View File

@ -48,6 +48,7 @@ var (
flagNodeDaemonHome = "node-daemon-home" flagNodeDaemonHome = "node-daemon-home"
flagNodeCLIHome = "node-cli-home" flagNodeCLIHome = "node-cli-home"
flagStartingIPAddress = "starting-ip-address" flagStartingIPAddress = "starting-ip-address"
flagKeyAlgo = "algo"
) )
const nodeDirPerm = 0755 const nodeDirPerm = 0755
@ -77,10 +78,11 @@ Note, strict routability for addresses is turned off in the config file.`,
nodeCLIHome, _ := cmd.Flags().GetString(flagNodeCLIHome) nodeCLIHome, _ := cmd.Flags().GetString(flagNodeCLIHome)
startingIPAddress, _ := cmd.Flags().GetString(flagStartingIPAddress) startingIPAddress, _ := cmd.Flags().GetString(flagStartingIPAddress)
numValidators, _ := cmd.Flags().GetInt(flagNumValidators) numValidators, _ := cmd.Flags().GetInt(flagNumValidators)
algo, _ := cmd.Flags().GetString(flagKeyAlgo)
return InitTestnet( return InitTestnet(
cmd, config, cdc, mbm, genBalIterator, outputDir, chainID, minGasPrices, cmd, config, cdc, mbm, genBalIterator, outputDir, chainID, minGasPrices,
nodeDirPrefix, nodeDaemonHome, nodeCLIHome, startingIPAddress, keyringBackend, numValidators, nodeDirPrefix, nodeDaemonHome, nodeCLIHome, startingIPAddress, keyringBackend, algo, numValidators,
) )
}, },
} }
@ -94,16 +96,27 @@ Note, strict routability for addresses is turned off in the config file.`,
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", types.DenomDefault), "Minimum gas prices to accept for transactions; All fees in a tx must meet this minimum (e.g. 0.01photon,0.001stake)") cmd.Flags().String(server.FlagMinGasPrices, fmt.Sprintf("0.000006%s", types.DenomDefault), "Minimum gas prices to accept for transactions; All fees in a tx must meet this minimum (e.g. 0.01photon,0.001stake)")
cmd.Flags().String(flags.FlagKeyringBackend, flags.DefaultKeyringBackend, "Select keyring's backend (os|file|test)") cmd.Flags().String(flags.FlagKeyringBackend, flags.DefaultKeyringBackend, "Select keyring's backend (os|file|test)")
cmd.Flags().String(flagKeyAlgo, string(crypto.EthSecp256k1), "Key signing algorithm to generate keys for")
return cmd return cmd
} }
// InitTestnet initializes the testnet configuration // InitTestnet initializes the testnet configuration
func InitTestnet( func InitTestnet(
cmd *cobra.Command, config *tmconfig.Config, cdc *codec.Codec, cmd *cobra.Command,
mbm module.BasicManager, genBalIterator banktypes.GenesisBalancesIterator, config *tmconfig.Config,
outputDir, chainID, minGasPrices, nodeDirPrefix, nodeDaemonHome, cdc *codec.Codec,
nodeCLIHome, startingIPAddress, keyringBackend string, numValidators int, mbm module.BasicManager,
genBalIterator banktypes.GenesisBalancesIterator,
outputDir,
chainID,
minGasPrices,
nodeDirPrefix,
nodeDaemonHome,
nodeCLIHome,
startingIPAddress,
keyringBackend,
algo string,
numValidators int,
) error { ) error {
if chainID == "" { if chainID == "" {
@ -176,7 +189,7 @@ func InitTestnet(
) )
keyPass := clientkeys.DefaultKeyPass keyPass := clientkeys.DefaultKeyPass
addr, secret, err := server.GenerateSaveCoinKey(kb, nodeDirName, keyPass, true) addr, secret, err := GenerateSaveCoinKey(kb, nodeDirName, keyPass, true, keyring.SigningAlgo(algo))
if err != nil { if err != nil {
_ = os.RemoveAll(outputDir) _ = os.RemoveAll(outputDir)
return err return err
@ -323,6 +336,27 @@ func initGenFiles(
return nil return nil
} }
// GenerateSaveCoinKey returns the address of a public key, along with the secret
// phrase to recover the private key.
func GenerateSaveCoinKey(keybase keyring.Keybase, keyName, keyPass string, overwrite bool, algo keyring.SigningAlgo) (sdk.AccAddress, string, error) {
// ensure no overwrite
if !overwrite {
_, err := keybase.Get(keyName)
if err == nil {
return sdk.AccAddress([]byte{}), "", fmt.Errorf(
"key already exists, overwrite is disabled")
}
}
// generate a private key, with recovery phrase
info, secret, err := keybase.CreateMnemonic(keyName, keyring.English, keyPass, algo)
if err != nil {
return sdk.AccAddress([]byte{}), "", err
}
return sdk.AccAddress(info.GetPubKey().Address()), secret, nil
}
func collectGenFiles( func collectGenFiles(
cdc *codec.Codec, config *tmconfig.Config, chainID string, cdc *codec.Codec, config *tmconfig.Config, chainID string,
nodeIDs []string, valPubKeys []tmcrypto.PubKey, nodeIDs []string, valPubKeys []tmcrypto.PubKey,