MetaMask / MetaMask/metamask-mobile
[Bug]: Queuing Transactions - tx's keep accumulating and the tx hex data keeps changing, looping over the different tx's queued
- Dominant language
- TypeScript
- Stars
- 3k
- Forks
- 1.7k
- Avg merge
- 1d 14h
- Merged PRs (30d)
- 669
Description
**Describe the bug**
When a network is down and you trigger Send/Contract Interactions/Deployments requests, those keep accumulating in the background. Once the network is up again, you'll see each request appearing in the UI, and then closed and the subsequent request is open.
Only the last one remains open, and rejecting/accepting it terminates the flow.
If you open the hex data for the last one, you'll see how the hex data keeps changing iterating over the pending contract deployments you triggered.
**Expected behavior**
Given that the Mobile doesn't support queuing transactions, I think we should only see the last request, and the rest should be dropped. Hex data should not change, and correspond just to the remaining active pending transaction. The correct transaction type should be displayed in the header pill.
**Screenshots/Recordings**
See hex data changing
https://github.com/user-attachments/assets/a4cf41a5-91a0-4a43-bfcc-ae760886f924
See complete flow
https://github.com/user-attachments/assets/17de5de8-0341-492d-8e32-1e4bc28ffa39
**Steps to reproduce**
1. Enable Show hex data from settings
2. Start Ganache
3. Import Ganache network in mobile
4. Import a Ganache account with balance
5. Go to the test dapp
6. Connect with ganache and the imported account
7. Kill ganache server
8. Trigger several contract deployment
9. Re-start the ganache server with the same seed `ganache --wallet.seed="YOUR_SRP"` so you still have the account with balance
10. See how all the tx from step 7 keep popping up and disappearing, only the last one remaining
11. Open Hex Data
12. See how the hex data keeps looping from the different contract deployments you had pending. This never stops and eth_gas RPC requests are sent non-stop
13. See UI doesn't display "Contract Deployment" just "Confirm" as tx type
14. Confirm the tx
15. A contract deployment is successfully made -- it can be any of the ones you had pending
**Error messages or log output**
```shell
```
**Detection stage**
In production (default)
**Version**
7.37.1
**Build type**
None
**Device**
Pixel 6
**Operating system**
Android
Contributor guide
Research direction
Reproduce the issue using the listed Ganache, mobile, test dapp, and queued contract-deployment steps, then inspect the transaction confirmation flow, queued requests, hex-data display, and transaction-type header. Done means only the final request remains, its hex data stays stable, the correct transaction type is shown, and repeated eth_gas requests stop.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- react-native, typescript
- Domain
- mobile
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100