Help: Why can't I send crypto after reinstalling Algorand Official Wallet and recovering account? - Issues with Ledger Firmware 2.0.0 and Algorand Wallet

Anytime I attempt to send crypto within the Algorand Official Wallet, I get the below confusing error message:

Error! This account has been rekeyed. In order to sign transactions, please recover this account with a passphrase or Ledger device.

I just recovered the account using the 25-word passphrase! How do I fix this so that I can send crypto again?

Details

  • App: Algorand Wallet from Algorand, Inc
  • Platform: Android 12
  • Phone: Pixel 3a
  • Ledger Device: Nano X
  • Ledger Firmware: 2.0.0

I created an account in Algorand Wallet a few months ago within the official app. After creating the account, I rekeyed the account with my Ledger Nano X.

Recently, I reinstalled the app and recovered my account using the 25-word passphrase. I was successful in recovering the account.

Around the same time, I updated the phone to Android 12 and Ledger Nano X to firmware 2.0.0. After updating the firmware, I reset the ledger Nano X device and recovered the private key for the account using the 24-word passphrase provided by Algorand Wallet when I initially rekeyed the account.

After successfully recovering the account and getting back my private key, I then attempting to send Algo to another account and got the error (screenshot below):

Did I forget a step when I recovered my account and Ledger private key? As an FYI, below are the menu options that I see when I press “…” of the account. If I press “View Passphrase” it shows me the 25-word passphrase of account as opposed to the 24-word passphrase for the Ledger Nano X private key. Below are the options that I see when I press “…”:

  • Rekey Account
  • Auth Account Address
  • View Passphrase
  • Mute Notifications
  • Edit Account Name
  • Remove Account

Welcome to Algorand!

You should be able to recover fully your account by pairing your Ledger with the Algorand Wallet:

Let us know if you encounter any issue.

Hi @fabrice! Thank you for your help; however, I tried to follow the instructions, but my user experience seems to be different than what is present in the article.

When I press the “+”, I only see the two options. Below is screenshot of what I see before and after pressing the green “+” button.

As you can see on the right side of the image, there is no option stating “Pair Ledger Account”. Given that, what should I do next?

The UI may have slightly changed.
Click “Add account” and then “Pair with Ledger Device”.

I already see a Ledger device in your list of account. Is it the Ledger device that you used to rekey the other account?
Can you now send Algos with the second account?

I apologize, but I’m confused by the first question as I’m not certain what you mean by “other” and “second” account. By “other” account, do you mean the account that I initially rekeyed with the ledger device? By “second” account, do you mean the account that I initially rekeyed with the ledger device and recovered in the wallet, but is now not able to send crypto?

Let me try to get on the same page with you. To help easily identify the account, I have updated the original screenshot in my second post with the name of the account and included the third screen that I see after pressing “Add Account”. I’ll also explain the issue using the name of the account.

The account with the ledger device is called “Governance”. This is the only account rekeyed with a ledger device. This account was rekeyed with a ledger device before I reinstalled the Algorand wallet. It is also the account that isn’t allowing me to send any crypto and the one I initially reached (and still reaching) for help on.

In my first post, I mentioned that I reinstalled the Algorand Wallet and recovered my account called Governance (which was rekeyed to a ledger device before I reinstalled the Algorand Wallet). To recover the Governance account, I used the 25-word passphrase (press green “+” button > “Recover with passphrase”) that was provided when I had initially created the account.

Based on your recommendation, I shouldn’t have used that method to recover my Governance account, which had been rekeyed to a ledger device before I reinstalled the app. Instead, I should have pressed the green “+” button > “Add Account” > “Pair Ledger Device”. Is that correct?

Do not remove the governance account.
Do the following:
“Add Account” → “Pair Ledger Device”.

This will allow your wallet to know about the Ledger device and should make your governance account work.
This may also create a new account that may be empty (the actual account of the Ledger device), but you can just ignore this new account.

Good news - The wallet now seems to know about the ledger! On top of that, Algorand Wallet did create a new account that was empty. Everything went as you said.

Bad news - I still can’t send Algo from the wallet. The original error message is gone, but now a new error message appears:

Connection Error: Could not connect to the Ledger device. Make sure the device is unlocked, nearby and has bluetooth enabled.

