> For the complete documentation index, see [llms.txt](https://docs.dcaf.so/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.dcaf.so/products/drip/programming-model/vault.md).

# Vault

The `Vault` is the main account for a token pair and granularity. The `Vault` account is a PDA composed of the following seeds:

```rust
seeds = [
    b"drip-v1".as_ref(),
    token_a_mint.key().as_ref(),
    token_b_mint.key().as_ref(),
    vault_proto_config.key().as_ref(),
],
```

The `Vault` combined with the `Vault Period` is responsible for making sure that user funds are kept track of correctly on deposits and withdraws. The `Vault` also performs the the `Drips` in every period.

```rust
pub struct Vault {
    // Account relations
    pub proto_config: Pubkey,                                   // 32
    pub token_a_mint: Pubkey,                                   // 32
    pub token_b_mint: Pubkey,                                   // 32
    pub token_a_account: Pubkey,                                // 32
    pub token_b_account: Pubkey,                                // 32
    pub treasury_token_b_account: Pubkey,                       // 32
    pub whitelisted_swaps: [Pubkey; VAULT_SWAP_WHITELIST_SIZE], // 32*5

    // Data
    // 1 to N
    pub last_drip_period: u64,          // 8
    pub drip_amount: u64,               // 8
    pub drip_activation_timestamp: i64, // 8
    pub bump: u8,                       // 1
    pub limit_swaps: bool,              // 1
    pub max_slippage_bps: u16,          // 2
}
```
