{"version":3,"file":"createAndFinalizeRfqConstruction.cjs","sources":["../../../../../src/plugins/rfqModule/operations/createAndFinalizeRfqConstruction.ts"],"sourcesContent":["import { Keypair, PublicKey } 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 } from '../models';\n\nimport { calculateExpectedLegsHash } from '../helpers';\nimport {\n  Operation,\n  OperationHandler,\n  OperationScope,\n  useOperation,\n  Signer,\n  makeConfirmOptionsFinalizedOnMainnet,\n} from '../../../types';\nimport { Convergence } from '../../../Convergence';\nimport {\n  TransactionBuilder,\n  TransactionBuilderOptions,\n} from '../../../utils/TransactionBuilder';\nimport {\n  LegInstrument,\n  QuoteInstrument,\n  serializeInstrumentAsSolitaLeg,\n  instrumentToQuote,\n} from '../../../plugins/instrumentModule';\nimport { OrderType } from '../models/OrderType';\nimport { createRfqBuilder } from './createRfq';\nimport { finalizeRfqConstructionBuilder } from './finalizeRfqConstruction';\nimport { addLegsToRfqBuilder } from './addLegsToRfq';\nimport { InstructionUniquenessTracker } from '@/utils/classes';\nimport { createWhitelistBuilder } from '@/plugins/whitelistModule';\n\nconst Key = 'CreateAndFinalizeRfqConstructionOperation' as const;\n\n/**\n * Creates and finalizes construction of an Rfq.\n *\n * ```ts\n * const spotInstrument = new SpotInstrument(...);\n * const quoteAsset = instrumentClient.createQuote(new SpotInstrument(...));\n *\n * const { rfq } = await convergence\n *   .rfqs()\n *   .createAndFinalize({\n *     quoteAsset,\n *     instruments: [spotInstrument],\n *     orderType: OrderType.Sell,\n *     fixedSize: {\n *       __kind: 'BaseAsset',\n *       legsMultiplierBps: 1_000_000_000\n *     },\n *     activeWindow: 5_000,\n *     settlingWindow: 1_000\n *   });\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const createAndFinalizeRfqConstructionOperation =\n  useOperation<CreateAndFinalizeRfqConstructionOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type CreateAndFinalizeRfqConstructionOperation = Operation<\n  typeof Key,\n  CreateAndFinalizeRfqConstructionInput,\n  CreateAndFinalizeRfqConstructionOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type CreateAndFinalizeRfqConstructionInput = {\n  /**\n   * The taker of the Rfq to create.\n   *\n   * @defaultValue `convergence.identity().publicKey`\n   */\n  taker?: Signer;\n\n  /** Quote asset account. */\n  quoteAsset: QuoteInstrument;\n\n  /** The legs of the order. */\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   * Optional address of the Taker's collateral info account.\n   *\n   * @defaultValue `convergence.collateral().pdas().collateralInfo({ user: taker.publicKey })`\n   */\n  collateralInfo?: PublicKey;\n\n  /**\n   * Optional address of the Taker's collateral tokens account.\n   *\n   * @defaultValue `convergence.collateral().pdas().\n   *   collateralTokens({\n   *     user: taker.publicKey,\n   *   })`\n   */\n  collateralToken?: PublicKey;\n\n  /** Optional address of the risk engine program account. */\n  riskEngine?: PublicKey;\n\n  /** Optional counterparties PubkeyList to create a whitelist. */\n  counterParties?: PublicKey[];\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type CreateAndFinalizeRfqConstructionOutput = {\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 createAndFinalizeRfqConstructionOperationHandler: OperationHandler<CreateAndFinalizeRfqConstructionOperation> =\n  {\n    handle: async (\n      operation: CreateAndFinalizeRfqConstructionOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ): Promise<CreateAndFinalizeRfqConstructionOutput> => {\n      const {\n        taker = convergence.identity(),\n        orderType,\n        instruments,\n        fixedSize,\n        quoteAsset,\n        activeWindow = 5_000,\n        settlingWindow = 1_000,\n        counterParties = [],\n      } = operation.input;\n      let whitelistAccount = null;\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 payer = convergence.rpc().getDefaultFeePayer();\n      const recentTimestamp = new BN(Math.floor(Date.now() / 1_000));\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      const serializedLegs = instruments.map((instruments) =>\n        serializeInstrumentAsSolitaLeg(instruments)\n      );\n      const 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 {\n        createRfqTxBuilder,\n        addLegsTxBuilderArray,\n        finalizeConstructionTxBuilder,\n      } = await createAndFinalizeRfqConstructionBuilder(\n        convergence,\n        {\n          ...operation.input,\n          taker,\n          rfq: rfqPda,\n          fixedSize,\n          expectedLegsHash,\n          recentTimestamp,\n          whitelistAccount: whitelistAccount\n            ? whitelistAccount.publicKey\n            : null,\n        },\n        scope\n      );\n      scope.throwIfCanceled();\n\n      const confirmOptions = makeConfirmOptionsFinalizedOnMainnet(\n        convergence,\n        scope.confirmOptions\n      );\n      const lastValidBlockHeight = await convergence.rpc().getLatestBlockhash();\n      const rfqPreparationTxs = rfqPreparationTxBuilderArray.map((b) =>\n        b.toTransaction(lastValidBlockHeight)\n      );\n      if (whitelistAccount && createWhitelistTxBuilder) {\n        const createWhitelistTx =\n          createWhitelistTxBuilder.toTransaction(lastValidBlockHeight);\n        rfqPreparationTxs.push(createWhitelistTx);\n      }\n      const createRfqTx =\n        createRfqTxBuilder.toTransaction(lastValidBlockHeight);\n\n      const addLegsTxs = addLegsTxBuilderArray.map((b) =>\n        b.toTransaction(lastValidBlockHeight)\n      );\n\n      const finalizeRfqTxs =\n        finalizeConstructionTxBuilder.toTransaction(lastValidBlockHeight);\n      const [\n        rfqPreparationSignedTxs,\n        [createRfqSignedTx],\n        addLegsSignedTxs,\n        [finalizeRfqSignedTx],\n      ] = await convergence\n        .identity()\n        .signTransactionMatrix(rfqPreparationTxs, [createRfqTx], addLegsTxs, [\n          finalizeRfqTxs,\n        ]);\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      await convergence\n        .rpc()\n        .serializeAndSendTransaction(\n          createRfqSignedTx,\n          lastValidBlockHeight,\n          confirmOptions\n        );\n\n      await Promise.all(\n        addLegsSignedTxs.map((signedTx) =>\n          convergence\n            .rpc()\n            .serializeAndSendTransaction(\n              signedTx,\n              lastValidBlockHeight,\n              confirmOptions\n            )\n        )\n      );\n\n      const response = await convergence\n        .rpc()\n        .serializeAndSendTransaction(\n          finalizeRfqSignedTx,\n          lastValidBlockHeight,\n          confirmOptions\n        );\n\n      scope.throwIfCanceled();\n\n      const rfq = await convergence\n        .rfqs()\n        .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 CreateAndFinalizeRfqConstructionBuilderParams =\n  CreateAndFinalizeRfqConstructionInput & {\n    expectedLegsHash: Uint8Array;\n    recentTimestamp: anchor.BN;\n    rfq: PublicKey;\n    whitelistAccount: PublicKey | null;\n  };\n\nexport type CreateAndFinalizeRfqConstructionBuilderResult = {\n  createRfqTxBuilder: TransactionBuilder;\n  addLegsTxBuilderArray: TransactionBuilder[];\n  finalizeConstructionTxBuilder: TransactionBuilder;\n};\n\nexport const createAndFinalizeRfqConstructionBuilder = async (\n  convergence: Convergence,\n  params: CreateAndFinalizeRfqConstructionBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<CreateAndFinalizeRfqConstructionBuilderResult> => {\n  const { rfq, instruments } = params;\n\n  const { createRfqTxBuilder, remainingLegsToAdd } = await createRfqBuilder(\n    convergence,\n    {\n      ...params,\n    },\n    options\n  );\n\n  const addLegsTxBuilderArray: TransactionBuilder[] = [];\n  if (remainingLegsToAdd.length > 0) {\n    let legsToAddCount = remainingLegsToAdd.length;\n    let legsAddedCount = 0;\n    while (legsAddedCount !== remainingLegsToAdd.length) {\n      const addLegsTxBuilder = await addLegsToRfqBuilder(\n        convergence,\n        {\n          rfq,\n          taker: params.taker,\n          instruments: remainingLegsToAdd.slice(legsAddedCount, legsToAddCount),\n        },\n        options\n      );\n      if (addLegsTxBuilder.checkTransactionFits()) {\n        legsAddedCount = legsToAddCount;\n        legsToAddCount = remainingLegsToAdd.length;\n        addLegsTxBuilderArray.push(addLegsTxBuilder);\n      } else {\n        legsToAddCount--;\n      }\n    }\n  }\n\n  const finalizeConstructionTxBuilder = await finalizeRfqConstructionBuilder(\n    convergence,\n    { ...params, legs: instruments },\n    options\n  );\n\n  return {\n    createRfqTxBuilder,\n    addLegsTxBuilderArray,\n    finalizeConstructionTxBuilder,\n  };\n};\n"],"names":["Key","createAndFinalizeRfqConstructionOperation","useOperation","createAndFinalizeRfqConstructionOperationHandler","handle","_handle","_asyncToGenerator","_regeneratorRuntime","mark","_callee","operation","convergence","scope","_operation$input","_operation$input$take","taker","orderType","instruments","fixedSize","quoteAsset","_operation$input$acti","activeWindow","_operation$input$sett","settlingWindow","_operation$input$coun","counterParties","whitelistAccount","createWhitelistTxBuilder","payer","recentTimestamp","rfqPreparationTxBuilderArray","ixTracker","_iterator","_step","_loop","serializedLegs","expectedLegsHash","rfqPda","_yield$createAndFinal","createRfqTxBuilder","addLegsTxBuilderArray","finalizeConstructionTxBuilder","confirmOptions","lastValidBlockHeight","rfqPreparationTxs","createWhitelistTx","createRfqTx","addLegsTxs","finalizeRfqTxs","_yield$convergence$id","_yield$convergence$id2","rfqPreparationSignedTxs","_yield$convergence$id3","createRfqSignedTx","addLegsSignedTxs","_yield$convergence$id4","finalizeRfqSignedTx","userSignedCreateWhitelistTx","whitelistkeypairSignedCreateWhitelistTx","_iterator2","_step2","signedTx","response","rfq","wrap","_callee$","_context2","prev","next","input","identity","length","Keypair","generate","createWhitelistBuilder","creator","publicKey","whitelist","whitelistKeypair","sent","rpc","getDefaultFeePayer","BN","Math","floor","Date","now","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","map","serializeInstrumentAsSolitaLeg","calculateExpectedLegsHash","rfqs","pdas","legsHash","Buffer","from","printTradeProvider","instrumentToQuote","createAndFinalizeRfqConstructionBuilder","_objectSpread","throwIfCanceled","makeConfirmOptionsFinalizedOnMainnet","getLatestBlockhash","b","toTransaction","signTransactionMatrix","_slicedToArray","pop","signTransaction","serializeAndSendTransaction","t2","Promise","all","findRfqByAddress","address","assertRfq","_x","_x2","_x3","apply","arguments","_ref","_callee2","params","options","_yield$createRfqBuild","remainingLegsToAdd","legsToAddCount","legsAddedCount","addLegsTxBuilder","_args3","_callee2$","_context3","undefined","createRfqBuilder","addLegsToRfqBuilder","slice","checkTransactionFits","finalizeRfqConstructionBuilder","legs","_x4","_x5"],"mappings":"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"}