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 →
Anatomía de la transacción
Una transacción en Solana tiene tres componentes principales:- Mensaje: la lista ordenada de instrucciones, las cuentas que referencian, y el blockhash reciente.
- Firmas: una por cada firmante, atestiguando que la transacción fue autorizada.
- Blockhash reciente: demuestra que la transacción es reciente; las transacciones con blockhashes obsoletos (>150 slots de antigüedad) son rechazadas.
Instrucciones
Una instrucción especifica:program_id— el programa a invocar.accounts— las cuentas (y sus indicadores de escribible/firmante) que el programa puede tocar.data— bytes opacos que el programa interpreta.
ComputeBudget::SetComputeUnitLimit— aumentar el límite de CU por defecto.ComputeBudget::SetComputeUnitPrice— establecer una tarifa de prioridad.CreateAssociatedTokenAccountopcional — crear el ATA de salida si el usuario no tiene uno.Raydium::SwapBaseInput— ejecutar el swap.CloseAccountopcional — cerrar un ATA de SOL envuelto.
raydium.trade.swap().
Cuentas en transacciones
Toda cuenta tocada por cualquier instrucción en la transacción debe estar listada en las claves de cuenta de la transacción. Cada cuenta está marcada:- Firmante / no firmante: ¿debe el propietario de la cuenta firmar la transacción?
- Escribible / solo lectura: ¿puede la transacción modificar la cuenta?
solana-fundamentals/account-model). Los swaps CLMM con múltiples cruces de tick pueden tener 20+.
Límite de tamaño de transacción
Solana limita las transacciones a 1232 bytes incluyendo firmas, mensaje y encabezados. Esta es la obstrucción más común para transacciones complejas — el CLMM de Raydium con enrutamiento multi-hop regularmente se acerca a este límite. Desglose de un swap típico de Raydium de ~1000 bytes:| Componente | Tamaño |
|---|---|
| Firma | 64 B |
| Contador de firmas | 1 B |
| Encabezado del mensaje | 3 B |
| Blockhash | 32 B |
| Claves de cuenta (13 × 32 B) | 416 B |
| Instrucciones (4 × ~100-150 B) | 400–600 B |
| Total | ~900–1100 B |
Tablas de búsqueda de direcciones (ALT)
Las ALT permiten que una transacción referencie cuentas por un índice de 1 byte en una tabla publicada en lugar de una clave pública completa de 32 bytes. Esto comprime una transacción drásticamente:- Una transacción que referencia 20 cuentas directamente: ~640 B de claves públicas.
- La misma transacción usando ALT: ~20 B de índices + referencias de ALT.
Presupuesto de cómputo
Cada transacción tiene un presupuesto de unidad de cómputo (CU). Excederlo termina la ejecución y falla la transacción.- Por defecto: 200,000 CU por transacción.
- Máximo: 1,400,000 CU por transacción (aumentado vía
ComputeBudget::SetComputeUnitLimit). - Límite por bloque: 48M CU por bloque (a nivel de protocolo).
integration-guides/priority-fee-tuning para la tabla completa):
| Instrucción | CU |
|---|---|
| Swap CPMM | ~140,000 |
| Swap CLMM (sin cruces de tick) | ~170,000 |
| Swap CLMM (4 cruces de tick) | ~320,000 |
| Farm v6 stake | ~130,000 |
| Creación de pool CPMM | ~250,000 |
ComputeBudget; de lo contrario, obtendrás el valor por defecto de 200k, que es demasiado bajo para la mayoría de instrucciones de Raydium.
Tarifas de prioridad
Más allá de la tarifa de transacción base (5000 lamports por firma), los validadores priorizan cada vez más transacciones que pagan tarifas de prioridad: una propina por CU en microlamports.integration-guides/priority-fee-tuning para cómo dimensionar esto dinámicamente.
Límites de contador de instrucciones y contador de cuentas
Más allá del límite total de 1232 bytes:- Máximo de cuentas por transacción: 128.
- Máximo de cuentas por instrucción (CPI): 64.
- Máximo de instrucciones por transacción: sin límite duro, limitado solo por el límite de tamaño.
- Profundidad máxima de CPI: 4 (un programa puede llamar otro, que puede llamar otro, 4 niveles de profundidad).
Categorías de tarifas en un swap de Raydium
Una transacción de swap del usuario paga tarifas en dos categorías:Tarifas de red de Solana
Pagadas a validadores en SOL.- Tarifa de firma base: 5000 lamports por firma. Casi siempre 1 firma = 0.000005 SOL.
- Tarifa de prioridad: CU-price × CU-limit en microlamports. Varía con la congestión; ver
integration-guides/priority-fee-tuning.
Tarifas del protocolo Raydium
Deducidas de la cantidad del swap.- Tarifa de swap: porcentaje de entrada (CPMM típicamente 0.25%, CLMM 0.01%–1% por tier). Dividida entre LP y destinos del protocolo. Ver
ray/protocol-fees.
Ejemplo: $1000 USDC → SOL vía CPMM tier 0.25%
| Categoría de tarifa | Cantidad | Va a |
|---|---|---|
| Tarifa de firma base | 0.000005 SOL (~$0.0007) | Validador |
| Tarifa de prioridad (10k µL × 300k CU) | 0.003 SOL (~$0.45) | Validador |
| Tarifa de swap CPMM (0.25%) | $2.50 | LP + protocolo |
| Costo total del usuario | ~$2.95 |
Transacciones versionadas
Solana tiene dos formatos de transacción:- Legacy: el formato original, sin soporte para ALT.
- v0 (Versionado): soporta ALT, extensible a versiones futuras.
Frescura del blockhash
Una transacción debe incluir un blockhash de los últimos ~150 slots (~60 segundos). Más allá de esa ventana, los validadores lo rechazan. Para bucles de reintento, obtén un blockhash fresco en cada reintento:integration-guides/priority-fee-tuning para el patrón completo de reintento con tarifas de escalada.
Ejecución paralela
Solana ejecuta transacciones sin conflictos en paralelo en validadores multi-core. Dos transacciones entran en conflicto si ambas escriben la misma cuenta. Implicaciones para Raydium:- Dos swaps en el mismo pool no pueden ejecutarse en paralelo — ambos escriben el estado del pool.
- Un swap en Pool A y un swap en Pool B se ejecutan en paralelo si las listas de cuentas no se superponen.
- Una transacción de solo lectura nunca bloquea un escritor en la misma cuenta (solo lectura es concurrente consigo mismo pero no con escrituras).
Niveles de confirmación de transacción
Al enviar una transacción, eliges un nivel de confirmación:| Nivel | Espera | Finalidad |
|---|---|---|
processed | ~400 ms | No finalizado; puede revertirse |
confirmed | ~1 s | Supermayoría votó |
finalized | ~13 s | Supermayoría enraizada |
confirmed es estándar. Para operaciones manejando valor grande (creación de pool, top-ups de recompensa), finalized es más seguro.
Simulación
Solana soporta simular una transacción antes de enviarla:getBestSwapInfo para verificar que la ruta elegida realmente funcione. La simulación no es gratis — consume capacidad de RPC — pero atrapa errores antes de pagarlos.
Referencias
solana-fundamentals/account-model— cuentas en transacciones.solana-fundamentals/pdas-and-cpis— cómo los programas se invocan entre sí.integration-guides/priority-fee-tuning— dimensionando límites de CU y tarifas de prioridad.ray/protocol-fees— estructura de tarifas del protocolo Raydium.

