Saltar al contenido principal
Esta página fue traducida automáticamente por IA. La versión en inglés es la fuente autorizada.Ver versión en inglés →
Banner de versión. Todos los ejemplos apuntan a @raydium-io/raydium-sdk-v2@0.2.42-alpha contra Solana mainnet-beta, verificado 2026-04. El SDK distribuye v3 / v5 / v6 internamente según el propietario del programa de la farm; los ejemplos siguientes asumen una farm v6. Consulta reference/program-addresses para los tres IDs de programa.

Setup

Los ejemplos aquí reflejan archivos en raydium-sdk-V2-demo/src/farm. El bootstrap sigue el config.ts.template del repositorio de ejemplos:

Obtener una farm por ID

getFarmById obtiene FarmState off-chain, decodifica según la versión del programa y normaliza la tasa de emisión de punto fijo en un simple Decimal por segundo.

Hacer stake de tokens LP

Fuente: src/farm/stake.ts
El SDK maneja el pre-liquidación de cualquier recompensa pendiente, por lo que si esta cartera ya tiene stake en esta farm, la instrucción pagará las recompensas acumuladas a los ATAs del usuario en la misma transacción.

Solo reclamar (cosechar)

Fuente: src/farm/harvest.ts
harvestAllRewards acepta una lista — para interfaces de usuario que muestren una vista de cartera, agrupa la llamada. Cada farm se reclama en una instrucción separada dentro de una transacción (sujeto al límite de tamaño de 1232 bytes; para más de ~6 farms, divide en múltiples transacciones). Para una sola farm en v6, también puedes usar la ruta explícita Harvest:
En v3 y v5 el idioma amount: 0 es obligatorio; el SDK lo distribuye correctamente.

Retirar stake

Fuente: src/farm/unstake.ts

Crear una farm v6

Fuente: src/farm/createAmmFarm.ts y editAmmFarm.ts
Puntos clave:
  • perSecond es la tasa de emisión entera por segundo. El SDK lo empaca en Q64.64 antes de enviar. Para una tasa fraccionaria, escala y ajusta la duración.
  • El presupuesto completo (perSecond × duration) debe estar presente en tu ATA de recompensas — create lo mueve al vault de recompensas atómicamente.
  • Puedes sembrar hasta 5 recompensas en una sola llamada create. La lista de cuentas crece por (reward_mint, reward_vault, sender_ata, token_program) por cada stream adicional; mantente atento al límite de tamaño de transacción de 1232 bytes. Para 4+ recompensas, crea con 1–2 y usa AddReward en transacciones posteriores.

Añadir presupuesto a un stream de recompensas existente

setRewards extiende end_time y transfiere el presupuesto diferencial. La instrucción no puede acortar un stream, no puede bajar per_second en un stream activo, y no puede cambiar el mint de recompensas. Para intercambiar mints, espera a end_time y usa AddReward en un slot liberado (si hay), o crea una nueva farm.

Reiniciar un stream terminado

Válido solo cuando el reward_state == 2 del slot objetivo (terminado). El llamador debe ser el reward_sender del slot (v6) o el propietario de la farm (v5).

CPI en Rust

A diferencia del AMM v4, el programa de farm v6 viene con un crate de Anchor (raydium_farm_v6) publicado junto a las fuentes del frontend y SDK. Un ejemplo mínimo de Deposit:
El slice remaining_accounts debe coincidir 1-por-1 con los slots de recompensas activos de la farm (pares de reward_vault_i, user_reward_ata_i en orden de índice). Omitir o desordenar estos produce un mal registro silencioso — el programa transferirá la cantidad incorrecta.

Errores comunes

  • Olvidar reclamar antes de retirar. Inofensivo — Withdraw liquida las recompensas pendientes primero. Pero si tu UI muestra «reclamar» separado de «retirar», el usuario podría pensar que aún hay algo que reclamar después de un Withdraw. No es así; todo lo acumulado hasta ese punto fue pagado.
  • total_staked = 0 durante emisiones. Las emisiones acumuladas mientras nada fue marcado con stake se pierden (la fórmula de actualización reward_per_share divide por 0 y el programa salta la actualización). Para programas con open_time programado, ejecuta un «seed stake» en open_time para evitar esto.
  • Comisiones de transferencia de Token-2022. En farms v6 con mints de recompensas Token-2022, la comisión de transferencia se aplica en la emisión (vault → usuario). Factoriza esto en tus cotizaciones de APR.
  • per_second pequeño en v5. El tipo u64 de v5 significa que cualquier per_second < 1 unidad de token por segundo (en mints con ≥9 decimales esta es frecuentemente la tasa deseada) no puede ser expresado — la tasa del stream se redondea a 0 y la farm no emite nada. Usa v6.

Próximos pasos

Fuentes: