///
import { Commitment, ConfirmOptions, PublicKey } from "@solana/web3.js";
import { AnchorProvider, BN, Idl, Wallet } from "@project-serum/anchor";
import { AccountSummary, AssetGroup, AssetGroupSummary, FeeTier, Fees, Greeks, OptionChain, OptionTypeV2, OptionVault, Position, TokenWhitelist, TradingAccount, TradingParams, TransferQueue, TransferRecord, VolatilityFeed } from "../types";
import { AnchorWallet } from "@solana/wallet-adapter-react";
export interface SdxClientConfig {
clusterUrl: string;
sdxProgramId: PublicKey;
euroPrimitiveProgramId: PublicKey;
wallet?: Wallet | AnchorWallet;
anchorProvider?: AnchorProvider;
idl: Idl;
volatilityFeedSeed?: number;
tradingAccountSeed?: number;
tokenWhitelist?: PublicKey;
placeholderOptionChain?: PublicKey;
confirmOptions?: ConfirmOptions;
priorityFeeMicroLamports?: number;
maxPriorityFeeMicroLamports?: number;
priorityFeeMultiplier?: number;
computeBudgetMultiplier?: number;
useOnChainClock?: boolean;
}
export interface SendAndConfirmOptions {
skipPreflight?: boolean;
preflightCommitment?: Commitment;
commitment?: Commitment;
computeBudgetMultiplier?: number;
skipSimulation?: boolean;
}
export declare enum AssetType {
BTC = 0,
USDC = 1,
SOL = 2,
MSOL = 3,
ETH = 4,
BONK = 5,
PSY = 6,
EURO_TOKEN = 7,
HNT = 8
}
export interface AssetDetails {
assetMint: PublicKey;
assetDecimals: number;
optionVault?: PublicKey;
optionChain?: PublicKey;
lpMint?: PublicKey;
depositQueue?: PublicKey;
withdrawQueue?: PublicKey;
vaultTradingAccount?: PublicKey;
underlyingFeeAccount?: PublicKey;
stableFeeAccount?: PublicKey;
vaultUnderlyingAssetAccount?: PublicKey;
vaultStableAssetAccount?: PublicKey;
oracleAddress?: PublicKey;
pendingUnderlyingAssetAccount?: PublicKey;
pendingStableAssetAccount?: PublicKey;
pendingLpTokenAccount?: PublicKey;
}
export interface AssetDetailsInput {
underlyingAssetMint?: PublicKey;
stableAssetMint?: PublicKey;
assetDecimals: number;
optionVaultSeed?: number;
oracleAddress?: PublicKey;
optionChain?: PublicKey;
underlyingFeeAccount?: PublicKey;
stableFeeAccount?: PublicKey;
}
export interface State {
assetMap: Map;
tokenBalanceMap: Map;
tradingAccountMap: Map;
transferRecordMap: Map;
volatilityFeed?: VolatilityFeed;
tokenWhitelist?: TokenWhitelist;
}
export interface AssetState {
optionChain?: OptionChain;
optionVault?: OptionVault;
depositQueue?: TransferQueue;
withdrawQueue?: TransferQueue;
tokenWhitelist?: TokenWhitelist;
}
export interface InitializeState {
tradingAccount: boolean;
}
export interface ProgramAuthority {
ownerAuthority: PublicKey;
taskerAuthority: PublicKey;
tokenWhitelist: PublicKey;
bump: number;
}
export declare enum FeeType {
BASE_PRICE = 0,
UNDERLYING = 1
}
export declare enum TradeStatus {
SUCCESSFUL = 0,
FAIL_DUE_TO_INSUFFICIENT_USER_FUNDS = 1,
FAIL_DUE_TO_INSUFFICIENT_VAULT_FUNDS = 2,
FAIL_DUE_TO_FREE_CAPITAL_EXCEEDED = 3,
FAIL_DUE_TO_POSITION_CAP = 4,
FAIL_DUE_TO_REDUCE_ONLY_DELTA = 5,
FAIL_DUE_TO_REDUCE_ONLY_PRICE = 6,
MIN_THETA_BOUNDS_EXCEEDED = 7,
MIN_GAMMA_BOUNDS_EXCEEDED = 8,
MIN_VEGA_BOUNDS_EXCEEDED = 9,
MIN_DELTA_BOUNDS_EXCEEDED = 10,
MAX_THETA_BOUNDS_EXCEEDED = 11,
MAX_GAMMA_BOUNDS_EXCEEDED = 12,
MAX_VEGA_BOUNDS_EXCEEDED = 13,
MAX_DELTA_BOUNDS_EXCEEDED = 14
}
export interface PriceMultipliers {
delta: number;
vega: number;
gamma: number;
theta: number;
weighted: number;
}
export type EstimatedTradeDetails = {
tradeStatus: TradeStatus;
markGreeks: Greeks;
markPriceStable: number;
markPriceUnderlying: number;
priceMultipliers: PriceMultipliers;
optionPrice: number;
tradeFee: {
type: FeeType;
feeTier: FeeTier;
amount: number;
};
capitalUtilizationFee: number;
impliedVolatility: number[] | undefined;
priceGreeks: Greeks;
breakEvenPrice: number;
user: {
netChangeInUnderlying: number;
netChangeInStable: number;
ticketsEarned: number;
};
vault: {
netChangeInUnderlying: number;
netChangeInStable: number;
};
vaultPostTrade: {
accountSummary: AccountSummary;
assetGroup: AssetGroup;
};
isVolShock: boolean;
};
export interface OptionPricing {
strikePrices: number[];
markPriceStable: number;
markPriceUnderlying: number;
markPriceStableByLeg: number[];
greeks: Greeks;
stableCollateralPerOption: number;
underlyingCollateralPerOption: number;
maturityInYears: number;
markVol: number[];
skew: number[];
expiration: BN;
}
export interface PricingInputs {
currentTimestamp: number;
underlyingPrice: number;
markVolBps: number;
interestRateBps: number;
stakingRateBps: number;
}
export interface PriceAndFees {
tradeFee: {
type: FeeType;
amount: number;
feeTier: FeeTier;
};
optionPrice: number;
capitalUtilizationFee: number;
vaultOptionsToMint: number;
impliedVolatility: number[] | undefined;
priceGreeks: Greeks;
breakEvenPrice: number;
maxSizeForUser: number;
}
export interface EstimatedOptionPricing extends PriceAndFees {
markGreeks: Greeks;
markPriceStable?: number;
markPriceUnderlying?: number;
underlyingPrice?: number;
isVolShock: boolean;
}
export interface TradeDetailsInput {
optionChain: OptionChain;
tradingParams: TradingParams;
vaultAssetPositions: Position[];
pricingInputs: PricingInputs;
feeParams: Fees;
seriesId: number;
optionType: OptionTypeV2;
sizeForUser: number;
currentUserPositionSize: number;
notionalPerContract: number;
vaultUnderlyingAssetAmount: number;
vaultStableAssetAmount: number;
userUnderlyingAssetAmount: number;
userStableAssetAmount: number;
collateralDecimals: number;
feeTier: FeeTier;
vaultPositionCap: number;
isVolShock: boolean;
isNearExpiry: boolean;
enableLogging?: boolean;
}
export interface convertInputs {
underlyingAmount: number;
stableAmount: number;
underlyingPrice: number;
normDelta: number;
targetDelta: number;
slippageFactorBps: number;
navInUnderlying: number;
}
export interface optimalDepositInputs {
initialUnderlyingAmount: number;
initialStableAmount: number;
idealUnderlyingAmount: number;
idealStableAmount: number;
userUnderlyingAssetAmount: number;
userStableAssetAmount: number;
underlyingPrice: number;
stableDecimals: number;
underlyingDecimals: number;
}
export interface DepositEstimate {
conversionAmount: {
underlyingToConvert: number;
stableToReceive: number;
stableToConvert: number;
underlyingToReceive: number;
};
amountAfterConversion: {
underlying: number;
stable: number;
slippagePercentage: number;
lpTokenToReceive: number;
};
suggestedDepositAmount: {
underlying: number;
stable: number;
};
}
export interface WithdrawalEstimate {
estimatedAmountReceivable: {
underlying: number;
stable: number;
};
}
export interface TokenPriceEstimate {
lpTokenAmount: number;
priceInUnderlying: number;
priceInStable: number;
}
export interface VaultAndTradingSummary {
vaultSummary: AccountSummary;
assetGroupSummary: AssetGroupSummary;
positions: Position[];
}
export declare enum TradeType {
BUY = 0,
SELL = 1
}
export interface SwapEstimate {
swapPrice: number;
isValidSwap: boolean;
amountReceivable: number;
currentDelta: number;
newDelta: number;
}
//# sourceMappingURL=clientTypes.d.ts.map