Presupuesto de cómputo

Resumen

Por defecto 200K CUs por instrucción, 1.4M máximo por transacción. Usa las instrucciones SetComputeUnitLimit y SetComputeUnitPrice para optimizar. La tarifa de prioridad se basa en las CUs solicitadas, no en el uso real.

Límite de unidades de cómputo

A cada instrucción se le asigna por defecto 200,000 CUs, y cada transacción tiene un límite de 1,400,000 CUs. Cuando no hay una instrucción SetComputeUnitLimit explícita, el valor por defecto se calcula según el tipo de instrucción:

Default CU limit calculation
default_cu_limit = (num_non_migratable_builtin_instructions * 3,000)
+ (num_not_migrated_builtin_instructions * 3,000)
+ (num_non_builtin_instructions * 200,000)
+ (num_migrated_builtin_instructions * 200,000)
  • Instrucciones integradas (System Program, Stake, Vote, etc. que no han sido migradas a SBF): cada una asignada MAX_BUILTIN_ALLOCATION_COMPUTE_UNIT_LIMIT = 3,000 CUs (según SIMD-0170).
  • Instrucciones no integradas (programas SBF desplegados por el usuario): cada una asignada DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT = 200,000 CUs.
  • Integradas en migración que han completado la migración a SBF (controladas por feature gate): tratadas como no integradas (200,000 CUs cada una).

El resultado se limita a MAX_COMPUTE_UNIT_LIMIT (1,400,000).

Puedes anular este valor por defecto incluyendo una instrucción SetComputeUnitLimit en tu transacción.

Para determinar el límite de CU apropiado:

  1. Simula la transacción para medir el consumo de CU.
  2. Añade un margen de seguridad del 10% al valor simulado.

La tarifa de prioridad se determina por el límite de unidades de cómputo solicitado en la transacción, no por el número real de unidades de cómputo utilizadas. Si estableces un límite de unidades de cómputo demasiado alto o usas la cantidad por defecto, pagas por unidades de cómputo no utilizadas.

Instrucciones de presupuesto de cómputo

El Programa de presupuesto de cómputo (ComputeBudget111111111111111111111111111111) tiene cuatro instrucciones.

VarianteDiscriminadorParámetroTipoDescripción
RequestHeapFrame1bytesu32Tamaño de heap solicitado en bytes para cada programa en la transacción
SetComputeUnitLimit2unitsu32CUs máximas que la transacción puede consumir
SetComputeUnitPrice3micro_lamportsu64Precio de CU en micro-lamports
SetLoadedAccountsDataSizeLimit4bytesu32Bytes totales máximos de datos de cuenta que la transacción puede cargar

Fuente: enum ComputeBudgetInstruction

Restricciones y condiciones de error

Las siguientes reglas se aplican al procesar instrucciones de presupuesto de cómputo:

  • Una por tipo: solo se permite una de cada variante de instrucción por transacción. Incluir duplicados causa un error DuplicateInstruction (la transacción completa falla).
  • RequestHeapFrame: el valor debe estar entre MIN_HEAP_FRAME_BYTES (32 KiB) y MAX_HEAP_FRAME_BYTES (256 KiB), y debe ser un múltiplo de 1024. De lo contrario, la transacción falla con InvalidInstructionData. El tamaño del heap se aplica a cada programa invocado en la transacción (incluyendo CPIs).
  • SetComputeUnitLimit: se acepta cualquier valor u32. El límite efectivo se limita a MAX_COMPUTE_UNIT_LIMIT (1 400 000).
  • SetComputeUnitPrice: se acepta cualquier valor u64 (0 a u64::MAX).
  • SetLoadedAccountsDataSizeLimit: el valor debe ser mayor que 0 (NonZeroU32). Un valor de 0 causa InvalidLoadedAccountsDataSizeLimit. El límite efectivo se limita a MAX_LOADED_ACCOUNTS_DATA_SIZE_BYTES (64 MiB).
  • Datos no reconocidos: cualquier instrucción enviada al programa de presupuesto de cómputo que no se deserialice a una variante conocida falla con InvalidInstructionData.

El modelo de costos del planificador que se describe a continuación describe la estimación de costos previa a la ejecución interna del validador. La mayoría de los desarrolladores solo necesitan las instrucciones de presupuesto de cómputo anteriores.

Modelo de costos del planificador

El planificador del validador utiliza un modelo de costos para estimar el uso de recursos de la transacción antes de la ejecución. Estas estimaciones de costos previas a la ejecución determinan si una transacción cabe dentro de la capacidad restante del bloque. Son independientes de la medición de CU que ocurre durante la ejecución.

El costo total del planificador es la suma de cinco componentes (UsageCostDetails::sum):

Scheduler cost formula
total_cost = signature_cost
+ write_lock_cost
+ data_bytes_cost
+ programs_execution_cost
+ loaded_accounts_data_size_cost

Componentes de costo

ComponenteDescripción
Costo de firmaCosto por firma para cada tipo de firma
Costo de bloqueo de escrituraPor cuenta escribible
Costo de instruction dataBasado en el total de bytes de instruction data
Costo de ejecución de programasLímite de CU del presupuesto de cómputo o predeterminado
Costo de datos de cuentas cargadasBasado en el tamaño total de datos de cuentas cargadas

Todos los valores están en unidades de cómputo.

Constantes de costo del planificador

Costo de transacción de voto

Las transacciones de voto utilizan un costo estático de 3,428 CUs independientemente de su contenido real.

Límites de bloque

El planificador aplica límites por bloque. Si agregar una transacción excediera cualquier límite, no se incluye en el bloque.

SIMD-0286 propone aumentar MAX_BLOCK_UNITS a 100,000,000.

Constantes de presupuesto de ejecución

Las siguientes constantes de execution_budget.rs definen los límites de tiempo de ejecución durante la ejecución de transacciones:

ConstanteValorDescripción
MAX_COMPUTE_UNIT_LIMIT1,400,000Límite máximo de CU por transacción
DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT200,000CU predeterminadas por instrucción no integrada
MAX_BUILTIN_ALLOCATION_COMPUTE_UNIT_LIMIT3,000CU predeterminadas por instrucción integrada (SIMD-0170)
DEFAULT_HEAP_COST8 CUCoste por página de heap de 32 KiB
DEFAULT_INVOCATION_COST1,000 CUCoste de una invocación CPI
INVOKE_UNITS_COST_SIMD_0339946 CUCoste de invocación CPI con SIMD-0339
MIN_HEAP_FRAME_BYTES32,768Tamaño mínimo de heap (32 KiB)
MAX_HEAP_FRAME_BYTES262,144Tamaño máximo de heap (256 KiB)
MAX_LOADED_ACCOUNTS_DATA_SIZE_BYTES67,108,864Datos de cuenta cargados máximos por transacción (64 MiB)
MAX_INSTRUCTION_STACK_DEPTH5Profundidad máxima de pila de instrucciones (nivel superior + CPI)
MAX_INSTRUCTION_STACK_DEPTH_SIMD_02689Profundidad máxima de pila de instrucciones (nivel superior + CPI) con SIMD-0268
MAX_CALL_DEPTH64Profundidad máxima de llamada SBF a SBF dentro de un programa
STACK_FRAME_SIZE4,096 bytesTamaño de un marco de pila SBF

Is this page helpful?

Tabla de Contenidos

Editar Página

Gestionado por

© 2026 Fundación Solana.
Todos los derechos reservados.
Conéctate