Riepilogo
Il sysvar Instructions (Sysvar1nstructions1111111111111111111111111)
consente a un programma di leggere tutte le istruzioni di livello superiore
nella transazione corrente per indice o offset relativo. Le istruzioni interne
CPI non sono accessibili.
Sysvar Instructions
I programmi possono ispezionare tutte le istruzioni di livello superiore nella
transazione corrente tramite il sysvar Instructions
(Sysvar1nstructions1111111111111111111111111). Questo consente a un programma
di ispezionare le altre istruzioni nella stessa transazione, ad esempio per
verificare che un'istruzione specifica sia nella stessa transazione
dell'istruzione che sta eseguendo.
Il sysvar Instructions contiene solo le istruzioni di livello superiore dal messaggio della transazione. Le istruzioni interne invocate tramite CPI non sono accessibili attraverso questo sysvar.
Il sysvar instructions non è accessibile tramite il normale trait Sysvar.
Invece, è accessibile tramite funzioni libere nel crate
solana_instructions_sysvar.
I dati del sysvar sono serializzati con un layout binario personalizzato:
| Offset | Dimensione | Descrizione |
|---|---|---|
| 0 | 2 | num_instructions (u16, little-endian) |
| 2 | 2 * N | Offset di byte per ogni istruzione (u16 ciascuno) |
| variabile | variabile | Dati dell'istruzione serializzati |
| ultimi 2 byte | 2 | Indice dell'istruzione corrente (u16, little-endian) |
Ogni istruzione serializzata contiene: il numero di account (u16), gli account come voci da 33 byte (1 byte di flag + pubkey da 32 byte), l'ID del programma (32 byte), la lunghezza dei dati (u16) e i byte di dati grezzi.
Funzioni chiave:
load_current_index_checked(account_info): Restituisce l'indice dell'istruzione attualmente in esecuzione. Il runtime aggiorna questo valore ogni volta che inizia una nuova istruzione di livello superiore.load_instruction_at_checked(index, account_info): Deserializza l'istruzione all'indice assoluto specificato.get_instruction_relative(offset, account_info): Carica un'istruzione relativa a quella corrente (ad esempio,-1per l'istruzione precedente,1per la successiva).
Is this page helpful?