概要
Instructions sysvar (Sysvar1nstructions1111111111111111111111111)
を使用すると、プログラムは現在のトランザクション内のすべてのトップレベルinstructionsをインデックスまたは相対オフセットで読み取ることができます。CPIインナーinstructionsにはアクセスできません。
Instructions sysvar
プログラムは、Instructions sysvar
(Sysvar1nstructions1111111111111111111111111) を介して、現在のトランザクション内のすべてのトップレベルinstructionsを検査できます。これにより、プログラムは同じトランザクション内の他のinstructionsを検査できます。例えば、特定のinstructionが実行中のinstructionと同じトランザクション内にあることを確認できます。
Instructions sysvarには、トランザクションメッセージからのトップレベルinstructionsのみが含まれます。CPIを介して呼び出されたインナーinstructionsは、このsysvarを通じてアクセスできません。
Instructions sysvarは、通常の Sysvar
トレイトを通じてアクセスされません。代わりに、solana_instructions_sysvar
クレート内のフリー関数を通じてアクセスされます。
Sysvarデータは、カスタムバイナリレイアウトでシリアライズされます。
| オフセット | サイズ | 説明 |
|---|---|---|
| 0 | 2 | num_instructions (u16、リトルエンディアン) |
| 2 | 2 * N | 各instructionのバイトオフセット (各u16) |
| 可変 | 可変 | シリアライズされたinstruction data |
| 最後の2バイト | 2 | 現在のinstructionインデックス (u16、リトルエンディアン) |
シリアライズされた各instructionには、アカウント数 (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?