MetaMask / MetaMask/metamask-mobile
[Bug]: Errors observed when trying to generate quotes for Swapping NEVM tokens
- Dominant language
- TypeScript
- Stars
- 3k
- Forks
- 1.7k
- Avg merge
- 1d 14h
- Merged PRs (30d)
- 669
Description
### Describe the bug
Errors observed when trying to generate quotes for Swapping NEVM tokens:
- It takes a lot of time to generate the quote for SOL or TRX swaps
- For SOL(Solana) to USDC(Solana), quotes are frequently changing,
- Sometimes swap button getting enabled with some quote generated
- Sometimes saying quote not loading
- At times it is also showing Network Fee - "Paid by Metamask", but while trying to Swap, it fails
Errors in logs:
> ERROR "npm:@metamask/solana-wallet-snap" crashed due to an unhandled error: [Error: npm:@metamask/solana-wallet-snap failed to respond to the request in time.]
> WARN Snap "npm:@metamask/solana-wallet-snap" failed to terminate gracefully.
> WARN [Error: premature close]
> ERROR Error setting minimum balance for rent exemption [Error: npm:@metamask/solana-wallet-snap was stopped and the request was cancelled. This is likely because the Snap crashed.]
> ERROR Failed to compute non-EVM fees for quote 8fcc80fd0b77ffc6175b19279eec5305: [Error: npm:@metamask/solana-wallet-snap was stopped and the request was cancelled. This is likely because the Snap crashed.]
> ERROR Failed to set selected accounts for npm:@metamask/solana-wallet-snap snap: 'npm:@metamask/solana-wallet-snap failed to respond to the request in time.'
> LOG [MetaMask DEBUG]: SnapController state persisted successfully
> LOG [MetaMask DEBUG]: BridgeController state persisted successfully
> LOG [MetaMask DEBUG]: [ENGINE LOG] Engine+setupSnapProvider: Setup stream for Snap npm:@metamask/solana-wallet-snap
> LOG [MetaMask DEBUG]: [SNAP BRIDGE] Initializing SnapBridge for Snap: npm:@metamask/solana-wallet-snap
> LOG [MetaMask DEBUG]: [SNAP BRIDGE] Setting up provider connection
> LOG [MetaMask DEBUG]: [SNAP BRIDGE] Setting up provider engine
> LOG [MetaMask DEBUG]: SnapController state persisted successfully
> LOG [MetaMask DEBUG]: BridgeController state persisted successfully
> LOG [MetaMask DEBUG]: AssetsController state persisted successfully
> LOG [MetaMask DEBUG]: GasFeeController state persisted successfully
> ERROR "npm:@metamask/tron-wallet-snap" crashed due to an unhandled error: [Error: npm:@metamask/tron-wallet-snap failed to respond to the request in time.]
> ERROR "npm:@metamask/bitcoin-wallet-snap" crashed due to an unhandled error: [Error: npm:@metamask/bitcoin-wallet-snap failed to respond to the request in time.]
> WARN Snap "npm:@metamask/tron-wallet-snap" failed to terminate gracefully.
> WARN [Error: premature close]
> ERROR Failed to compute non-EVM fees for quote 288424e7-85ae-4419-89c7-f4b672631410: [Error: npm:@metamask/tron-wallet-snap failed to respond to the request in time.]
> ERROR An error occurred while executing an event for Snap "npm:@metamask/tron-wallet-snap": [Error: npm:@metamask/tron-wallet-snap was stopped and the request was cancelled. This is likely because the Snap crashed.]
> ERROR Failed to compute non-EVM fees for quote 9901ce83-44e1-4fca-aefe-0fdc600af64d: [Error: npm:@metamask/tron-wallet-snap was stopped and the request was cancelled. This is likely because the Snap crashed.]
> ERROR An error occurred while executing an event for Snap "npm:@metamask/tron-wallet-snap": [Error: npm:@metamask/tron-wallet-snap was stopped and the request was cancelled. This is likely because the Snap crashed.]
> LOG [MetaMask DEBUG]: BridgeController state persisted successfully
> LOG [MetaMask DEBUG]: AssetsController state persisted successfully
> LOG [MetaMask DEBUG]: SnapController state persisted successfully
> WARN Snap "npm:@metamask/bitcoin-wallet-snap" failed to terminate gracefully.
> WARN [Error: premature close]
> ERROR An error occurred while executing an event for Snap "npm:@metamask/bitcoin-wallet-snap": [Error: npm:@metamask/bitcoin-wallet-snap failed to respond to the request in time.]
> ERROR An error occurred while executing an event for Snap "npm:@metamask/bitcoin-wallet-snap": [Error: npm:@metamask/bitcoin-wallet-snap was stopped and the request was cancelled. This is likely because the Snap crashed.]
> ERROR An error occurred while executing an event for Snap "npm:@metamask/bitcoin-wallet-snap": [Error: npm:@metamask/bitcoin-wallet-snap was stopped and the request was cancelled. This is likely because the Snap crashed.]
> ERROR An error occurred while executing an event for Snap "npm:@metamask/bitcoin-wallet-snap": [Error: npm:@metamask/bitcoin-wallet-snap was stopped and the request was cancelled. This is likely because the Snap crashed.]
> ERROR An error occurred while executing an event for Snap "npm:@metamask/bitcoin-wallet-snap": [Error: npm:@metamask/bitcoin-wallet-snap was stopped and the request was cancelled. This is likely because the Snap crashed.]
> LOG [MetaMask DEBUG]: [ENGINE LOG] Engine+setupSnapProvider: Setup stream for Snap npm:@metamask/tron-wallet-snap
> error! status: 400", "params": {"assets": [[Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object]]}, "snapId": "npm:@metamask/tron-wallet-snap"}
> LOG [MetaMask DEBUG]: MultichainAssetsController state persisted successfully
> LOG [MetaMask DEBUG]: MultichainBalancesController state persisted successfully
> ERROR Snap request failed for onAssetsConversion: {"handler": "onAssetsConversion", "message": "HTTP error! status: 400", "params": {"conversions": [[Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object]]}, "snapId": "npm:@metamask/tron-wallet-snap"}
> ERROR Snap request failed for onAssetsMarketData: {"handler": "onAssetsMarketData", "message": "HTTP error! status: 400", "params": {"assets": [[Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object]]}, "snapId": "npm:@metamask/tron-wallet-snap"}
> ERROR Snap request failed for onAssetsConversion: {"handler": "onAssetsConversion", "message": "HTTP error! status: 400", "params": {"conversions": [[Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object]]}, "snapId": "npm:@metamask/tron-wallet-snap"}
> ERROR Snap request failed for onAssetsMarketData: {"handler": "onAssetsMarketData", "message": "HTTP error! status: 400", "params": {"assets": [[Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object]]}, "snapId": "npm:@metamask/tron-wallet-snap"}
> ERROR Snap request failed for onAssetsConversion: {"handler": "onAssetsConversion", "message": "HTTP error! status: 400", "params": {"conversions": [[Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object]]}, "snapId": "npm:@metamask/tron-wallet-snap"}
> ERROR Snap request failed for onAssetsMarketData: {"handler": "onAssetsMarketData", "message": "HTTP error! status: 400", "params": {"assets": [[Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object]]}, "snapId": "npm:@metamask/tron-wallet-snap"}
> ERROR Snap request failed for onAssetsConversion: {"handler": "onAssetsConversion", "message": "HTTP error! status: 400", "params": {"conversions": [[Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object]]}, "snapId": "npm:@metamask/tron-wallet-snap"}
> ERROR Snap request failed for onAssetsMarketData: {"handler": "onAssetsMarketData", "message": "HTTP error! status: 400", "params": {"assets": [[Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object]]}, "snapId": "npm:@metamask/tron-wallet-snap"}
> LOG [MetaMask DEBUG]: MultichainBalancesController state persisted successfully
> LOG [MetaMask DEBUG]: MultichainAssetsController state persisted successfully
> LOG [MetaMask DEBUG]: MultichainBalancesController state persisted successfully
> LOG [MetaMask DEBUG]: MultichainAssetsController state persisted successfully
> ERROR Snap request failed for onAssetsMarketData: {"handler": "onAssetsMarketData", "message": "HTTP error! status: 400", "params": {"assets": [[Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object]]}, "snapId": "npm:@metamask/tron-wallet-snap"}
> ERROR Snap request failed for onAssetsConversion: {"handler": "onAssetsConversion", "message": "HTTP error! status: 400", "params": {"conversions": [[Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object]]}, "snapId": "npm:@metamask/tron-wallet-snap"}
> ERROR Snap request failed for onAssetsConversion: {"handler": "onAssetsConversion", "message": "HTTP error! status: 400", "params": {"conversions": [[Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object]]}, "snapId": "npm:@metamask/tron-wallet-snap"}
> ERROR Snap request failed for onAssetsMarketData: {"handler": "onAssetsMarketData", "message": "HTTP error! status: 400", "params": {"assets": [[Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object]]}, "snapId": "npm:@metamask/tron-wallet-snap"}
> ERROR Snap request failed for onAssetsConversion: {"handler": "onAssetsConversion", "message": "HTTP error! status: 400", "params": {"conversions": [[Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object]]}, "snapId": "npm:@metamask/tron-wallet-snap"}
### Expected behavior
_No response_
### Screenshots/Recordings
https://github.com/user-attachments/assets/3b80f122-70c4-4d6f-9c87-8601b500acba
### Steps to reproduce
Perform Swap activities for any NEVM chain like SOL or TRON
### Error messages or log output
```shell
```
### Where was this bug found?
Internal release testing
### Version
8.7.0
### Build number
6442
### Build type
None
### Device
Pixel 9 Pro XL
### Operating system
Android
### Additional context
_No response_
### Severity
_No response_
Contributor guide
Research direction
No source files or tests are named. Start by reproducing SOL and TRX quote generation and tracing the wallet Snap timeout, cancellation, and HTTP 400 errors shown in the logs; done means quotes load consistently and swaps no longer fail after a quote is shown.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- react-native, typescript
- Domain
- api, mobile
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100