概要
Instructions
sysvar(Sysvar1nstructions1111111111111111111111111)允许程序通过索引或相对偏移读取当前交易中的所有顶层指令。CPI
内部指令不可访问。
Instructions sysvar
程序可以通过 Instructions
sysvar(Sysvar1nstructions1111111111111111111111111)检查当前交易中的所有顶层指令。这使得程序能够检查同一笔交易中的其他指令,例如验证某个特定指令是否与当前正在执行的指令在同一笔交易中。
Instructions sysvar 仅包含交易消息中的顶层指令。通过 CPI 调用的内部指令无法通过该 sysvar 访问。
instructions sysvar 不是通过常规的 Sysvar trait 访问的,而是通过
solana_instructions_sysvar
crate 中的自由函数访问。
sysvar 数据采用自定义二进制布局进行序列化:
| 偏移量 | 大小 | 描述 |
|---|---|---|
| 0 | 2 | num_instructions(u16,小端序) |
| 2 | 2 * N | 每个指令的字节偏移量(每个 u16) |
| 可变 | 可变 | 序列化的指令数据 |
| 最后 2 字节 | 2 | 当前指令索引(u16,小端序) |
每个序列化的指令包含:账户数量(u16)、账户(每个为 33 字节,1 个标志字节 + 32 字节 pubkey)、程序 ID(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?