UNPKG

@d8x/perpetuals-sdk

Version:

Node TypeScript SDK for D8X Perpetual Futures

505 lines (504 loc) 14.4 kB
import { BigNumberish, BytesLike, ContractTransactionResponse, Interface } from "ethers"; import { CollaterlCCY } from "./constants"; export interface NodeSDKConfig { name: string | undefined; chainId: number; version: number; nodeURL: string; configSource: string; proxyAddr: string; proxyABILocation: string; shareTokenABILocation: string; limitOrderBookABILocation: string; limitOrderBookFactoryABILocation: string; symbolListLocation: string; priceFeedConfigNetwork: string; gasLimit?: number | undefined; proxyABI?: Interface | undefined; lobFactoryABI?: Interface | undefined; lobABI?: Interface | undefined; shareTokenABI?: Interface | undefined; priceFeedEndpoints?: PriceFeedEndpointsOptionalWrite; multicall?: string; } export type SettlementConfig = SettlementCcyItem[]; export interface SettlementCcyItem { perpFlags: bigint; description: string; settleTokenDecimals: number; settleCCY: string; settleCCYAddr: string; collateralCCY: string; collateralCCYAddr: string; triangulation: string[]; } export interface MarginAccount { symbol: string; positionNotionalBaseCCY: number; side: string; entryPrice: number; leverage: number; markPrice: number; unrealizedPnlQuoteCCY: number; unrealizedFundingCollateralCCY: number; collateralCC: number; liquidationPrice: [number, number | undefined]; liquidationLvg: number; collToQuoteConversion: number; } export interface PoolStaticInfo { poolId: number; poolMarginSymbol: string; poolMarginTokenAddr: string; poolMarginTokenDecimals: number; poolSettleSymbol: string; poolSettleTokenAddr: string; poolSettleTokenDecimals: number; MgnToSettleTriangulation: string[]; shareTokenAddr: string; oracleFactoryAddr: string; isRunning: boolean; } export interface PerpetualStaticInfo { id: number; poolId: number; state: string; limitOrderBookAddr: string; initialMarginRate: number; maintenanceMarginRate: number; collateralCurrencyType: CollaterlCCY; S2Symbol: string; S3Symbol: string; lotSizeBC: number; referralRebate: number; priceIds: string[]; isPyth: boolean[]; perpFlags: bigint; fAMMTargetDD: bigint; } /** * @global * @typedef {Object} ExchangeInfo * @property {PoolState[]} pools Array of state objects for all pools in the exchange. * @property {string} oracleFactoryAddr Address of the oracle factory used by the pools in the exchange. */ export interface ExchangeInfo { pools: PoolState[]; oracleFactoryAddr: string; proxyAddr: string; } /** * @global * @typedef {Object} PoolState * @property {boolean} isRunning True if the pool is running. * @property {string} marginTokenAddr Address of the token used by the pool. * This is the token used for margin deposits, liquidity provision, and trading fees. * @property {string} poolShareTokenAddr Address of the pool share token. * This is the token issued to external liquidity providers. * @property {number} defaultFundCashCC Amount of cash in the default fund of this pool, denominated in margin tokens. * @property {number} pnlParticipantCashCC Amount of cash in the PnL participation pool, i.e. cash deposited by external liquidity providers. * @property {number} totalTargetAMMFundSizeCC Target AMM funds aggregated across all perpetuals in this pool. * @property {number} brokerCollateralLotSize Price of one lot for brokers who wish to participate in this pool. Denominated in margin tokens. * @property {PerpetualState[]} perpetuals Array of all perpetuals in this pool. */ export interface PoolState { isRunning: boolean; poolSymbol: string; settleSymbol: string; marginTokenAddr: string; settleTokenAddr: string; poolShareTokenAddr: string; defaultFundCashCC: number; pnlParticipantCashCC: number; totalTargetAMMFundSizeCC: number; brokerCollateralLotSize: number; perpetuals: PerpetualState[]; } export interface PerpetualState { id: number; state: string; baseCurrency: string; quoteCurrency: string; indexPrice: number; collToQuoteIndexPrice: number; markPremium: number; markPrice: number; midPrice: number; currentFundingRateBps: number; openInterestBC: number; longBC: number; shortBC: number; isMarketClosed: boolean; } export interface OrderResponse { tx: ContractTransactionResponse; orderId: string; } export interface OrderStruct { orders: Order[]; orderIds: string[]; } export interface Order { symbol: string; side: string; type: string; quantity: number; reduceOnly?: boolean | undefined; limitPrice?: number | undefined; keepPositionLvg?: boolean | undefined; brokerFeeTbps?: number | undefined; brokerAddr?: string | undefined; brokerSignature?: BytesLike | undefined; stopPrice?: number | undefined; leverage?: number | undefined; deadline?: number | undefined; executionTimestamp: number; submittedTimestamp?: number; parentChildOrderIds?: [string, string]; } export interface TradeEvent { perpetualId: number; positionId: string; orderId: string; newPositionSizeBC: number; executionPrice: number; } /** * @global * @typedef {Object} SmartContractOrder * @property {bigint} flags * @property {number} iPerpetualId * @property {number} brokerFeeTbps * @property {string} traderAddr * @property {string} brokerAddr * @property {string} executorAddr * @property {BytesLike} brokerSignature * @property {bigint} fAmount * @property {bigint} fLimitPrice * @property {bigint} fTriggerPrice * @property {number} leverageTDR * @property {number} iDeadline * @property {number} executionTimestamp * @property {number} submittedTimestamp */ export interface SmartContractOrder { flags: BigNumberish; iPerpetualId: BigNumberish; brokerFeeTbps: BigNumberish; traderAddr: string; brokerAddr: string; executorAddr: string; brokerSignature: BytesLike; fAmount: bigint; fLimitPrice: bigint; fTriggerPrice: bigint; leverageTDR: BigNumberish; iDeadline: BigNumberish; executionTimestamp: BigNumberish; submittedTimestamp: BigNumberish; } /** * @global * @typedef {Object} ClientOrder * @property {bigint} flags * @property {bigint} iPerpetualId * @property {bigint} brokerFeeTbps * @property {string} traderAddr * @property {string} brokerAddr * @property {string} executorAddr * @property {BytesLike} brokerSignature * @property {bigint} fAmount * @property {bigint} fLimitPrice * @property {bigint} fTriggerPrice * @property {bigint} leverageTDR * @property {bigint} iDeadline * @property {bigint} executionTimestamp * @property {string} parentChildDigest1 * @property {string} parentChildDigest2 * @property {string} callbackTarget */ export interface ClientOrder { flags: BigNumberish; iPerpetualId: BigNumberish; brokerFeeTbps: BigNumberish; traderAddr: string; brokerAddr: string; executorAddr: string; brokerSignature: BytesLike; fAmount: bigint; fLimitPrice: bigint; fTriggerPrice: bigint; leverageTDR: BigNumberish; iDeadline: BigNumberish; executionTimestamp: BigNumberish; parentChildDigest1: string; parentChildDigest2: string; callbackTarget: string; } export interface TypeSafeOrder { flags: bigint; iPerpetualId: number; brokerFeeTbps: number; traderAddr: string; brokerAddr: string; brokerSignature: string; fAmount: bigint; fLimitPrice: bigint; fTriggerPrice: bigint; leverageTDR: number; iDeadline: number; executionTimestamp: number; parentChildDigest1: string; parentChildDigest2: string; callbackTarget: string; } export interface PriceFeedConfig { network: string; ids: Array<{ symbol: string; id: string; type: string; origin: string; }>; endpoints: PriceFeedEndpoints; } export interface PriceFeedEndpointsItem { type: string | "odin" | "pyth" | "onchain" | "v2" | "v3" | "low-liq" | "polymarket"; endpoints: string[]; writeEndpoints?: string[]; } export type PriceFeedEndpoints = Array<Required<PriceFeedEndpointsItem>>; export type PriceFeedEndpointsOptionalWrite = Array<PriceFeedEndpointsItem>; export interface PriceFeedSubmission { symbols: Map<string, string[]>; ids: string[]; priceFeedVaas: string[]; prices: number[]; isMarketClosed: boolean[]; timestamps: number[]; } export interface PriceFeedFormat { conf: bigint; expo: number; price: bigint; publish_time: number; } export interface PriceFeedJson { conf: string; expo: number; price: string; publish_time: number; } export interface PythV2MetaData { slot: number; proof_available_time: number; prev_publish_time: number; } export interface PythV2LatestPriceFeed { binary: { encoding: string; data: string[]; }; parsed: [ { ema_price: PriceFeedFormat; id: string; price: PriceFeedFormat; metadata: PythV2MetaData; } ]; } export interface APIReferralCodePayload { code: string; referrerAddr: string; createdOn: number; passOnPercTDF: number; signature: string; } export interface APIReferPayload { parentAddr: string; referToAddr: string; passOnPercTDF: number; createdOn: number; signature: string; } export interface APIReferralCodeSelectionPayload { code: string; traderAddr: string; createdOn: number; signature: string; } export interface GasPriceV2 { maxPriorityFee: number; maxfee: number; } export interface GasInfo { safeLow: number | GasPriceV2; standard: number | GasPriceV2; fast: number | GasPriceV2; fastest?: number; estimatedBaseFee?: number; blockTime: number; blockNumber: number; } export interface TokenOverride { tokenAddress: string; newSymbol: string; } /** * Perpetualdata corresponding to the data in the smart contract */ export interface PerpetualData { poolId: number; id: number; fInitialMarginRate: number; fSigma2: number; iLastFundingTime: number; fDFCoverNRate: number; fMaintenanceMarginRate: number; perpetualState: string; eCollateralCurrency: number; S2BaseCCY: string; S2QuoteCCY: string; incentiveSpreadBps: number; minimalSpreadBps: number; S3BaseCCY: string; S3QuoteCCY: string; fSigma3: number; fRho23: number; liquidationPenaltyRateBps: number; currentMarkPremiumRatePrice: number; currentMarkPremiumRateTime: number; premiumRatesEMA: number; fUnitAccumulatedFunding: number; fOpenInterest: number; fTargetAMMFundSize: number; fCurrentTraderExposureEMA: number; fCurrentFundingRate: number; fLotSizeBC: number; fReferralRebateCC: number; fTargetDFSize: number; fkStar: number; fAMMTargetDD: number; perpFlags: bigint; fMinimalTraderExposureEMA: number; fMinimalAMMExposureEMA: number; fSettlementS3PriceData: number; fSettlementS2PriceData: number; fTotalMarginBalance: number; fMarkPriceEMALambda: number; fFundingRateClamp: number; fMaximalTradeSizeBumpUp: number; iLastTargetPoolSizeTime: number; fStressReturnS3: [number, number]; fDFLambda: [number, number]; fCurrentAMMExposureEMA: [number, number]; fStressReturnS2: [number, number]; } /** * LiquidityPoolData corresponding to the data in the smart contract */ export interface LiquidityPoolData { isRunning: boolean; iPerpetualCount: number; id: number; fCeilPnLShare: number; marginTokenDecimals: number; iTargetPoolSizeUpdateTime: number; marginTokenAddress: string; prevAnchor: number; fRedemptionRate: number; shareTokenAddress: string; fPnLparticipantsCashCC: number; fTargetAMMFundSize: number; fDefaultFundCashCC: number; fTargetDFSize: number; fBrokerCollateralLotSize: number; prevTokenAmount: number; nextTokenAmount: number; totalSupplyShareToken: number; fBrokerFundCashCC: number; } export declare const referralDomain: { readonly name: "Referral System"; }; export declare const referralTypes: { readonly NewCode: readonly [{ readonly name: "Code"; readonly type: "string"; }, { readonly name: "ReferrerAddr"; readonly type: "address"; }, { readonly name: "PassOnPercTDF"; readonly type: "uint32"; }, { readonly name: "CreatedOn"; readonly type: "uint256"; }]; readonly NewReferral: readonly [{ readonly name: "ParentAddr"; readonly type: "address"; }, { readonly name: "ReferToAddr"; readonly type: "address"; }, { readonly name: "PassOnPercTDF"; readonly type: "uint32"; }, { readonly name: "CreatedOn"; readonly type: "uint256"; }]; readonly CodeSelection: readonly [{ readonly name: "Code"; readonly type: "string"; }, { readonly name: "TraderAddr"; readonly type: "address"; }, { readonly name: "CreatedOn"; readonly type: "uint256"; }]; readonly EIP712Domain: readonly [{ readonly name: "name"; readonly type: "string"; }]; }; export interface IdxPriceInfo { s2: number; s3?: number; ema: number; s2MktClosed: boolean; s3MktClosed?: boolean; conf: bigint; predMktCLOBParams: bigint; } export interface PredMktPriceInfo { s2: number; ema: number; s2MktClosed: boolean; conf: bigint; predMktCLOBParams: bigint; } export interface PythMetadata { id: string; market_hours: { is_open: boolean; next_open?: number; next_close?: number; }; attributes: { symbol?: string; asset_type?: string; base?: string; cms_symbol?: string; country?: string; cqs_symbol?: string; description?: string; display_symbol?: string; nasdaq_symbol?: string; publish_interval?: string; quote_currency?: string; schedule?: string; }; }