Skip to content
89 changes: 89 additions & 0 deletions contracts/predictify-hybrid/src/events.rs
Original file line number Diff line number Diff line change
Expand Up @@ -759,6 +759,46 @@ pub struct ConfigInitializedEvent {
pub timestamp: u64,
}

/// Storage cleanup event
#[contracttype]
#[derive(Clone, Debug)]
pub struct StorageCleanupEvent {
/// Market ID
pub market_id: Symbol,
/// Cleanup type
pub cleanup_type: String,
/// Cleanup timestamp
pub timestamp: u64,
}

/// Storage optimization event
#[contracttype]
#[derive(Clone, Debug)]
pub struct StorageOptimizationEvent {
/// Market ID
pub market_id: Symbol,
/// Optimization type
pub optimization_type: String,
/// Optimization timestamp
pub timestamp: u64,
}

/// Storage migration event
#[contracttype]
#[derive(Clone, Debug)]
pub struct StorageMigrationEvent {
/// Migration ID
pub migration_id: Symbol,
/// Source format
pub from_format: String,
/// Target format
pub to_format: String,
/// Number of markets migrated
pub markets_migrated: u32,
/// Migration timestamp
pub timestamp: u64,
}

// ===== EVENT EMISSION UTILITIES =====

/// Event emission utilities
Expand Down Expand Up @@ -1169,6 +1209,55 @@ impl EventEmitter {
Self::store_event(env, &symbol_short!("auto_res"), &event);
}

/// Emit storage cleanup event
pub fn emit_storage_cleanup_event(
env: &Env,
market_id: &Symbol,
cleanup_type: &String,
) {
let event = StorageCleanupEvent {
market_id: market_id.clone(),
cleanup_type: cleanup_type.clone(),
timestamp: env.ledger().timestamp(),
};

Self::store_event(env, &symbol_short!("stor_cln"), &event);
}

/// Emit storage optimization event
pub fn emit_storage_optimization_event(
env: &Env,
market_id: &Symbol,
optimization_type: &String,
) {
let event = StorageOptimizationEvent {
market_id: market_id.clone(),
optimization_type: optimization_type.clone(),
timestamp: env.ledger().timestamp(),
};

Self::store_event(env, &symbol_short!("stor_opt"), &event);
}

/// Emit storage migration event
pub fn emit_storage_migration_event(
env: &Env,
migration_id: &Symbol,
from_format: &String,
to_format: &String,
markets_migrated: u32,
) {
let event = StorageMigrationEvent {
migration_id: migration_id.clone(),
from_format: from_format.clone(),
to_format: to_format.clone(),
markets_migrated,
timestamp: env.ledger().timestamp(),
};

Self::store_event(env, &symbol_short!("stor_mig"), &event);
}

/// Store event in persistent storage
fn store_event<T>(env: &Env, event_key: &Symbol, event_data: &T)
where
Expand Down
87 changes: 87 additions & 0 deletions contracts/predictify-hybrid/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ mod fees;
mod markets;
mod oracles;
mod resolution;
mod storage;
mod types;
mod utils;
mod validation;
Expand Down Expand Up @@ -1031,6 +1032,92 @@ impl PredictifyHybrid {
reason,
)
}

// ===== STORAGE OPTIMIZATION FUNCTIONS =====

/// Compress market data for storage optimization
pub fn compress_market_data(env: Env, market_id: Symbol) -> Result<storage::CompressedMarket, Error> {
let market = match markets::MarketStateManager::get_market(&env, &market_id) {
Ok(m) => m,
Err(e) => return Err(e),
};

storage::StorageOptimizer::compress_market_data(&env, &market)
}

/// Clean up old market data based on age and state
pub fn cleanup_old_market_data(env: Env, market_id: Symbol) -> Result<bool, Error> {
storage::StorageOptimizer::cleanup_old_market_data(&env, &market_id)
}

/// Migrate storage format from old to new format
pub fn migrate_storage_format(
env: Env,
from_format: storage::StorageFormat,
to_format: storage::StorageFormat,
) -> Result<storage::StorageMigration, Error> {
storage::StorageOptimizer::migrate_storage_format(&env, from_format, to_format)
}

/// Monitor storage usage and return statistics
pub fn monitor_storage_usage(env: Env) -> Result<storage::StorageUsageStats, Error> {
storage::StorageOptimizer::monitor_storage_usage(&env)
}

/// Optimize storage layout for a specific market
pub fn optimize_storage_layout(env: Env, market_id: Symbol) -> Result<bool, Error> {
storage::StorageOptimizer::optimize_storage_layout(&env, &market_id)
}

/// Get storage usage statistics
pub fn get_storage_usage_statistics(env: Env) -> Result<storage::StorageUsageStats, Error> {
storage::StorageOptimizer::get_storage_usage_statistics(&env)
}

/// Validate storage integrity for a specific market
pub fn validate_storage_integrity(env: Env, market_id: Symbol) -> Result<storage::StorageIntegrityResult, Error> {
storage::StorageOptimizer::validate_storage_integrity(&env, &market_id)
}

/// Get storage configuration
pub fn get_storage_config(env: Env) -> storage::StorageConfig {
storage::StorageOptimizer::get_storage_config(&env)
}

/// Update storage configuration
pub fn update_storage_config(env: Env, config: storage::StorageConfig) -> Result<(), Error> {
storage::StorageOptimizer::update_storage_config(&env, &config)
}

/// Calculate storage cost for a market
pub fn calculate_storage_cost(env: Env, market_id: Symbol) -> Result<u64, Error> {
let market = match markets::MarketStateManager::get_market(&env, &market_id) {
Ok(m) => m,
Err(e) => return Err(e),
};

Ok(storage::StorageUtils::calculate_storage_cost(&market))
}

/// Get storage efficiency score for a market
pub fn get_storage_efficiency_score(env: Env, market_id: Symbol) -> Result<u32, Error> {
let market = match markets::MarketStateManager::get_market(&env, &market_id) {
Ok(m) => m,
Err(e) => return Err(e),
};

Ok(storage::StorageUtils::get_storage_efficiency_score(&market))
}

/// Get storage recommendations for a market
pub fn get_storage_recommendations(env: Env, market_id: Symbol) -> Result<Vec<String>, Error> {
let market = match markets::MarketStateManager::get_market(&env, &market_id) {
Ok(m) => m,
Err(e) => return Err(e),
};

Ok(storage::StorageUtils::get_storage_recommendations(&market))
}
}

mod test;
Loading
Loading