flowchart TD
User["User / LP"] -->|"deposit / mint"| Vault["OrbalMainVault<br/>ERC4626 Main Vault"]
User -->|"withdraw / redeem"| Vault
Owner["Owner"] -->|"configure settings"| Vault
Curator["Curator"] -->|"timelocked config"| Vault
Allocator["Allocator"] -->|"allocate / deallocate"| Vault
Sentinel["Sentinel"] -->|"deallocate only"| Vault
Gate["Gate Contracts<br/>send/receive shares/assets"] -.-> Vault
FeeManager["ProtocolFeeManager"] <-->|"fee config / protocol fee shares"| Vault
FeeRecipient["Protocol Fee Recipient"] <-->|"fees"| FeeManager
Vault -->|"allocate / deallocate"| AaveAdapter["AaveV3Adapter"]
Vault -->|"allocate / deallocate"| MorphoAdapter["MorphoVaultV1Adapter"]
Vault -->|"allocate / deallocate"| EulerAdapter["EulerVaultAdapter"]
Vault -->|"allocate / deallocate"| CompoundAdapter["CompoundV3Adapter"]
AaveAdapter -->|"supply / withdraw"| Aave["Aave V3"]
MorphoAdapter -->|"deposit / withdraw"| Morpho["Morpho Vault V1"]
EulerAdapter -->|"deposit / withdraw"| Euler["Euler Vault"]
CompoundAdapter -->|"supply / withdraw"| Compound["Compound V3"]
AaveAdapter -->|"realAssets()"| Vault
MorphoAdapter -->|"realAssets()"| Vault
EulerAdapter -->|"realAssets()"| Vault
CompoundAdapter -->|"realAssets()"| Vault