cmd/lncli/commands: ask for recovery window after restore seed

This commit is contained in:
Conner Fromknecht 2018-03-26 14:15:04 -07:00
parent a2fdd8593d
commit 92a2ba163e
No known key found for this signature in database
GPG Key ID: 39DE78FBE6ACB0EF

@ -35,6 +35,8 @@ import (
// TODO(roasbeef): expose all fee conf targets
const defaultRecoveryWindow int32 = 250
func printJSON(resp interface{}) {
b, err := json.Marshal(resp)
if err != nil {
@ -1132,6 +1134,7 @@ mnemonicCheck:
var (
cipherSeedMnemonic []string
aezeedPass []byte
recoveryWindow int32
)
if hasMnemonic {
// We'll now prompt the user to enter in their 24-word
@ -1170,7 +1173,37 @@ mnemonicCheck:
aezeedPass = []byte(passphrase)
fmt.Println()
for {
fmt.Println()
fmt.Printf("Input an optional address look-ahead "+
"used to scan for used keys (default %d): ",
defaultRecoveryWindow)
reader := bufio.NewReader(os.Stdin)
answer, err := reader.ReadString('\n')
if err != nil {
return err
}
fmt.Println()
answer = strings.TrimSpace(answer)
if len(answer) == 0 {
recoveryWindow = defaultRecoveryWindow
break
}
lookAhead, err := strconv.Atoi(answer)
if err != nil {
fmt.Println("Unable to parse recovery "+
"window: %v", err)
continue
}
recoveryWindow = int32(lookAhead)
break
}
} else {
// Otherwise, if the user doesn't have a mnemonic that they
// want to use, we'll generate a fresh one with the GenSeed
@ -1247,6 +1280,7 @@ mnemonicCheck:
WalletPassword: pw1,
CipherSeedMnemonic: cipherSeedMnemonic,
AezeedPassphrase: aezeedPass,
RecoveryWindow: recoveryWindow,
}
if _, err := client.InitWallet(ctxb, req); err != nil {
return err
@ -1265,6 +1299,16 @@ var unlockCommand = cli.Command{
able to carry out its duties. An exception is if a user is running with
--noencryptwallet, then a default passphrase will be used.
`,
Flags: []cli.Flag{
cli.IntFlag{
Name: "recovery_window",
Usage: "address lookahead to resume recovery rescan, " +
"value should be non-zero -- To recover all " +
"funds, this should be greater than the " +
"maximum number of consecutive, unused " +
"addresses ever generated by the wallet.",
},
},
Action: actionDecorator(unlock),
}
@ -1280,8 +1324,26 @@ func unlock(ctx *cli.Context) error {
}
fmt.Println()
args := ctx.Args()
// Parse the optional recovery window if it is specified. By default,
// the recovery window will be 0, indicating no lookahead should be
// used.
var recoveryWindow int32
switch {
case ctx.IsSet("recovery_window"):
recoveryWindow = int32(ctx.Int64("recovery_window"))
case args.Present():
window, err := strconv.ParseInt(args.First(), 10, 64)
if err != nil {
return err
}
recoveryWindow = int32(window)
}
req := &lnrpc.UnlockWalletRequest{
WalletPassword: pw,
RecoveryWindow: recoveryWindow,
}
_, err = client.UnlockWallet(ctxb, req)
if err != nil {