// Defines all the program structs for Zeta. import { PublicKey } from "@solana/web3.js"; import * as anchor from "@zetamarkets/anchor"; export interface State { admin: PublicKey; stateNonce: number; serumNonce: number; mintAuthNonce: number; numUnderlyings: number; numFlexUnderlyings: number; null: Array; strikeInitializationThresholdSeconds: number; pricingFrequencySeconds: number; liquidatorLiquidationPercentage: number; insuranceVaultLiquidationPercentage: number; deprecatedFeeValues: Array; nativeDepositLimit: anchor.BN; expirationThresholdSeconds: number; positionMovementFeeBps: number; marginConcessionPercentage: number; treasuryWalletNonce: number; deprecatedOptionFeeValues: Array; referralsAdmin: PublicKey; referralsRewardsWalletNonce: number; maxPerpDeltaAge: number; secondaryAdmin: PublicKey; vaultNonce: number; insuranceVaultNonce: number; nativeWithdrawLimit: anchor.BN; withdrawLimitEpochSeconds: number; nativeOpenInterestLimit: anchor.BN; haltStates: Array; haltStatesPadding: Array; triggerAdmin: PublicKey; minLotSizes: Array; minLotSizesPadding: Array; tickSizes: Array; tickSizesPadding: Array; deprecatedMakerFeeValue: anchor.BN; nativeTakeTriggerOrderFeePercentage: anchor.BN; nativeMakerRebatePercentage: anchor.BN; maTypeAdmin: PublicKey; pricingAdmin: PublicKey; treasurySplitTokenAccount: PublicKey; treasurySplitPercentage: number; padding: Array; } export interface Pricing { nonce: number; markPrices: Array; markPricesPadding: Array; updateTimestamps: Array; updateTimestampsPadding: Array; fundingDeltas: Array; fundingDeltasPadding: Array; latestFundingRates: Array; latestFundingRatesPadding: Array; latestMidpoints: Array; latestMidpointsPadding: Array; oracles: Array; oraclesPadding: Array; oracleBackupFeeds: Array; oracleBackupFeedsPadding: Array; markets: Array; marketsPadding: Array; perpSyncQueues: Array; perpSyncQueuesPadding: Array; perpParameters: Array; perpParametersPadding: Array; marginParameters: Array; marginParametersPadding: Array; products: Array; productsPadding: Array; zetaGroupKeys: Array; zetaGroupKeysPadding: Array; totalInsuranceVaultDeposits: anchor.BN; lastWithdrawTimestamp: anchor.BN; netOutflowSum: anchor.BN; haltForcePricing: Array; haltForcePricingPadding: Array; padding: Array; } export interface MarketIndexes { nonce: number; initialized: boolean; indexes: Array; } export interface Underlying { mint: PublicKey; } export interface SettlementAccount { settlementPrice: anchor.BN; strikes: Array; } export interface PricingParameters { optionTradeNormalizer: AnchorDecimal; futureTradeNormalizer: AnchorDecimal; maxVolatilityRetreat: AnchorDecimal; maxInterestRetreat: AnchorDecimal; minDelta: anchor.BN; maxDelta: anchor.BN; minInterestRate: anchor.BN; maxInterestRate: anchor.BN; minVolatility: anchor.BN; maxVolatility: anchor.BN; } export interface MarginParameters { futureMarginInitial: anchor.BN; futureMarginMaintenance: anchor.BN; } export interface PerpParameters { minFundingRatePercent: anchor.BN; maxFundingRatePercent: anchor.BN; impactCashDelta: anchor.BN; } export interface HaltState { halted: boolean; spotPrice: anchor.BN; timestamp: anchor.BN; markPricesSet: Array; markPricesSetPadding: Array; marketNodesCleaned: Array; marketNodesCleanedPadding: Array; marketCleaned: Array; marketCleanedPadding: Array; } export interface HaltStateV2 { halted: boolean; timestamp: anchor.BN; spotPrice: anchor.BN; marketCleaned: boolean; } export interface Product { market: PublicKey; strike: Strike; dirty: boolean; kind: Object; } export interface Strike { isSet: boolean; value: anchor.BN; } export interface ExpirySeries { activeTs: anchor.BN; expiryTs: anchor.BN; dirty: boolean; } export interface CrossOpenOrdersMap { userKey: PublicKey; subaccountIndex: number; } export interface OpenOrdersMap { userKey: PublicKey; } export interface Position { size: anchor.BN; costOfTrades: anchor.BN; } export interface OrderState { closingOrders: anchor.BN; openingOrders: Array; } export interface ProductLedger { position: Position; orderState: OrderState; } export interface CrossMarginAccountInfo { initialized: boolean; name: Array; // 10 byte string, stored as [u8; 10] onchain } export interface CrossMarginAccountManager { nonce: number; authority: PublicKey; accounts: Array; referrer: PublicKey; airdropCommunity: number; referredTimestamp: anchor.BN; padding: Array; } export interface CrossMarginAccount { authority: PublicKey; delegatedPubkey: PublicKey; balance: anchor.BN; subaccountIndex: number; nonce: number; forceCancelFlag: boolean; accountType: any; openOrdersNonces: Array; openOrdersNoncesPadding: Array; rebalanceAmount: anchor.BN; lastFundingDeltas: Array; lastFundingDeltasPadding: Array; productLedgers: Array; productLedgersPadding: Array; triggerOrderBits: anchor.BN; rebateRebalanceAmount: anchor.BN; potentialOrderLoss: Array; potentialOrderLossPadding: Array; padding: Array; } export interface MarginAccount { authority: PublicKey; nonce: number; balance: anchor.BN; forceCancelFlag: boolean; openOrdersNonce: Array; seriesExpiry: Array; productLedgers: Array; productLedgersPadding: Array; perpProductLedger: ProductLedger; rebalanceAmount: anchor.BN; asset: any; accountType: any; lastFundingDelta: AnchorDecimal; delegatedPubkey: PublicKey; rebateRebalanceAmount: anchor.BN; padding: Array; } export interface SpreadAccount { authority: PublicKey; nonce: number; balance: anchor.BN; seriesExpiry: Array; seriesExpiryPadding: anchor.BN; positions: Array; positionsPadding: Array; asset: any; padding: Array; } export interface ReferrerIdAccount { referrerId: Array; referrerPubkey: PublicKey; } export interface ReferrerPubkeyAccount { referrerPubkey: PublicKey; } export interface TriggerOrder { owner: PublicKey; marginAccount: PublicKey; openOrders: PublicKey; orderPrice: anchor.BN; triggerPrice: anchor.BN | null; // Option triggerTs: anchor.BN | null; // Option size: anchor.BN; creationTs: anchor.BN; triggerDirection: any | null; // Option side: any; // enum Side asset: any; // enum Asset orderType: any; // enum OrderType bit: number; reduceOnly: boolean; } export interface PerpSyncQueue { nonce: number; head: number; length: number; queue: Array; } export interface MarketNode { index: number; nonce: number; nodeUpdates: Array; interestUpdate: anchor.BN; } export interface AnchorDecimal { flags: number; hi: number; lo: number; mid: number; } export interface ProductGreeks { delta: anchor.BN; vega: AnchorDecimal; volatility: AnchorDecimal; } export interface InsuranceDepositAccount { nonce: number; amount: anchor.BN; } export interface WhitelistInsuranceAccount { nonce: number; userKey: PublicKey; } export interface WhitelistDepositAccount { nonce: number; userKey: PublicKey; } export interface SocializedLossAccount { nonce: number; overbankruptAmount: anchor.BN; } export interface WhitelistTradingFeesAccount { nonce: number; userKey: PublicKey; } // TODO move these events to event.ts. export interface PlaceOrderEvent { fee: anchor.BN; oraclePrice: anchor.BN; orderId: anchor.BN; expiryTs: anchor.BN; asset: any; marginAccount: PublicKey; clientOrderId: anchor.BN; user: PublicKey; } /** * @deprecated - here for historical documentation. */ export interface TradeEvent { marginAccount: PublicKey; index: number; costOfTrades: anchor.BN; size: anchor.BN; isBid: boolean; clientOrderId: anchor.BN; orderId: anchor.BN; } export interface TradeEventV2 { marginAccount: PublicKey; index: number; costOfTrades: anchor.BN; size: anchor.BN; isBid: boolean; clientOrderId: anchor.BN; orderId: anchor.BN; asset: number; user: PublicKey; isTaker: boolean; sequenceNumber: anchor.BN; // Unique id for the given market } export interface TradeEventV3 { marginAccount: PublicKey; index: number; costOfTrades: anchor.BN; size: anchor.BN; isBid: boolean; clientOrderId: anchor.BN; orderId: anchor.BN; asset: Object; user: PublicKey; isTaker: boolean; sequenceNumber: anchor.BN; // Unique id for the given market fee: anchor.BN; price: anchor.BN; pnl: anchor.BN; rebate: anchor.BN; } export interface PositionMovementEvent { // Positive if movement from margin into spread, else negative. netBalanceTransfer: anchor.BN; marginAccountBalance: anchor.BN; spreadAccountBalance: anchor.BN; movementFees: anchor.BN; } export interface LiquidationEvent { liquidatorReward: anchor.BN; insuranceReward: anchor.BN; costOfTrades: anchor.BN; size: anchor.BN; remainingLiquidateeBalance: anchor.BN; remainingLiquidatorBalance: anchor.BN; markPrice: anchor.BN; underlyingPrice: anchor.BN; liquidatee: PublicKey; liquidator: PublicKey; asset: Object; liquidateeMarginAccount: PublicKey; liquidatorMarginAccount: PublicKey; } export interface OrderCompleteEvent { marginAccount: PublicKey; user: PublicKey; asset: Object; marketIndex: number; side: Object; unfilledSize: anchor.BN; // > 0 for cancel or booted, 0 for non cancels orderId: anchor.BN; clientOrderId: anchor.BN; orderCompleteType: Object; } export interface ApplyFundingEvent { marginAccount: PublicKey; user: PublicKey; asset: Object; balanceChange: anchor.BN; remainingBalance: anchor.BN; fundingRate: anchor.BN; oraclePrice: anchor.BN; positionSize: anchor.BN; }