Samenvatting
De Instructions sysvar (Sysvar1nstructions1111111111111111111111111) stelt
een programma in staat om alle top-level instructies in de huidige transactie
te lezen op basis van index of relatieve offset. CPI inner instructions zijn
niet toegankelijk.
Instructions sysvar
Programma's kunnen alle top-level instructies in de huidige transactie
inspecteren via de Instructions sysvar
(Sysvar1nstructions1111111111111111111111111). Hiermee kan een programma de
andere instructies in dezelfde transactie inspecteren, bijvoorbeeld om te
verifiëren dat een specifieke instructie zich in dezelfde transactie bevindt als
de instructie die het uitvoert.
De Instructions sysvar bevat alleen top-level instructies uit het transactiebericht. Inner instructions die via CPI worden aangeroepen, zijn niet toegankelijk via deze sysvar.
De instructions sysvar wordt niet benaderd via de normale Sysvar trait. In
plaats daarvan wordt deze benaderd via vrije functies in de
solana_instructions_sysvar
crate.
De sysvar-data is geserialiseerd met een aangepaste binaire indeling:
| Offset | Grootte | Beschrijving |
|---|---|---|
| 0 | 2 | num_instructions (u16, little-endian) |
| 2 | 2 * N | Byte-offsets voor elke instructie (u16 elk) |
| varieert | varieert | Geserialiseerde instructiedata |
| laatste 2 bytes | 2 | Huidige instructie-index (u16, little-endian) |
Elke geserialiseerde instructie bevat: het aantal accounts (u16), de accounts als 33-byte entries (1 flag-byte + 32-byte pubkey), de program ID (32 bytes), de datalengte (u16) en de ruwe databytes.
Belangrijkste functies:
load_current_index_checked(account_info): Retourneert de index van de momenteel uitgevoerde instructie. De runtime werkt deze waarde bij telkens wanneer een nieuwe top-level instructie begint.load_instruction_at_checked(index, account_info): Deserialiseert de instructie op de gegeven absolute index.get_instruction_relative(offset, account_info): Laadt een instructie relatief ten opzichte van de huidige (bijv.-1voor de vorige instructie,1voor de volgende).
Is this page helpful?