import { PublicKey } from "@solana/web3.js"; import BN from "bn.js"; /** * Pool type enumeration */ export enum PoolType { High = 0, Low = 1, } /** * Pool state from on-chain account */ export interface PoolState { isInitialized: boolean; isSettled: boolean; winningOutcome: number; qVector: [BN, BN, BN, BN]; b: BN; strikes: [BN, BN, BN]; // High: [150, 160, 170] ascending, Low: [160, 150, 140] descending hitMints: [PublicKey, PublicKey, PublicKey]; missMints: [PublicKey, PublicKey, PublicKey]; claimedWinnings: BN; } /** * Market state from on-chain account */ export interface MarketState { weekNumber: number; operator: PublicKey; wsolVault: PublicKey; startTimestamp: BN; endTimestamp: BN; totalSubsidy: BN; feesCollected: BN; isPaused: boolean; highPool: PoolState; lowPool: PoolState; bump: number; } /** * Token identifier */ export interface TokenId { poolType: PoolType; strikeIndex: number; } /** * Trade parameters */ export interface TradeParams { poolType: PoolType; strikeIndex: number; isHit: boolean; amount: BN; isBuy: boolean; } /** * Trade simulation result */ export interface TradeSimulation { grossCost: BN; // Cost before fees fee: BN; // Trading fee netCost: BN; // Total cost (buy) or refund (sell) newQVector: [BN, BN, BN, BN]; // Updated q_vector after trade priceImpact: number; // Percentage price impact } /** * Market summary for display */ export interface MarketSummary { weekNumber: number; endTimestamp: Date; totalSubsidy: number; // In SOL feesCollected: number; // In SOL isPaused: boolean; highPool: PoolSummary; lowPool: PoolSummary; } /** * Pool summary for display */ export interface PoolSummary { isInitialized: boolean; isSettled: boolean; winningOutcome: number; strikes: [number, number, number]; // In dollars tokens: TokenSummary[]; } /** * Token summary for display */ export interface TokenSummary { strikeIndex: number; isHit: boolean; mint: PublicKey; price: number; // Current price in SOL probability: number; // Implied probability } /** * Affected indices for LMSR calculation */ export interface AffectedIndices { indices: number[]; count: number; } /** * Detailed pool data for client-side display and processing */ export interface PoolDetail { isInitialized: boolean; isSettled: boolean; winningOutcome: number; strikes: number[]; // High: [150, 160, 170] ascending, Low: [160, 150, 140] descending qVector: string[]; b: string; mintSupply: number[]; } /** * Detailed market data for client-side display and processing */ export interface MarketDetail { weekNumber: number; operator: string; wsolVault: string; vaultBalance: number; startTimestamp: number; endTimestamp: number; totalSubsidy: number; feesCollected: number; isPaused: boolean; highPool: PoolDetail; lowPool: PoolDetail; } export const MAX_ACTIVE_MARKETS = 1; /** * Registry state from on-chain account * Tracks all active market week numbers */ export interface RegistryState { bump: number; activeCount: number; activeWeeks: number[]; lastWeekNumber: number; totalMarketsCount: number; }