///
import { Blob, Layout, Structure, UInt, Union } from 'buffer-layout';
import { PublicKey } from '@solana/web3.js';
import { I80F48 } from './utils/fixednum';
import BN from 'bn.js';
import PerpAccount from './PerpAccount';
import { PerpOrderType } from './utils/types';
export declare const MAX_TOKENS = 16;
export declare const MAX_PAIRS: number;
export declare const MAX_NODE_BANKS = 8;
export declare const INFO_LEN = 32;
export declare const QUOTE_INDEX: number;
export declare const MAX_NUM_IN_MARGIN_BASKET = 9;
export declare const MAX_PERP_OPEN_ORDERS = 64;
export declare const FREE_ORDER_SLOT = 255;
export declare const CENTIBPS_PER_UNIT = 1000000;
declare class _I80F48Layout extends Blob {
constructor(property: string);
decode(b: any, offset: any): I80F48;
encode(src: any, b: any, offset: any): any;
}
/** @internal */
export declare function I80F48Layout(property?: string): _I80F48Layout;
declare class BNLayout extends Blob {
signed: boolean;
constructor(number: number, property: any, signed?: boolean);
decode(b: any, offset: any): BN;
encode(src: any, b: any, offset: any): any;
}
/** @internal */
export declare function u64(property?: string): BNLayout;
/** @internal */
export declare function i64(property?: string): BNLayout;
/** @internal */
export declare function u128(property?: string): BNLayout;
/** @internal */
export declare function i128(property?: string): BNLayout;
declare class WrappedLayout extends Layout {
layout: Layout;
decoder: (data: T) => U;
encoder: (src: U) => T;
constructor(layout: Layout, decoder: (data: T) => U, encoder: (src: U) => T, property?: string);
decode(b: Buffer, offset?: number): U;
encode(src: U, b: Buffer, offset?: number): number;
getSpan(b: Buffer, offset?: number): number;
}
/** @internal */
export declare function bool(property?: string): WrappedLayout;
declare class EnumLayout extends UInt {
values: any;
constructor(values: any, span: any, property?: any);
encode(src: any, b: any, offset: any): any;
decode(b: any, offset: any): string;
}
/** @internal */
export declare function sideLayout(span: any, property?: any): EnumLayout;
/** @internal */
export declare function orderTypeLayout(property: any, span: any): EnumLayout;
/** @internal */
export declare function selfTradeBehaviorLayout(property: any, span: any): EnumLayout;
export declare function triggerConditionLayout(property: any, span: any): EnumLayout;
export declare function advancedOrderTypeLayout(property: any, span: any): EnumLayout;
/**
* Makes custom modifications to the instruction layouts because valid instructions can be many sizes
*/
/** @internal */
declare class MangoInstructionsUnion extends Union {
constructor(discr?: any, defaultLayout?: any, property?: any);
decode(b: Buffer, offset: any): any;
addVariant(variant: any, layout: any, property: any): any;
}
export declare const MangoInstructionLayout: MangoInstructionsUnion;
/** @internal */
export declare function encodeMangoInstruction(data: any): Buffer;
/** @internal */
export declare class PublicKeyLayout extends Blob {
constructor(property: any);
decode(b: any, offset: any): PublicKey;
encode(src: any, b: any, offset: any): any;
}
/** @internal */
export declare function publicKeyLayout(property?: string): PublicKeyLayout;
/** @internal */
export declare const DataType: {
MangoGroup: number;
MangoAccount: number;
RootBank: number;
NodeBank: number;
PerpMarket: number;
Bids: number;
Asks: number;
MangoCache: number;
EventQueue: number;
AdvancedOrders: number;
ReferrerMemory: number;
ReferrerIdRecord: number;
};
export declare enum AssetType {
Token = 0,
Perp = 1
}
export declare enum MarketMode {
Default = 0,
Active = 1,
CloseOnly = 2,
ForceCloseOnly = 3,
Inactive = 4,
SwappingSpotMarket = 5
}
export declare enum AdvancedOrderType {
PerpTrigger = 0,
SpotTrigger = 1
}
export declare class MetaData {
dataType: number;
version: number;
isInitialized: boolean;
extraInfo: number[];
constructor(decoded: any);
}
/** @internal */
export declare class MetaDataLayout extends Structure {
constructor(property: any);
decode(b: any, offset: any): MetaData;
encode(src: any, b: any, offset: any): any;
}
/** @internal */
export declare function metaDataLayout(property?: string): MetaDataLayout;
/** @internal */
export declare class TokenInfo {
mint: PublicKey;
rootBank: PublicKey;
decimals: number;
padding: number[];
spotMarketMode: MarketMode;
perpMarketMode: MarketMode;
oracleInactive: boolean;
constructor(decoded: any);
isEmpty(): boolean;
}
/** @internal */
export declare class TokenInfoLayout extends Structure {
constructor(property: any);
decode(b: any, offset: any): TokenInfo;
encode(src: any, b: any, offset: any): any;
}
/** @internal */
export declare function tokenInfoLayout(property?: string): TokenInfoLayout;
export declare class SpotMarketInfo {
spotMarket: PublicKey;
maintAssetWeight: I80F48;
initAssetWeight: I80F48;
maintLiabWeight: I80F48;
initLiabWeight: I80F48;
liquidationFee: I80F48;
constructor(decoded: any);
isEmpty(): boolean;
}
/** @internal */
export declare class SpotMarketInfoLayout extends Structure {
constructor(property: any);
decode(b: any, offset: any): SpotMarketInfo;
encode(src: any, b: any, offset: any): any;
}
/** @internal */
export declare function spotMarketInfoLayout(property?: string): SpotMarketInfoLayout;
export declare class PerpMarketInfo {
perpMarket: PublicKey;
maintAssetWeight: I80F48;
initAssetWeight: I80F48;
maintLiabWeight: I80F48;
initLiabWeight: I80F48;
liquidationFee: I80F48;
makerFee: I80F48;
takerFee: I80F48;
baseLotSize: BN;
quoteLotSize: BN;
constructor(decoded: any);
isEmpty(): boolean;
}
/** @internal */
export declare class PerpMarketInfoLayout extends Structure {
constructor(property: any);
decode(b: any, offset: any): PerpMarketInfo;
encode(src: any, b: any, offset: any): any;
}
/** @internal */
export declare function perpMarketInfoLayout(property?: string): PerpMarketInfoLayout;
/** @internal */
export declare class PerpAccountLayout extends Structure {
constructor(property: any);
decode(b: any, offset: any): PerpAccount;
encode(src: any, b: any, offset: any): any;
}
/** @internal */
export declare function perpAccountLayout(property?: string): PerpAccountLayout;
/** @internal */
export declare const MangoGroupLayout: any;
/** @internal */
export declare const MangoAccountLayout: any;
/** @internal */
export declare const RootBankLayout: any;
/** @internal */
export declare const NodeBankLayout: any;
/** @internal */
export declare const StubOracleLayout: any;
/** @internal */
export declare class LiquidityMiningInfoLayout extends Structure {
constructor(property: any);
decode(b: any, offset: any): MetaData;
encode(src: any, b: any, offset: any): any;
}
/** @internal */
export declare function liquidityMiningInfoLayout(property?: string): LiquidityMiningInfoLayout;
/** @internal */
export declare const PerpMarketLayout: any;
/** @internal */
export declare const PerpEventLayout: any;
export interface FillEvent {
takerSide: 'buy' | 'sell';
makerSlot: number;
makerOut: boolean;
timestamp: BN;
seqNum: BN;
maker: PublicKey;
makerOrderId: BN;
makerClientOrderId: BN;
makerFee: I80F48;
bestInitial: BN;
makerTimestamp: BN;
taker: PublicKey;
takerOrderId: BN;
takerClientOrderId: BN;
takerFee: I80F48;
price: BN;
quantity: BN;
}
export interface OutEvent {
side: 'buy' | 'sell';
slot: number;
timestamp: BN;
seqNum: BN;
owner: PublicKey;
quantity: BN;
}
export interface LiquidateEvent {
timestamp: BN;
seqNum: BN;
liqee: PublicKey;
liqor: PublicKey;
price: I80F48;
quantity: BN;
liquidationFee: I80F48;
}
/** @internal */
export declare const PerpEventQueueHeaderLayout: any;
/** @internal */
export declare const PerpEventQueueLayout: any;
/** @internal */
export declare const BookSideLayout: any;
export declare class PriceCache {
price: I80F48;
lastUpdate: BN;
constructor(decoded: any);
}
/** @internal */
export declare class PriceCacheLayout extends Structure {
constructor(property: any);
decode(b: any, offset: any): PriceCache;
encode(src: any, b: any, offset: any): any;
}
/** @internal */
export declare function priceCacheLayout(property?: string): PriceCacheLayout;
export declare class RootBankCache {
depositIndex: I80F48;
borrowIndex: I80F48;
lastUpdate: BN;
constructor(decoded: any);
}
/** @internal */
export declare class RootBankCacheLayout extends Structure {
constructor(property: any);
decode(b: any, offset: any): RootBankCache;
encode(src: any, b: any, offset: any): any;
}
/** @internal */
export declare function rootBankCacheLayout(property?: string): RootBankCacheLayout;
export declare class PerpMarketCache {
longFunding: I80F48;
shortFunding: I80F48;
lastUpdate: BN;
constructor(decoded: any);
}
/** @internal */
export declare class PerpMarketCacheLayout extends Structure {
constructor(property: any);
decode(b: any, offset: any): PerpMarketCache;
encode(src: any, b: any, offset: any): any;
}
/** @internal */
export declare function perpMarketCacheLayout(property?: string): PerpMarketCacheLayout;
/** @internal */
export declare const MangoCacheLayout: any;
export declare class MangoCache {
publicKey: PublicKey;
priceCache: PriceCache[];
rootBankCache: RootBankCache[];
perpMarketCache: PerpMarketCache[];
constructor(publicKey: PublicKey, decoded: any);
getPrice(tokenIndex: number): I80F48;
}
export declare class NodeBank {
publicKey: PublicKey;
deposits: I80F48;
borrows: I80F48;
vault: PublicKey;
constructor(publicKey: PublicKey, decoded: any);
}
/** @internal */
export declare const TokenAccountLayout: any;
export declare const AdvancedOrdersLayout: any;
export interface PerpTriggerOrder {
isActive: boolean;
marketIndex: number;
orderType: PerpOrderType;
side: 'buy' | 'sell';
triggerCondition: 'above' | 'below';
clientOrderId: BN;
price: BN;
quantity: BN;
triggerPrice: I80F48;
}
/** @internal */
export declare class ReferrerMemory {
metaData: MetaData;
referrerMangoAccount: PublicKey;
constructor(decoded: any);
}
/** @internal */
export declare const ReferrerMemoryLayout: any;
/** @internal */
export declare class ReferrerIdRecord {
metaData: MetaData;
referrerMangoAccount: PublicKey;
id: number[];
constructor(decoded: any);
get referrerId(): string;
}
/** @internal */
export declare const ReferrerIdRecordLayout: any;
export {};
//# sourceMappingURL=layout.d.ts.map