Documentation Index
Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
Use this file to discover all available pages before exploring further.
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 →
CPI («cross-program invocation») es el mecanismo mediante el cual un programa Solana invoca a otro. Los programas Anchor de Raydium incluyen crates contenedores de CPI que hacen que la llamada se vea como una invocación de función tipada — estructuras de cuentas con nombres de campo validados y helpers
cpi::<ix>(). Esta página documenta el patrón general; para fragmentos específicos del producto consulta la página de demostraciones de código de cada capítulo de producto.Dependencias de Cargo
cpi hace que los crates se compilen solo en la superficie CPI (estructuras de cuentas + invocadores) en lugar del programa completo, de modo que tu binario se mantiene pequeño.
Para ejemplos funcionales de CPI que cableado las estructuras de cuentas de extremo a extremo, consulta raydium-io/raydium-cpi-example (cubre AMM v4, CPMM y CLMM).
Construcción de listas de cuentas
Cada CPI de Raydium requiere una estructuraAccounts en el programa llamador. Los campos coinciden con el orden de cuentas de instrucción del programa 1 a 1, con validadores a nivel de campo:
UncheckedAccount porque el receptor (Raydium) es responsable de la validación. Tu programa llamador solo valida estrictamente las cuentas que tú posees — ATAs de usuario, tus propios PDAs. El comentario de documentación /// CHECK: suprime la advertencia de Anchor sobre controles faltantes.
Construcción de la invocación CPI
Anchor genera un helper por instrucción:cpi::swap_base_input se genera a partir del IDL; su lista de argumentos refleja la lista de argumentos de la instrucción Anchor.
Semillas firmantes (CPI firmada por PDA)
Cuando tu programa firma la CPI en nombre de un PDA (común para bóvedas, depósitos en garantía, etc.), usaCpiContext::new_with_signer:
authority (o rol firmante similar), el tiempo de ejecución de Solana verifica que el PDA firme a través de estas semillas.
Cuentas restantes
Algunas instrucciones de Raydium toman cuentas restantes — una lista de longitud variable añadida después de las cuentas fijas. Los ejemplos canónicos:- CLMM
SwapV2: añade 1–8 cuentasTickArrayStatecorrespondientes a los arrays de ticks que el swap podría atravesar. - Farm v6
Deposit: añade pares(reward_vault, user_reward_ata)para cada flujo de recompensa activo.
.with_remaining_accounts(...):
Propagación de errores
Los programas de Raydium devuelven sus propias enumeraciones de error. Anchor las envuelve; tu programa llamador las ve comoErr(ProgramError::Custom(code)). Para manejar errores específicos:
sdk-api/anchor-idl). Puedes probar contra códigos específicos comparando con el valor numérico.
Presupuesto de computación en CPIs compuestas
Cada frame CPI tiene sobrecarga (~1.500 CU para la llamada en sí), y el consumo propio de CU del receptor se suma al tuyo. Una transacción que invoca un swap CPMM desde dentro de tu programa gasta:ComputeBudgetProgram::set_compute_unit_limit(...) en la transacción — el límite de 200k CU predeterminado se agotará silenciosamente.
AMM v4 — construcción manual de Instruction
AMM v4 no tiene crate de Anchor. Construye elInstruction manualmente:
products/amm-v4/code-demos para la lista completa de cuentas.
Farm v6 — cuentas restantes de pares de recompensas
ElDeposit / Withdraw / Harvest de Farm v6 utilizan el patrón de pares (reward_vault_i, user_reward_ata_i) en cuentas restantes. Secuencia exacta:
farm_state.reward_infos[i].reward_state.
Prueba de un flujo CPI
El dev local requiere que los programas de Raydium estén disponibles en tu validador de prueba. Opciones:-
anchor testcon clon de programa — enAnchor.toml:Esto extrae el bytecode desplegado de mainnet hacia tu validador local. -
Devnet — Raydium despliega todos los programas en devnet con los mismos IDs de programa que mainnet. Ejecuta
anchor test --provider.cluster devnetpara alcanzar código activo. -
Despliegue local — clona los repos de Raydium e
anchor deployen un validador local. Añade sobrecarga de ciclo de prueba pero te permite modificar el receptor para debugging.
Referencias
products/cpmm/code-demos,products/clmm/code-demos,products/amm-v4/code-demos,products/farm-staking/code-demos— ejemplos CPI específicos del producto.sdk-api/anchor-idl— recuperación de IDL y regeneración de cliente.integration-guides/cpi-integration— patrones de nivel superior: depósitos en garantía, bóvedas, composición de agregador.


