Precolator Program - Rust Core Library
A comprehensive Rust library for the Precolator perpetual futures trading protocol. This package provides core functionality for oracle management, position handling, risk assessment, and liquidation tracking on Solana.
π¦ Overview
Precolator Program is a modular, production-grade Rust library designed to support perpetual futures trading operations. It provides:
- Oracle Management: Price feed validation, aggregation, and manipulation detection
- Position Management: Opening, updating, closing, and tracking trading positions
- Risk Engine: Dynamic leverage scaling, margin calculations, and stress testing
- Liquidation System: Liquidation detection, execution, and insurance fund management
- Utility Functions: Safe arithmetic, fee calculations, and helper functions
π Module Documentation
Oracle Module (oracle.rs)
Manages oracle price feeds and aggregation.
Key Structures:
PriceData: Represents a single price feed with confidence and timestampOracleConfig: Configuration for oracle feeds including circuit breaker settingsOracleManager: Main interface for oracle operations
Key Functions:
validate_price()- Validate price data and stalenessaggregate_prices()- Aggregate prices from multiple sourcescheck_circuit_breaker()- Detect suspicious price movementscalculate_price_impact()- Calculate slippage for large ordersdetect_manipulation()- Identify potential oracle manipulation
Position Module (position.rs)
Manages the complete position lifecycle.
Key Structures:
Position: Represents an open or closed trading positionPositionUpdate: Contains position update informationPositionStatus: Enum for position states (Open, Closed, Liquidated)PositionSide: Enum for direction (Long, Short)
Key Functions:
open_position()- Create a new trading positioncalculate_pnl()- Calculate unrealized P&Lcalculate_pnl_percent()- Calculate P&L percentagecalculate_health_factor()- Calculate position health (0-10000)close_position()- Close position and calculate settlementupdate_position_price()- Update price and recalculate metricsis_liquidatable()- Check if position meets liquidation criteria
Risk Engine (risk.rs)
Comprehensive risk assessment and management.
Key Enums:
RiskLevel: Low, Medium, High, CriticalRiskMetrics: Comprehensive risk assessment data
Key Functions:
assess_risk_level()- Determine risk level from utilizationget_leverage_multiplier()- Get dynamic leverage multipliercalculate_max_leverage()- Calculate allowed leverage based on utilizationcalculate_liquidation_price()- Calculate liquidation price with feescalculate_var_95()- Calculate Value at Risk at 95% confidencestress_test_position()- Test position under price shockscalculate_funding_fee()- Calculate funding rate chargesvalidate_risk_parameters()- Validate risk constraints before trading
Liquidation Module (liquidation.rs)
Liquidation detection, execution, and insurance management.
Key Structures:
LiquidationEvent: Records a liquidation executionLiquidationTrigger: Enum for liquidation causes
Key Functions:
should_liquidate()- Determine if position is liquidatablecalculate_liquidation_fee()- Calculate fee from liquidationcalculate_insurance_payout()- Calculate insurance fund usageexecute_liquidation()- Execute liquidation transactioncalculate_liquidator_reward()- Calculate liquidator incentivebatch_check_liquidations()- Check multiple positions
Utilities (utils.rs)
Helper functions and safe arithmetic.
Key Functions:
calculate_bps_amount()- Calculate basis point amountsafe_mul(),safe_add(),safe_sub()- Safe arithmetic with overflow checkingcalculate_percentage_change()- Calculate percentage changesnext_power_of_2()- Round up to next power of 2clamp()- Clamp value between bounds
π Quick Start
Building
Running Tests
Running Individual Binaries
# Oracle Feeder
# Liquidation Keeper
# Position Monitor
π Key Features
1. Dynamic Leverage Scaling
Leverage automatically adjusts based on protocol utilization:
- Low Utilization (< 40%): Full leverage allowed (100% multiplier)
- Medium Utilization (40-75%): Reduced leverage (75% multiplier)
- High Utilization (> 75%): Severely restricted (50% multiplier)
- Critical (> 95%): Extreme restrictions (25% multiplier)
2. Risk Management
- Health factor tracking (0-10000 = 0-100%)
- Maintenance margin enforcement (5% minimum)
- Initial margin requirements (10% minimum)
- Insurance fund management
3. Liquidation System
- Continuous liquidation monitoring
- Multiple liquidation triggers:
- Maintenance margin breached
- Health factor critical
- Oracle price reached liquidation level
- Bad debt detection
- Liquidation fee distribution (0.5% of position)
4. Oracle Management
- Multi-source price aggregation
- Staleness detection (300 slot max)
- Circuit breaker for suspicious movements (Β±5% max)
- Manipulation detection with volatility analysis
5. Fee Structure
- Trading Fee: 0.5% on position opening
- Maintenance Fee: 0.1% periodic
- Liquidation Fee: 0.5% to protocol (50% to liquidator, 50% to insurance)
- Funding Fees: Hourly charges based on open interest
π’ Mathematical Functions
P&L Calculation (Long Position)
If Current Price >= Entry Price:
PnL = (Current Price - Entry Price) Γ Position Size Γ· SCALE
Else:
PnL = -((Entry Price - Current Price) Γ Position Size Γ· SCALE)
Liquidation Price Calculation (Long)
Liquidation Price = (Entry Price Γ (Leverage - 1)) Γ· Leverage
Liquidation Price Calculation (Short)
Liquidation Price = (Entry Price Γ (Leverage + 1)) Γ· Leverage
Margin Requirement
Margin Required = Position Value Γ· Leverage
Health Factor
Health Factor = (Margin Γ· Collateral) Γ 10,000
Liquidatable if: Health Factor < 500 (5%)
Value at Risk (95% confidence)
VaRββ
= Position Value Γ Volatility Γ Z-Score(1.645)
Funding Fee (hourly)
Funding Rate = (Open Interest Γ· Available Liquidity) Γ 5%
Hourly Fee = Funding Rate Γ Position Size
βοΈ Configuration
Key constants in src/constants.rs:
// Position limits
MAX_LEVERAGE: u8 = 50
MIN_LEVERAGE: u8 = 1
MIN_COLLATERAL: u64 = 1_000_000 // 0.01 SOL
// Risk thresholds
MAINTENANCE_MARGIN_BPS: u16 = 500 // 5%
INITIAL_MARGIN_BPS: u16 = 1000 // 10%
// Fee configuration (basis points)
TRADING_FEE_BPS: u16 = 50 // 0.5%
LIQUIDATION_FEE_BPS: u16 = 50 // 0.5%
// Oracle settings
MAX_ORACLE_STALENESS_SLOTS: i64 = 300 // ~5 minutes
PRICE_CONFIDENCE_BPS: u16 = 100 // 1% max band
π§ͺ Testing
The project includes comprehensive test coverage:
Integration Tests (tests/integration_tests.rs)
- Full position lifecycle workflows
- Oracle aggregation and validation
- Risk assessment workflows
- Liquidation execution flows
- Batch liquidation checks
- Stress testing scenarios
Unit Tests (tests/unit_tests.rs)
- Oracle price normalization
- Position P&L calculations
- Risk level assessment
- Leverage multiplier calculations
- Liquidation fee calculations
- Safe arithmetic operations
Run all tests:
Run specific test module:
π¦ Dependencies
- solana-program: Solana program framework
- solana-sdk: Solana SDK utilities
- spl-token: SPL token interface
- anchor-lang: Anchor framework for instruction handling
- anchor-spl: Anchor SPL token wrapper
- serde: Serialization framework
- thiserror: Error handling
π Security Considerations
- Safe Arithmetic: All operations use checked arithmetic to prevent overflows
- Price Validation: Oracle prices are validated for staleness and confidence
- Circuit Breaker: Excessive price changes trigger circuit breaker
- Liquidation Safeguards: Multiple triggers and validation checks
- Insurance Fund: Protects against bad debt and protocol solvency
π οΈ Operational Scripts
Build
Builds the library and all binary targets in release mode.
Test
Runs all unit and integration tests.
Lint
Formats code and runs clippy linter.
Documentation
Generates and opens cargo documentation.
Benchmark
Runs performance benchmarks and profiling.
π Binary Programs
Oracle Feeder
Continuously updates oracle prices from multiple sources:
Liquidation Keeper
Monitors and executes liquidations:
Position Monitor
Real-time position analytics and alerts:
π Performance
Expected operation throughput (on modern hardware):
- P&L Calculation: > 100,000 ops/sec
- Position Updates: > 50,000 ops/sec
- Risk Assessment: > 80,000 ops/sec
- Liquidation Checks: > 30,000 ops/sec
π€ Contributing
- Follow Rust naming conventions
- Add tests for new functionality
- Run
./scripts/lint.shbefore committing - Document public APIs with doc comments
π License
MIT License - See LICENSE file for details
π Related Repositories
- Contract (Devnet): https://github.com/precolator/precolator-Contract.git
- Mainnet Smart Contract: https://github.com/precolator/precolator-mainnet.git
- Explorer: https://github.com/precolator/Precolator-explorer.git
π Support
For issues or questions:
- Check existing documentation
- Review test cases for usage examples
- File an issue on GitHub
Version: 1.0.0
Last Updated: 2024
Status: Production Ready β