import * as multisig from "@sqds/multisig";
import { Connection, PublicKey, SystemProgram, TransactionMessage } 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
);
// Index of the batch. Here the batch is the latest transaction of the multisig
const batchIndex = BigInt(multisigInfo.transactionIndex.toString());
// or, if the batch is your first transaction
// const batchIndex = 1n;
// Derive the PDA of the Squads Vault
const [vaultPda] = multisig.getVaultPda({
multisigPda,
index: 0,
});
const instruction = SystemProgram.transfer({
fromPubkey: vaultPda,
toPubkey: member,
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,
multisigPda,
vaultIndex: 0,
transactionMessage: transferMessage,
// Index of the transaction inside of the batch! Not globally. Starts at 1
transactionIndex: 1,
ephemeralSigners: 0,
// Must be the member who created the batch
member,
});
}