/// /// import { BN, BigNum, DataAndSlot, Event, EventSubscriptionOrderBy, EventSubscriptionOrderDirection, LogProviderConfig } from '@drift-labs/sdk'; import { Commitment, PublicKey, TransactionSignature } from '@solana/web3.js'; import { EventEmitter } from 'events'; import StrictEventEmitter from 'strict-event-emitter-types'; export type SponsorInfo = { sponsor: PublicKey; minSponsorAmount: BN; maxSponsorFraction: BN; }; export type SortFn = (currentRecord: CompetitionsEventMap[EventType], newRecord: CompetitionsEventMap[EventType]) => 'less than' | 'greater than'; export declare class CompetitionStatus { static readonly ACTIVE: { active: {}; }; static readonly WINNER_AND_PRIZE_RANDOMNESS_REQUESTED: { winnerAndPrizeRandomnessRequested: {}; }; static readonly WINNER_AND_PRIZE_RANDOMNESS_COMPLETE: { WinnerAndPrizeRandomnessComplete: {}; }; static readonly WINNER_SETTLEMENT_COMPLETE: { WinnerSettlementComplete: {}; }; static readonly EXPIRED: { Expired: {}; }; } export declare class CompetitorStatus { static readonly ACTIVE: { active: {}; }; static readonly DISQUALIFIED: { disqualified: {}; }; } export type EventSubscriptionOptions = { address?: PublicKey; eventTypes?: EventType[]; maxEventsPerType?: number; orderBy?: EventSubscriptionOrderBy; orderDir?: EventSubscriptionOrderDirection; commitment?: Commitment; maxTx?: number; logProviderConfig?: LogProviderConfig; untilTx?: TransactionSignature; }; export declare const DefaultEventSubscriptionOptions: EventSubscriptionOptions; export type Competition = { name: number[]; sponsorInfo: SponsorInfo; switchboardFunction: PublicKey; switchboardFunctionRequest: PublicKey; switchboardFunctionRequestEscrow: PublicKey; competitionAuthority: PublicKey; numberOfCompetitors: BN; numberOfCompetitorsSettled: BN; totalScoreSettled: BN; maxEntriesPerCompetitor: BN; prizeAmount: BN; prizeBase: BN; winnerRandomness: BN; prizeRandomness: BN; prizeRandomnessMax: BN; outstandingUnclaimedWinnings: BN; roundNumber: BN; nextRoundExpiryTs: BN; competitionExpiryTs: BN; roundDuration: BN; status: CompetitionStatus; competitionAuthorityBump: number; }; export type Competitor = { authority: PublicKey; competition: PublicKey; userStats: PublicKey; minDraw: BN; maxDraw: BN; unclaimedWinningsBase: BN; unclaimedWinnings: BN; competitionRoundNumber: BN; previousSnapshotScore: BN; latestSnapshotScore: BN; bonusScore: BN; status: CompetitorStatus; }; /** Events */ export type DriftCompetitionsProgramAccountBaseEvents = { update: void; error: (e: Error) => void; }; export type CompetitionAccountEvents = DriftCompetitionsProgramAccountBaseEvents & { competitionUpdate: (competition: Competition) => void; }; export type CompetitorAccountEvents = DriftCompetitionsProgramAccountBaseEvents & { competitorUpdate: (competitor: Competitor) => void; }; export type CompetitionRoundSummaryRecord = { competition: PublicKey; roundNumber: BN; roundStartTs: BN; roundEndTs: BN; prizePlacement: BN; prizeOddsNumerator: BN; prizeRandomness: BN; prizeRandomnessMax: BN; maxPrizeBucketValue: BN; prizeAmount: BN; prizeValue: BN; prizeBase: BN; numberOfWinners: BN; numberOfCompetitorsSettled: BN; totalScoreSettled: BN; insuranceVaultBalance: BN; protocolIfShares: BN; totalIfShares: BN; ts: BN; }; export type CompetitionRoundWinnerRecord = { roundNumber: BN; competitor: PublicKey; competition: PublicKey; competitorAuthority: PublicKey; minDraw: BN; maxDraw: BN; winnerPlacement: number; numberOfWinners: number; numberOfCompetitorsSettled: BN; winnerRandomness: BN; totalScoreSettled: BN; prizeRandomness: BN; prizeRandomnessMax: BN; prizeAmount: BN; prizeBase: BN; prizeValue: BN; ts: BN; }; export type CompetitorSettledRecord = { roundNumber: BN; competitor: PublicKey; competition: PublicKey; competitorAuthority: PublicKey; status: CompetitorStatus; unclaimedWinnings: BN; minDraw: BN; maxDraw: BN; bonusScoreBefore: BN; bonusScoreAfter: BN; previousSnapshotScoreBefore: BN; snapshotScore: BN; ts: BN; }; export type CompetitionsEventMap = { CompetitionRoundWinnerRecord: Event; CompetitionRoundSummaryRecord: Event; CompetitorSettledRecord: Event; }; export type EventType = keyof CompetitionsEventMap; export type WrappedEvent = CompetitionsEventMap[Type] & { eventType: Type; }; export type WrappedEvents = WrappedEvent[]; export type DriftSweepstakesEvent = CompetitionsEventMap['CompetitionRoundSummaryRecord'] | CompetitionsEventMap['CompetitionRoundWinnerRecord'] | CompetitionsEventMap['CompetitorSettledRecord']; export interface EventSubscriberEvents { newEvent: (event: WrappedEvent) => void; } /** Account Subscribers */ export interface DriftCompetitionsProgramAccountSubscriber { eventEmitter: StrictEventEmitter; isSubscribed: boolean; subscribe(): Promise; fetch(): Promise; updateData(account: Account, slot: number): void; unsubscribe(): Promise; getAccountAndSlot(): DataAndSlot; } export type CompetitionAccountSubscriber = DriftCompetitionsProgramAccountSubscriber; export type CompetitorAccountSubscriber = DriftCompetitionsProgramAccountSubscriber; export type CompetitionResult = { startTs: number; endTs: number; roundNumber: number; competitors: BN; totalTickets: BN; summaryEvent: Event; winners: { authority: PublicKey; prize: BigNum; tickets: BN; placement: number; winnerEvent: Event; }[]; }; export type LiveCompetitionInfo = { lastFetchedTs: number; roundNumber: number; endTs: number; totalCompetitors: number; totalTickets: BN; topCompetitors: { authority: PublicKey; ticketCount: BN; }[]; };