Zusammenfassung
Die Instructions-Sysvar (Sysvar1nstructions1111111111111111111111111)
ermöglicht es einem Programm, alle Top-Level-Anweisungen in der aktuellen
Transaktion nach Index oder relativem Offset zu lesen. CPI-innere Anweisungen
sind nicht zugänglich.
Instructions-Sysvar
Programme können alle Top-Level-Anweisungen in der aktuellen Transaktion über
die Instructions-Sysvar (Sysvar1nstructions1111111111111111111111111)
inspizieren. Dies ermöglicht es einem Programm, die anderen Anweisungen in
derselben Transaktion zu überprüfen, beispielsweise um zu verifizieren, dass
eine bestimmte Anweisung in derselben Transaktion wie die Anweisung enthalten
ist, die es gerade ausführt.
Die Instructions-Sysvar enthält nur Top-Level-Anweisungen aus der Transaktionsnachricht. Innere Anweisungen, die über CPI aufgerufen werden, sind nicht über diese Sysvar zugänglich.
Auf die Instructions-Sysvar wird nicht über das normale Sysvar-Trait
zugegriffen. Stattdessen erfolgt der Zugriff über freie Funktionen in der
solana_instructions_sysvar-Crate.
Die Sysvar-Daten werden mit einem benutzerdefinierten Binärlayout serialisiert:
| Offset | Größe | Beschreibung |
|---|---|---|
| 0 | 2 | num_instructions (u16, Little-Endian) |
| 2 | 2 * N | Byte-Offsets für jede Anweisung (jeweils u16) |
| variiert | variiert | Serialisierte Anweisungsdaten |
| letzte 2 Bytes | 2 | Aktueller Anweisungsindex (u16, Little-Endian) |
Jede serialisierte Anweisung enthält: die Anzahl der Konten (u16), die Konten als 33-Byte-Einträge (1 Flag-Byte + 32-Byte-Pubkey), die Programm-ID (32 Bytes), die Datenlänge (u16) und die rohen Datenbytes.
Hauptfunktionen:
load_current_index_checked(account_info): Gibt den Index der aktuell ausgeführten Anweisung zurück. Die Runtime aktualisiert diesen Wert jedes Mal, wenn eine neue Top-Level-Anweisung beginnt.load_instruction_at_checked(index, account_info): Deserialisiert die Anweisung am angegebenen absoluten Index.get_instruction_relative(offset, account_info): Lädt eine Anweisung relativ zur aktuellen (z. B.-1für die vorherige Anweisung,1für die nächste).
Is this page helpful?