Skip to content

Commit 0d5412a

Browse files
committed
Improve error handle for Ledger devices
1 parent 7fd2cea commit 0d5412a

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

hwilib/devices/ledger.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
LegacyClient,
4040
TransportClient,
4141
)
42+
from .ledger_bitcoin.client_base import ApduException
4243
from .ledger_bitcoin.exception import NotSupportedError
4344
from .ledger_bitcoin.wallet import (
4445
MultisigWallet,
@@ -118,6 +119,18 @@ def check_keypath(key_path: str) -> bool:
118119
AddressType.LEGACY: 3,
119120
}
120121

122+
def handle_chip_exception(e, func_name: str) -> bool:
123+
if e.sw in bad_args:
124+
raise BadArgumentError('Bad argument')
125+
elif e.sw == 0x6F00: # BTCHIP_SW_TECHNICAL_PROBLEM
126+
raise DeviceFailureError(e.message)
127+
elif e.sw == 0x6FAA: # BTCHIP_SW_HALTED
128+
raise DeviceConnectionError('Device is asleep')
129+
elif e.sw in cancels:
130+
raise ActionCanceledError('{} canceled'.format(func_name))
131+
else:
132+
raise e
133+
121134
def ledger_exception(f: Callable[..., Any]) -> Any:
122135
@wraps(f)
123136
def func(*args: Any, **kwargs: Any) -> Any:
@@ -126,16 +139,10 @@ def func(*args: Any, **kwargs: Any) -> Any:
126139
except ValueError as e:
127140
raise BadArgumentError(str(e))
128141
except BTChipException as e:
129-
if e.sw in bad_args:
130-
raise BadArgumentError('Bad argument')
131-
elif e.sw == 0x6F00: # BTCHIP_SW_TECHNICAL_PROBLEM
132-
raise DeviceFailureError(e.message)
133-
elif e.sw == 0x6FAA: # BTCHIP_SW_HALTED
134-
raise DeviceConnectionError('Device is asleep')
135-
elif e.sw in cancels:
136-
raise ActionCanceledError('{} canceled'.format(f.__name__))
137-
else:
138-
raise e
142+
handle_chip_exception(e, f.__name__)
143+
except ApduException as e:
144+
e.message = e.data.decode("utf-8")
145+
handle_chip_exception(e, f.__name__)
139146
return func
140147

141148
# This class extends the HardwareWalletClient for Ledger Nano S and Nano X specific things

0 commit comments

Comments
 (0)