Intercambios con Jupiter
Jupiter agrega liquidez a través de Raydium, Orca, Meteora y otros AMM de Solana en una única API de intercambio. Úsala cuando necesites enrutamiento al mejor precio sin mantener tú mismo los gráficos de pools.
Busca en todas las páginas de la documentación
Jupiter agrega liquidez a través de Raydium, Orca, Meteora y otros AMM de Solana en una única API de intercambio. Úsala cuando necesites enrutamiento al mejor precio sin mantener tú mismo los gráficos de pools.
Tarjeta de receta de referencia rápida, lista para copiar y pegar.
const quote = await fetch(
`https://quote-api.jup.ag/v6/quote?inputMint=${inMint}&outputMint=${outMint}&amount=${amount}&slippageBps=50`
).then((r) => r.json());
const swap = await fetch("https://quote-api.jup.ag/v6/swap", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ quoteResponse: quote, userPublicKey: wallet, wrapAndUnwrapSol: true }),
}).then((r) => r.json());Cuándo recurrir a esto:
@solana/kit 7.0.0.import { createSolanaRpc, address, lamports } from "@solana/kit";
import { getBase58Codec } from "@solana/codecs-strings";
const RPC = "https://api.mainnet-beta.solana.com";
const rpc = createSolanaRpc(RPC);
const inputMint = "So11111111111111111111111111111111111111112";
const outputMint = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
const amount = "50000000"; // 0.05 SOL
const slippageBps = 50;
const userPublicKey = "YOUR_WALLET_PUBKEY";
const quote = await fetch(
`https://quote-api.jup.ag/v6/quote?inputMint=${inputMint}&outputMint=${outputMint}&amount=${amount}&slippageBps=${slippageBps}`
).then((r) => r.json());
const { swapTransaction } = await fetch("https://quote-api.jup.ag/v6/swap", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
quoteResponse: quote,
userPublicKey,
wrapAndUnwrapSol: true,
dynamicComputeUnitLimit: true,
prioritizationFeeLamports: "auto",
}),
}).then((r) => r.json());
const txBytes = getBase58Codec().decode(swapTransaction);
// Firma txBytes con la billetera, envía a través de rpc.sendTransaction(...)
console.log("Salida esperada:", quote.outAmount);Lo que esto demuestra:
outAmount, priceImpactPct y routePlan.dynamicComputeUnitLimit y prioritizationFeeLamports ajustan el aterrizaje en Agave 4.1.1.| Endpoint | Propósito | Parámetros clave |
|---|---|---|
/v6/quote | Ruta de precios | inputMint, outputMint, amount, slippageBps |
/v6/swap | Construir tx | quoteResponse, userPublicKey |
/v6/swap-instructions | Lista de ix sin procesar | Para ensamblaje de tx personalizado |
// Actualiza la cotización si el hash del bloque envejece - las cotizaciones caducan rápidamente
const MAX_QUOTE_AGE_MS = 30_000;
const quotedAt = Date.now();
// Vuelve a cotizar antes de enviar si Date.now() - quotedAt > MAX_QUOTE_AGE_MSswap y establece una ventana de edad máxima.SlippageToleranceExceeded. Solución: Aumenta slippageBps o divídelo en intercambios más pequeños.createAta o pre-crea la ATA en una transacción de configuración.wrapAndUnwrapSol: true o gestiona la ATA de wSOL explícitamente.dynamicComputeUnitLimit: true.| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| CPI directa de AMM | Controlas el pool + quieres dependencias mínimas | Necesitas el mejor precio en varios lugares |
swap-instructions de Jupiter | Tx personalizada con tus propias ALT | Quieres la ruta más rápida a un intercambio funcional |
| CPI del programa Jupiter en cadena | Intercambiar dentro de tu programa Anchor | Solo necesitas descubrimiento de rutas fuera de cadena |
Comienza con 50 bps (0.5%) para pares líquidos. Aumenta a 100-300 bps para pools delgados o lanzamientos volátiles.
Sí, haz CPI al programa en cadena de Jupiter con cuentas de swap-instructions. El enrutamiento fuera de cadena todavía descubre la ruta.
Pasa prioritizationFeeLamports: "auto" en la solicitud de intercambio, o establece un valor explícito de lamports de tu oráculo de tarifas.
Usa swapMode=ExactOut en el endpoint de cotización cuando necesites una cantidad de salida precisa (por ejemplo, para pagar una deuda exacta).
Cotización obsoleta, contención de bloqueo de cuenta o tarifa de prioridad demasiado baja. Vuelve a cotizar y aumenta la CU/tarifa de prioridad.
Sí, pasa listas de inclusión/exclusión dexes en la API de cotización para excluir lugares no confiables.
Inspecciona quote.routePlan - cada paso muestra swapInfo con la etiqueta AMM, cantidades de entrada/salida y la dirección del pool.
El tráfico pesado del servidor debería almacenar en caché las cotizaciones brevemente y retroceder en caso de HTTP 429. Considera los niveles de pago de Jupiter para producción.
Usa la bifurcación de mainnet de Surfpool 0.12.0 con billeteras de prueba financiadas, o devnet con acuñaciones de pool conocidas (rutas limitadas).
Las acuñaciones Token-2022 son compatibles en muchas rutas, pero no en todos los pools. Verifica los IDs del programa de tokens de routePlan por tramo.
Versiones de Stack: Esta página fue escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, y LiteSVM 0.6.x.
Revisado por Chris St. John·Última actualización: 16 jul 2026