# Auto-compounding vaults (Berachain)

Raga Finance's vault system is designed to manage user deposits, execute investment strategies, handle fees, and optimize yield generation through a combination of on-chain smart contracts and off-chain executors.​

1. **VaultContract**:
   1. **Function**: Serves as the primary interface for users and protocols to deposit funds.
   2. **Responsibilities**:
      1. Accepts user deposits and issues corresponding shares.
      2. Manages the allocation of funds to various strategies.
      3. Tracks and distributes rewards earned from strategies.
2. **StrategyManager**:
   1. **Function**: Oversees the management and approval of investment strategies.​
   2. **Responsibilities**:
      1. Maintains a registry of whitelisted strategies.
      2. Ensures strategies meet predefined risk and compliance criteria.
      3. Coordinates with VaultContract for fund allocation.
3. **FeeModule**:
   1. **Function**: Calculates and collects fees associated with deposits, rewards, and early withdrawals.​
   2. **Responsibilities**:
      1. Applies deposit fees (0–1%) upon asset entry.
      2. Deducts reward fees (0–10%) from earnings.
      3. Imposes withdrawal fees (0–1%) for early exits.
4. **Strategies**:
   1. **Function**: Individual smart contracts implementing specific investment strategies.​
   2. **Responsibilities**:
      1. Execute investment logic (e.g., yield farming, lending).
      2. Interact with external DeFi protocols to generate returns.
      3. Report performance and manage allocated funds.
5. **Offchain Executor**:
   1. **Function**: An off-chain service responsible for initiating and managing transactions related to strategies.​
   2. **Responsibilities**:
      1. Triggers fund movements between VaultContract and Strategies.
      2. Claims rewards from external protocols.
      3. Reinvests earnings back into strategies or VaultContract.
