> ## 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.

# Accounts Reference

## Overview

Account types in Squads V4, including PDA seeds and Rust struct definitions. The program for all derivations is the Squads V4 program ID:

```
SQDS4ep65T869zMMBKyuUq6aD6EgTu8psMjkvj52pCf
```

<img src="https://mintcdn.com/multisig/uKaz8ThLiWGC6N2n/images/solana-pda-program-derived-addresses-multisig-pda-solana-multi-signature-program.png?fit=max&auto=format&n=uKaz8ThLiWGC6N2n&q=85&s=60301e61b05cd40261f457a7102e53b8" alt="PDA Account Structure" width="668" height="576" data-path="images/solana-pda-program-derived-addresses-multisig-pda-solana-multi-signature-program.png" />

***

## Multisig

The multisig account is the main config for your Squad. Contains threshold, members, config authority, and time-lock settings.

### PDA Derivation

```
["multisig", "multisig", createKey]
```

The `createKey` is a unique Public Key made specifically to derive the Multisig PDA.

### Account Structure

```rust theme={null}
#[account]
pub struct Multisig {
    /// Key that is used to seed the multisig PDA.
    pub create_key: Pubkey,
    /// The authority that can change the multisig config.
    /// This is a very important parameter as this authority can change the members and threshold.
    ///
    /// The convention is to set this to `Pubkey::default()`.
    /// In this case, the multisig becomes autonomous, so every config change goes through
    /// the normal process of voting by the members.
    ///
    /// However, if this parameter is set to any other key, all the config changes for this multisig
    /// will need to be signed by the `config_authority`. We call such a multisig a "controlled multisig".
    pub config_authority: Pubkey,
    /// Threshold for signatures.
    pub threshold: u16,
    /// How many seconds must pass between transaction voting settlement and execution.
    pub time_lock: u32,
    /// Last transaction index. 0 means no transactions have been created.
    pub transaction_index: u64,
    /// Last stale transaction index. All transactions up until this index are stale.
    /// This index is updated when multisig config (members/threshold/time_lock) changes.
    pub stale_transaction_index: u64,
    /// The address where the rent for the accounts related to executed, rejected, or cancelled
    /// transactions can be reclaimed. If set to `None`, the rent reclamation feature is turned off.
    pub rent_collector: Option<Pubkey>,
    /// Bump for the multisig PDA seed.
    pub bump: u8,
    /// Members of the multisig.
    pub members: Vec<Member>,
}
```

***

## Proposal

Tracks votes cast by members for a given transaction. Stores the status and enables execution once threshold is met.

### PDA Derivation

```
["multisig", multisig_key (as buffer), "transaction", transaction_index, "proposal"]
```

The `transaction_index` is auto-incrementing based on your Multisig's total transactions.

### Account Structure

```rust theme={null}
#[account]
pub struct Proposal {
    /// The multisig this belongs to.
    pub multisig: Pubkey,
    /// Index of the multisig transaction this proposal is associated with.
    pub transaction_index: u64,
    /// The status of the transaction.
    pub status: ProposalStatus,
    /// PDA bump.
    pub bump: u8,
    /// Keys that have approved/signed.
    pub approved: Vec<Pubkey>,
    /// Keys that have rejected.
    pub rejected: Vec<Pubkey>,
    /// Keys that have cancelled (Approved only).
    pub cancelled: Vec<Pubkey>,
}
```

***

## Vault Transaction

Stores a transaction message that is voted on via a proposal.

### PDA Derivation

```
["multisig", multisig_key (as buffer), "transaction", transaction_index]
```

### Account Structure

```rust theme={null}
#[account]
pub struct VaultTransaction {
    /// The multisig this belongs to.
    pub multisig: Pubkey,
    /// Member of the Multisig who submitted the transaction.
    pub creator: Pubkey,
    /// Index of this transaction within the multisig.
    pub index: u64,
    /// bump for the transaction seeds.
    pub bump: u8,
    /// Index of the vault this transaction belongs to.
    pub vault_index: u8,
    /// Derivation bump of the vault PDA this transaction belongs to.
    pub vault_bump: u8,
    /// Derivation bumps for additional signers.
    /// Some transactions require multiple signers. Often these additional signers are "ephemeral" keypairs
    /// that are generated on the client with a sole purpose of signing the transaction and be discarded immediately after.
    /// When wrapping such transactions into multisig ones, we replace these "ephemeral" signing keypairs
    /// with PDAs derived from the MultisigTransaction's `transaction_index` and controlled by the Multisig Program;
    /// during execution the program includes the seeds of these PDAs into the `invoke_signed` calls,
    /// thus "signing" on behalf of these PDAs.
    pub ephemeral_signer_bumps: Vec<u8>,
    /// data required for executing the transaction.
    pub message: VaultTransactionMessage,
}
```

***

## Batch

Stores a collection of vault transactions for grouped voting and execution.

### PDA Derivation

```
["multisig", multisig_key (as buffer), "transaction", transaction_index]
```

### Account Structure

```rust theme={null}
#[account]
#[derive(InitSpace)]
pub struct Batch {
    /// The multisig this belongs to.
    pub multisig: Pubkey,
    /// Member of the Multisig who submitted the batch.
    pub creator: Pubkey,
    /// Index of this batch within the multisig transactions.
    pub index: u64,
    /// PDA bump.
    pub bump: u8,
    /// Index of the vault this batch belongs to.
    pub vault_index: u8,
    /// Derivation bump of the vault PDA this batch belongs to.
    pub vault_bump: u8,
    /// Number of transactions in the batch.
    pub size: u32,
    /// Index of the last executed transaction within the batch.
    /// 0 means that no transactions have been executed yet.
    pub executed_transaction_index: u32,
}
```

***

## Config Transaction

Similar to vault transaction but deals directly with configuration parameters. Used when there is no set config authority.

### PDA Derivation

```
["multisig", multisig_key (as buffer), "transaction", transaction_index]
```

### Account Structure

```rust theme={null}
#[account]
pub struct ConfigTransaction {
    /// The multisig this belongs to.
    pub multisig: Pubkey,
    /// Member of the Multisig who submitted the transaction.
    pub creator: Pubkey,
    /// Index of this transaction within the multisig.
    pub index: u64,
    /// bump for the transaction seeds.
    pub bump: u8,
    /// Action to be performed on the multisig.
    pub actions: Vec<ConfigAction>,
}
```

## See Also

* [Multisig Account (SDK)](/developers/typescript-sdk/accounts/multisig)
* [Transaction Accounts (SDK)](/developers/typescript-sdk/accounts/transactions)
* [Proposal Account (SDK)](/developers/typescript-sdk/accounts/proposal)


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