mirror of
https://gitlab.com/pulsechaincom/staking-deposit-cli.git
synced 2025-01-10 13:01:22 +00:00
71 lines
2.7 KiB
Python
71 lines
2.7 KiB
Python
import click
|
|
from typing import (
|
|
Any,
|
|
)
|
|
|
|
from eth2deposit.exceptions import ValidationError
|
|
from eth2deposit.key_handling.key_derivation.mnemonic import (
|
|
verify_mnemonic,
|
|
)
|
|
from eth2deposit.utils.constants import (
|
|
WORD_LISTS_PATH,
|
|
)
|
|
from .generate_keys import (
|
|
generate_keys,
|
|
generate_keys_arguments_decorator,
|
|
)
|
|
|
|
|
|
def validate_mnemonic(cts: click.Context, param: Any, mnemonic: str) -> str:
|
|
if verify_mnemonic(mnemonic, WORD_LISTS_PATH):
|
|
return mnemonic
|
|
else:
|
|
raise ValidationError('That is not a valid mnemonic, please check for typos.')
|
|
|
|
|
|
@click.command(
|
|
help='Generate (or recover) keys from an existing mnemonic',
|
|
)
|
|
@click.pass_context
|
|
@click.option(
|
|
'--mnemonic',
|
|
callback=validate_mnemonic,
|
|
help=('The mnemonic that you used to generate your keys. (It is reccomened not to use this argument, and wait for '
|
|
'the CLI to ask you for your mnemonic as otherwise it will appear in your shell history.)'),
|
|
prompt='Please enter your mnemonic separated by spaces (" ")',
|
|
required=True,
|
|
type=str,
|
|
)
|
|
@click.password_option(
|
|
'--mnemonic-password',
|
|
default='',
|
|
help=('This is almost certainly not the argument you are looking for: it is for mnemonic passwords, not keystore '
|
|
'passwords. Providing a password here when you didn\'t use one initially, can result in lost keys (and '
|
|
'therefore funds)! Also note that if you used this tool to generate your mnemonic intially, then you did not '
|
|
'use a mnemonic password. However, if you are certain you used a password to "increase" the security of your '
|
|
'mnemonic, this is where you enter it.'),
|
|
prompt=False,
|
|
)
|
|
@click.option(
|
|
'--validator_start_index',
|
|
confirmation_prompt=True,
|
|
default=0,
|
|
help=('Enter the index (key number) you wish to start generating more keys from. '
|
|
'For example, if you\'ve generated 4 keys in the past, you\'d enter 4 here,'),
|
|
prompt=('Enter the index (key number) you wish to start generating more keys from. '
|
|
'For example, if you\'ve generated 4 keys in the past, you\'d enter 4 here,'),
|
|
type=click.IntRange(0, 2**32 - 1),
|
|
)
|
|
@generate_keys_arguments_decorator
|
|
def existing_mnemonic(ctx: click.Context, mnemonic: str, mnemonic_password: str, **kwargs: Any) -> None:
|
|
if mnemonic_password != '':
|
|
click.clear()
|
|
click.confirm(
|
|
('Are you absolutely certain that you used a mnemonic password? '
|
|
'(This is different from a keystore password!) '
|
|
'Using one when you are not supposed to can result in loss of funds!'),
|
|
abort=True)
|
|
|
|
ctx.obj = {'mnemonic': mnemonic, 'mnemonic_password': mnemonic_password}
|
|
ctx.forward(generate_keys)
|