> ## Documentation Index
> Fetch the complete documentation index at: https://new-docs.squads.so/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Vault Transaction

## Overview

Add arbitrary transactions to execute through your multisig. Vault Transactions allow you to take actions from programs across Solana and execute them inside your multisig.

## Prerequisites

* Existing multisig
* `@sqds/multisig` package installed
* Member with Proposer permissions

## Quick Example

```typescript theme={null}
import * as multisig from "@sqds/multisig";
import { PublicKey, Connection, SystemProgram, TransactionMessage } from "@solana/web3.js";

const connection = new Connection("<your rpc url>");

const [multisigPda] = multisig.getMultisigPda({
  createKey: new PublicKey("<your createkey>"),
});

const [vaultPda] = multisig.getVaultPda({
  multisigPda,
  index: 0,
});
```

## Parameters

| Parameter | Type | Required | Description |
| - | - | - | - |
| `multisigPda` | `PublicKey` | Yes | PDA of the multisig |
| `transactionIndex` | `bigint` | Yes | Index for this transaction (current index + 1) |
| `creator` | `PublicKey` | Yes | Member creating the transaction |
| `vaultIndex` | `number` | Yes | Index of the vault to execute from |
| `ephemeralSigners` | `number` | Yes | Number of ephemeral signers needed (use `0` if none) |
| `transactionMessage` | `TransactionMessage` | Yes | Message containing instructions to execute |
| `memo` | `string` | No | Optional memo for the transaction |

## Full Example

```typescript theme={null}
import * as multisig from "@sqds/multisig";
import { PublicKey, Connection, LAMPORTS_PER_SOL, 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>");

    // Derive the PDA of the Squads Vault
    const [vaultPda] = multisig.getVaultPda({
        multisigPda,
        index: 0,
    });

    // Get deserialized multisig account info
    const multisigInfo = await multisig.accounts.Multisig.fromAccountAddress(
      connection,
      multisigPda
    );

    // Get the updated transaction index
    const currentTransactionIndex = Number(multisigInfo.transactionIndex);
    const newTransactionIndex = BigInt(currentTransactionIndex + 1);

    const to = new PublicKey("<>");

    const transferInstruction = SystemProgram.transfer({
        // The transfer is being signed by the vault that's executing
        fromPubkey: vaultPda,
        toPubkey: to,
        lamports: 1 * LAMPORTS_PER_SOL
    });

    // Build a message with instructions we want to execute
    const testTransferMessage = new TransactionMessage({
        payerKey: vaultPda,
        recentBlockhash: (await connection.getLatestBlockhash()).blockhash,
        instructions: [transferInstruction],
    });

    const ix = await multisig.instructions.vaultTransactionCreate({
        multisigPda,
        transactionIndex: newTransactionIndex,
        creator: member,
        vaultIndex: 0,
        ephemeralSigners: 0,
        transactionMessage: testTransferMessage,
        memo: "Our first transfer!"
    });
}
```

## Error Handling

| Error | Cause | Solution |
| - | - | - |
| Invalid transaction index | Wrong index value | Fetch current index from multisig account |
| Insufficient permissions | Member lacks Proposer permission | Use a member with Proposer permissions |

## See Also

* [Vault Transaction Account](/developers/typescript-sdk/accounts/transactions#vault-transactions)
* [Create Proposal](/developers/typescript-sdk/instructions/create-proposal)
* [Execute Vault Transaction](/developers/typescript-sdk/instructions/execute-vault-transaction)
* [Reference: Vault Transaction](/developers/reference/accounts#vault-transaction)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.