{"version":3,"file":"prepareSettlement.mjs","sources":["../../../../../src/plugins/rfqModule/operations/prepareSettlement.ts"],"sourcesContent":["import {\n  createPrepareEscrowSettlementInstruction,\n  AuthoritySide,\n} from '@convergence-rfq/rfq';\nimport {\n  PublicKey,\n  AccountMeta,\n  ComputeBudgetProgram,\n  SYSVAR_RENT_PUBKEY,\n  Transaction,\n} from '@solana/web3.js';\nimport { TOKEN_PROGRAM_ID } from '@solana/spl-token';\n\nimport { SendAndConfirmTransactionResponse } from '../../rpcModule';\nimport { Convergence } from '../../../Convergence';\nimport {\n  Operation,\n  OperationHandler,\n  OperationScope,\n  useOperation,\n  Signer,\n  makeConfirmOptionsFinalizedOnMainnet,\n} from '../../../types';\nimport {\n  TransactionBuilder,\n  TransactionBuilderOptions,\n} from '../../../utils/TransactionBuilder';\nimport { EscrowResponse, EscrowRfq, Rfq } from '../../rfqModule';\nimport { getOrCreateATAtxBuilder } from '../../../utils/ata';\nimport { Mint } from '../../tokenModule';\nimport { InstrumentPdasClient } from '../../instrumentModule';\nimport { legToBaseAssetMint } from '@/plugins/instrumentModule';\nimport {\n  PrepareAmericanOptionsResult,\n  prepareAmericanOptions,\n  psyoptionsAmericanInstrumentProgram,\n} from '@/plugins/psyoptionsAmericanInstrumentModule';\nimport {\n  prepareEuropeanOptions,\n  psyoptionsEuropeanInstrumentProgram,\n} from '@/plugins/psyoptionsEuropeanInstrumentModule';\nimport { InstructionUniquenessTracker } from '@/utils/classes';\nimport { addComputeBudgetIxsIfNeeded } from '@/utils/helpers';\n\nconst Key = 'PrepareSettlementOperation' as const;\n\n/**\n * Prepares for settlement.\n *\n * ```ts\n * await convergence\n *   .rfqs()\n *   .prepareSettlement({\n *     rfq: rfq.address,\n *     response: rfqResponse.address,\n *     legAmountToPrepare: 1\n *   });\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const prepareSettlementOperation =\n  useOperation<PrepareSettlementOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type PrepareSettlementOperation = Operation<\n  typeof Key,\n  PrepareSettlementInput,\n  PrepareSettlementOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type PrepareSettlementInput = {\n  /**\n   * The caller to prepare settlement of the Rfq.\n   *\n   * @defaultValue `convergence.identity()`\n   */\n  caller?: Signer;\n\n  /**\n   * The protocol address.\n   * @defaultValue `convergence.protocol().pdas().protocol()`\n   */\n  protocol?: PublicKey;\n\n  /** The address of the Rfq account. */\n  rfq: PublicKey;\n\n  /** The address of the Response account. */\n  response: PublicKey;\n\n  /*\n   * Args\n   */\n\n  /** The number of legs to prepare settlement for. */\n  legAmountToPrepare: number;\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type PrepareSettlementOutput = {\n  /** The blockchain response from sending and confirming the transaction. */\n  response: SendAndConfirmTransactionResponse;\n};\n\n/**\n * @group Operations\n * @category Handlers\n */\nexport const prepareSettlementOperationHandler: OperationHandler<PrepareSettlementOperation> =\n  {\n    handle: async (\n      operation: PrepareSettlementOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ): Promise<PrepareSettlementOutput> => {\n      const ixTracker = new InstructionUniquenessTracker([]);\n      const {\n        response,\n        rfq,\n        caller = convergence.identity(),\n      } = operation.input;\n\n      const rfqModel = await convergence\n        .rfqs()\n        .findRfqByAddress({ address: rfq });\n\n      const {\n        ataTxBuilderArray: remainingAtaTxBuilders,\n        prepareSettlementTxBuilder,\n      } = await prepareSettlementBuilder(\n        convergence,\n        rfqModel,\n        {\n          ...operation.input,\n        },\n        scope\n      );\n\n      if (rfqModel.model !== 'escrowRfq') {\n        throw new Error('Response is not settled as an escrow trade!');\n      }\n\n      let ataTxs: Transaction[] = [];\n      let mintTxs: Transaction[] = [];\n      let prepareOptionsResult: PrepareAmericanOptionsResult = {\n        ataTxBuilders: [],\n        mintTxBuilders: [],\n      };\n\n      if (doesRfqLegContainsPsyoptionsAmerican(rfqModel)) {\n        prepareOptionsResult = await prepareAmericanOptions(\n          convergence,\n          response,\n          caller?.publicKey\n        );\n      }\n      if (doesRfqLegContainsPsyoptionsEuropean(rfqModel)) {\n        prepareOptionsResult = await prepareEuropeanOptions(\n          convergence,\n          response,\n          caller?.publicKey\n        );\n      }\n\n      prepareOptionsResult.ataTxBuilders.forEach((txBuilder) => {\n        ixTracker.checkedAdd(txBuilder, 'TransactionBuilder');\n      });\n      const lastValidBlockHeight = await convergence.rpc().getLatestBlockhash();\n      ataTxs = prepareOptionsResult.ataTxBuilders.map((txBuilder) =>\n        txBuilder.toTransaction(lastValidBlockHeight)\n      );\n      mintTxs = prepareOptionsResult.mintTxBuilders.map((txBuilder) =>\n        txBuilder.toTransaction(lastValidBlockHeight)\n      );\n      const uniqueRemainingAtaTxBuilders: TransactionBuilder[] = [];\n      remainingAtaTxBuilders.forEach((txBuilder) => {\n        if (ixTracker.checkedAdd(txBuilder, 'TransactionBuilder')) {\n          uniqueRemainingAtaTxBuilders.push(txBuilder);\n        }\n      });\n\n      const remainingAtaTxs = uniqueRemainingAtaTxBuilders.map((txBuilder) =>\n        txBuilder.toTransaction(lastValidBlockHeight)\n      );\n\n      const prepareSettlementTx =\n        prepareSettlementTxBuilder.toTransaction(lastValidBlockHeight);\n      const confirmOptions = makeConfirmOptionsFinalizedOnMainnet(\n        convergence,\n        scope.confirmOptions\n      );\n      const [ataSignedTxs, mintSignedTxs, signedRemainingAtaTxs] =\n        await convergence\n          .identity()\n          .signTransactionMatrix(ataTxs, mintTxs, remainingAtaTxs);\n\n      if (ataSignedTxs.length > 0) {\n        await Promise.all(\n          ataSignedTxs.map((signedTx) =>\n            convergence\n              .rpc()\n              .serializeAndSendTransaction(signedTx, lastValidBlockHeight)\n          )\n        );\n      }\n\n      if (signedRemainingAtaTxs.length > 0) {\n        await Promise.all(\n          signedRemainingAtaTxs.map((signedTx) =>\n            convergence\n              .rpc()\n              .serializeAndSendTransaction(signedTx, lastValidBlockHeight)\n          )\n        );\n      }\n\n      if (mintSignedTxs.length > 0) {\n        await Promise.all(\n          mintSignedTxs.map((signedTx) =>\n            convergence\n              .rpc()\n              .serializeAndSendTransaction(signedTx, lastValidBlockHeight)\n          )\n        );\n      }\n\n      const signedPrepareSettlementTx = await convergence\n        .identity()\n        .signTransaction(prepareSettlementTx);\n\n      const output = await convergence\n        .rpc()\n        .serializeAndSendTransaction(\n          signedPrepareSettlementTx,\n          lastValidBlockHeight,\n          confirmOptions\n        );\n\n      return {\n        response: output,\n      };\n    },\n  };\n\n/**\n * @group Transaction Builders\n * @category Inputs\n */\nexport type PrepareSettlementBuilderParams = PrepareSettlementInput;\n\n/**\n * Prepares for settlement\n *\n * ```ts\n * const transactionBuilder = convergence\n *   .rfqs()\n *   .builders()\n *   .prepareSettlement({ address });\n * ```\n *\n * @group Transaction Builders\n * @category Constructors\n */\n\nexport type PrepareSettlementBuilderResult = {\n  ataTxBuilderArray: TransactionBuilder[];\n  prepareSettlementTxBuilder: TransactionBuilder;\n};\nexport const prepareSettlementBuilder = async (\n  convergence: Convergence,\n  rfqModel: Rfq,\n  params: PrepareSettlementBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<PrepareSettlementBuilderResult> => {\n  const { programs, payer = convergence.rpc().getDefaultFeePayer() } = options;\n  const {\n    caller = convergence.identity(),\n    rfq,\n    response,\n    legAmountToPrepare,\n  } = params;\n\n  const rfqProgram = convergence.programs().getRfq(programs);\n\n  const responseModel = await convergence\n    .rfqs()\n    .findResponseByAddress({ address: response });\n\n  if (\n    responseModel.model !== 'escrowResponse' ||\n    rfqModel.model !== 'escrowRfq'\n  ) {\n    throw new Error('Response is not settled as an escrow!');\n  }\n\n  const side =\n    caller.publicKey.toBase58() == responseModel.maker.toBase58()\n      ? AuthoritySide.Maker\n      : AuthoritySide.Taker;\n\n  const { anchorRemainingAccounts, ataTxBuilderArray } =\n    await getEscrowPrepareSettlementRemainingAccounts(\n      convergence,\n      caller.publicKey,\n      rfqModel,\n      responseModel,\n      legAmountToPrepare\n    );\n\n  const prepareSettlementTxBuilder = TransactionBuilder.make()\n    .setFeePayer(payer)\n    .add({\n      instruction: ComputeBudgetProgram.setComputeUnitLimit({\n        units: 300000,\n      }),\n      signers: [],\n    })\n    .add({\n      instruction: createPrepareEscrowSettlementInstruction(\n        {\n          caller: caller.publicKey,\n          protocol: convergence.protocol().pdas().protocol(),\n          rfq,\n          response,\n          anchorRemainingAccounts,\n        },\n        {\n          side,\n          legAmountToPrepare,\n        },\n        rfqProgram.address\n      ),\n      signers: [caller],\n      key: 'prepareSettlement',\n    });\n\n  await addComputeBudgetIxsIfNeeded(\n    prepareSettlementTxBuilder,\n    convergence,\n    true\n  );\n  return {\n    ataTxBuilderArray,\n    prepareSettlementTxBuilder,\n  };\n};\n\nexport const getEscrowPrepareSettlementRemainingAccounts = async (\n  cvg: Convergence,\n  caller: PublicKey,\n  rfq: EscrowRfq,\n  response: EscrowResponse,\n  legAmountToPrepare: number\n) => {\n  const baseAssetMints: Mint[] = [];\n\n  for (const leg of rfq.legs) {\n    baseAssetMints.push(await legToBaseAssetMint(cvg, leg));\n  }\n\n  const spotInstrumentProgram = cvg.programs().getSpotInstrument();\n\n  const anchorRemainingAccounts: AccountMeta[] = [];\n\n  const spotInstrumentProgramAccount: AccountMeta = {\n    pubkey: spotInstrumentProgram.address,\n    isSigner: false,\n    isWritable: false,\n  };\n\n  const systemProgram = cvg.programs().getSystem();\n\n  const quoteEscrowPda = new InstrumentPdasClient(cvg).quoteEscrow({\n    response: response.address,\n    program: spotInstrumentProgram.address,\n  });\n\n  const quoteAccounts: AccountMeta[] = [\n    {\n      pubkey: caller,\n      isSigner: false,\n      isWritable: true,\n    },\n    {\n      pubkey: cvg.tokens().pdas().associatedTokenAccount({\n        mint: rfq.quoteMint,\n        owner: caller,\n      }),\n      isSigner: false,\n      isWritable: true,\n    },\n    { pubkey: rfq.quoteMint, isSigner: false, isWritable: false },\n    {\n      pubkey: quoteEscrowPda,\n      isSigner: false,\n      isWritable: true,\n    },\n    { pubkey: systemProgram.address, isSigner: false, isWritable: false },\n    { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n    { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },\n  ];\n\n  anchorRemainingAccounts.push(spotInstrumentProgramAccount, ...quoteAccounts);\n\n  const ataTxBuilderArray: TransactionBuilder[] = [];\n  for (let legIndex = 0; legIndex < legAmountToPrepare; legIndex++) {\n    const instrumentProgramAccount: AccountMeta = {\n      pubkey: rfq.legs[legIndex].getProgramId(),\n      isSigner: false,\n      isWritable: false,\n    };\n\n    const instrumentEscrowPda = new InstrumentPdasClient(cvg).instrumentEscrow({\n      response: response.address,\n      index: legIndex,\n      rfqModel: rfq,\n    });\n\n    const { ataPubKey, txBuilder } = await getOrCreateATAtxBuilder(\n      cvg,\n      baseAssetMints[legIndex].address,\n      caller\n    );\n\n    if (txBuilder) {\n      ataTxBuilderArray.push(txBuilder);\n    }\n\n    const legAccounts: AccountMeta[] = [\n      // `caller`\n      {\n        pubkey: caller,\n        isSigner: false,\n        isWritable: true,\n      },\n      // `caller_token_account`\n      {\n        pubkey: ataPubKey,\n        isSigner: false,\n        isWritable: true,\n      },\n      // `mint`\n      {\n        pubkey: baseAssetMints[legIndex].address,\n        isSigner: false,\n        isWritable: false,\n      },\n      // `escrow`\n      {\n        pubkey: instrumentEscrowPda,\n        isSigner: false,\n        isWritable: true,\n      },\n      { pubkey: systemProgram.address, isSigner: false, isWritable: false },\n      { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n      { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },\n    ];\n    anchorRemainingAccounts.push(instrumentProgramAccount, ...legAccounts);\n  }\n\n  return { anchorRemainingAccounts, ataTxBuilderArray };\n};\n\nconst doesRfqLegContainsPsyoptionsAmerican = (rfq: EscrowRfq) => {\n  return rfq.legs.some((leg) =>\n    leg.getProgramId().equals(psyoptionsAmericanInstrumentProgram.address)\n  );\n};\n\nconst doesRfqLegContainsPsyoptionsEuropean = (rfq: EscrowRfq) => {\n  return rfq.legs.some((leg) =>\n    leg.getProgramId().equals(psyoptionsEuropeanInstrumentProgram.address)\n  );\n};\n"],"names":["Key","prepareSettlementOperation","useOperation","prepareSettlementOperationHandler","handle","_handle","_asyncToGenerator","_regeneratorRuntime","mark","_callee","operation","convergence","scope","ixTracker","_operation$input","response","rfq","_operation$input$call","caller","rfqModel","_yield$prepareSettlem","remainingAtaTxBuilders","prepareSettlementTxBuilder","ataTxs","mintTxs","prepareOptionsResult","lastValidBlockHeight","uniqueRemainingAtaTxBuilders","remainingAtaTxs","prepareSettlementTx","confirmOptions","_yield$convergence$id","_yield$convergence$id2","ataSignedTxs","mintSignedTxs","signedRemainingAtaTxs","signedPrepareSettlementTx","output","wrap","_callee$","_context","prev","next","InstructionUniquenessTracker","input","identity","rfqs","findRfqByAddress","address","sent","prepareSettlementBuilder","_objectSpread","ataTxBuilderArray","model","Error","ataTxBuilders","mintTxBuilders","doesRfqLegContainsPsyoptionsAmerican","prepareAmericanOptions","publicKey","doesRfqLegContainsPsyoptionsEuropean","prepareEuropeanOptions","forEach","txBuilder","checkedAdd","rpc","getLatestBlockhash","map","toTransaction","push","makeConfirmOptionsFinalizedOnMainnet","signTransactionMatrix","_slicedToArray","length","Promise","all","signedTx","serializeAndSendTransaction","signTransaction","abrupt","stop","_x","_x2","_x3","apply","arguments","_ref","_callee2","params","options","programs","_options$payer","payer","_params$caller","legAmountToPrepare","rfqProgram","responseModel","side","_yield$getEscrowPrepa","anchorRemainingAccounts","_args2","_callee2$","_context2","undefined","getDefaultFeePayer","getRfq","findResponseByAddress","toBase58","maker","AuthoritySide","Maker","Taker","getEscrowPrepareSettlementRemainingAccounts","TransactionBuilder","make","setFeePayer","add","instruction","ComputeBudgetProgram","setComputeUnitLimit","units","signers","createPrepareEscrowSettlementInstruction","protocol","pdas","key","addComputeBudgetIxsIfNeeded","_x4","_x5","_x6","_ref2","_callee3","cvg","baseAssetMints","_iterator","_step","leg","spotInstrumentProgram","spotInstrumentProgramAccount","systemProgram","quoteEscrowPda","quoteAccounts","legIndex","instrumentProgramAccount","instrumentEscrowPda","_yield$getOrCreateATA","ataPubKey","legAccounts","_callee3$","_context3","_createForOfIteratorHelper","legs","s","n","done","value","t0","legToBaseAssetMint","t1","call","t2","e","f","finish","getSpotInstrument","pubkey","isSigner","isWritable","getSystem","InstrumentPdasClient","quoteEscrow","program","tokens","associatedTokenAccount","mint","quoteMint","owner","TOKEN_PROGRAM_ID","SYSVAR_RENT_PUBKEY","concat","getProgramId","instrumentEscrow","index","getOrCreateATAtxBuilder","_x7","_x8","_x9","_x10","_x11","some","equals","psyoptionsAmericanInstrumentProgram","psyoptionsEuropeanInstrumentProgram"],"mappings":"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"}