// declare_id!("AegisVaULT1111111111111111111111111111111111");
#[program]
pub mod solaegis_vault {
pub fn initialize_vault(ctx: Context<InitializeVault>, max_position_size_bps: u16, max_drawdown_limit_bps: u16, circuit_breaker_bps: u16) -> Result<()> {
let vault = &mut ctx.accounts.vault;
vault.owner = ctx.accounts.owner.key();
vault.agent_authority = ctx.accounts.agent_authority.key();
vault.max_position_size_bps = max_position_size_bps;
vault.is_circuit_tripped = false;
Ok(())
}
pub fn execute_hedged_rebalance(ctx: Context<ExecuteRebalance>, amount: u64, min_output_amount: u64) -> Result<()> {
let vault = &mut ctx.accounts.vault;
require!(!vault.is_circuit_tripped, SolAegisError::CircuitBreakerActive);
require_keys_eq!(vault.agent_authority, ctx.accounts.agent_authority.key(), SolAegisError::UnauthorizedAgent);
let vault_balance = ctx.accounts.vault_token_account.amount;
let max_allowed = (vault_balance as u128 * vault.max_position_size_bps as u128 / 10000) as u64;
require!(amount <= max_allowed, SolAegisError::KellyAllocationExceeded);
vault.total_rebalances_executed += 1;
Ok(())
}
}