When adding to a batch, a few things need to be kept in mind:
When a new transaction is added, a vault transaction will be initialized with this method, and the batch's local index will be incremented
The batchIndex field refers to the global index of the batch account (like any other transaction), while transactionIndex refers to the batch's inner index for the transaction being initialized (will start at 1 for the first transaction)
Example
import * as multisig from "@sqds/multisig";
import { Connection, PublicKey } from "@solana/web3.js"
async function main(member: PublicKey) {
// Cluster Connection
const connection = new Connection("<your rpc url>");
// If you've saved your createKey, you can define it as a static PublicKey
const createKey = new PublicKey("<your createkey>")
// Derive the multisig PDA
const [multisigPda] = multisig.getMultisigPda({
createKey,
});
// or
// const multisigPda = new PublicKey("<your multisig key>");
// Get deserialized multisig account info
const multisigInfo = await multisig.accounts.Multisig.fromAccountAddress(
connection,
multisigPda
);
// Get the current transaction index
const transactionIndex = Number(multisigInfo.transactionIndex);
// or, if this is tied to your first transaction
// const transactionIndex = 1n;
const instruction = SystemProgram.transfer({
fromPubkey: vaultPda,
toPubkey: creator.publicKey,
lamports: 1,
});
// This message contains the instructions that the transaction is going to execute
const transferMessage = new TransactionMessage({
payerKey: vaultPda,
recentBlockhash: (await connection.getLatestBlockhash()).blockhash,
instructions: [instruction],
});
// Add transaction to the batch
const batchAddIx = await multisig.instructions.batchAddTransaction({
// Index of the batch globally, like any other transaction
batchIndex: BigInt(newTransactionIndex),
multisigPda,
vaultIndex: 0,
transactionMessage: transferMessage,
// Index of the transaction inside of the batch! Not globally. Starts at 1
transactionIndex: 1,
ephemeralSigners: 0,
member: creator,
});
}
Notes
A Vault Transaction is initialized when you add to a batch
batchIndex field refers to a global index, while transactionIndex refers to the batch's inner index