{"version":3,"file":"instrument.mjs","sources":["../../../../src/plugins/psyoptionsAmericanInstrumentModule/instrument.ts"],"sourcesContent":["import { PublicKey, TransactionInstruction } from '@solana/web3.js';\nimport { Leg, BaseAssetIndex } from '@convergence-rfq/rfq';\nimport { OptionMarketWithKey } from '@mithraic-labs/psy-american';\nimport { OptionType } from '@mithraic-labs/tokenized-euros';\nimport { FixableBeetArgsStruct, u8, u64, bignum } from '@convergence-rfq/beet';\nimport { publicKey } from '@convergence-rfq/beet-solana';\nimport * as anchor from '@project-serum/anchor';\nimport * as psyoptionsAmerican from '@mithraic-labs/psy-american';\nimport BN from 'bn.js';\nimport { Mint } from '../tokenModule';\nimport {\n  LegInstrument,\n  getInstrumentProgramIndex,\n  CreateOptionInstrumentsResult,\n} from '../instrumentModule';\nimport { addDecimals, removeDecimals } from '../../utils/conversions';\nimport { Convergence } from '../../Convergence';\nimport { createSerializerFromFixableBeetArgsStruct } from '../../types';\nimport { LegSide, fromSolitaLegSide } from '../rfqModule/models/LegSide';\nimport { NoopWallet } from '../../utils/Wallets';\nimport { PSYOPTIONS_AMERICAN_INSTRUMENT_PROGRAM_ID } from './types';\nimport {\n  GetOrCreateATAtxBuilderReturnType,\n  getOrCreateATAtxBuilder,\n} from '@/utils';\n\ntype PsyoptionsAmericanInstrumentData = {\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 psyoptionsAmericanInstrumentDataSerializer =\n  createSerializerFromFixableBeetArgsStruct(\n    new FixableBeetArgsStruct<PsyoptionsAmericanInstrumentData>(\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\nexport class PsyoptionsAmericanInstrument implements LegInstrument {\n  static readonly decimals = 0;\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  ) {\n    this.legType = 'escrow';\n  }\n\n  getBaseAssetIndex = () => this.baseAssetIndex;\n  getInstrumentIndex = () => this.instrumentIndex;\n  getAssetMint = () => this.optionMint;\n  getAmount = () => this.amount;\n  getDecimals = () => PsyoptionsAmericanInstrument.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\n    const optionMarketIxs = await getPsyAmericanMarketIxs(\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.optionType\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    underlyingAmountPerContract: number,\n    strike: 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_AMERICAN_INSTRUMENT_PROGRAM_ID\n    );\n\n    const cvgWallet = new NoopWallet(taker);\n    const americanProgram = await createAmericanProgram(convergence, cvgWallet);\n    const { optionMint, metaKey } = await getAmericanOptionkeys(\n      americanProgram,\n      underlyingMint,\n      stableMint,\n      expirationTimestamp,\n      strike,\n      underlyingAmountPerContract,\n      optionType\n    );\n    return new PsyoptionsAmericanInstrument(\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    );\n  }\n\n  static async fetchMeta(\n    taker: PublicKey,\n    convergence: Convergence,\n    metaKey: PublicKey\n  ): Promise<OptionMarketWithKey> {\n    const cvgWallet = new NoopWallet(taker);\n    const americanProgram = createAmericanProgram(convergence, cvgWallet);\n    const optionMarket = (await psyoptionsAmerican.getOptionByKey(\n      americanProgram,\n      metaKey\n    )) as OptionMarketWithKey;\n\n    return optionMarket;\n  }\n\n  async getOptionMeta(taker: PublicKey) {\n    const optionMeta = await PsyoptionsAmericanInstrument.fetchMeta(\n      taker,\n      this.convergence,\n      this.optionMetaPubKey\n    );\n\n    return optionMeta;\n  }\n\n  getValidationAccounts() {\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    const mintInfoPda = this.convergence\n      .protocol()\n      .pdas()\n      .mintInfo({ mint: this.underlyingAssetMint });\n    const quoteAssetMintPda = this.convergence\n      .protocol()\n      .pdas()\n      .mintInfo({ mint: this.stableAssetMint });\n    return [\n      { pubkey: this.optionMetaPubKey, isSigner: false, isWritable: false },\n      {\n        pubkey: mintInfoPda,\n        isSigner: false,\n        isWritable: false,\n      },\n      {\n        pubkey: quoteAssetMintPda,\n        isSigner: false,\n        isWritable: false,\n      },\n    ];\n  }\n\n  static deserializeInstrumentData(\n    buffer: Buffer\n  ): PsyoptionsAmericanInstrumentData {\n    const [instrumentData] =\n      psyoptionsAmericanInstrumentDataSerializer.deserialize(buffer);\n    return instrumentData;\n  }\n\n  serializeInstrumentData(): Buffer {\n    const data: PsyoptionsAmericanInstrumentData = {\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: new BN(this.expirationTimestamp),\n      optionMint: this.optionMint,\n      metaKey: this.optionMetaPubKey,\n    };\n\n    const serializedData =\n      psyoptionsAmericanInstrumentDataSerializer.serialize(data);\n\n    return serializedData;\n  }\n\n  getProgramId() {\n    return this.convergence.programs().getPsyoptionsAmericanInstrument()\n      .address;\n  }\n}\n\nexport const psyoptionsAmericanInstrumentParser = {\n  parseFromLeg(\n    convergence: Convergence,\n    leg: Leg,\n    instrumentIndex: number\n  ): PsyoptionsAmericanInstrument {\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    ] = psyoptionsAmericanInstrumentDataSerializer.deserialize(\n      Buffer.from(data)\n    );\n\n    return new PsyoptionsAmericanInstrument(\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, PsyoptionsAmericanInstrument.decimals),\n      fromSolitaLegSide(side)\n    );\n  },\n};\n\nexport const createAmericanProgram = (\n  convergence: Convergence,\n  wallet: NoopWallet\n): any => {\n  const provider = new anchor.AnchorProvider(\n    convergence.connection,\n    wallet,\n    {}\n  );\n\n  const americanProgram = psyoptionsAmerican.createProgram(\n    new PublicKey('R2y9ip6mxmWUj4pt54jP2hz2dgvMozy9VTSwMWE7evs'),\n    provider\n  );\n\n  return americanProgram;\n};\n\nexport const getPsyAmericanMarketIxs = 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  optionType: OptionType\n): Promise<CreateOptionInstrumentsResult> => {\n  const cvgWallet = new NoopWallet(taker);\n  const americanProgram = createAmericanProgram(cvg, cvgWallet);\n\n  const expirationTimestampBN = 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  let quoteAmountPerContractToPass = quoteAmountPerContractBN;\n  let underlyingAmountPerContractToPass = underlyingAmountPerContractBN;\n  let stableMintToPass = stableMint;\n  let underlyingMintToPass = underlyingMint;\n  if (optionType === OptionType.PUT) {\n    quoteAmountPerContractToPass = underlyingAmountPerContractBN;\n    underlyingAmountPerContractToPass = quoteAmountPerContractBN;\n    stableMintToPass = underlyingMint;\n    underlyingMintToPass = stableMint;\n  }\n  const [optionMarketKey] = await psyoptionsAmerican.deriveOptionKeyFromParams({\n    expirationUnixTimestamp: expirationTimestampBN,\n    programId: americanProgram.programId,\n    quoteAmountPerContract: quoteAmountPerContractToPass,\n    quoteMint: stableMintToPass,\n    underlyingAmountPerContract: underlyingAmountPerContractToPass,\n    underlyingMint: underlyingMintToPass,\n  });\n  const optionMarket = await psyoptionsAmerican.getOptionByKey(\n    americanProgram,\n    optionMarketKey\n  );\n  if (optionMarket) {\n    return [];\n  }\n  // If there is no existing market, derive the optionMarket from inputs\n  const optionMarketIxs: TransactionInstruction[] = [];\n  const { optionMarketIx, mintFeeAccount, exerciseFeeAccount } =\n    await getPsyAmericanOptionMarketAccounts(\n      cvg,\n      americanProgram,\n      expirationTimestampBN,\n      quoteAmountPerContractBN,\n      stableMint,\n      underlyingAmountPerContractBN,\n      underlyingMint,\n      optionType\n    );\n  if (mintFeeAccount.txBuilder) {\n    optionMarketIxs.push(...mintFeeAccount.txBuilder.getInstructions());\n  }\n\n  if (exerciseFeeAccount.txBuilder) {\n    optionMarketIxs.push(...exerciseFeeAccount.txBuilder.getInstructions());\n  }\n\n  optionMarketIxs.push(optionMarketIx.tx);\n  return optionMarketIxs;\n};\n\nexport type GetAmericanOptionMetaResult = {\n  optionMint: PublicKey;\n  metaKey: PublicKey;\n};\nexport const getAmericanOptionkeys = async (\n  americanProgram: any,\n  underlyingMint: Mint,\n  stableMint: Mint,\n  expirationUnixTimestamp: number,\n  strike: number,\n  underlyingAmountPerContract: number,\n  optionType: OptionType\n): Promise<GetAmericanOptionMetaResult> => {\n  const quoteAmountPerContractBN = new BN(\n    addDecimals(strike, stableMint.decimals)\n  );\n  const underlyingAmountPerContractBN = new BN(\n    addDecimals(underlyingAmountPerContract, underlyingMint.decimals)\n  );\n\n  let quoteAmountPerContractToPass = quoteAmountPerContractBN;\n  let underlyingAmountPerContractToPass = underlyingAmountPerContractBN;\n  let stableMintToPass = stableMint;\n  let underlyingMintToPass = underlyingMint;\n  if (optionType === OptionType.PUT) {\n    quoteAmountPerContractToPass = underlyingAmountPerContractBN;\n    underlyingAmountPerContractToPass = quoteAmountPerContractBN;\n    stableMintToPass = underlyingMint;\n    underlyingMintToPass = stableMint;\n  }\n\n  const [metaKey] = await psyoptionsAmerican.deriveOptionKeyFromParams({\n    expirationUnixTimestamp: new BN(expirationUnixTimestamp),\n    programId: americanProgram.programId,\n    quoteAmountPerContract: quoteAmountPerContractToPass,\n    quoteMint: stableMintToPass.address,\n    underlyingAmountPerContract: underlyingAmountPerContractToPass,\n    underlyingMint: underlyingMintToPass.address,\n  });\n\n  const [optionMint] = PublicKey.findProgramAddressSync(\n    [metaKey.toBuffer(), Buffer.from('optionToken')],\n    americanProgram.programId\n  );\n\n  return { optionMint, metaKey };\n};\n\nexport type GetPsyAmericanOptionMarketAccounts = {\n  optionMarketIx: {\n    optionMarketKey: PublicKey;\n    optionMintKey: PublicKey;\n    quoteAssetPoolKey: PublicKey;\n    tx: TransactionInstruction;\n    underlyingAssetPoolKey: PublicKey;\n    writerMintKey: PublicKey;\n  };\n  mintFeeAccount: GetOrCreateATAtxBuilderReturnType;\n  exerciseFeeAccount: GetOrCreateATAtxBuilderReturnType;\n};\n\nconst getPsyAmericanOptionMarketAccounts = async (\n  cvg: Convergence,\n  americanProgram: any,\n  expirationUnixTimestamp: BN,\n  quoteAmountPerContract: BN,\n  stableMint: PublicKey,\n  underlyingAmountPerContract: BN,\n  underlyingMint: PublicKey,\n  optionType: OptionType\n): Promise<GetPsyAmericanOptionMarketAccounts> => {\n  let quoteAmountPerContractToPass = quoteAmountPerContract;\n  let underlyingAmountPerContractToPass = underlyingAmountPerContract;\n  let stableMintToPass = stableMint;\n  let underlyingMintToPass = underlyingMint;\n  if (optionType === OptionType.PUT) {\n    quoteAmountPerContractToPass = underlyingAmountPerContract;\n    underlyingAmountPerContractToPass = quoteAmountPerContract;\n    stableMintToPass = underlyingMint;\n    underlyingMintToPass = stableMint;\n  }\n  const optionMarketIx =\n    await psyoptionsAmerican.instructions.initializeOptionInstruction(\n      americanProgram,\n      {\n        /** The option market expiration timestamp in seconds */\n        expirationUnixTimestamp,\n        quoteAmountPerContract: quoteAmountPerContractToPass,\n        quoteMint: stableMintToPass,\n        underlyingAmountPerContract: underlyingAmountPerContractToPass,\n        underlyingMint: underlyingMintToPass,\n      }\n    );\n  const feeOwner = psyoptionsAmerican.FEE_OWNER_KEY;\n  const mintFeeAccount = await getOrCreateATAtxBuilder(\n    cvg,\n    underlyingMintToPass,\n    feeOwner\n  );\n\n  const exerciseFeeAccount = await getOrCreateATAtxBuilder(\n    cvg,\n    stableMintToPass,\n    feeOwner\n  );\n\n  return {\n    optionMarketIx,\n    mintFeeAccount,\n    exerciseFeeAccount,\n  };\n};\n"],"names":["psyoptionsAmericanInstrumentDataSerializer","createSerializerFromFixableBeetArgsStruct","FixableBeetArgsStruct","u8","u64","publicKey","PsyoptionsAmericanInstrument","convergence","optionType","underlyingAmountPerContract","underlyingAmountPerContractDecimals","strikePrice","strikePriceDecimals","expirationTimestamp","optionMint","optionMetaPubKey","baseAssetIndex","instrumentIndex","amount","side","underlyingAssetMint","stableAssetMint","_this","_classCallCheck","_defineProperty","decimals","legType","_createClass","key","value","_getPreparationsBeforeRfqCreation","_asyncToGenerator","_regeneratorRuntime","mark","_callee","taker","optionMarketIxs","wrap","_callee$","_context","prev","next","Error","getPsyAmericanMarketIxs","sent","abrupt","stop","getPreparationsBeforeRfqCreation","_x","apply","arguments","_getOptionMeta","_callee2","optionMeta","_callee2$","_context2","fetchMeta","getOptionMeta","_x2","getValidationAccounts","mintInfoPda","protocol","pdas","mintInfo","mint","quoteAssetMintPda","pubkey","isSigner","isWritable","serializeInstrumentData","data","addDecimals","expiration","BN","metaKey","serializedData","serialize","getProgramId","programs","getPsyoptionsAmericanInstrument","address","_create","_callee3","underlyingMint","stableMint","strike","mintInfoAddress","cvgWallet","americanProgram","_yield$getAmericanOpt","_callee3$","_context3","findRegisteredMintByAddress","mintType","__kind","t0","getInstrumentProgramIndex","get","t1","t2","PSYOPTIONS_AMERICAN_INSTRUMENT_PROGRAM_ID","NoopWallet","createAmericanProgram","getAmericanOptionkeys","create","_x3","_x4","_x5","_x6","_x7","_x8","_x9","_x10","_x11","_x12","_fetchMeta","_callee4","optionMarket","_callee4$","_context4","psyoptionsAmerican","getOptionByKey","_x13","_x14","_x15","deserializeInstrumentData","buffer","_psyoptionsAmericanIn","deserialize","_psyoptionsAmericanIn2","_slicedToArray","instrumentData","psyoptionsAmericanInstrumentParser","parseFromLeg","leg","_psyoptionsAmericanIn3","Buffer","from","_psyoptionsAmericanIn4","_psyoptionsAmericanIn5","removeDecimals","Number","fromSolitaLegSide","wallet","provider","anchor","AnchorProvider","connection","createProgram","PublicKey","_ref","_callee5","cvg","underlyingMintDecimals","stableMintDecimals","expirationTimestampBN","quoteAmountPerContractBN","underlyingAmountPerContractBN","quoteAmountPerContractToPass","underlyingAmountPerContractToPass","stableMintToPass","underlyingMintToPass","_yield$psyoptionsAmer","_yield$psyoptionsAmer2","optionMarketKey","_yield$getPsyAmerican","optionMarketIx","mintFeeAccount","exerciseFeeAccount","_callee5$","_context5","OptionType","PUT","deriveOptionKeyFromParams","expirationUnixTimestamp","programId","quoteAmountPerContract","quoteMint","getPsyAmericanOptionMarketAccounts","txBuilder","push","_toConsumableArray","getInstructions","tx","_x16","_x17","_x18","_x19","_x20","_x21","_x22","_x23","_x24","_x25","_ref2","_callee6","_yield$psyoptionsAmer3","_yield$psyoptionsAmer4","_PublicKey$findProgra","_PublicKey$findProgra2","_callee6$","_context6","findProgramAddressSync","toBuffer","_x26","_x27","_x28","_x29","_x30","_x31","_x32","_ref3","_callee7","feeOwner","_callee7$","_context7","instructions","initializeOptionInstruction","FEE_OWNER_KEY","getOrCreateATAtxBuilder","_x33","_x34","_x35","_x36","_x37","_x38","_x39","_x40"],"mappings":"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"}