This PR implements oracle consumer expectation functions in the price_oracle contract to provide specialized validation and safety checks for commitment_core and marketplace contract integration. The implementation defines clear expectations and validation patterns for consumer contracts.
- Purpose: Specialized price validation for commitment_core operations
- Features:
- 5-minute maximum staleness (stricter than default 1 hour)
- Optional price variation percentage validation (prevents flash manipulation)
- Positive price validation
- Use Case: Commitment creation, settlement, and value updates
- Purpose: Price validation optimized for marketplace operations
- Features:
- 30-minute maximum staleness (operational flexibility)
- Minimum USD price validation (prevents zero-price attacks)
- Decimal conversion support for cross-decimal comparisons
- Use Case: NFT listings, offers, and marketplace transactions
- Purpose: Efficient multi-asset price queries
- Features:
- Single-call validation for multiple assets
- Configurable staleness per batch
- Gas optimization for portfolio operations
- Use Case: Portfolio valuation, multi-asset commitments
- Purpose: Enhanced validation for high-value operations
- Features:
- Dynamic staleness based on operation value
- Stricter validation for >$1,000 operations (1-minute staleness)
- Additional safety checks for >$10,000 operations
- Use Case: Large settlements, high-value transfers
- Purpose: Oracle system health monitoring
- Features:
- Health status reporting
- Configuration transparency
- Consumer-friendly monitoring interface
- Use Case: Pre-operation health checks, fallback triggers
OracleHealth: Struct for health status reportingis_healthy: Boolean health indicatormax_staleness_seconds: Current configurationlast_check: Last health check timestampactive_oracles_count: Active oracle count (extensible)
- Price Variation Checks: Prevents flash manipulation attacks
- Staleness Tiers: Different requirements based on operation risk
- Value-Based Validation: Stricter controls for high-value operations
- Health Monitoring: Early detection of oracle issues
- Clear Error Handling: Specific error types for different failure modes
- Graceful Degradation: Fallback mechanisms for stale data
- Configurable Parameters: Consumers can adjust validation strictness
- Comprehensive Documentation: Security notes and usage guidelines
test_get_price_for_commitment_fresh(): Basic commitment price validationtest_get_price_for_commitment_stale(): Staleness rejectiontest_get_price_for_commitment_excessive_variation(): Price manipulation preventiontest_get_price_for_marketplace_valid(): Marketplace price validationtest_get_price_for_marketplace_below_minimum(): Minimum price enforcementtest_get_price_for_marketplace_different_decimals(): Cross-decimal supporttest_get_batch_prices_success(): Multi-asset validationtest_get_batch_prices_one_stale(): Batch failure handlingtest_get_price_for_high_value_operation_normal_value(): Value-based stalenesstest_get_price_for_high_value_operation_high_value(): High-value validationtest_get_price_for_high_value_operation_very_high_value_stale(): Very high-value strictnesstest_get_oracle_health(): Health monitoringtest_oracle_consumer_functions_edge_cases(): Input validationtest_oracle_consumer_integration_scenario(): End-to-end integration
- Fresh Data Validation: All functions with current prices
- Staleness Rejection: Proper failure with old data
- Price Manipulation: Variation percentage enforcement
- Value-Based Tiers: Different staleness for operation values
- Batch Operations: Multi-asset efficiency and partial failures
- Edge Cases: Zero prices, negative values, invalid inputs
- Integration Scenarios: Realistic usage patterns
// Recommended usage for commitment operations
let price_data = oracle_client.get_price_for_commitment(
&asset_address,
Some(10) // 10% max price variation
)?;// Recommended usage for marketplace operations
let price_data = oracle_client.get_price_for_marketplace(
&asset_address,
Some(1_00000000) // $1 minimum USD price
)?;// Recommended usage for high-value operations
let price_data = oracle_client.get_price_for_high_value_operation(
&asset_address,
operation_value_usd,
5 // 5% max deviation
)?;- Staleness: 5 minutes (300 seconds)
- Price Variation: 5-15% depending on asset volatility
- Health Checks: Before critical operations
- Staleness: 30 minutes (1800 seconds)
- Minimum Prices: Asset-specific minimums
- Batch Queries: For portfolio operations
- Thresholds: >$100 uses 5-minute, >$1,000 uses 1-minute
- Additional Validation: Consider multi-source verification
- Circuit Breakers: Automatic pause on suspicious patterns
contracts/price_oracle/src/lib.rs: Added consumer expectation functionscontracts/price_oracle/src/tests.rs: Comprehensive test coverage
- Threat Model: Updated with consumer expectations
- Manipulation Resistance: Multi-layer validation approach
- Fail-Safe Design: Graceful degradation and error handling
- Audit Trail: Clear documentation of security assumptions
All new functions pass comprehensive test coverage including:
- Functional correctness with valid inputs
- Proper error handling with invalid inputs
- Edge case coverage (boundary conditions)
- Integration scenario testing
- Performance characteristics (gas optimization)
This implementation provides a robust foundation for commitment_core and marketplace contracts to consume oracle data safely and efficiently, with clear expectations and comprehensive error handling.