///
import { PublicKey } from '@solana/web3.js';
import { Leg, BaseAssetIndex } from '@convergence-rfq/rfq';
import { EuroMeta } from '@convergence-rfq/psyoptions-european-instrument';
import { OptionType } from '@mithraic-labs/tokenized-euros';
import { bignum } from '@convergence-rfq/beet';
import * as psyoptionsEuropean from '@mithraic-labs/tokenized-euros';
import { Mint } from '../tokenModule';
import { LegInstrument, CreateOptionInstrumentsResult } from '../instrumentModule';
import { Convergence } from '../../Convergence';
import { LegSide } from '../rfqModule/models/LegSide';
export declare const createEuropeanProgram: (convergence: Convergence, taker: PublicKey) => Promise>;
type PsyoptionsEuropeanInstrumentData = {
optionType: OptionType;
underlyingAmountPerContract: bignum;
underlyingAmountPerContractDecimals: number;
strikePrice: bignum;
strikePriceDecimals: number;
expiration: bignum;
optionMint: PublicKey;
metaKey: PublicKey;
};
export declare const psyoptionsEuropeanInstrumentDataSerializer: import("../../types").Serializer;
/**
* This model captures all the relevant information about a Psyoptions European
* instrument on the Solana blockchain.
*
* @group Models
*/
export declare class PsyoptionsEuropeanInstrument implements LegInstrument {
readonly convergence: Convergence;
readonly optionType: OptionType;
readonly underlyingAmountPerContract: number;
private readonly underlyingAmountPerContractDecimals;
readonly strikePrice: number;
private readonly strikePriceDecimals;
readonly expirationTimestamp: number;
readonly optionMint: PublicKey;
readonly optionMetaPubKey: PublicKey;
readonly baseAssetIndex: BaseAssetIndex;
readonly instrumentIndex: number;
readonly amount: number;
readonly side: LegSide;
readonly underlyingAssetMint?: PublicKey | undefined;
readonly stableAssetMint?: PublicKey | undefined;
readonly oracleAddress?: PublicKey | undefined;
readonly oracleProviderId?: number | undefined;
static readonly decimals = 4;
legType: 'escrow';
constructor(convergence: Convergence, optionType: OptionType, underlyingAmountPerContract: number, // without decimals
underlyingAmountPerContractDecimals: number, strikePrice: number, // without decimals
strikePriceDecimals: number, expirationTimestamp: number, // timestamp in seconds
optionMint: PublicKey, optionMetaPubKey: PublicKey, baseAssetIndex: BaseAssetIndex, instrumentIndex: number, amount: number, side: LegSide, underlyingAssetMint?: PublicKey | undefined, stableAssetMint?: PublicKey | undefined, oracleAddress?: PublicKey | undefined, oracleProviderId?: number | undefined);
getInstrumentIndex: () => number;
getBaseAssetIndex: () => BaseAssetIndex;
getAssetMint: () => PublicKey;
getAmount: () => number;
getDecimals: () => number;
getSide: () => LegSide;
getPreparationsBeforeRfqCreation(taker: PublicKey): Promise;
static create(taker: PublicKey, convergence: Convergence, underlyingMint: Mint, stableMint: Mint, optionType: OptionType, amount: number, side: LegSide, strike: number, underlyingAmountPerContract: number, oracleAddress: PublicKey, oracleProviderId: number, expirationTimestamp: number): Promise;
getOptionMeta(): Promise;
/** Helper method to get validation accounts for a Psyoptions European instrument. */
getValidationAccounts(): {
pubkey: PublicKey;
isSigner: boolean;
isWritable: boolean;
}[];
static deserializeInstrumentData(buffer: Buffer): PsyoptionsEuropeanInstrumentData;
static fetchMeta(convergence: Convergence, metaKey: PublicKey): Promise;
serializeInstrumentData(): Buffer;
getProgramId(): PublicKey;
}
export declare const psyoptionsEuropeanInstrumentParser: {
parseFromLeg(convergence: Convergence, leg: Leg, instrumentIndex: number): PsyoptionsEuropeanInstrument;
};
export declare const getPsyEuropeanMarketIxs: (cvg: Convergence, taker: PublicKey, underlyingMint: PublicKey, underlyingMintDecimals: number, underlyingAmountPerContract: number, stableMint: PublicKey, stableMintDecimals: number, strike: number, expirationTimeStamp: number, oracleAddress: PublicKey, oracleProviderId: number) => Promise;
export type GetEuropeanOptionMetaResult = {
optionMint: PublicKey;
metaKey: PublicKey;
};
export declare const getEuropeanOptionKeys: (europeanProgram: any, underlyingMint: Mint, stableMint: Mint, expirationTimestamp: number, strike: number, underlyingAmountPerContract: number, optionType: OptionType) => Promise;
export {};