mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-07-12 22:22:36 +02:00
Merge pull request #9605 from yyforyongyu/fix-unlock-wallet
cmd: fix error parsed from status
This commit is contained in:
@ -251,41 +251,47 @@ func printModifiedProtoJSON(resp proto.Message) {
|
|||||||
// to command actions.
|
// to command actions.
|
||||||
func actionDecorator(f func(*cli.Context) error) func(*cli.Context) error {
|
func actionDecorator(f func(*cli.Context) error) func(*cli.Context) error {
|
||||||
return func(c *cli.Context) error {
|
return func(c *cli.Context) error {
|
||||||
if err := f(c); err != nil {
|
err := f(c)
|
||||||
s, ok := status.FromError(err)
|
|
||||||
|
|
||||||
// If it's a command for the UnlockerService (like
|
// Exit early if there's no error.
|
||||||
// 'create' or 'unlock') but the wallet is already
|
if err == nil {
|
||||||
// unlocked, then these methods aren't recognized any
|
return nil
|
||||||
// more because this service is shut down after
|
}
|
||||||
// successful unlock. That's why the code
|
|
||||||
// 'Unimplemented' means something different for these
|
|
||||||
// two commands.
|
|
||||||
if s.Code() == codes.Unimplemented &&
|
|
||||||
(c.Command.Name == "create" ||
|
|
||||||
c.Command.Name == "unlock" ||
|
|
||||||
c.Command.Name == "changepassword" ||
|
|
||||||
c.Command.Name == "createwatchonly") {
|
|
||||||
|
|
||||||
return fmt.Errorf("Wallet is already unlocked")
|
// Try to parse the Status representatio from this error.
|
||||||
}
|
s, ok := status.FromError(err)
|
||||||
|
|
||||||
// lnd might be active, but not possible to contact
|
// If this cannot be represented by a Status, exit early.
|
||||||
// using RPC if the wallet is encrypted. If we get
|
if !ok {
|
||||||
// error code Unimplemented, it means that lnd is
|
|
||||||
// running, but the RPC server is not active yet (only
|
|
||||||
// WalletUnlocker server active) and most likely this
|
|
||||||
// is because of an encrypted wallet.
|
|
||||||
if ok && s.Code() == codes.Unimplemented {
|
|
||||||
return fmt.Errorf("Wallet is encrypted. " +
|
|
||||||
"Please unlock using 'lncli unlock', " +
|
|
||||||
"or set password using 'lncli create'" +
|
|
||||||
" if this is the first time starting " +
|
|
||||||
"lnd.")
|
|
||||||
}
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
|
||||||
|
// If it's a command for the UnlockerService (like 'create' or
|
||||||
|
// 'unlock') but the wallet is already unlocked, then these
|
||||||
|
// methods aren't recognized any more because this service is
|
||||||
|
// shut down after successful unlock.
|
||||||
|
if s.Code() == codes.Unknown &&
|
||||||
|
(c.Command.Name == "create" ||
|
||||||
|
c.Command.Name == "unlock" ||
|
||||||
|
c.Command.Name == "changepassword" ||
|
||||||
|
c.Command.Name == "createwatchonly") {
|
||||||
|
|
||||||
|
return errors.New("wallet is already unlocked")
|
||||||
|
}
|
||||||
|
|
||||||
|
// lnd might be active, but not possible to contact using RPC if
|
||||||
|
// the wallet is encrypted. If we get error code Unknown, it
|
||||||
|
// means that lnd is running, but the RPC server is not active
|
||||||
|
// yet (only WalletUnlocker server active) and most likely this
|
||||||
|
// is because of an encrypted wallet.
|
||||||
|
if s.Code() == codes.Unknown {
|
||||||
|
return errors.New("wallet is encrypted - please " +
|
||||||
|
"unlock using 'lncli unlock', or set " +
|
||||||
|
"password using 'lncli create' if this is " +
|
||||||
|
"the first time starting lnd")
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.Err()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -236,6 +236,12 @@
|
|||||||
|
|
||||||
## lncli Updates
|
## lncli Updates
|
||||||
|
|
||||||
|
* [Fixed](https://github.com/lightningnetwork/lnd/pull/9605) a case where
|
||||||
|
inaccurate error message is displayed. Previously, when the `lnd` is built
|
||||||
|
without with a given RPC service yet the `cli` does, running a command to
|
||||||
|
access the RPC server would give an error saying the wallet is encrypted. This
|
||||||
|
is now fixed to show specifically which RPC server is missing.
|
||||||
|
|
||||||
## Code Health
|
## Code Health
|
||||||
|
|
||||||
* [Add retry logic](https://github.com/lightningnetwork/lnd/pull/8381) for
|
* [Add retry logic](https://github.com/lightningnetwork/lnd/pull/8381) for
|
||||||
|
Reference in New Issue
Block a user