# 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
}
```
