This document provides a complete API reference for the Predictify Hybrid smart contract. It details all public modules, their purposes, and available functions organized by functional domain.
- Admin Management
- Balance Management
- Bet Management
- Market Management
- Query Functions
- Voting & Disputes
- Resolution Management
- Oracle Management
- Dispute Management
- Event System
- Governance
- Configuration
- Fee Management
- Market Extensions
- Monitoring System
Module: admin.rs
Purpose: Comprehensive admin system with role-based access control, multi-admin support, and action logging.
AdminRole(enum) - SuperAdmin, MarketAdmin, ConfigAdmin, FeeAdmin, ReadOnlyAdminAdminPermission(enum) - Permissions like Initialize, CreateMarket, UpdateFees, ManageDisputeAdminAction(struct) - Records of admin actions with timestamp and success statusAdminRoleAssignment(struct) - Tracks admin roles, permissions, and activation statusMultisigConfig(struct) - Configuration for multisig approval systemPendingAdminAction(struct) - Pending actions awaiting multisig approval
AdminInitializer
initialize(env, admin)- Initialize contract with primary admininitialize_with_config(env, admin, config)- Initialize with custom configvalidate_initialization_params(env, admin)- Validate initialization parameters
AdminAccessControl
validate_permission(env, admin, permission)- Check if admin has required permissionrequire_admin_auth(env, admin)- Require admin authenticationrequire_not_paused(env)- Ensure contract is not paused
ContractPauseManager
is_contract_paused(env)- Check if contract is pausedpause(env, admin)- Pause contract operationsunpause(env, admin)- Resume contract operationstransfer_admin(env, current_admin, new_admin)- Transfer admin rights
AdminRoleManager
assign_role(env, admin, target, role, permissions)- Assign role to adminget_admin_role(env, admin)- Get admin's current rolehas_permission(env, admin, permission)- Check specific permissionget_permissions_for_role(env, role)- List all permissions for a roledeactivate_role(env, admin)- Deactivate admin role
AdminManager
add_admin(env, admin, target, role)- Add new adminremove_admin(env, admin, target)- Remove adminupdate_admin_role(env, admin, target, new_role)- Change admin roleget_admin_roles(env)- Get all admin role assignmentsdeactivate_admin(env, admin, target)- Deactivate adminreactivate_admin(env, admin, target)- Reactivate admin
AdminFunctions
close_market(env, admin, market_id)- Close a marketfinalize_market(env, admin, market_id, winning_outcome)- Finalize market resolutionextend_market_duration(env, admin, market_id, additional_days)- Extend market end timeupdate_fee_config(env, admin, fee_percentage, creation_fee)- Update fee configurationupdate_contract_config(env, admin, config)- Update contract settingsreset_config_to_defaults(env, admin)- Reset all configs to defaults
AdminActionLogger
log_action(env, admin, action, target, parameters, success)- Log admin actionget_admin_actions(env, limit)- Retrieve admin action historyget_admin_actions_for_admin(env, admin, limit)- Get actions by specific admin
Multisig System
MultisigManager::set_threshold(env, admin, threshold)- Set approval thresholdMultisigManager::get_config(env)- Get multisig configurationMultisigManager::create_pending_action(env, admin, action_type, target)- Create pending actionMultisigManager::approve_action(env, admin, action_id)- Approve pending actionMultisigManager::execute_action(env, action_id)- Execute approved actionMultisigManager::requires_multisig(env)- Check if multisig is enabled
Module: balances.rs
Purpose: Manages user deposits, withdrawals, and balance tracking per asset with circuit breaker support.
BalanceManager
deposit(env, user, asset, amount)- Deposit funds into user balancewithdraw(env, user, asset, amount)- Withdraw funds from user balance (checks circuit breaker)get_balance(env, user, asset)- Get current user balance for asset
Module: bets.rs
Purpose: Handles bet placement, tracking, resolution, and payout calculation with limits and validation.
Bet(struct) - User bet with market ID, user, outcome, amount, and statusBetStats(struct) - Market-wide bet statistics and outcome distributionBetLimits(struct) - Minimum and maximum bet amounts
Bet Limits Management
get_effective_bet_limits(env, market_id)- Get active bet limits for marketset_global_bet_limits(env, limits)- Set platform-wide bet limitsset_event_bet_limits(env, market_id, limits)- Set market-specific limits
BetManager
place_bet(env, user, market_id, outcome, amount)- Place single bet on outcomeplace_bets(env, user, market_id, bets)- Place multiple bets in batchhas_user_bet(env, market_id, user)- Check if user has active betget_bet(env, market_id, user)- Retrieve user's bet detailsget_market_bet_stats(env, market_id)- Get market betting statisticsresolve_market_bets(env, market_id, winning_outcome)- Mark winning betsrefund_market_bets(env, market_id)- Refund all bets (cancelled market)calculate_bet_payout(env, market_id, user, winning_outcome)- Calculate winnings
BetStorage
store_bet(env, bet)- Store bet in persistent storageget_bet(env, market_id, user)- Retrieve stored betremove_bet(env, market_id, user)- Delete bet from storageget_market_bet_stats(env, market_id)- Get aggregated betting statsget_all_bets_for_market(env, market_id)- Get all bettors for market
BetValidator
validate_market_for_betting(env, market)- Check market state for betsvalidate_bet_parameters(env, user, amount, outcome)- Validate bet inputsvalidate_bet_amount_against_limits(env, market_id, amount)- Check amount limitsvalidate_bet_amount(amount)- Check absolute amount constraints
BetUtils
lock_funds(env, user, amount)- Lock user funds for betunlock_funds(env, user, amount)- Release locked fundsget_contract_balance(env)- Get total contract balancehas_sufficient_balance(env, user, amount)- Check user has enough funds
BetAnalytics
calculate_implied_probability(env, market_id, outcome)- Deduce outcome probabilitycalculate_payout_multiplier(env, market_id, outcome)- Get winnings multiplierget_market_summary(env, market_id)- Get comprehensive market summary
Module: markets.rs
Purpose: Core market creation, state management, and lifecycle operations including pause/resume.
Market(struct) - Complete market with question, outcomes, state, and oracle configMarketState(enum) - Active, Closed, Resolved, Disputed, Paused, FinalizedMarketStats(struct) - Market statistics and analyticsMarketStatus(enum) - Status for API responsesOracleConfig(struct) - Oracle provider configuration
MarketCreator
create_market(env, admin, question, outcomes, duration_days, oracle_config)- Create generic marketcreate_reflector_market(env, admin, oracle_address, question, outcomes, duration_days, asset, threshold, comparison)- Create Reflector-based marketcreate_pyth_market(env, admin, oracle_address, question, outcomes, duration_days, feed_id, threshold, comparison)- Create Pyth-based marketcreate_reflector_asset_market(env, admin, question, outcomes, duration_days, asset_symbol, threshold, comparison)- Create market using Reflector asset
MarketStateManager
get_market(env, market_id)- Retrieve market detailsupdate_market(env, market_id, market)- Update market in storageupdate_description(env, market_id, new_description)- Change market questionremove_market(env, market_id)- Delete market from storageadd_vote(env, market_id, user, outcome, stake)- Record user voteadd_dispute_stake(env, market_id, user, stake, reason)- Record dispute stakemark_claimed(market, user)- Mark user winnings as claimedset_oracle_result(market, result)- Store oracle's resultset_winning_outcome(market, outcome)- Mark winning predictionset_winning_outcomes(market, outcomes)- Mark multiple winning outcomesmark_fees_collected(market)- Flag market fees as collectedextend_for_dispute(market, env, extension_hours)- Extend for dispute period
MarketValidator
validate_market_params(env, question, outcomes, duration)- Validate market creation inputsvalidate_oracle_config(env, config)- Validate oracle configurationvalidate_market_for_voting(env, market)- Check market allows votingvalidate_market_for_resolution(env, market)- Check market ready for resolutionvalidate_outcome(env, market, outcome)- Verify outcome in marketvalidate_stake(stake, min_stake)- Validate stake amount
MarketAnalytics
get_market_stats(market)- Calculate comprehensive market statisticscalculate_winning_stats(market, winning_outcome)- Stats for winning outcomeget_user_stats(market, user)- User-specific market statisticscalculate_community_consensus(market)- Community agreement metrics
MarketUtils
generate_market_id(env)- Create unique market identifiercalculate_end_time(env, duration_days)- Calculate market end timestampprocess_creation_fee(env, admin)- Deduct and record creation feeget_token_client(env)- Get token contract clientcalculate_payout(env, market_id, user, outcome)- Calculate user winningsdetermine_final_result(env, market, oracle_result)- Decide final outcomedetermine_winning_outcomes(env, market, oracle_result)- Determine all winners
MarketPauseManager
pause_market(env, admin, market_id, reason)- Temporarily suspend marketresume_market(env, admin, market_id)- Reactivate paused marketvalidate_pause_conditions(env, market)- Check market can be pausedis_market_paused(env, market_id)- Check pause statusauto_resume_on_expiry(env, market_id)- Auto-resume after pause periodget_market_pause_status(env, market_id)- Get detailed pause info
Module: queries.rs
Purpose: Read-only query interface for retrieving market, user, and contract state information.
QueryManager
Market/Event Queries
query_event_details(env, market_id)- Get complete market informationquery_event_status(env, market_id)- Get market status and end timeget_all_markets(env)- Get list of all market IDs
User Bet Queries
query_user_bet(env, user, market_id)- Get user's participation detailsquery_user_bets(env, user)- Get all user's bets across marketsquery_user_balance(env, user)- Get user balance for each assetquery_market_pool(env, market_id)- Get market pool statistics
Contract State Queries
query_total_pool_size(env)- Get total platform stakingquery_contract_state(env)- Get overall contract state and status
Module: voting.rs
Purpose: Voting mechanism, dispute management, and payout calculation with dynamic thresholds.
Vote(struct) - User vote with outcome, stake, and timestampVotingStats(struct) - Market voting statistics and participation metricsPayoutData(struct) - Payout calculation data for winnersDisputeThreshold(struct) - Dynamic dispute cost thresholdThresholdAdjustmentFactors(struct) - Factors adjusting dispute threshold
VotingManager
process_vote(env, user, market_id, outcome, stake)- Record user vote with stakeprocess_dispute(env, user, market_id, stake, reason)- Initiate dispute challengeprocess_claim(env, user, market_id)- Claim winnings after resolutioncollect_fees(env, admin, market_id)- Collect platform feescalculate_dispute_threshold(env, market_id)- Determine current dispute costupdate_dispute_thresholds(env, market_id)- Recalculate thresholdsget_threshold_history(env, market_id, limit)- Get historical threshold data
ThresholdUtils
get_threshold_adjustment_factors(env, market_id)- Get adjustment factorsadjust_threshold_by_market_size(env, total_staked)- Apply size-based adjustmentmodify_threshold_by_activity(env, total_votes)- Apply activity-based adjustmentcalculate_complexity_factor(env, market)- Calculate complexity adjustmentcalculate_adjusted_threshold(env, base, factors)- Apply all adjustmentsstore_dispute_threshold(env, threshold)- Save threshold dataget_dispute_threshold(env, market_id)- Retrieve stored thresholdvalidate_dispute_threshold(threshold, market_id)- Validate threshold value
VotingValidator
validate_user_authentication(user)- Verify user authenticationvalidate_admin_authentication(env, admin)- Verify admin authenticationvalidate_market_for_voting(env, market)- Check voting is allowedvalidate_market_for_dispute(env, market)- Check disputes are allowedvalidate_market_for_claim(env, market, user)- Check user can claimvalidate_vote_parameters(env, user, market, outcome, stake)- Validate vote inputsvalidate_dispute_stake(stake)- Check dispute stake meets minimumvalidate_dispute_stake_with_threshold(stake, threshold)- Check stake vs threshold
VotingUtils
transfer_stake(env, user, stake)- Transfer stake to contracttransfer_winnings(env, user, amount)- Send winnings to usertransfer_fees(env, admin, amount)- Send collected fees to admincalculate_user_payout(env, user, market_id, winning_outcome)- Calculate user winningscalculate_fee_amount(market)- Calculate fee for marketget_voting_stats(market)- Get market voting statisticshas_user_voted(market, user)- Check if user participatedget_user_vote(market, user)- Get user's vote detailshas_user_claimed(market, user)- Check if user claimed winnings
VotingAnalytics
calculate_participation_rate(market)- Get voting participation percentagecalculate_average_stake(market)- Get average vote stakecalculate_stake_distribution(market)- Get per-outcome stake breakdowncalculate_voting_power_concentration(market)- Measure stakeholder concentrationget_top_voters(market, limit)- Get largest stakeholders
Module: resolution.rs
Purpose: Market resolution through oracles, manual resolution, and comprehensive lifecycle management.
ResolutionState(enum) - Active, OracleResolved, MarketResolved, Disputed, FinalizedOracleResolution(struct) - Oracle result with confidence and timestampMarketResolution(struct) - Final market outcome with determination methodResolutionMethod(enum) - Oracle, Community, AdminManual, Fallback
OracleResolutionManager
fetch_oracle_result(env, market_id)- Get oracle's outcome dataget_oracle_resolution(env, market_id)- Retrieve stored oracle resolutionvalidate_oracle_resolution(env, market, oracle_config)- Verify oracle resultcalculate_oracle_confidence(resolution)- Calculate confidence score
MarketResolutionManager
resolve_market(env, market_id)- Perform market resolutionfinalize_market(env, market_id, winning_outcome)- Finalize resolutionget_market_resolution(env, market_id)- Get final resolution datavalidate_market_resolution(env, market)- Verify resolution validity
ResolutionValidators
OracleResolutionValidator::validate_market_for_oracle_resolution(env, market)- Check oracle resolution readinessOracleResolutionValidator::validate_oracle_resolution(env, market, result)- Validate oracle dataMarketResolutionValidator::validate_market_for_resolution(env, market)- Check market resolution readinessMarketResolutionValidator::validate_admin_permissions(env, admin)- Check admin rightsMarketResolutionValidator::validate_outcome(env, market, outcome)- Validate outcomeMarketResolutionValidator::validate_market_resolution(env, market, resolution)- Validate complete resolution
ResolutionAnalytics
OracleResolutionAnalytics::calculate_confidence_score(resolution)- Score oracle confidenceOracleResolutionAnalytics::get_oracle_stats(env)- Get oracle statisticsMarketResolutionAnalytics::determine_resolution_method(env, market)- Determine resolution typeMarketResolutionAnalytics::calculate_confidence_score(resolution)- Score market confidenceMarketResolutionAnalytics::calculate_resolution_analytics(env)- Get resolution statisticsMarketResolutionAnalytics::update_resolution_analytics(env, market_id)- Update resolution stats
ResolutionUtils
get_resolution_state(env, market)- Get current resolution phasecan_resolve_market(env, market)- Check if market can be resolvedget_resolution_eligibility(env, market)- Get resolution readiness statuscalculate_resolution_time(env, market)- Get expected resolution timestampvalidate_resolution_parameters(env, market, outcome)- Validate resolution inputs
Module: oracles.rs
Purpose: Oracle integration supporting Reflector, Pyth, and Band Protocol with health monitoring and fallback support.
OracleProvider(enum) - Reflector, Pyth, BandProtocol, ChainlinkOracleConfig(struct) - Provider, feed_id, threshold, comparison operatorOracleResult(struct) - Price, confidence, timestampOracleInstance(enum) - Reflector or Pyth oracle instance
ReflectorOracle
new(contract_id)- Create Reflector oracle instancecontract_id()- Get oracle contract addressparse_feed_id(env, feed_id)- Parse Reflector asset identifierget_reflector_price(env, feed_id)- Get current price for assetcheck_health(env)- Verify oracle operational status
ReflectorOracleClient
new(env, contract_id)- Initialize clientlastprice(asset)- Get latest price for assetprice(asset, timestamp)- Get historical price at timestamptwap(asset, records)- Get time-weighted average priceis_healthy()- Check oracle health status
PythOracle
new(contract_id)- Create Pyth oracle instancewith_feeds(contract_id, feed_configs)- Create with multiple feedsadd_feed_config(feed_config)- Register new feedget_feed_config(feed_id)- Retrieve feed configurationvalidate_feed_id(feed_id)- Check feed is supportedget_supported_assets()- List available assetsis_feed_active(feed_id)- Check feed operational statusget_feed_count()- Get number of feedsscale_price(raw_price, feed_config)- Apply decimal scalingget_price_with_retry(env, feed_id, retries)- Get price with retry logic
OracleFactory
create_pyth_oracle(contract_id)- Create Pyth oraclecreate_reflector_oracle(contract_id)- Create Reflector oraclecreate_oracle(provider, contract_id)- Create provider-specific oraclecreate_from_config(env, oracle_config)- Create from configis_provider_supported(provider)- Check if provider supportedget_recommended_provider()- Get default providercreate_pyth_oracle_with_feeds(contract_id, feeds)- Create Pyth with feedscreate_hybrid_oracle(primary, fallback)- Create dual-source oracleget_default_feed_configs()- Get standard feed listvalidate_stellar_compatibility(config)- Check Stellar compatibility
OracleInstance Methods
get_price(env, feed_id)- Get asset priceget_price_data(env, feed_id)- Get price with metadataprovider()- Get oracle provider typecontract_id()- Get provider contract addressis_healthy(env)- Check oracle health
OracleUtils
compare_prices(price, threshold, comparison)- Apply price comparisondetermine_outcome(price, threshold, comparison, outcomes)- Map price to outcomevalidate_oracle_response(price)- Validate price data format
OracleWhitelist
initialize(env, admin)- Initialize whitelist systemadd_admin(env, current_admin, new_admin)- Add whitelist adminremove_admin(env, current_admin, admin_to_remove)- Remove adminrequire_admin(env, address)- Check admin statusis_admin(env, address)- Verify adminadd_oracle_to_whitelist(env, admin, oracle_address, metadata)- Approve oracleremove_oracle_from_whitelist(env, admin, oracle_address)- Revoke oraclevalidate_oracle_contract(env, oracle_address)- Validate oracle contractverify_oracle_health(env, oracle_address)- Check oracle operationalget_approved_oracles(env)- List approved oraclesget_oracle_metadata(env, oracle_address)- Get oracle detailsdeactivate_oracle(env, admin, oracle_address)- Disable oraclereactivate_oracle(env, admin, oracle_address)- Re-enable oracle
OracleValidationConfigManager
get_global_config(env)- Get platform validation configset_global_config(env, admin, config)- Update platform configget_event_config(env, market_id)- Get market-specific configset_event_config(env, admin, market_id, config)- Set market configget_effective_config(env, market_id)- Get applicable configvalidate_oracle_data(env, market_id, data)- Validate oracle data
OracleIntegrationManager
verify_result(env, market_id, oracle_result)- Verify oracle resultis_result_verified(env, market_id)- Check verification statusget_oracle_result(env, market_id)- Retrieve verified resultverify_result_with_retry(env, market_id, retries)- Verify with retriesverify_oracle_authority(env, oracle_address)- Verify oracle legitimacyadmin_override_result(env, admin, market_id, result)- Manual override
Module: disputes.rs
Purpose: Comprehensive dispute system with voting, escalation, timeout handling, and fee distribution.
Dispute(struct) - Formal challenge with user, stake, statusDisputeStatus(enum) - Active, Voting, Resolved, EscalatedDisputeStats(struct) - Dispute statistics and participation metricsDisputeResolution(struct) - Dispute outcome and resolution detailsDisputeVote(struct) - Individual vote on disputeDisputeTimeout(struct) - Timeout period for dispute resolutionDisputeTimeoutStatus(enum) - Pending, Expired, AutoResolved, Extended
DisputeManager
process_dispute(env, user, market_id, stake, reason)- Initiate disputeresolve_dispute(env, market_id, admin, outcome)- Finalize disputeget_dispute_stats(env, market_id)- Get dispute statisticsget_market_disputes(env, market_id)- Get all market disputeshas_user_disputed(env, market_id, user)- Check user dispute statusget_user_dispute_stake(env, market_id, user)- Get user dispute amountvote_on_dispute(env, dispute_id, user, vote, stake)- Vote on disputecalculate_dispute_outcome(env, dispute_id)- Calculate dispute resultdistribute_dispute_fees(env, dispute_id, winner)- Distribute outcome feesescalate_dispute(env, dispute_id, escalation_reason)- Escalate to higher reviewget_dispute_votes(env, dispute_id)- Get all dispute votesvalidate_dispute_resolution_conditions(env, market_id)- Check resolution readinessset_dispute_timeout(env, dispute_id, timeout_hours)- Set resolution deadlinecheck_dispute_timeout(env, dispute_id)- Check timeout expirationauto_resolve_dispute_on_timeout(env, dispute_id)- Auto-resolve expired disputedetermine_timeout_outcome(env, dispute_id)- Determine timeout resultemit_timeout_event(env, dispute_id, outcome)- Emit timeout eventget_dispute_timeout_status(env, dispute_id)- Get timeout statusextend_dispute_timeout(env, dispute_id, additional_hours)- Extend deadline
DisputeValidator
validate_market_for_dispute(env, market)- Check dispute eligibilityvalidate_market_for_resolution(env, market)- Check resolution readinessvalidate_admin_permissions(env, admin)- Verify admin rightsvalidate_dispute_parameters(env, market, stake)- Validate dispute inputsvalidate_resolution_parameters(env, outcome)- Validate resolution outcomevalidate_dispute_voting_conditions(env, market)- Check voting conditionsvalidate_user_hasnt_voted(env, dispute_id, user)- Prevent double votingvalidate_voting_completed(voting_data)- Check voting phase endvalidate_dispute_resolution_conditions(env, market)- Check resolution readinessvalidate_dispute_escalation_conditions(env, dispute)- Check escalation readinessvalidate_dispute_timeout_parameters(timeout_hours)- Validate timeout durationvalidate_dispute_timeout_extension_parameters(additional, current_timeout)- Validate extensionvalidate_dispute_timeout_status_for_extension(timeout_status)- Check can extend
DisputeUtils
add_dispute_to_market(market, dispute)- Register dispute on marketextend_market_for_dispute(market, env)- Extend market for dispute perioddetermine_final_outcome_with_disputes(market, disputes)- Calculate final outcomefinalize_market_with_resolution(market, resolution)- Apply resolutionextract_disputes_from_market(market)- Get market disputeshas_user_disputed(market, user)- Check user disputedget_user_dispute_stake(market, user)- Get user's dispute stakecalculate_dispute_impact(market)- Measure dispute effectadd_vote_to_dispute(dispute_id, vote)- Record dispute voteget_dispute_voting(env, dispute_id)- Get voting datastore_dispute_voting(env, dispute_id, voting)- Save voting datastore_dispute_vote(env, dispute_id, vote)- Record voteget_dispute_votes(env, dispute_id)- Retrieve votescalculate_stake_weighted_outcome(voting_data)- Get outcome by stakedistribute_fees_based_on_outcome(dispute_id, outcome)- Distribute feesstore_dispute_fee_distribution(env, distribution)- Save distributionget_dispute_fee_distribution(env, dispute_id)- Get distribution detailsstore_dispute_escalation(env, escalation)- Save escalationget_dispute_escalation(env, dispute_id)- Get escalation detailsstore_dispute_timeout(env, timeout)- Save timeout configget_dispute_timeout(env, dispute_id)- Get timeout confighas_dispute_timeout(env, dispute_id)- Check timeout existsremove_dispute_timeout(env, dispute_id)- Remove timeoutget_active_timeouts(env)- Get all pending timeoutscheck_expired_timeouts(env)- Find expired timeouts
DisputeAnalytics
calculate_dispute_stats(market)- Calculate dispute statisticscalculate_dispute_impact(market)- Measure impact on marketcalculate_oracle_weight(market)- Get oracle influencecalculate_community_weight(market)- Get community influencecalculate_community_consensus(env, market)- Get consensus metricsget_top_disputers(env, market, limit)- Get largest dispute stakerscalculate_dispute_participation_rate(market)- Get participation percentagecalculate_timeout_stats(env)- Get timeout statisticsget_timeout_analytics(env, dispute_id)- Get timeout details
Module: events.rs
Purpose: Comprehensive event emission for all contract operations enabling transparency and off-chain tracking.
MarketCreatedEvent- New market creationEventCreatedEvent- Event structure creationVoteCastEvent- User vote submissionBetPlacedEvent- Bet placementBetStatusUpdatedEvent- Bet outcome changeOracleResultEvent- Oracle result receivedMarketResolvedEvent- Market resolution completionDisputeCreatedEvent- Dispute initiationDisputeResolvedEvent- Dispute conclusionFeeCollectedEvent- Fee collection from marketFeeWithdrawalAttemptEvent- Fee withdrawal requestFeeWithdrawnEvent- Fee withdrawal completionOracleVerifInitiatedEvent- Oracle verification startOracleResultVerifiedEvent- Oracle result verification completeOracleVerificationFailedEvent- Oracle verification failureOracleValidationFailedEvent- Oracle validation failureOracleConsensusReachedEvent- Oracle consensus achievedOracleHealthStatusEvent- Oracle health reportExtensionRequestedEvent- Market extension requestConfigUpdatedEvent- Configuration changeBetLimitsUpdatedEvent- Bet limit changeStatisticsUpdatedEvent- Statistics updateErrorLoggedEvent- Error occurrenceErrorRecoveryEvent- Error resolutionPerformanceMetricEvent- Performance dataAdminActionEvent- Admin action executionAdminRoleEvent- Admin role changeAdminPermissionEvent- Permission modificationMarketClosedEvent- Market closureRefundOnOracleFailureEvent- Refund for failed oracleMarketFinalizedEvent- Market finalizationAdminInitializedEvent- Admin system initializationAdminTransferredEvent- Admin transferContractPausedEvent- Contract pauseContractUnpausedEvent- Contract resumeContractInitializedEvent- Contract initializationPlatformFeeSetEvent- Platform fee settingDisputeTimeoutSetEvent- Dispute timeout creationDisputeTimeoutExpiredEvent- Dispute timeout expirationDisputeTimeoutExtendedEvent- Dispute timeout extensionDisputeAutoResolvedEvent- Dispute auto-resolutionGovernanceProposalCreatedEvent- Governance proposal creationGovernanceVoteCastEvent- Governance voteFallbackUsedEvent- Fallback oracle usageResolutionTimeoutEvent- Resolution deadline reachedGovernanceProposalExecutedEvent- Proposal executionConfigInitializedEvent- Configuration initializationStorageCleanupEvent- Storage cleanupStorageOptimizationEvent- Storage optimizationStorageMigrationEvent- Storage migrationOracleDegradationEvent- Oracle degradationOracleRecoveryEvent- Oracle recoveryManualResolutionRequiredEvent- Manual intervention neededStateChangeEvent- State transitionWinningsClaimedEvent- Single claimWinningsClaimedBatchEvent- Batch claimClaimPeriodUpdatedEvent- Claim period changeMarketClaimPeriodUpdatedEvent- Market-specific claim periodTreasuryUpdatedEvent- Treasury changesUnclaimedWinningsSweptEvent- Unclaimed funds sweepContractUpgradedEvent- Contract upgradeMarketDeadlineExtendedEvent- Market deadline extensionMarketDescriptionUpdatedEvent- Market description changeMarketOutcomesUpdatedEvent- Market outcomes changeCategoryUpdatedEvent- Market category changeTagsUpdatedEvent- Market tags changeContractRollbackEvent- Contract rollbackUpgradeProposalCreatedEvent- Upgrade proposal creationCircuitBreakerEvent- Circuit breaker triggerMinPoolSizeNotMetEvent- Minimum pool not met
EventEmitter
emit_market_created(env, market_id, admin, question, outcomes)- Emit market creationemit_event_created(...)- Emit event structure creationemit_vote_cast(env, user, market_id, outcome, stake)- Emit voteemit_bet_placed(env, user, market_id, outcome, amount)- Emit betemit_bet_status_updated(env, user, market_id, status)- Emit bet updateemit_oracle_result(env, market_id, oracle_result)- Emit oracle dataemit_oracle_verification_initiated(env, market_id, oracle_provider)- Emit verification startemit_oracle_result_verified(env, market_id, oracle_provider: confidence)- Emit verification successemit_oracle_verification_failed(env, market_id, reason)- Emit verification failureemit_oracle_validation_failed(env, market_id, validation_error)- Emit validation failureemit_oracle_consensus_reached(env)- Emit consensusemit_oracle_health_status(env, provider, is_healthy)- Emit health statusemit_market_resolved(env, market_id, winning_outcome)- Emit resolutionemit_dispute_created(env, market_id, user, stake)- Emit dispute creationemit_dispute_resolved(env, dispute_id, outcome)- Emit dispute resolutionemit_fee_collected(env, admin, market_id, amount)- Emit fee collectionemit_fee_withdrawal_attempt(env, admin, amount)- Emit withdrawal attemptemit_fee_withdrawn(env, admin, amount)- Emit withdrawal completionemit_extension_requested(env, market_id, additional_days)- Emit extension requestemit_config_updated(env, config_type)- Emit config changeemit_bet_limits_updated(env, min_bet, max_bet)- Emit limit changeemit_error_logged(env, error_code, message)- Emit erroremit_error_recovery_event(env, recovery_action)- Emit recoveryemit_performance_metric(env, metric_type, value)- Emit metricemit_admin_action_logged(env, admin, action, success)- Emit admin action
Module: governance.rs
Purpose: On-chain governance system for protocol-level decisions and contract upgrades.
GovernanceProposal(struct) - Proposal with voting and execution detailsGovernanceError(enum) - ProposalExists, ProposalNotFound, VotingNotStarted, etc.
GovernanceContract
initialize(env, admin, voting_period_seconds, quorum_votes)- Initialize governancecreate_proposal(env, proposer, proposal_data)- Create new proposalvote(env, voter, proposal_id, vote_for)- Vote on proposal (for/against)validate_proposal(env, proposal)- Validate proposal dataexecute_proposal(env, proposal_id, caller)- Execute passed proposallist_proposals(env)- Get all proposal IDsget_proposal(env, proposal_id)- Get proposal detailsset_voting_period(env, admin, new_period_seconds)- Change voting durationset_quorum(env, admin, new_quorum)- Change quorum requirement
Module: config.rs
Purpose: Centralized contract configuration management with environment profiles and runtime updates.
ContractConfig(struct) - Complete contract configurationEnvironment(enum) - Development, Testnet, MainnetFeeConfig(struct) - Fee parametersVotingConfig(struct) - Voting parametersMarketConfig(struct) - Market constraintsExtensionConfig(struct) - Extension rulesResolutionConfig(struct) - Resolution parametersOracleRuntimeConfig(struct) - Oracle settings
ConfigManager
get_development_config(env)- Get dev environment configget_testnet_config(env)- Get testnet environment configget_mainnet_config(env)- Get mainnet environment configget_default_fee_config()- Get default fee settingsget_mainnet_fee_config()- Get mainnet fee settingsget_default_voting_config()- Get default voting settingsget_mainnet_voting_config()- Get mainnet voting settingsget_default_market_config()- Get default market settingsget_default_extension_config()- Get default extension settingsget_default_resolution_config()- Get default resolution settingsget_default_oracle_config()- Get default oracle settingsget_mainnet_oracle_config()- Get mainnet oracle settingsstore_config(env, config)- Save configurationget_config(env)- Retrieve configurationupdate_config(env, config)- Update configurationreset_to_defaults(env)- Reset to default valuesget_current_configuration(env)- Get active configurationget_configuration_history(env, limit)- Get config change historyvalidate_configuration_changes(env, changes)- Validate changesupdate_fee_percentage(env, admin, percentage)- Change fee percentageupdate_dispute_threshold(env, admin, threshold)- Change dispute costupdate_oracle_timeout(env, admin, timeout)- Change oracle timeoutupdate_market_limits(env, admin, limits)- Change market constraints
ConfigValidator
validate_contract_config(config)- Validate entire configvalidate_fee_config(config)- Validate fee settingsvalidate_voting_config(config)- Validate voting settingsvalidate_market_config(config)- Validate market settingsvalidate_extension_config(config)- Validate extension settingsvalidate_resolution_config(config)- Validate resolution settingsvalidate_oracle_config(config)- Validate oracle settings
ConfigUtils
is_mainnet(config)- Check if mainnetis_testnet(config)- Check if testnetis_development(config)- Check if developmentget_environment_name(config)- Get environment name stringget_config_summary(config)- Get config summaryfees_enabled(config)- Check if fees activeget_fee_config(config)- Get fee settingsget_voting_config(config)- Get voting settingsget_market_config(config)- Get market settingsget_extension_config(config)- Get extension settingsget_resolution_config(config)- Get resolution settingsget_oracle_config(config)- Get oracle settings
Module: fees.rs
Purpose: Fee calculation, collection, distribution, and analytics with tiered and dynamic pricing.
FeeConfig(struct) - Platform fee configurationFeeTier(struct) - Fee tier for market sizeActivityAdjustment(struct) - Activity-based fee adjustmentFeeCalculationFactors(struct) - All fee calculation inputsFeeHistory(struct) - Historical fee dataFeeCollection(struct) - Fee collection recordFeeAnalytics(struct) - Fee statisticsFeeBreakdown(struct) - Fee component detailsFeeWithdrawalSchedule(struct) - Fee withdrawal schedule
FeeManager
collect_fees(env, admin, market_id)- Collect market feesprocess_creation_fee(env, admin)- Process new market feeget_fee_analytics(env)- Get fee statisticsupdate_fee_config(env, admin, new_config)- Change fee settingsget_fee_config(env)- Get current fee configvalidate_market_fees(env, market)- Validate market feesupdate_fee_structure(env, admin, structure)- Update fee structureget_fee_history(env, market_id)- Get historical fees
FeeCalculator
calculate_platform_fee(market)- Calculate fee amountcalculate_user_payout_after_fees(market, user, stake)- Get payout minus feescalculate_fee_breakdown(market)- Get detailed fee breakdowncalculate_dynamic_fee(market)- Calculate variable feecalculate_dynamic_fee_by_market_id(env, market_id)- Calculate dynamic feeget_fee_tier_by_market_size(env, total_staked)- Get applicable tieradjust_fee_by_activity(market, adjustment)- Apply activity adjustmentvalidate_fee_percentage(env, fee, market_id)- Validate fee percentageget_fee_calculation_factors(env, market_id)- Get calculation inputs
FeeValidator
validate_admin_permissions(env, admin)- Verify admin rightsvalidate_market_for_fee_collection(market)- Check fee collection eligibilityvalidate_fee_amount(amount)- Validate fee amountvalidate_creation_fee(amount)- Validate creation feevalidate_fee_config(config)- Validate configurationvalidate_market_fees(market)- Validate market fees
FeeUtils
transfer_fees_to_admin(env, admin, amount)- Send fees to adminget_market_fee_stats(market)- Get market fee statisticscan_collect_fees(market)- Check if fees collectibleget_fee_eligibility(market)- Get collection readiness
FeeTracker
record_fee_collection(env, market_id, amount, admin)- Record collectionrecord_creation_fee(env, admin, amount)- Record creation feerecord_config_change(env, old_config, new_config)- Record config changeget_fee_history(env)- Get all fee recordsget_total_fees_collected(env)- Get total collectedrecord_fee_structure_update(env, old_structure, new_structure)- Record update
FeeWithdrawalManager
get_schedule(env)- Get withdrawal scheduleset_schedule(env, admin, schedule)- Set withdrawal scheduleget_last_withdrawal_ts(env)- Get last withdrawal timewithdraw_fees(env, admin, amount)- Withdraw collected fees
FeeConfigManager
store_fee_config(env, config)- Save fee configget_fee_config(env)- Get fee configreset_to_defaults(env)- Reset to defaultscalculate_analytics(env)- Calculate fee analyticsget_market_fee_stats(market)- Get market fee statscalculate_fee_efficiency(market)- Get fee efficiency metrics
Module: extensions.rs
Purpose: Market duration extension management with fee handling and history tracking.
ExtensionEvent(struct) - Extension history entry
ExtensionManager
extend_market_duration(env, admin, market_id, additional_days, reason)- Extend market end timeget_market_extension_history(env, market_id)- Get all extensions for marketget_extension_stats(env, market_id)- Get extension statisticscan_extend_market(env, market_id, admin)- Check if extension allowedcalculate_extension_fee(additional_days)- Calculate extension cost
ExtensionValidator
validate_extension_conditions(env, market_id, additional_days)- Validate extensioncheck_extension_limits(env, market_id)- Check limit constraintscan_extend_market(env, market_id, admin)- Verify extensibility
ExtensionUtils
handle_extension_fees(env, admin, fee_amount)- Process extension feesemit_extension_event(env, market_id, admin, additional_days)- Emit extension eventget_extension_events(env)- Get all extension events
Module: monitoring.rs
Purpose: Comprehensive contract health monitoring, alerting, and performance metrics.
MonitoringAlertType(enum) - MarketHealth, OracleHealth, FeeCollection, DisputeResolution, Performance, SecurityAlertSeverity(enum) - Info, Warning, Critical, EmergencyMonitoringStatus(enum) - Healthy, Warning, Critical, Unknown, MaintenanceTimeFrame(enum) - LastHour, LastDay, LastWeek, LastMonth, CustomMarketHealthMetrics(struct) - Market health indicatorsOracleHealthMetrics(struct) - Oracle health indicatorsFeeCollectionMetrics(struct) - Fee collection statisticsDisputeResolutionMetrics(struct) - Dispute metricsPerformanceMetrics(struct) - System performance dataMonitoringAlert(struct) - Alert notificationMonitoringData(struct) - Monitoring data snapshot
ContractMonitor
monitor_market_health(env, market_id)- Check market healthmonitor_oracle_health(env, oracle_provider)- Check oracle healthmonitor_fee_collection(env, market_id)- Check fee collection statusmonitor_dispute_resolution(env, market_id)- Check dispute statusget_contract_performance_metrics(env)- Get system performanceemit_monitoring_alert(env, alert)- Emit health alertvalidate_monitoring_data(env, data)- Validate monitoring data
MonitoringUtils
create_alert(alert_type, severity, message)- Create alertis_data_stale(env, timestamp, max_age)- Check data freshnesscalculate_freshness_score(env, timestamp)- Score data agevalidate_thresholds(env, metrics, thresholds)- Validate against thresholds
MonitoringTestingUtils
create_test_market_health_metrics(env, market_id)- Create test market metricscreate_test_oracle_health_metrics(env, provider)- Create test oracle metricscreate_test_fee_collection_metrics(env)- Create test fee metricscreate_test_dispute_resolution_metrics(env, market_id)- Create test dispute metricscreate_test_performance_metrics(env)- Create test performance metricscreate_test_monitoring_alert(env)- Create test alertcreate_test_monitoring_data(env)- Create test datavalidate_test_data_structure(env, data)- Validate test data
┌─────────────────────────────────────────────────────────────────┐
│ Admin Management (admin.rs) │
│ - Roles & Permissions - Action Logging - Pause/Unpause │
└────────────────────────────┬──────────────────────────────────────┘
│
┌────────────────────┼────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌──────────────────┐ ┌──────────────────┐
│Governance │ │Market Management │ │ Configuration │
│(governance) │ │ (markets.rs) │ │ (config.rs) │
└─────────────┘ └────────┬─────────┘ └──────────────────┘
│
┌────────────────────┼────────────────────┬────────────┐
│ │ │ │
▼ ▼ ▼ ▼
┌────────┐ ┌────────────────┐ ┌──────────────┐ ┌──────────┐
│ Bets │ │ Voting & │ │ Dispute │ │ Extension│
│(bets) │ │ Disputes │ │ (disputes) │ │(extensions)
│ │ │(voting) │ │ │ │ │
└────┬───┘ └────┬───────┬───┘ └──────┬───────┘ └──────────┘
│ │ │ │
└─────────────┼───────┼──────────────┘
│ │
▼ ▼
┌──────────────────────┐
│ Resolution System │
│ (resolution.rs) │
└──────┬───────────────┘
│
▼
┌─────────────────────┐
│ Oracle Management │
│ (oracles.rs) │
└─────────────────────┘
│
┌────────────┴────────────┐
│ │
▼ ▼
┌──────────┐ ┌──────────────┐
│ Fees │ │ Balances │
│(fees) │ │(balances) │
└──────────┘ └──────────────┘
│ │
│ ┌─────────────────┘
│ │
└───┬───┴─────────────┐
│ │
▼ ▼
┌──────────┐ ┌─────────────┐
│ Queries │ │Monitoring │
│(queries) │ │(monitoring) │
└──────────┘ └─────────────┘
│ │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Event System │
│ (events.rs) │
└─────────────────┘
1. Admin creates market
AdminFunctions::create_market() → MarketCreator::create_market()
2. EventEmitter::emit_market_created()
3. Users place bets
BetManager::place_bet() → MarketStateManager::add_vote()
EventEmitter::emit_bet_placed()
4. Market reaches end time
OracleResolutionManager::fetch_oracle_result() → OracleFactory
5. Oracle result received
EventEmitter::emit_oracle_result()
6. Market resolution
MarketResolutionManager::resolve_market() → VotingUtils::calculate_user_payout()
7. Disputers can challenge
DisputeManager::process_dispute() → DisputeUtils::add_dispute_to_market()
8. Final resolution
MarketResolutionManager::finalize_market() → EventEmitter::emit_market_resolved()
9. Users claim winnings
VotingManager::process_claim() → FeeCalculator::calculate_user_payout_after_fees()
EventEmitter::emit_winnings_claimed()
10. Fees collected
FeeManager::collect_fees() → EventEmitter::emit_fee_collected()
All functions return Result<T, Error> with comprehensive error types covering:
- Invalid input validation
- Authorization failures
- Market state violations
- Insufficient balances
- Oracle failures
- Dispute process errors
- Configuration errors
- Minimal storage reads/writes
- Batch operations for reduced transactions
- Efficient data structures
- Caching where appropriate
- Query functions are read-only
- Role-based access control
- Multi-admin support with multisig
- Reentrancy guards
- Circuit breaker system
- Comprehensive input validation
- State consistency checks
- Oracle health monitoring
- Dispute resolution system
This documentation covers the current implementation of Predictify Hybrid. Version information and change logs can be found in the contract configuration and governance modules.