Résumé
Le sysvar Instructions (Sysvar1nstructions1111111111111111111111111) permet
à un programme de lire toutes les instructions de niveau supérieur dans la
transaction actuelle par index ou décalage relatif. Les instructions internes
CPI ne sont pas accessibles.
Sysvar Instructions
Les programmes peuvent inspecter toutes les instructions de niveau supérieur
dans la transaction actuelle via le sysvar Instructions
(Sysvar1nstructions1111111111111111111111111). Cela permet à un programme
d'inspecter les autres instructions dans la même transaction, par exemple pour
vérifier qu'une instruction spécifique se trouve dans la même transaction que
l'instruction qu'il exécute.
Le sysvar Instructions ne contient que les instructions de niveau supérieur du message de transaction. Les instructions internes invoquées via CPI ne sont pas accessibles via ce sysvar.
Le sysvar instructions n'est pas accessible via le trait Sysvar normal. Au
lieu de cela, il est accessible via des fonctions libres dans la crate
solana_instructions_sysvar.
Les données du sysvar sont sérialisées avec une disposition binaire personnalisée :
| Décalage | Taille | Description |
|---|---|---|
| 0 | 2 | num_instructions (u16, little-endian) |
| 2 | 2 * N | Décalages d'octets pour chaque instruction (u16 chacun) |
| variable | variable | Données d'instruction sérialisées |
| 2 derniers octets | 2 | Index de l'instruction actuelle (u16, little-endian) |
Chaque instruction sérialisée contient : le nombre de comptes (u16), les comptes sous forme d'entrées de 33 octets (1 octet de drapeau + clé publique de 32 octets), l'ID du programme (32 octets), la longueur des données (u16) et les octets de données brutes.
Fonctions clés :
load_current_index_checked(account_info): Renvoie l'index de l'instruction en cours d'exécution. Le runtime met à jour cette valeur chaque fois qu'une nouvelle instruction de niveau supérieur commence.load_instruction_at_checked(index, account_info): Désérialise l'instruction à l'index absolu donné.get_instruction_relative(offset, account_info): Charge une instruction relative à l'instruction actuelle (par exemple,-1pour l'instruction précédente,1pour la suivante).
Is this page helpful?