Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions contracts/predictify-hybrid/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2314,6 +2314,11 @@ impl ConfigManager {
Ok(())
}

/// Validate the contract configuration against all module rules.
pub fn validate_config(_env: &Env, config: &ContractConfig) -> Result<(), Error> {
ConfigValidator::validate_contract_config(config)
}

/// Retrieves the current contract configuration from persistent storage.
///
/// This function loads the previously stored contract configuration from
Expand Down
1 change: 1 addition & 0 deletions contracts/predictify-hybrid/src/event_topic_compat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ pub const TOPIC_REGISTRY: &[(&str, u32, &str)] = &[
("orc_hlth", 1, "oracle_health"),
("orc_cons", 1, "oracle_consensus"),
("orc_med_q", 1, "oracle_median_queried"),
("can_price", 1, "canonical_price_updated"),
("ora_deg", 1, "oracle_degraded"),
("ora_rec", 1, "oracle_recovered"),
("fbk_used", 1, "fallback_used"),
Expand Down
3 changes: 3 additions & 0 deletions contracts/predictify-hybrid/src/event_topic_compat_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@

#![cfg(test)]

extern crate alloc;
use alloc::format;

use soroban_sdk::{symbol_short, testutils::Events, Env, Symbol, Vec};

use crate::event_topic_compat::{
Expand Down
13 changes: 13 additions & 0 deletions contracts/predictify-hybrid/src/events.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5643,6 +5643,19 @@ impl EventEmitter {
);
}

/// Emit canonical price update event when a canonical price is persisted.
pub fn emit_canonical_price_updated(
env: &Env,
market_id: &Symbol,
price: i128,
timestamp: u64,
) {
env.events().publish(
(symbol_short!("can_price"), market_id.clone()),
(price, timestamp),
);
}

/// Emit admin override event when an admin manually overrides an oracle-verified result.
pub fn emit_admin_override(
env: &Env,
Expand Down
38 changes: 38 additions & 0 deletions contracts/predictify-hybrid/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ mod market_audit_tests;
mod test_audit_trail;
#[cfg(test)]
mod event_topic_compat_tests;
#[cfg(test)]
mod oracle_hardening_tests;
// #[cfg(any())]
// mod utils_tests;
// THis is the band protocol wasm std_reference.wasm
Expand Down Expand Up @@ -8595,4 +8597,40 @@ impl PredictifyHybrid {
.unwrap_or(0i128)
}

/// Retrieve the canonical price for a market.
pub fn get_canonical_price(env: Env, market_id: Symbol) -> Option<i128> {
resolution::OracleResolutionManager::get_canonical_price(&env, &market_id)
}

/// Retrieve the canonical price record for a market.
pub fn get_canonical_price_record(
env: Env,
market_id: Symbol,
) -> Option<types::CanonicalPriceRecord> {
resolution::OracleResolutionManager::get_canonical_price_record(&env, &market_id)
}

/// Resolve a market using a three-oracle confidence-weighted median.
pub fn resolve_with_median(
env: Env,
market_id: Symbol,
) -> Result<resolution::MedianResolutionResult, Error> {
resolution::OracleResolutionManager::resolve_with_median(&env, &market_id)
}

/// Configure the three-oracle median configuration globally.
pub fn set_median_config(
env: Env,
admin: Address,
config: types::MedianOracleConfig,
) -> Result<(), Error> {
Self::require_admin_permission(&env, &admin, AdminPermission::UpdateConfig)?;
resolution::OracleResolutionManager::set_median_config(&env, &config)
}

/// Retrieve the global three-oracle median configuration.
pub fn get_median_config(env: Env) -> Result<types::MedianOracleConfig, Error> {
resolution::OracleResolutionManager::get_median_config(&env)
}

}
Loading
Loading