To create a transaction for the multisig to act upon first derive a PDA for the transaction. The transaction PDA is used to reference the account created, and will store some basic information about the transaction.
In addition to the PDA, creating a transaction also requires and authority index.
A complete example to create a new Transaction with the expected transactionIndex
// fetch the multisig
const multisigAccount = await squadsProgram.account.ms.fetch(multisig);
// get the next expected transactionIndex
const transactionIndex = new anchor.BN(multisigAccount.transactionIndex + 1);
// get the transaction PDA
const transaction = await anchor.web3.PublicKey.findProgramAddress(
anchor.utils.bytes.utf8.encode("squad"),
multisig.toBuffer(),
transactionIndex.toBuffer("le", 4), // or .toArrayLike(Buffer, "le", 4)
anchor.utils.bytes.utf8.encode("transaction")
);
// get the public key of the payer/creator
const creator = wallet.publicKey;
await program.methods.createTransaction(1) //using authorityIndex of 1
.accounts({
multisig, // the multisig PDA
transaction, // the transaction PDA
creator // the creator/payer of the transaction acccount
})
.rpc();
After being created, the transaction will remain in a Draft status, until it is activated by the member key that created it.