MetaMask / MetaMask/metamask-mobile

[Bug]: Ledger Money Account: Sending funds from Money account to Ledger account fails with errors

Open
#36,338 2 comments 0 reactions 0 assignees View on GitHub
INVALID-ISSUE-TEMPLATE regression-RC-8.12.0 Sev2-normal ta-needs-engineer-escalation ta-triaged team-confirmations type-bug
Dominant language
TypeScript
Stars
3k
Forks
1.7k
Avg merge
1d 14h
Merged PRs (30d)
669

Description

**Describe the bug**

Sending funds from Money account to Ledger account fails with errors, in all of the below cases:

1. Eth app open, ledger unlocked, blind signing enabled: `MetaMask Pay: Relay: Failed to publish batch transaction`
2. Ledger locked: `MetaMask Pay: Relay: Ledger: Device is locked`
3. Eth app closed: `Error: MetaMask Pay: Relay: Ledger: Ethereum app closed`
4. Blind sign disabled: `Error: MetaMask Pay: Relay: Please enable Blind signing or Contract data in the Ethereum app Settings`

**Expected behavior**

Be able to send to Ledger account from Money account

**Screenshots/Recordings**

https://github.com/user-attachments/assets/ced86c69-f5b8-42ba-9d3b-3bcac9de2888

https://github.com/user-attachments/assets/5e3bf0f9-ebd9-44c6-9f05-416e0fc0c672

https://github.com/user-attachments/assets/d3f02efd-3510-49a5-9bde-0d079c4bf474

https://github.com/user-attachments/assets/9401bae0-9ca6-464b-af7f-b910b90dda0f

**Steps to reproduce**

1. Connect Ledger to MM
2. Go to Money
3. Go to Send
4. Click another account
5. Select Ledger account
6. Make sure Ledger device is unlocked, Eth app is open and blind signing enabled
7. Select token and amount
8. Click Send
9. sign both transactions on the Ledger device
10. notice Withdrawal fails with error Failed to publish batch transaction`

The withdrawals also fail in all other 3 cases below:

- Ledger locked
- Eth app not open
- Blind signing disabled

**Error messages or log output**

```shell
Error: MetaMask Pay: Relay: Failed to publish batch transaction
at construct (native)
at apply (native)
at _construct (address at index.android.bundle:1:838589)
at Wrapper (address at index.android.bundle:1:838230)
at call (native)
at JsonRpcError (address at index.android.bundle:1:3207676)
at getJsonRpcError (address at index.android.bundle:1:3213255)
at internal (address at index.android.bundle:1:3213816)
at ?anon_0_ (address at index.android.bundle:1:3061621)
at next (native)
at asyncGeneratorStep (address at index.android.bundle:1:834567)
at _next (address at index.android.bundle:1:834824)
at tryCallOne (address at InternalBytecode.js:1:1180)
at anonymous (address at InternalBytecode.js:1:1874)

Error: MetaMask Pay: Relay: Ledger: Ethereum app closed
at construct (native)
at apply (native)
at _construct (address at index.android.bundle:1:838589)
at Wrapper (address at index.android.bundle:1:838230)
at call (native)
at JsonRpcError (address at index.android.bundle:1:3207676)
at getJsonRpcError (address at index.android.bundle:1:3213255)
at internal (address at index.android.bundle:1:3213816)
at ?anon_0_ (address at index.android.bundle:1:3061621)
at next (native)
at asyncGeneratorStep (address at index.android.bundle:1:834567)
at _next (address at index.android.bundle:1:834824)
at tryCallOne (address at InternalBytecode.js:1:1180)
at anonymous (address at InternalBytecode.js:1:1874)

Error: MetaMask Pay: Relay: Ledger: Device is locked
at construct (native)
at apply (native)
at _construct (address at index.android.bundle:1:838589)
at Wrapper (address at index.android.bundle:1:838230)
at call (native)
at JsonRpcError (address at index.android.bundle:1:3207676)
at getJsonRpcError (address at index.android.bundle:1:3213255)
at internal (address at index.android.bundle:1:3213816)
at ?anon_0_ (address at index.android.bundle:1:3061621)
at next (native)
at asyncGeneratorStep (address at index.android.bundle:1:834567)
at _next (address at index.android.bundle:1:834824)
at tryCallOne (address at InternalBytecode.js:1:1180)
at anonymous (address at InternalBytecode.js:1:1874)

Error: MetaMask Pay: Relay: Please enable Blind signing or Contract data in the Ethereum app Settings
at construct (native)
at apply (native)
at _construct (address at index.android.bundle:1:838589)
at Wrapper (address at index.android.bundle:1:838230)
at call (native)
at JsonRpcError (address at index.android.bundle:1:3207676)
at getJsonRpcError (address at index.android.bundle:1:3213255)
at internal (address at index.android.bundle:1:3213816)
at ?anon_0_ (address at index.android.bundle:1:3061621)
at next (native)
at asyncGeneratorStep (address at index.android.bundle:1:834567)
at _next (address at index.android.bundle:1:834824)
at tryCallOne (address at InternalBytecode.js:1:1180)
at anonymous (address at InternalBytecode.js:1:1874)
```

**Where was this bug found?**

Internal release testing

**Version**

8.12.0

**Build number**

6925

**Build type**

None

**Device**

iphone 15, Pixel 6 Pro

**Operating system**

iOS, Android

Contributor guide

Open the contributing guide

Research direction

Start by reproducing the Money Send withdrawal flow on iOS and Android with the Ledger states listed in the report, then trace the relay errors from the withdrawal step. Done means funds can be sent from a Money account to a Ledger account and the reported locked-device, closed-app, blind-signing, and batch-publication failures are resolved.

Written by the indexing model from the issue text.

Assessment

Tech stack
react-native, typescript
Domain
blockchain, mobile
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.