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