Any recommendations?

Details:

  • Bluetooth is enabled for both the phone and Ledger device
  • Algorand App is installed on the Ledger Nano X. The application version is 1.2.15
  • The Ledger Nano X is no more than a few inches away

Do you think your new issue can be related to Algorand Wallet Wont Connect to Ledger Nano X following firmware 2.0.0 update ?

What is your Ledger Firmware version?

Hi Fabrice

Its:

  • secure element 2.0.0
  • microcontroller 2.28
  • bootloader 1.16

Hardware version 1

I think it might now be. My ledger firmware is 2.0.0. I’ll try the below article and see if that fixes the issue. I’ll let you know what I find out.

I’m at the same point as @DeFiYourLife in that I’m getting the same connection error. I’m using:
Samsung A40 with Android 11.
Official Algorand Wallet 4.10.6

I have found this: I CAN connect to Nano X via bluetooth from ledger live app but not from the Algorand Wallet. So there is a connection, but that connection is not accessible to the Algorand Wallet for some reason.

Might there be an other layer of permission required as a result of the firmware update? I’ve followed the ledger workflow for fixing bluetooth pairing issues in all permutations to try and connect and nothing has worked so far. But given that ledger live connects, and nano x is shown as paired with my phone, I’m starting to think this is not a pairing issue?

Hi @fabrice! I followed the Ledger’s Fix Bluetooth pairing issues article and like @rob_b can connect to Nano X via bluetooth from ledger live app, but not from the Algorand Wallet.

The same error message keeps coming up:

Connection Error: Could not connect to the Ledger device. Make sure the device is unlocked, nearby and has bluetooth enabled.

After hearing @rob_b and my issue, what would you recommend next?

On Reddit, there is a posting that is related to this issue, which I’ve pasted below. @fabrice if you have any thoughts on it, then please do share.

Reddit - Ledger Nano X Firmware Update | Be Prepare For Governance Voting

This seems related to Unable to sign transactions using Ledger Nano X after firmware 2.0.0 update · Issue #53 · algorand/ledger-app-algorand · GitHub too.

Hi @fabrice ! How would you feel if I removed the Governance Account and the actual account of the Ledger device?

I want to try the solution mentioned in the Reddit post above, where there is a step to remove the ledger paired accounts and add them back in via ledger device.

I look forward to hearing from you soon!

I found another user having a similar problem. This user though posted on Ledger’s Reddit. I left a comment there too -

Hi @fabrice , @DeFiYourLife I can restate that while I can connect to the wallet with bluetooth using Ledger Live, I cannot with the offical Algorand wallet. So Ledger’s firmware 2.0.0.0 update has introduced a breaking change somwhere, but its deeper than I can go.

Note that when I updated the Firmware from Ledger live on mac it also updated the algorand app on the ledger. So I dont know if that’s implicated.

So where do we go from here?

I’m going to try a cable connection between the phone and the Nano X and see if that works. It’s in the post from Amazon so I’ll be able to try that later today. I’ll report back.

I’ve had a look at the bluetooth connection using nRF connect. The log is a bit beyond me but if you look at the log generated by nRF (which is posted next) you’ll see:

  • I tried connecting 4 times and on the 3rd try refreshed the cache.
  • Each time the connection state changes as a result of a callback with status: 8 and new state DISCONNECTED (0) and then Error 8 (0x8): GATT CONN TIMEOUT
  • The timeout interval is 5000ms so maybe there is not enough delay in the bluetooth paramters in the firmware update, the parameters in Ledger Live probably correspond to the firmware update but not the other apps like the algorand wallet. Thats just a hunch but if I could look at the code for this update that’s where I would be looking. In github the comment is made that usually “restarting bluetooth or adding some delays helps”. We know that restarting bluetooth doesnt work. In stack overflow there’s chat about the devices using 2 different bonding keys or a hardware issue. I dont think its a hardware issue as it worked yestrday morning before the update. As I said, it’s getting beyond me.

But when I pair the nano with ledger live on the phone it does generate a new pair code which then works. But it doesnt with the pairing done generally with the phone.

So the question is, is there sufficient developer effort going into the Algorand wallet to look at and fix this? Or if its a bug in Ledger then liaise with them to get it fixed.

