Instruction

Instruction PDAs reference an on-chain account that stores information about instructions that are attached to a Transaction.

As with transaction PDAs, instruction PDAs also expect a numeric index relating to the number of instructions attached to a transaction. Every time an instruction is attached to a transaction, the instructionIndex will be bumped up by one. This provides a simple way to collect all instructions associated with a specific transaction. Deriving an instruction PDA requires a transaction PDA and the transactionIndex.

await anchor.web3.PublicKey.findProgramAddress([
    anchor.utils.bytes.utf8.encode("squad"),
    transaction.toBuffer(),
    instructionIndex.toBuffer("le", 1),  // note instruction index is an u8 (1 byte)
    anchor.utils.bytes.utf8.encode("instruction")
], programId);

Be sure to provide the instructionIndex as a single byte little-endian buffer.

The instruction PDA derivation format is as follows:

["squad", transaction, instructionIndex, "instruction"]