Skip to content

Jupiter - USDC-SOL swap execution fails at simulation on Solana mainnet-beta while SOL-USDC execution succeeds #636

@rapcmia

Description

@rapcmia

Describe the bug

This issue became clearer during repeated Gateway swap testing on Solana mainnet-beta. Jupiter quote routes kept returning valid quotes, and Jupiter execution was not fully broken because the reverse direction SOL -> USDC completed successfully. The failure appears specific to the USDC -> SOL direction, where execution routes consistently fail during transaction simulation before a transaction signature is returned.

2026-05-13 07:44:20 | info |    Getting quote for 3 USDC -> SOL
2026-05-13 07:44:20 | info |    Jupiter quote: USDC->SOL, amount=3, slippagePct=1% (100 bps), swapMode=ExactIn, onlyDirectRoutes=false, restrictIntermediateTokens=true
2026-05-13 07:44:20 | info |    Executing quote 1b31cc2e-b5b6-4fad-bfed-b9fdf2577f94 for USDC -> SOL, slippageBps=100
2026-05-13 07:44:20 | info |    Sending swap with priority level veryHigh and max 1000000 lamports
2026-05-13 07:44:21 | info |    Simulation Result: {
  "unitsConsumed": 30098,
  "status": "FAILED"
}
2026-05-13 07:44:21 | error |   Transaction simulation failed:
Error: {"InstructionError":[3,"InvalidAccountData"]}

Gateway logs showed the Jupiter program failing with InvalidAccountData during simulation for the failing direction. The same wallet was able to execute both a Meteora USDC -> SOL swap and a Jupiter SOL -> USDC swap successfully in the same session, which suggests the problem is tied to the Jupiter USDC -> SOL execution/account path rather than a general wallet, balance, or RPC issue.

Steps to reproduce

  1. Configure Gateway on Solana mainnet-beta with a wallet that has both USDC and SOL.
  2. Call GET /connectors/jupiter/router/quote-swap for USDC -> SOL with:
    • amount=3, side=SELL, and slippagePct=1.
  3. Call either POST /connectors/jupiter/router/execute-swap with the same values or POST /connectors/jupiter/router/execute-quote using the fresh quoteId.
  4. Observe that the route returns 400 with SIMULATION_FAILED instead of a transaction signature.
  5. Check Gateway logs and observe Jupiter program failure similar to InvalidAccountData.
  6. As a comparison, run SOL -> USDC for about 3 USD equivalent on the same wallet and observe that Jupiter execution succeeds.

Release version

dev-2.5

Type of installation

Source

Attach required files

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions