1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// Program constants and configuration
pub const PROGRAM_VERSION: &str = "1.0.0";
pub const PROGRAM_NAME: &str = "Precolator";
// Position scaling factor (1 million for precision)
pub const POS_SCALE: i128 = 1_000_000;
// Trading parameters
pub const MIN_COLLATERAL: u64 = 1_000_000; // 0.01 SOL
pub const MAX_LEVERAGE: u8 = 50;
pub const MIN_LEVERAGE: u8 = 1;
// Fee configuration (in basis points)
pub const TRADING_FEE_BPS: u16 = 50; // 0.5%
pub const MAINTENANCE_FEE_BPS: u16 = 10; // 0.1%
pub const LIQUIDATION_FEE_BPS: u16 = 50; // 0.5%
// Risk thresholds
pub const MAINTENANCE_MARGIN_BPS: u16 = 500; // 5%
pub const INITIAL_MARGIN_BPS: u16 = 1000; // 10%
// Insurance fund parameters
pub const MIN_INSURANCE_RATIO_BPS: u16 = 1000; // 10% minimum
pub const MAX_INSURANCE_WITHDRAWAL_BPS: u16 = 1000; // 10% max per withdrawal
// Risk multipliers (for different utilization levels)
pub const RISK_LOW_MULTIPLIER: u8 = 100; // 1.0x
pub const RISK_MEDIUM_MULTIPLIER: u8 = 75; // 0.75x
pub const RISK_HIGH_MULTIPLIER: u8 = 50; // 0.5x
// Risk level thresholds (utilization percentage)
pub const RISK_LOW_THRESHOLD: u8 = 40;
pub const RISK_MEDIUM_THRESHOLD: u8 = 75;
pub const RISK_HIGH_THRESHOLD: u8 = 95;
// Oracle configuration
pub const MAX_ORACLE_STALENESS_SLOTS: i64 = 300; // 5 minutes
pub const PRICE_CONFIDENCE_BPS: u16 = 100; // 1% max confidence band
// Liquidation parameters
pub const LIQUIDATION_PRICE_OFFSET_BPS: u16 = 50; // 0.5% safety margin
pub const LIQUIDATION_COOLDOWN_SLOTS: u64 = 10; // Minimum slots between liquidations
// Account limits
pub const MAX_POSITIONS_PER_USER: u64 = 100;
pub const MAX_MARKETS: u64 = 10_000;
// Nonce for request binding
pub const MAX_REQUEST_NONCE: u64 = u64MAX;
// Slab account size (fixed)
pub const SLAB_LEN: usize = 1024 * 1024; // 1 MB