AMMs (Raydium, Orca, Meteora)
Los principales AMM de Solana mantienen liquidez concentrada y de producto constante en cuentas de pool propiedad del programa. Integra directamente cuando necesites enrutamiento personalizado, acciones de LP o swaps CPI en cadena fuera de Jupiter.
Receta
Tarjeta de receta de referencia rápida - lista para copiar y pegar.
// Orca Whirlpool swap usando SDK (construcción de ix fuera de cadena)
import { swapQuoteByInputToken, WhirlpoolContext } from "@orca-so/whirlpools-sdk";
const quote = await swapQuoteByInputToken(whirlpool, inputTokenMint, amountIn, slippageTolerance, programId);// En cadena: valida que las cuentas del pool coincidan con el programa y los mints esperados
require_keys_eq!(pool_state.token_mint_a, expected_mint_a, ErrorCode::MintMismatch);
require_keys_eq!(pool_state.token_mint_b, expected_mint_b, ErrorCode::MintMismatch);Cuándo usar esto:
- Construir flujos de depósito/retiro de LP.
- Swaps CPI dentro de tu programa Anchor 0.32.1.
- Acceder a liquidez concentrada (Orca Whirlpools, Meteora DLMM).
- Leer reservas para precios en cadena sin un agregador.
Ejemplo de Trabajo
import { createSolanaRpc, address } from "@solana/kit";
const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");
// Estado del pool Raydium AMM v4 (diseño de ejemplo - obtener y decodificar con SDK)
const poolAddress = address("58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2"); // Pool legado SOL-USDC
const poolAccount = await rpc.getAccountInfo(poolAddress, { encoding: "base64" }).send();
if (poolAccount.value) {
console.log("Propietario del pool:", poolAccount.value.owner);
console.log("Longitud de datos:", poolAccount.value.data.length);
}Lo que esto demuestra:
- El estado del pool es una única cuenta propiedad del programa AMM.
- Los clientes decodifican el diseño fuera de cadena; los programas en cadena validan los campos de propietario y mint.
- Cada lugar (Raydium, Orca, Meteora) tiene diseños de cuenta y IDs de programa distintos.
Análisis Profundo
Cómo Funciona
- Raydium - Clásico AMM de producto constante v4 más pools CLMM; liquidez profunda SOL-estable.
- Orca - Whirlpools utiliza liquidez concentrada con arrays de ticks; eficiente en capital para pares estables.
- Meteora - DLMM utiliza pasos de precio discretos; popular para launchpads y pares volátiles.
- Los swaps debitan la bóveda de entrada, acreditan la bóveda de salida y actualizan los acumuladores de comisiones atómicamente.
Comparación de Lugares
| Lugar | Modelo | Mejor para | Nota del programa |
|---|---|---|---|
| Raydium AMM v4 | x*y=k | Pares amplios | Maduro, alto TVL |
| Orca Whirlpool | Concentrada | Rangos estrechos estables/volátiles | Cuentas de array de ticks |
| Meteora DLMM | Pasos de bin | Lanzamientos nuevos, curvas personalizadas | Comisiones dinámicas |
Notas de Rust
use anchor_lang::prelude::*;
#[account]
pub struct PoolSnapshot {
pub token_a_reserve: u64,
pub token_b_reserve: u64,
pub fee_numerator: u64,
pub fee_denominator: u64,
}
// Siempre lee las reservas en el momento de la ejecución - nunca confíes en valores de cliente cacheados en cadenaTrampas
- Tipo de pool incorrecto - Raydium v4 vs CLMM usan diseños de instrucción diferentes. Solución: Empareja el SDK/ID del programa con el tipo de pool.
- Array de ticks faltante - Los swaps de Orca necesitan cuentas de array de ticks actuales en la lista de metadatos. Solución: Usa el SDK de Whirlpool para derivar cuentas restantes.
- Lecturas de reservas obsoletas - La vista previa del cliente != precio de ejecución. Solución: Simula el swap o lee las reservas en el mismo slot.
- Orden de mint - Los pools almacenan el token A/B en orden canónico. Solución: La bandera de dirección del swap debe coincidir con el orden de los mints.
- Slippage de LP - Añadir liquidez puede ser objeto de front-running. Solución: Establece el parámetro de tokens LP mínimos a recibir.
- Volumen de cuentas - Los swaps CLMM/DLMM necesitan muchas cuentas; usa ALTs. Solución: Transacciones versionadas con tablas de búsqueda.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Agregador Jupiter | Mejor precio, menos integraciones | Necesitas acciones solo de LP |
| Phoenix CLOB | Libro de órdenes con prioridad precio-tiempo | Quieres rendimiento pasivo de LP |
| Precios de oráculo en cadena | Colateral de préstamos | Swaps spot |
Preguntas Frecuentes
¿Debo integrar Raydium o solo usar Jupiter?
Usa Jupiter para swaps. Integra Raydium directamente para gestión de LP, farming o rutas CPI personalizadas.
¿Qué es la liquidez concentrada?
Los LPs depositan en un rango de precios (ticks/bins). La eficiencia de capital es mayor pero los rangos inactivos no generan comisiones.
¿Cómo encuentro la dirección de un pool?
Usa exploradores de lugares, routePlan de Jupiter o ayudantes getPool del SDK - nunca adivines los PDAs de los pools.
¿Pueden los programas Anchor hacer CPI a los AMMs?
Sí - pasa todas las cuentas necesarias de pool, bóveda, tick y oráculo. Valida los IDs de programa en tus restricciones.
¿Cómo se cobran las comisiones?
Cada swap deduce una comisión de la entrada antes de aplicar el invariante. Los niveles de comisión varían según el pool y el lugar.
¿Qué pasa con los pools Token-2022?
Soporte creciente en Orca/Meteora - verifica la compatibilidad del propietario del mint y el hook de transferencia antes de enrutar.
¿Cómo pruebo los CPI de AMM localmente?
Clona las cuentas del pool en solana-test-validator o usa una bifurcación de Surfpool 0.12.0 para reservas realistas.
¿Por qué importan los bins de Meteora?
El precio se mueve a través de los bins; cada bin contiene liquidez discreta. Las cuentas de bin activo incorrectas causan fallos en el swap.
¿Cómo calculo el impacto en el precio?
Compara el precio spot antes y después usando los campos de reserva o sqrt_price del estado del pool.
¿Son estables los mapas de ruta de Raydium?
Las direcciones de los pools son estables pero la liquidez migra. Actualiza las listas de pools de fuentes oficiales periódicamente.
Relacionado
- Swaps con Jupiter - enrutamiento agregado
- Oráculos - precios para sistemas híbridos AMM/préstamos
- Mejores Prácticas de Integración DeFi - política de integración de pools
- Prueba de CPIs y PDAs - pruebas de CPI de AMM
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.