{"version":3,"file":"createRfq.mjs","sources":["../../../../../src/plugins/rfqModule/operations/createRfq.ts"],"sourcesContent":["import { createCreateRfqInstruction } from '@convergence-rfq/rfq';\nimport { PublicKey, AccountMeta, Keypair } from '@solana/web3.js';\nimport * as anchor from '@coral-xyz/anchor';\n\nimport { BN } from 'bn.js';\nimport { SendAndConfirmTransactionResponse } from '../../rpcModule';\nimport { assertRfq, FixedSize, Rfq, toSolitaFixedSize } from '../models';\nimport {\n  calculateExpectedLegsHash,\n  instrumentsToLegAccounts,\n  legsToBaseAssetAccounts,\n  instrumentsToLegs,\n  calculateExpectedLegsSize,\n} from '../helpers';\nimport {\n  TransactionBuilder,\n  TransactionBuilderOptions,\n} from '../../../utils/TransactionBuilder';\nimport {\n  makeConfirmOptionsFinalizedOnMainnet,\n  Operation,\n  OperationHandler,\n  OperationScope,\n  useOperation,\n  Signer,\n} from '../../../types';\nimport { Convergence } from '../../../Convergence';\nimport {\n  LegInstrument,\n  QuoteInstrument,\n  serializeInstrumentAsSolitaLeg,\n  instrumentToQuote,\n  instrumentToSolitaLeg,\n} from '../../../plugins/instrumentModule';\nimport { OrderType, toSolitaOrderType } from '../models/OrderType';\nimport { InstructionUniquenessTracker } from '@/utils/classes';\nimport { createWhitelistBuilder } from '@/plugins/whitelistModule';\nimport { addComputeBudgetIxsIfNeeded } from '@/utils/helpers';\n\nconst Key = 'CreateRfqOperation' as const;\n\n/**\n * Creates a new Rfq.\n *\n * ```ts\n * const spotInstrument = new SpotInstrument(...);\n * const psyoptionsEuropeanInstrument = new PsyOptionsEuropeanInstrument(...);\n * const quoteAsset = instrumentClient.createQuote(new SpotInstrument(...));\n *\n * const { rfq } = await convergence\n *   .rfqs()\n *   .create({\n *     instruments: [spotInstrument, psyoptionsEuropeanInstrument],\n *     orderType: OrderType.Sell,\n *     fixedSize: { __kind: 'QuoteAsset', quoteAmount: 1 },\n *     activeWindow: 100,\n *     settlingWindow: 100,\n *     quoteAsset,\n *   });\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const createRfqOperation = useOperation<CreateRfqOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type CreateRfqOperation = Operation<\n  typeof Key,\n  CreateRfqInput,\n  CreateRfqOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type CreateRfqInput = {\n  /**\n   * The taker of the Rfq to create.\n   *\n   * @defaultValue `convergence.identity().publicKey`\n   */\n  taker?: Signer;\n\n  /** The quote asset account. */\n  quoteAsset: QuoteInstrument;\n\n  /** The instruments of the order, used to construct legs. */\n  instruments: LegInstrument[];\n\n  /** The type of order. */\n  orderType: OrderType;\n\n  /**\n   * The type of the Rfq, specifying whether we fix the number of\n   * base assets to be exchanged, the number of quote assets,\n   * or neither.\n   */\n  fixedSize: FixedSize;\n\n  /**\n   * Optional active window (in seconds).\n   *\n   * @defaultValue `5_000`\n   */\n  activeWindow?: number;\n\n  /**\n   * Optional settling window (in seconds).\n   *\n   * @defaultValue `1_000`\n   */\n  settlingWindow?: number;\n\n  /**\n   * The sum of the sizes of all legs of the Rfq,\n   * including legs added in the future (if any).\n   * This can be calculated automatically if\n   * additional legs will not be added in\n   * the future. */\n  expectedLegsSize?: number;\n\n  /** Optional expected legs hash (of all legs).\n   * This can be calculated automatically if\n   * additional legs will not be added in the future.\n   */\n  expectedLegsHash?: Uint8Array;\n\n  /** Optional counterparties PubkeyList to create a whitelist. */\n  counterParties?: PublicKey[];\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type CreateRfqOutput = {\n  /** The blockchain response from sending and confirming the transaction. */\n  response: SendAndConfirmTransactionResponse;\n\n  /** The newly created Rfq. */\n  rfq: Rfq;\n};\n\n/**\n * @group Operations\n * @category Handlers\n */\nexport const createRfqOperationHandler: OperationHandler<CreateRfqOperation> = {\n  handle: async (\n    operation: CreateRfqOperation,\n    convergence: Convergence,\n    scope: OperationScope\n  ) => {\n    const {\n      taker = convergence.identity(),\n      orderType,\n      quoteAsset,\n      instruments,\n      fixedSize,\n      activeWindow = 5_000,\n      settlingWindow = 1_000,\n      counterParties = [],\n    } = operation.input;\n    let { expectedLegsHash } = operation.input;\n    const payer = convergence.rpc().getDefaultFeePayer();\n    const recentTimestamp = new BN(Math.floor(Date.now() / 1_000));\n    let whitelistAccount = null;\n    const serializedLegs = instruments.map((instrument) =>\n      serializeInstrumentAsSolitaLeg(instrument)\n    );\n    let createWhitelistTxBuilder: TransactionBuilder | null = null;\n    if (counterParties.length > 0) {\n      whitelistAccount = Keypair.generate();\n      createWhitelistTxBuilder = await createWhitelistBuilder(\n        convergence,\n        {\n          creator: taker.publicKey,\n          whitelist: counterParties,\n          whitelistKeypair: whitelistAccount,\n        },\n        scope\n      );\n    }\n    const rfqPreparationTxBuilderArray: TransactionBuilder[] = [];\n    const ixTracker = new InstructionUniquenessTracker([]);\n    for (const ins of instruments) {\n      const rfqPreparationIxs = await ins.getPreparationsBeforeRfqCreation(\n        taker.publicKey\n      );\n      if (rfqPreparationIxs.length === 0) continue;\n      const rfqPreparationTxBuilder =\n        TransactionBuilder.make().setFeePayer(payer);\n      rfqPreparationIxs.forEach((ix) => {\n        if (ixTracker.checkedAdd(ix, 'TransactionInstruction')) {\n          rfqPreparationTxBuilder.add({\n            instruction: ix,\n            signers: [convergence.identity()],\n          });\n        }\n      });\n      if (rfqPreparationTxBuilder.getInstructionCount() > 0)\n        rfqPreparationTxBuilderArray.push(rfqPreparationTxBuilder);\n    }\n    expectedLegsHash =\n      expectedLegsHash ?? calculateExpectedLegsHash(serializedLegs);\n\n    const rfqPda = convergence\n      .rfqs()\n      .pdas()\n      .rfq({\n        taker: taker.publicKey,\n        legsHash: Buffer.from(expectedLegsHash),\n        printTradeProvider: null,\n        orderType,\n        quoteAsset: instrumentToQuote(quoteAsset),\n        fixedSize,\n        activeWindow,\n        settlingWindow,\n        recentTimestamp,\n      });\n\n    const { createRfqTxBuilder } = await createRfqBuilder(\n      convergence,\n      {\n        ...operation.input,\n        instruments,\n        rfq: rfqPda,\n        fixedSize,\n        activeWindow,\n        settlingWindow,\n        expectedLegsHash,\n        recentTimestamp,\n        whitelistAccount: whitelistAccount ? whitelistAccount.publicKey : null,\n      },\n      scope\n    );\n    scope.throwIfCanceled();\n\n    const confirmOptions = makeConfirmOptionsFinalizedOnMainnet(\n      convergence,\n      scope.confirmOptions\n    );\n\n    const lastValidBlockHeight = await convergence.rpc().getLatestBlockhash();\n\n    const rfqPreparationTxs = rfqPreparationTxBuilderArray.map((b) =>\n      b.toTransaction(lastValidBlockHeight)\n    );\n\n    if (whitelistAccount && createWhitelistTxBuilder) {\n      const createWhitelistTx =\n        createWhitelistTxBuilder.toTransaction(lastValidBlockHeight);\n      rfqPreparationTxs.push(createWhitelistTx);\n    }\n    const createRfqTx = createRfqTxBuilder.toTransaction(lastValidBlockHeight);\n\n    const [rfqPreparationSignedTxs, [createRfqSignedTx]] = await convergence\n      .identity()\n      .signTransactionMatrix(rfqPreparationTxs, [createRfqTx]);\n\n    if (whitelistAccount) {\n      const userSignedCreateWhitelistTx = rfqPreparationSignedTxs.pop();\n      if (userSignedCreateWhitelistTx) {\n        const whitelistkeypairSignedCreateWhitelistTx = await convergence\n          .rpc()\n          .signTransaction(userSignedCreateWhitelistTx, [\n            whitelistAccount as Signer,\n          ]);\n        rfqPreparationSignedTxs.push(whitelistkeypairSignedCreateWhitelistTx);\n      }\n    }\n\n    for (const signedTx of rfqPreparationSignedTxs) {\n      await convergence\n        .rpc()\n        .serializeAndSendTransaction(\n          signedTx,\n          lastValidBlockHeight,\n          confirmOptions\n        );\n    }\n\n    const response = await convergence\n      .rpc()\n      .serializeAndSendTransaction(\n        createRfqSignedTx,\n        lastValidBlockHeight,\n        confirmOptions\n      );\n\n    scope.throwIfCanceled();\n\n    const rfq = await convergence.rfqs().findRfqByAddress({ address: rfqPda });\n    assertRfq(rfq);\n\n    return { response, rfq };\n  },\n};\n\n/**\n * @group Transaction Builders\n * @category Inputs\n */\nexport type CreateRfqBuilderParams = CreateRfqInput & {\n  rfq: PublicKey;\n\n  expectedLegsHash: Uint8Array;\n\n  recentTimestamp: anchor.BN;\n\n  whitelistAccount: PublicKey | null;\n};\n\n/**\n * Creates a new Rfq.\n *\n * ```ts\n * const transactionBuilder = await convergence\n *   .rfqs()\n *   .builders()\n *   .create({});\n * ```\n *\n * @group Transaction Builders\n * @category Constructors\n */\n\nexport type CreateRfqBuilderResult = {\n  createRfqTxBuilder: TransactionBuilder;\n  remainingLegsToAdd: LegInstrument[];\n};\n\nexport const createRfqBuilder = async (\n  convergence: Convergence,\n  params: CreateRfqBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<CreateRfqBuilderResult> => {\n  const { programs, payer = convergence.rpc().getDefaultFeePayer() } = options;\n\n  const {\n    taker = convergence.identity(),\n    quoteAsset,\n    rfq,\n    orderType,\n    fixedSize,\n    activeWindow = 5_000,\n    settlingWindow = 1_000,\n    recentTimestamp,\n    expectedLegsHash,\n    instruments,\n    whitelistAccount,\n  } = params;\n  let { expectedLegsSize } = params;\n\n  const solitaLegs = instruments.map((instrument) =>\n    instrumentToSolitaLeg(instrument)\n  );\n  const serializedLegs = instruments.map((instrument) =>\n    serializeInstrumentAsSolitaLeg(instrument)\n  );\n  expectedLegsSize =\n    expectedLegsSize ?? calculateExpectedLegsSize(serializedLegs);\n  const legs = instrumentsToLegs(instruments);\n\n  const systemProgram = convergence.programs().getSystem(programs);\n  const rfqProgram = convergence.programs().getRfq(programs);\n  const spotInstrumentProgram = convergence\n    .programs()\n    .getSpotInstrument(programs);\n\n  const quoteAccounts: AccountMeta[] = [\n    {\n      pubkey: spotInstrumentProgram.address,\n      isSigner: false,\n      isWritable: false,\n    },\n    {\n      pubkey: convergence\n        .rfqs()\n        .pdas()\n        .quote({ quoteAsset: instrumentToQuote(quoteAsset) }),\n      isSigner: false,\n      isWritable: false,\n    },\n  ];\n\n  let baseAssetAccounts = legsToBaseAssetAccounts(convergence, solitaLegs);\n  let legAccounts = await instrumentsToLegAccounts(instruments);\n  let whitelistAccountToPass = rfqProgram.address;\n  if (whitelistAccount) {\n    whitelistAccountToPass = whitelistAccount;\n  }\n  let rfqBuilder = TransactionBuilder.make()\n    .setFeePayer(payer)\n    .setContext({\n      rfq,\n    })\n    .add({\n      instruction: createCreateRfqInstruction(\n        {\n          taker: taker.publicKey,\n          protocol: convergence.protocol().pdas().protocol(),\n          rfq,\n          whitelist: whitelistAccountToPass,\n          systemProgram: systemProgram.address,\n          anchorRemainingAccounts: [\n            ...quoteAccounts,\n            ...baseAssetAccounts,\n            ...legAccounts,\n          ],\n        },\n        {\n          printTradeProvider: null,\n          expectedLegsSize,\n          expectedLegsHash: Array.from(expectedLegsHash),\n          legs: solitaLegs,\n          orderType: toSolitaOrderType(orderType),\n          quoteAsset: instrumentToQuote(quoteAsset),\n          fixedSize: toSolitaFixedSize(fixedSize, quoteAsset.getDecimals()),\n          activeWindow,\n          settlingWindow,\n          recentTimestamp,\n        },\n        rfqProgram.address\n      ),\n      signers: [taker],\n      key: 'createRfq',\n    });\n\n  let legsToAdd = [...legs];\n  let instrumentsToAdd = [...instruments];\n\n  while (!rfqBuilder.checkTransactionFits()) {\n    instrumentsToAdd = instrumentsToAdd.slice(0, instrumentsToAdd.length - 1);\n    legsToAdd = legsToAdd.slice(0, instrumentsToAdd.length);\n    legAccounts = await instrumentsToLegAccounts(instrumentsToAdd);\n    baseAssetAccounts = legsToBaseAssetAccounts(convergence, legsToAdd);\n    rfqBuilder = TransactionBuilder.make()\n      .setFeePayer(payer)\n      .setContext({\n        rfq,\n      })\n      .add({\n        instruction: createCreateRfqInstruction(\n          {\n            taker: taker.publicKey,\n            protocol: convergence.protocol().pdas().protocol(),\n            rfq,\n            whitelist: whitelistAccountToPass,\n            systemProgram: systemProgram.address,\n            anchorRemainingAccounts: [\n              ...quoteAccounts,\n              ...baseAssetAccounts,\n              ...legAccounts,\n            ],\n          },\n          {\n            printTradeProvider: null,\n            expectedLegsSize,\n            expectedLegsHash: Array.from(expectedLegsHash),\n            legs: legsToAdd,\n            orderType: toSolitaOrderType(orderType),\n            quoteAsset: instrumentToQuote(quoteAsset),\n            fixedSize: toSolitaFixedSize(fixedSize, quoteAsset.getDecimals()),\n            activeWindow,\n            settlingWindow,\n            recentTimestamp,\n          },\n          rfqProgram.address\n        ),\n        signers: [taker],\n        key: 'createRfq',\n      });\n  }\n\n  const remainingLegsToAdd = instruments.slice(legsToAdd.length, legs.length);\n\n  await addComputeBudgetIxsIfNeeded(rfqBuilder, convergence, true);\n\n  return {\n    createRfqTxBuilder: rfqBuilder,\n    remainingLegsToAdd,\n  };\n};\n"],"names":["Key","createRfqOperation","useOperation","createRfqOperationHandler","handle","_handle","_asyncToGenerator","_regeneratorRuntime","mark","_callee","operation","convergence","scope","_expectedLegsHash","_operation$input","_operation$input$take","taker","orderType","quoteAsset","instruments","fixedSize","_operation$input$acti","activeWindow","_operation$input$sett","settlingWindow","_operation$input$coun","counterParties","expectedLegsHash","payer","recentTimestamp","whitelistAccount","serializedLegs","createWhitelistTxBuilder","rfqPreparationTxBuilderArray","ixTracker","_iterator","_step","_loop","rfqPda","_yield$createRfqBuild","createRfqTxBuilder","confirmOptions","lastValidBlockHeight","rfqPreparationTxs","createWhitelistTx","createRfqTx","_yield$convergence$id","_yield$convergence$id2","rfqPreparationSignedTxs","_yield$convergence$id3","createRfqSignedTx","userSignedCreateWhitelistTx","whitelistkeypairSignedCreateWhitelistTx","_iterator2","_step2","signedTx","response","rfq","wrap","_callee$","_context2","prev","next","input","identity","rpc","getDefaultFeePayer","BN","Math","floor","Date","now","map","instrument","serializeInstrumentAsSolitaLeg","length","Keypair","generate","createWhitelistBuilder","creator","publicKey","whitelist","whitelistKeypair","sent","InstructionUniquenessTracker","_createForOfIteratorHelper","ins","rfqPreparationIxs","rfqPreparationTxBuilder","_loop$","_context","value","getPreparationsBeforeRfqCreation","abrupt","TransactionBuilder","make","setFeePayer","forEach","ix","checkedAdd","add","instruction","signers","getInstructionCount","push","stop","s","n","done","delegateYield","t0","t1","e","f","finish","calculateExpectedLegsHash","rfqs","pdas","legsHash","Buffer","from","printTradeProvider","instrumentToQuote","createRfqBuilder","_objectSpread","throwIfCanceled","makeConfirmOptionsFinalizedOnMainnet","getLatestBlockhash","b","toTransaction","signTransactionMatrix","_slicedToArray","pop","signTransaction","serializeAndSendTransaction","t2","findRfqByAddress","address","assertRfq","_x","_x2","_x3","apply","arguments","_ref","_callee2","params","_expectedLegsSize","options","programs","_options$payer","_params$taker","_params$activeWindow","_params$settlingWindo","expectedLegsSize","solitaLegs","legs","systemProgram","rfqProgram","spotInstrumentProgram","quoteAccounts","baseAssetAccounts","legAccounts","whitelistAccountToPass","rfqBuilder","legsToAdd","instrumentsToAdd","remainingLegsToAdd","_args3","_callee2$","_context3","undefined","instrumentToSolitaLeg","calculateExpectedLegsSize","instrumentsToLegs","getSystem","getRfq","getSpotInstrument","pubkey","isSigner","isWritable","quote","legsToBaseAssetAccounts","instrumentsToLegAccounts","setContext","createCreateRfqInstruction","protocol","anchorRemainingAccounts","concat","_toConsumableArray","Array","toSolitaOrderType","toSolitaFixedSize","getDecimals","key","checkTransactionFits","slice","addComputeBudgetIxsIfNeeded","_x4","_x5"],"mappings":"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"}