multiversx / mx-sdk-py-cli

Python Command Line Tools and SDK for interacting with the MultiversX blockchain and dApps.
Other
35 stars 36 forks source link

Recurrent errors when signing with Ledger (MacOS) #396

Open andreibancioiu opened 6 months ago

andreibancioiu commented 6 months ago
/home/user/multiversx-sdk/mxpy-venv/lib/python3.11/site-packages/ledgercomm/interfaces/hid_device.py", line 137, in recv
    data_chunk: bytes = bytes(self.device.read(64 + 1))
                              ^^^^^^^^^^^^^^^^^^^^^^^^
  File "hid.pyx", line 234, in hid.device.read
OSError: read error

Signing works upon a few retries.

mihaieremia commented 6 months ago

I also got this error right after I signed on the device


  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/Users/truststaking/multiversx-sdk/mxpy-venv/lib/python3.11/site-packages/multiversx_sdk_cli/cli.py", line 122, in <module>
    ret = main(sys.argv[1:])
          ^^^^^^^^^^^^^^^^^^
  File "/Users/truststaking/multiversx-sdk/mxpy-venv/lib/python3.11/site-packages/multiversx_sdk_cli/cli.py", line 29, in main
    _do_main(cli_args)
  File "/Users/truststaking/multiversx-sdk/mxpy-venv/lib/python3.11/site-packages/multiversx_sdk_cli/cli.py", line 56, in _do_main
    args.func(args)
  File "/Users/truststaking/multiversx-sdk/mxpy-venv/lib/python3.11/site-packages/multiversx_sdk_cli/cli_contracts.py", line 377, in upgrade
    tx = contract.prepare_upgrade_transaction(sender, args)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/truststaking/multiversx-sdk/mxpy-venv/lib/python3.11/site-packages/multiversx_sdk_cli/contracts.py", line 148, in prepare_upgrade_transaction
    tx.signature = bytes.fromhex(owner.sign_transaction(tx))
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/truststaking/multiversx-sdk/mxpy-venv/lib/python3.11/site-packages/multiversx_sdk_cli/accounts.py", line 103, in sign_transaction
    signature = do_sign_transaction_with_ledger(
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/truststaking/multiversx-sdk/mxpy-venv/lib/python3.11/site-packages/multiversx_sdk_cli/ledger/ledger_functions.py", line 21, in do_sign_transaction_with_ledger
    signature = ledger_handler.sign_transaction(tx_payload, sign_using_hash)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/truststaking/multiversx-sdk/mxpy-venv/lib/python3.11/site-packages/multiversx_sdk_cli/ledger/ledger_app_handler.py", line 79, in sign_transaction
    return self._do_sign(tx_bytes, ins_signing_method)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/truststaking/multiversx-sdk/mxpy-venv/lib/python3.11/site-packages/multiversx_sdk_cli/ledger/ledger_app_handler.py", line 115, in _do_sign
    return self.get_signature_from_apdus(apdus)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/truststaking/multiversx-sdk/mxpy-venv/lib/python3.11/site-packages/multiversx_sdk_cli/ledger/ledger_app_handler.py", line 127, in get_signature_from_apdus
    sw, response = self.transport.recv()
                   ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/truststaking/multiversx-sdk/mxpy-venv/lib/python3.11/site-packages/ledgercomm/transport.py", line 188, in recv
    return self.com.recv()
           ^^^^^^^^^^^^^^^
  File "/Users/truststaking/multiversx-sdk/mxpy-venv/lib/python3.11/site-packages/ledgercomm/interfaces/hid_device.py", line 142, in recv
    assert data_chunk[3:5] == seq_idx.to_bytes(2, byteorder="big")```
andreibancioiu commented 6 months ago

@mihaieremia, thank you for the provided details :pray:

PyPi package does not yet contain v1.2.1 (a patch related to newer versions of MacOS), as of January 2024.

Temporary workaround:

. "/home/andrei/multiversx-sdk/mxpy-venv/bin/activate"
pip3 install git+https://github.com/LedgerHQ/ledgercomm@v1.2.1

Then, do a quick check:

mxpy --verbose ledger version

The output should include something like:

DEBUG    ledgercomm: hid.enumerate(), devices: [...] 

This means that ledgercomm[hid] v1.2.1 is installed correctly.

Related to:

andreibancioiu commented 6 months ago

Reinstalling mxpy (which reinstalls ledgercomm[hid]) should fix the issue :pray: