Resumen
El sysvar Instructions (Sysvar1nstructions1111111111111111111111111) permite
a un programa leer todas las instrucciones de nivel superior en la transacción
actual por índice o desplazamiento relativo. Las instrucciones internas de CPI
no son accesibles.
Sysvar Instructions
Los programas pueden inspeccionar todas las instrucciones de nivel superior en
la transacción actual a través del sysvar Instructions
(Sysvar1nstructions1111111111111111111111111). Esto permite a un programa
inspeccionar las otras instrucciones en la misma transacción, por ejemplo, para
verificar que una instrucción específica esté en la misma transacción que la
instrucción que está ejecutando.
El sysvar Instructions solo contiene instrucciones de nivel superior del mensaje de transacción. Las instrucciones internas invocadas mediante CPI no son accesibles a través de este sysvar.
El sysvar instructions no se accede a través del trait normal Sysvar. En
su lugar, se accede a través de funciones libres en el crate
solana_instructions_sysvar.
Los datos del sysvar se serializan con un diseño binario personalizado:
| Desplazamiento | Tamaño | Descripción |
|---|---|---|
| 0 | 2 | num_instructions (u16, little-endian) |
| 2 | 2 * N | Desplazamientos de bytes para cada instrucción (u16 cada uno) |
| varía | varía | Datos de instrucción serializados |
| últimos 2 bytes | 2 | Índice de instrucción actual (u16, little-endian) |
Cada instrucción serializada contiene: el número de cuentas (u16), las cuentas como entradas de 33 bytes (1 byte de bandera + pubkey de 32 bytes), el ID del programa (32 bytes), la longitud de los datos (u16) y los bytes de datos sin procesar.
Funciones clave:
load_current_index_checked(account_info): Devuelve el índice de la instrucción que se está ejecutando actualmente. El runtime actualiza este valor cada vez que comienza una nueva instrucción de nivel superior.load_instruction_at_checked(index, account_info): Deserializa la instrucción en el índice absoluto dado.get_instruction_relative(offset, account_info): Carga una instrucción relativa a la actual (por ejemplo,-1para la instrucción anterior,1para la siguiente).
Is this page helpful?