It’s important because my commited governance algos are in this wallet backed up by ledger. A decent mount of algos too. Voting starts in 4 days. This a massive balls up not only for me but I’m guessing there’s going to be a lot of people with this problem and the looming governance voting deadline.

The thought of removing and rebuilding the ledger account is not attractive right now. I dont know enough to feel confident about doing it. Also won’t it mess up my governance commitment?

nRF Connect, 2021-10-27
Nano X 6E1D (DE:F1:F3:14:BB:F2)

V 09:19:18.623 Connecting to DE:F1:F3:14:BB:F2…
D 09:19:18.623 gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
D 09:19:18.920 [Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
D 09:19:18.947 [Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
I 09:19:18.947 Connected to DE:F1:F3:14:BB:F2
D 09:19:18.948 wait(1600ms)
I 09:19:19.209 Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms)
V 09:19:20.549 Discovering services…
D 09:19:20.549 gatt.discoverServices()
D 09:19:24.251 [Callback] Connection state changed with status: 8 and new state: DISCONNECTED (0)
E 09:19:24.252 Error 8 (0x8): GATT CONN TIMEOUT
I 09:19:24.252 Disconnected
D 09:19:24.315 [Broadcast] Action received: android.bluetooth.device.action.ACL_DISCONNECTED
D 09:19:39.028 gatt.close()
D 09:19:39.041 wait(200)

V 09:19:39.242 Connecting to DE:F1:F3:14:BB:F2…
D 09:19:39.242 gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
D 09:19:39.523 [Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
D 09:19:39.553 [Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
I 09:19:39.553 Connected to DE:F1:F3:14:BB:F2
D 09:19:39.554 wait(1600ms)
I 09:19:39.820 Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms)
V 09:19:41.156 Discovering services…
D 09:19:41.156 gatt.discoverServices()
D 09:19:44.857 [Callback] Connection state changed with status: 8 and new state: DISCONNECTED (0)
E 09:19:44.858 Error 8 (0x8): GATT CONN TIMEOUT
I 09:19:44.858 Disconnected
D 09:19:44.907 [Broadcast] Action received: android.bluetooth.device.action.ACL_DISCONNECTED
D 09:19:55.250 gatt.close()
D 09:19:55.258 wait(200)

V 09:19:55.459 Connecting to DE:F1:F3:14:BB:F2…
D 09:19:55.459 gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
D 09:19:55.714 [Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
D 09:19:55.739 [Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
I 09:19:55.739 Connected to DE:F1:F3:14:BB:F2
D 09:19:55.740 wait(1600ms)
I 09:19:56.018 Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms)
V 09:19:57.342 Discovering services…
D 09:19:57.342 gatt.discoverServices()
D 09:20:01.051 [Callback] Connection state changed with status: 8 and new state: DISCONNECTED (0)
E 09:20:01.051 Error 8 (0x8): GATT CONN TIMEOUT
I 09:20:01.051 Disconnected
D 09:20:01.095 [Broadcast] Action received: android.bluetooth.device.action.ACL_DISCONNECTED
V 09:20:20.555 Refreshing device cache…
D 09:20:20.555 gatt.refresh() (hidden)
I 09:20:20.560 Cache refreshed
D 09:20:23.318 gatt.close()
D 09:20:23.327 wait(200)

V 09:20:23.527 Connecting to DE:F1:F3:14:BB:F2…
D 09:20:23.527 gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
D 09:20:23.901 [Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
D 09:20:23.943 [Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
I 09:20:23.943 Connected to DE:F1:F3:14:BB:F2
D 09:20:23.944 wait(1600ms)
I 09:20:24.188 Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms)
V 09:20:25.546 Discovering services…
D 09:20:25.546 gatt.discoverServices()
D 09:20:29.225 [Callback] Connection state changed with status: 8 and new state: DISCONNECTED (0)
E 09:20:29.225 Error 8 (0x8): GATT CONN TIMEOUT
I 09:20:29.225 Disconnected
D 09:20:29.264 [Broadcast] Action received: android.bluetooth.device.action.ACL_DISCONNECTED

Its also being reported on GitHub:

1 Like

Thanks for providing additional details. We’ll use this in our investigation. Thanks!