Types

TypeScript type definitions used throughout the SDK.

Initialization types

InitializeSDKParams
interface InitializeSDKParams {
  connection: Connection;
  wallet?: IWallet;
  skipPreflight?: boolean;
  commitment?: Commitment;
  maxRetries?: number;
}
IWallet
type IWallet = {
  publicKey: PublicKey;
  signTransaction<T extends Transaction | VersionedTransaction>(
    transaction: T
  ): Promise<T>;
  signAllTransactions<T extends Transaction | VersionedTransaction>(
    transactions: T[]
  ): Promise<T[]>;
};

Transaction types

BaseTransactionParams
interface BaseTransactionParams {
  payerOverride?: PublicKey;
  signers?: Keypair[];
  confirmOptions?: ConfirmOptions;
  preinstructions?: TransactionInstruction[];
  feePayerOverride?: PublicKey;
}
ConfirmOptions
interface ConfirmOptions {
  skipPreflight?: boolean;
  commitment?: Commitment;
  preflightCommitment?: Commitment;
  maxRetries?: number;
  minContextSlot?: number;
}

Bet types

InitializeBetParams
interface InitializeBetParams extends BaseTransactionParams {
  question: string;
  expectedUserCount: number;
  minimumVoteCount: number;
  isCreatorResolver: boolean;
}
PlaceWagerParams
interface PlaceWagerParams extends BaseTransactionParams {
  bet: PublicKey;
  amount?: number;     // Human-readable (e.g., 10 for 10 USDC)
  rawAmount?: number;  // Raw lamports (e.g., 10_000_000)
  side: Outcome;
}
InitiateVoteParams
interface InitiateVoteParams extends BaseTransactionParams {
  bet: PublicKey;
}
PlaceVoteParams
interface PlaceVoteParams extends BaseTransactionParams {
  bet: PublicKey;
  outcome: Outcome;
}
SettleBetBatchParams
interface SettleBetBatchParams extends BaseTransactionParams {
  bet: PublicKey;
  batchNumber: number;
  usersPerBatch: number;
}

V4 bet types

Multi-outcome bets use a numeric outcomeIndex instead of the binary Outcome enum, and amounts are raw base units (micro-USDC) typed as number | string | BN. SettleBetBatchParams is shared with V2.

InitializeBetV4Params
interface InitializeBetV4Params extends BaseTransactionParams {
  question: string;
  expectedUserCount: number;
  minimumVoteCount: number;
  isCreatorResolver: boolean;
  initialOutcomes: string[];   // 264 outcome labels
  votingDisabled?: boolean;    // admin-resolve-only when true
  wagerId?: number | BN;
}
AddOutcomeV4Params
interface AddOutcomeV4Params extends BaseTransactionParams {
  bet: PublicKey;
  label: string;
}
PlaceWagerV4Params
interface PlaceWagerV4Params extends BaseTransactionParams {
  bet: PublicKey;
  amount: number | string | BN;  // Raw micro-USDC (6 decimals)
  outcomeIndex: number;          // 0-based outcome index
}
PlaceVoteV4Params
interface PlaceVoteV4Params extends BaseTransactionParams {
  bet: PublicKey;
  outcomeIndex: number;
}
AdminResolveBetV4Params
interface AdminResolveBetV4Params extends BaseTransactionParams {
  bet: PublicKey;
  outcomeIndex: number;  // Winning outcome index
}

Mapped types

Returned by mapper functions — use plain numbers and strings instead of BN and Rust enums.

MappedBet
interface MappedBet {
  creator: string;
  createdAt: number;
  updatedAt: number;
  resolvedAt: number;
  distributedAt: number;
  voteInitiatedAt: number;
  status: string;           // "Draft" | "Pending" | "Resolving" | etc.
  resolvedOutcome: string;  // "For" | "Against" | "Tied"
  question: string;
  expectedUserCount: number;
  minimumVoteCount: number;
  totalOiFor: number;
  totalOiAgainst: number;
  poolAddress: string;
  wagers: MappedWager[];
  votes: MappedVote[];
  wagerId: number;
  isCreatorResolver: boolean;
  settledUserCount: number;
  totalBatchesRequired: number;
}
MappedWager
interface MappedWager {
  user: string;
  amount: number;
  outcome: string;   // "For" | "Against"
  updatedAt: number;
  status: string;    // "Open" | "SettledWin" | "SettledLoss"
  isVoteInitiator: boolean;
}
MappedBetV4
interface MappedBetV4 {
  creator: string;
  createdAt: number;
  updatedAt: number;
  resolvedAt: number;
  distributedAt: number;
  voteInitiatedAt: number;
  status: string;                      // "Draft" | "Pending" | "Resolving" | etc.
  resolvedOutcomeIndex: number | null; // null = refund-all
  isRefundAll: boolean;
  question: string;
  expectedUserCount: number;
  minimumVoteCount: number;
  feeBps: number;
  outcomes: { label: string; totalOi: string }[];
  poolAddress: string;
  poolBump: number;
  wagerId: number;
  isCreatorResolver: boolean;
  votingDisabled: boolean;
  outcomesLocked: boolean;
  wagers: {
    user: string;
    amount: string;
    outcomeIndex: number;
    updatedAt: number;
    status: string;
    isVoteInitiator: boolean;
  }[];
  votes: { user: string; outcomeIndex: number; createdAt: number }[];
  settledUserCount: number;
  totalBatchesRequired: number;
}
MappedUser
interface MappedUser {
  totalWagersCount: number;
  totalWageredAmount: number;
  inWagerAmount: number;
  nextWagerId: number;
  nextGameId: number;
}