Підсумок
Системна змінна Instructions (Sysvar1nstructions1111111111111111111111111)
дозволяє програмі читати всі інструкції верхнього рівня в поточній транзакції
за індексом або відносним зміщенням. Внутрішні інструкції CPI недоступні.
Системна змінна Instructions
Програми можуть перевіряти всі інструкції верхнього рівня в поточній транзакції
через системну змінну Instructions
(Sysvar1nstructions1111111111111111111111111). Це дозволяє програмі перевіряти
інші інструкції в тій самій транзакції, наприклад, щоб переконатися, що певна
інструкція знаходиться в тій самій транзакції, що й інструкція, яку вона
виконує.
Системна змінна Instructions містить лише інструкції верхнього рівня з повідомлення транзакції. Внутрішні інструкції, викликані через CPI, недоступні через цю системну змінну.
До системної змінної instructions не звертаються через звичайний трейт
Sysvar. Натомість до неї звертаються через вільні функції в крейті
solana_instructions_sysvar.
Дані системної змінної серіалізовані з власним бінарним форматом:
| Зміщення | Розмір | Опис |
|---|---|---|
| 0 | 2 | num_instructions (u16, little-endian) |
| 2 | 2 * N | Байтові зміщення для кожної інструкції (u16 кожне) |
| змінне | змінний | Серіалізовані дані інструкції |
| останні 2 байти | 2 | Індекс поточної інструкції (u16, little-endian) |
Кожна серіалізована інструкція містить: кількість акаунтів (u16), акаунти як 33-байтові записи (1 байт прапорця + 32-байтовий pubkey), ідентифікатор програми (32 байти), довжину даних (u16) та необроблені байти даних.
Ключові функції:
load_current_index_checked(account_info): Повертає індекс інструкції, що виконується в даний момент. Середовище виконання оновлює це значення щоразу, коли починається нова інструкція верхнього рівня.load_instruction_at_checked(index, account_info): Десеріалізує інструкцію за вказаним абсолютним індексом.get_instruction_relative(offset, account_info): Завантажує інструкцію відносно поточної (наприклад,-1для попередньої інструкції,1для наступної).
Is this page helpful?