{"version":3,"file":"instrument.cjs","sources":["../../../../src/plugins/psyoptionsEuropeanInstrumentModule/instrument.ts"],"sourcesContent":["import { PublicKey } from '@solana/web3.js';\nimport { Leg, BaseAssetIndex } from '@convergence-rfq/rfq';\nimport { EuroMeta } from '@convergence-rfq/psyoptions-european-instrument';\nimport { OptionType } from '@mithraic-labs/tokenized-euros';\nimport {\n  FixableBeetArgsStruct,\n  u8,\n  u64,\n  i64,\n  bignum,\n} from '@convergence-rfq/beet';\nimport { publicKey } from '@convergence-rfq/beet-solana';\nimport BN from 'bn.js';\nimport * as psyoptionsEuropean from '@mithraic-labs/tokenized-euros';\nimport * as anchor from '@project-serum/anchor';\nimport { Mint } from '../tokenModule';\nimport {\n  LegInstrument,\n  getInstrumentProgramIndex,\n  CreateOptionInstrumentsResult,\n} from '../instrumentModule';\nimport { addDecimals, removeDecimals } from '../../utils/conversions';\nimport { assert } from '../../utils/assert';\nimport { Convergence } from '../../Convergence';\nimport { createSerializerFromFixableBeetArgsStruct } from '../../types';\nimport { LegSide, fromSolitaLegSide } from '../rfqModule/models/LegSide';\nimport { PSYOPTIONS_EUROPEAN_INSTRUMENT_PROGRAM_ID } from './types';\nimport { NoopWallet } from '@/utils';\n\nexport const createEuropeanProgram = async (\n  convergence: Convergence,\n  taker: PublicKey\n) => {\n  const cvgWallet = new NoopWallet(taker);\n  return psyoptionsEuropean.createProgramFromProvider(\n    new anchor.AnchorProvider(\n      convergence.connection,\n      cvgWallet,\n      anchor.AnchorProvider.defaultOptions()\n    ),\n    new PublicKey(psyoptionsEuropean.programId)\n  );\n};\n\ntype PsyoptionsEuropeanInstrumentData = {\n  optionType: OptionType;\n  underlyingAmountPerContract: bignum;\n  underlyingAmountPerContractDecimals: number;\n  strikePrice: bignum;\n  strikePriceDecimals: number;\n  expiration: bignum;\n  optionMint: PublicKey;\n  metaKey: PublicKey;\n};\n\nexport const psyoptionsEuropeanInstrumentDataSerializer =\n  createSerializerFromFixableBeetArgsStruct(\n    new FixableBeetArgsStruct<PsyoptionsEuropeanInstrumentData>(\n      [\n        ['optionType', u8],\n        ['underlyingAmountPerContract', u64],\n        ['underlyingAmountPerContractDecimals', u8],\n        ['strikePrice', u64],\n        ['strikePriceDecimals', u8],\n        ['expiration', u64],\n        ['optionMint', publicKey],\n        ['metaKey', publicKey],\n      ],\n      'InstrumentData'\n    )\n  );\n\nconst euroMetaSerializer = createSerializerFromFixableBeetArgsStruct(\n  new FixableBeetArgsStruct<EuroMeta>(\n    [\n      ['underlyingMint', publicKey],\n      ['underlyingDecimals', u8],\n      ['underlyingAmountPerContract', u64],\n      ['stableMint', publicKey],\n      ['stableDecimals', u8],\n      ['stablePool', publicKey],\n      ['oracle', publicKey],\n      ['strikePrice', u64],\n      ['priceDecimals', u8],\n      ['callOptionMint', publicKey],\n      ['callWriterMint', publicKey],\n      ['putOptionMint', publicKey],\n      ['putWriterMint', publicKey],\n      ['underlyingPool', publicKey],\n      ['expiration', i64],\n      ['bumpSeed', u8],\n      ['expirationData', publicKey],\n      ['oracleProviderId', u8],\n    ],\n    'EuroMeta'\n  )\n);\n\n/**\n * This model captures all the relevant information about a Psyoptions European\n * instrument on the Solana blockchain.\n *\n * @group Models\n */\nexport class PsyoptionsEuropeanInstrument implements LegInstrument {\n  static readonly decimals = 4;\n  legType: 'escrow';\n\n  constructor(\n    readonly convergence: Convergence,\n    readonly optionType: OptionType,\n    readonly underlyingAmountPerContract: number, // without decimals\n    private readonly underlyingAmountPerContractDecimals: number,\n    readonly strikePrice: number, // without decimals\n    private readonly strikePriceDecimals: number,\n    readonly expirationTimestamp: number, // timestamp in seconds\n    readonly optionMint: PublicKey,\n    readonly optionMetaPubKey: PublicKey,\n    readonly baseAssetIndex: BaseAssetIndex,\n    readonly instrumentIndex: number,\n    readonly amount: number,\n    readonly side: LegSide,\n    readonly underlyingAssetMint?: PublicKey,\n    readonly stableAssetMint?: PublicKey,\n    readonly oracleAddress?: PublicKey,\n    readonly oracleProviderId?: number\n  ) {\n    this.legType = 'escrow';\n  }\n\n  getInstrumentIndex = () => this.instrumentIndex;\n  getBaseAssetIndex = () => this.baseAssetIndex;\n  getAssetMint = () => this.optionMint;\n  getAmount = () => this.amount;\n  getDecimals = () => PsyoptionsEuropeanInstrument.decimals;\n  getSide = () => this.side;\n  async getPreparationsBeforeRfqCreation(\n    taker: PublicKey\n  ): Promise<CreateOptionInstrumentsResult> {\n    if (!this.underlyingAssetMint) {\n      throw new Error('Missing underlying asset mint');\n    }\n    if (!this.stableAssetMint) {\n      throw new Error('Missing stable asset mint');\n    }\n    if (!this.oracleAddress) {\n      throw new Error('Missing oracle address');\n    }\n    if (this.oracleProviderId === undefined) {\n      throw new Error('Missing oracle provider id');\n    }\n    const optionMarketIxs = await getPsyEuropeanMarketIxs(\n      this.convergence,\n      taker,\n      this.underlyingAssetMint,\n      this.underlyingAmountPerContractDecimals,\n      this.underlyingAmountPerContract,\n      this.stableAssetMint,\n      this.strikePriceDecimals,\n      this.strikePrice,\n      this.expirationTimestamp,\n      this.oracleAddress,\n      this.oracleProviderId\n    );\n\n    return optionMarketIxs;\n  }\n\n  static async create(\n    taker: PublicKey,\n    convergence: Convergence,\n    underlyingMint: Mint,\n    stableMint: Mint,\n    optionType: OptionType,\n    amount: number,\n    side: LegSide,\n    strike: number,\n    underlyingAmountPerContract: number,\n    oracleAddress: PublicKey,\n    oracleProviderId: number,\n    expirationTimestamp: number\n  ) {\n    const mintInfoAddress = convergence\n      .protocol()\n      .pdas()\n      .mintInfo({ mint: underlyingMint.address });\n    const mintInfo = await convergence\n      .protocol()\n      .findRegisteredMintByAddress({ address: mintInfoAddress });\n\n    if (mintInfo.mintType.__kind === 'Stablecoin') {\n      throw Error('Stablecoin mint cannot be used in a leg!');\n    }\n\n    const instrumentIndex = getInstrumentProgramIndex(\n      await convergence.protocol().get(),\n      PSYOPTIONS_EUROPEAN_INSTRUMENT_PROGRAM_ID\n    );\n    const europeanProgram: any = await createEuropeanProgram(\n      convergence,\n      taker\n    );\n    const { metaKey, optionMint } = await getEuropeanOptionKeys(\n      europeanProgram,\n      underlyingMint,\n      stableMint,\n      expirationTimestamp,\n      strike,\n      underlyingAmountPerContract,\n      optionType\n    );\n\n    return new PsyoptionsEuropeanInstrument(\n      convergence,\n      optionType,\n      underlyingAmountPerContract,\n      underlyingMint.decimals,\n      strike,\n      stableMint.decimals,\n      expirationTimestamp,\n      optionMint,\n      metaKey,\n      mintInfo.mintType.baseAssetIndex,\n      instrumentIndex,\n      amount,\n      side,\n      underlyingMint.address,\n      stableMint.address,\n      oracleAddress,\n      oracleProviderId\n    );\n  }\n\n  async getOptionMeta() {\n    const optionMeta = await PsyoptionsEuropeanInstrument.fetchMeta(\n      this.convergence,\n      this.optionMetaPubKey\n    );\n\n    return optionMeta;\n  }\n\n  /** Helper method to get validation accounts for a Psyoptions European instrument. */\n  getValidationAccounts() {\n    if (!this.underlyingAssetMint) {\n      throw new Error('Missing underlying asset mint');\n    }\n    return [\n      { pubkey: this.optionMetaPubKey, isSigner: false, isWritable: false },\n      {\n        pubkey: this.convergence\n          .protocol()\n          .pdas()\n          .mintInfo({ mint: this.underlyingAssetMint }),\n        isSigner: false,\n        isWritable: false,\n      },\n    ];\n  }\n  static deserializeInstrumentData(\n    buffer: Buffer\n  ): PsyoptionsEuropeanInstrumentData {\n    const [instrumentData] =\n      psyoptionsEuropeanInstrumentDataSerializer.deserialize(buffer);\n    return instrumentData;\n  }\n\n  static async fetchMeta(\n    convergence: Convergence,\n    metaKey: PublicKey\n  ): Promise<EuroMeta> {\n    const account = await convergence.rpc().getAccount(metaKey);\n    assert(account.exists, 'Account not found');\n    const [meta] = euroMetaSerializer.deserialize(Buffer.from(account.data), 8);\n    return meta;\n  }\n\n  serializeInstrumentData(): Buffer {\n    const data: PsyoptionsEuropeanInstrumentData = {\n      optionType: this.optionType,\n      underlyingAmountPerContract: addDecimals(\n        this.underlyingAmountPerContract,\n        this.underlyingAmountPerContractDecimals\n      ),\n      underlyingAmountPerContractDecimals:\n        this.underlyingAmountPerContractDecimals,\n      strikePrice: addDecimals(this.strikePrice, this.strikePriceDecimals),\n      strikePriceDecimals: this.strikePriceDecimals,\n      expiration: this.expirationTimestamp,\n      optionMint: this.optionMint,\n      metaKey: this.optionMetaPubKey,\n    };\n    const serializedData =\n      psyoptionsEuropeanInstrumentDataSerializer.serialize(data);\n\n    return serializedData;\n  }\n\n  getProgramId(): PublicKey {\n    return this.convergence.programs().getPsyoptionsEuropeanInstrument()\n      .address;\n  }\n}\n\nexport const psyoptionsEuropeanInstrumentParser = {\n  parseFromLeg(\n    convergence: Convergence,\n    leg: Leg,\n    instrumentIndex: number\n  ): PsyoptionsEuropeanInstrument {\n    const { side, amount, data, baseAssetIndex } = leg;\n    const [\n      {\n        optionType,\n        underlyingAmountPerContract,\n        underlyingAmountPerContractDecimals,\n        strikePrice,\n        strikePriceDecimals,\n        expiration,\n        optionMint,\n        metaKey,\n      },\n    ] = psyoptionsEuropeanInstrumentDataSerializer.deserialize(\n      Buffer.from(data)\n    );\n\n    return new PsyoptionsEuropeanInstrument(\n      convergence,\n      optionType,\n      removeDecimals(\n        underlyingAmountPerContract,\n        underlyingAmountPerContractDecimals\n      ),\n      underlyingAmountPerContractDecimals,\n      removeDecimals(strikePrice, strikePriceDecimals),\n      strikePriceDecimals,\n      Number(expiration),\n      optionMint,\n      metaKey,\n      baseAssetIndex,\n      instrumentIndex,\n      removeDecimals(amount, PsyoptionsEuropeanInstrument.decimals),\n      fromSolitaLegSide(side)\n    );\n  },\n};\n\nexport const getPsyEuropeanMarketIxs = async (\n  cvg: Convergence,\n  taker: PublicKey,\n  underlyingMint: PublicKey,\n  underlyingMintDecimals: number,\n  underlyingAmountPerContract: number,\n  stableMint: PublicKey,\n  stableMintDecimals: number,\n  strike: number,\n  expirationTimeStamp: number,\n  oracleAddress: PublicKey,\n  oracleProviderId: number // Switchboard = 1, Pyth = 0\n): Promise<CreateOptionInstrumentsResult> => {\n  const europeanProgram = await createEuropeanProgram(cvg, taker);\n  const expirationTimestamp = new BN(expirationTimeStamp);\n  const quoteAmountPerContractBN = new BN(\n    addDecimals(strike, stableMintDecimals)\n  );\n  const underlyingAmountPerContractBN = new BN(\n    addDecimals(underlyingAmountPerContract, underlyingMintDecimals)\n  );\n\n  // Retrieve the euro meta account and a creation instruction (may or may not be required)\n  const { instruction: createIx, euroMetaKey } =\n    await psyoptionsEuropean.instructions.createEuroMetaInstruction(\n      europeanProgram,\n      underlyingMint,\n      underlyingMintDecimals,\n      stableMint,\n      stableMintDecimals,\n      expirationTimestamp,\n      underlyingAmountPerContractBN,\n      quoteAmountPerContractBN,\n      stableMintDecimals,\n      oracleAddress,\n      oracleProviderId\n    );\n\n  const euroMetaKeyAccount = await cvg.rpc().getAccount(euroMetaKey);\n  if (euroMetaKeyAccount.exists) {\n    return [];\n  }\n\n  // Initialize all accounts for European program\n  const { instructions: initializeIxs } =\n    await psyoptionsEuropean.instructions.initializeAllAccountsInstructions(\n      europeanProgram,\n      underlyingMint,\n      stableMint,\n      oracleAddress,\n      expirationTimestamp,\n      stableMintDecimals,\n      oracleProviderId\n    );\n\n  return [...initializeIxs, createIx];\n};\n\nexport type GetEuropeanOptionMetaResult = {\n  optionMint: PublicKey;\n  metaKey: PublicKey;\n};\n\nexport const getEuropeanOptionKeys = async (\n  europeanProgram: any,\n  underlyingMint: Mint,\n  stableMint: Mint,\n  expirationTimestamp: number,\n  strike: number,\n  underlyingAmountPerContract: number,\n  optionType: OptionType\n): Promise<GetEuropeanOptionMetaResult> => {\n  const quoteAmountPerContractBN = new BN(\n    addDecimals(strike, stableMint.decimals)\n  );\n  const underlyingAmountPerContractBN = new BN(\n    addDecimals(underlyingAmountPerContract, underlyingMint.decimals)\n  );\n\n  const [metaKey] = await psyoptionsEuropean.pdas.deriveEuroMeta(\n    europeanProgram,\n    underlyingMint.address,\n    stableMint.address,\n    new BN(expirationTimestamp),\n    underlyingAmountPerContractBN,\n    quoteAmountPerContractBN,\n    stableMint.decimals\n  );\n\n  if (optionType == OptionType.CALL) {\n    const [optionMint] = await psyoptionsEuropean.pdas.deriveCallOptionMint(\n      europeanProgram,\n      metaKey\n    );\n    return { optionMint, metaKey };\n  }\n  const [optionMint] = await psyoptionsEuropean.pdas.derivePutOptionMint(\n    europeanProgram,\n    metaKey\n  );\n  return { optionMint, metaKey };\n};\n"],"names":["createEuropeanProgram","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","convergence","taker","cvgWallet","wrap","_callee$","_context","prev","next","NoopWallet","abrupt","psyoptionsEuropean","createProgramFromProvider","anchor","AnchorProvider","connection","defaultOptions","PublicKey","programId","stop","_x","_x2","apply","arguments","psyoptionsEuropeanInstrumentDataSerializer","createSerializerFromFixableBeetArgsStruct","FixableBeetArgsStruct","u8","u64","publicKey","euroMetaSerializer","i64","PsyoptionsEuropeanInstrument","optionType","underlyingAmountPerContract","underlyingAmountPerContractDecimals","strikePrice","strikePriceDecimals","expirationTimestamp","optionMint","optionMetaPubKey","baseAssetIndex","instrumentIndex","amount","side","underlyingAssetMint","stableAssetMint","oracleAddress","oracleProviderId","_this","_classCallCheck","_defineProperty","decimals","legType","_createClass","key","value","_getPreparationsBeforeRfqCreation","_callee2","optionMarketIxs","_callee2$","_context2","Error","undefined","getPsyEuropeanMarketIxs","sent","getPreparationsBeforeRfqCreation","_x3","_getOptionMeta","_callee3","optionMeta","_callee3$","_context3","fetchMeta","getOptionMeta","getValidationAccounts","pubkey","isSigner","isWritable","protocol","pdas","mintInfo","mint","serializeInstrumentData","data","addDecimals","expiration","metaKey","serializedData","serialize","getProgramId","programs","getPsyoptionsEuropeanInstrument","address","_create","_callee4","underlyingMint","stableMint","strike","mintInfoAddress","europeanProgram","_yield$getEuropeanOpt","_callee4$","_context4","findRegisteredMintByAddress","mintType","__kind","t0","getInstrumentProgramIndex","get","t1","t2","PSYOPTIONS_EUROPEAN_INSTRUMENT_PROGRAM_ID","getEuropeanOptionKeys","create","_x4","_x5","_x6","_x7","_x8","_x9","_x10","_x11","_x12","_x13","_x14","_x15","deserializeInstrumentData","buffer","_psyoptionsEuropeanIn","deserialize","_psyoptionsEuropeanIn2","_slicedToArray","instrumentData","_fetchMeta","_callee5","account","_euroMetaSerializer$d","_euroMetaSerializer$d2","meta","_callee5$","_context5","rpc","getAccount","assert","exists","Buffer","from","_x16","_x17","psyoptionsEuropeanInstrumentParser","parseFromLeg","leg","_psyoptionsEuropeanIn3","_psyoptionsEuropeanIn4","_psyoptionsEuropeanIn5","removeDecimals","Number","fromSolitaLegSide","_ref2","_callee6","cvg","underlyingMintDecimals","stableMintDecimals","expirationTimeStamp","quoteAmountPerContractBN","underlyingAmountPerContractBN","_yield$psyoptionsEuro","createIx","euroMetaKey","euroMetaKeyAccount","_yield$psyoptionsEuro2","initializeIxs","_callee6$","_context6","BN","instructions","createEuroMetaInstruction","instruction","initializeAllAccountsInstructions","concat","_toConsumableArray","_x18","_x19","_x20","_x21","_x22","_x23","_x24","_x25","_x26","_x27","_x28","_ref3","_callee7","_yield$psyoptionsEuro3","_yield$psyoptionsEuro4","_yield$psyoptionsEuro5","_yield$psyoptionsEuro6","_optionMint","_yield$psyoptionsEuro7","_yield$psyoptionsEuro8","_callee7$","_context7","deriveEuroMeta","OptionType","CALL","deriveCallOptionMint","derivePutOptionMint","_x29","_x30","_x31","_x32","_x33","_x34","_x35"],"mappings":"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"}